Name: series-workflowdv42v Phase: Succeeded StartedAt: 2026-09-11 08:29:35 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[0] Phase: Succeeded StartedAt: 2026-09-11 08:29:35 +0000 UTC FinishedAt: 2026-09-11 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 08:29:35 +0000 UTC FinishedAt: 2026-09-11 08:52:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "TRANSPARENT_HUGEPAGE", "MIGRATION", "UPROBES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "TRANSPARENT_HUGEPAGE", "MIGRATION", "UPROBES" ], "series_id": "20bd9a22-8df4-44a6-8b12-e45538b5f307" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_walk_start", "break_ksm", "find_mergeable_vma_locked", "get_mergeable_page", "try_to_merge_with_ksm_page", "try_to_merge_with_zero_page", "ksm_madvise", "break_cow", "split_huge_pages_pid" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgcGFnZSB3YWxrIGxvY2tpbmcgYW5kIHRyYW5zaXRpb25zIEtTTSBmcm9tIG1tYXBfcmVhZF9sb2NrIHRvIHBlci1WTUEgcmVhZCBsb2NraW5nICh2bWFfc3RhcnRfcmVhZF91bmxvY2tlZC92bWFfZW5kX3JlYWQpIHdpdGggbG9jayB2ZXJpZmljYXRpb24gaW4gZm9saW9fd2Fsa19zdGFydCgpLiBBbGwgbG9jYWwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYWNyb3NzIHRoZSBjb2RlYmFzZSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7IC53YWxrX2xvY2sgPSAuLi4gfTtgKSwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBwZXIgQyBzZW1hbnRpY3MuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIHRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHNlbWFudGljcyAod2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2Ugd2Fsa2luZyBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgdXByb2JlcykuIEl0IGludHJvZHVjZXMgcGVyLVZNQSByZWFkIGxvY2tpbmcgKFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSB2aWEgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQpIHRvIEtTTSByb3V0aW5lcywgZHluYW1pY2FsbHkgYWx0ZXJzIGJyZWFrX2tzbV9vcHMgd2FsayBsb2NraW5nLCBhbmQgYWRkcyBsb2NraW5nIHZhbGlkYXRpb24gY2hlY2tzL2Fzc2VydGlvbnMgaW4gZm9saW9fd2Fsa19zdGFydC4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nIGludmFyaWFudHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjMjY1ZWIwZDdiNzU1ZjY2OGNjNWIwZWNjMzRmMDU3YTZjYTc1NmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1MDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbiYjNDM7XHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsge1xuIFx0XHRwbWRfdCBwbWQ7XG4gXHR9O1xuIFx0LyogcHJpdmF0ZSAqL1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9GT1JDRTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbiYjNDM7XHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAzMGI3YzYzYjBlMzU5Li5kMDQ0N2I2YWU2ZTQxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ4MTAsNyAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4gXHQgKi9cbiBcdGZvciAoYWRkciA9IHZhZGRyX3N0YXJ0OyBhZGRyIFx1MDAzYyB2YWRkcl9lbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li4xZDg1NzY5ZWM3ZGJlIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jXG5AQCAtNjYwLDE2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbiYjNDM7c3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xuIFx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXG4gXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcbi1cdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxuLVx0LndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssXG4tfTtcbi1cbiAvKlxuICAqIFRob3VnaCBpdCYjMzk7cyB2ZXJ5IHRlbXB0aW5nIHRvIHVubWVyZ2Ugcm1hcF9pdGVtcyBmcm9tIHN0YWJsZSB0cmVlIHJhdGhlclxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2VzbiYjMzk7dCBxdWl0ZSB3b3JrIGZvclxuQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XG4gICogcHJvdGVjdGlvbiBrZXlzIGhlcmUgYW55d2F5LlxuICAqL1xuIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xuLVx0XHRcdFx0XHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4mIzQzO1x0c3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBcdTAwMjZicmVha19rc21fb3BzO1xuJiM0MztcdG9wcy1cdTAwM2V3YWxrX2xvY2sgPSB3YWxrX2xvY2s7XG4gXG4gXHRkbyB7XG4gXHRcdGludCBrc21fcGFnZTtcbkBAIC03NzAsMTUgJiM0Mzs3NjUsMzYgQEAgc3RhdGljIGJvb2wgdm1hX2tzbV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIGtzbV9jb21wYXRpYmxlKHZtYS1cdTAwM2V2bV9maWxlLCB2bWEtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7LyoqXG4mIzQzOyAqIGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAmIzM5O2FkZHJlc3MmIzM5OyB3aGljaCBpc1xuJiM0MzsgKiBWTV9NRVJHRUFCTEUgYW5kIHJlYWQtbG9jayBpdCBieSBwZXItVk1BIGxvY2tzLiBQbGVhc2UgdXNlIHZtYV9lbmRfcmVhZCgpXG4mIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IElmIGEgVk1BIGV4aXN0cyB3aGljaCBzcGFucyBAYWRkcmVzcywgcmV0dXJuIHRoYXQgVk1BLCByZWFkLWxvY2tlZC5cbiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3dcbiYjNDM7ICogb2NjdXJyZWQsIHJldHVybiBOVUxMLCBhbmQgbm8gcmVhZC1sb2NrZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSxcbiYjNDM7ICogdGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgcGVyLVZNQSByZWFkIGxvY2sgYmVmb3JlIHJldHVybmluZyBOVUxMLlxuJiM0MzsgKiBDYWxsZXJzIG11c3QgTk9UIGNhbGwgdm1hX2VuZF9yZWFkKCkgb24gYSBOVUxMIHJldHVybiB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1xuIFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKSB7XG4mIzQzO1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTgwNCwxMSAmIzQzOzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdCAqL1xuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gMDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4tXHRpZiAodm1hKVxuLVx0XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgZmFsc2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzO1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFLCBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpO1xuJiM0MztcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuQEAgLTgxNywxMyAmIzQzOzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuJiM0MztcdH07XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xuJiM0MztcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG4gXHRpZiAoZm9saW8pIHtcbkBAIC04MzQsMTIgJiM0Mzs4NTIsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdFx0fVxuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdH1cbi1vdXQ6XG4mIzQzO1xuIFx0aWYgKHBhZ2UpIHtcbiBcdFx0Zmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgYWRkcik7XG4gXHRcdGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpO1xuIFx0fVxuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzO1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRyZXR1cm4gcGFnZTtcbiB9XG4gXG5AQCAtMTI0Myw3ICYjNDM7MTI2MSw3IEBAIHN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXG4gXHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbkBAIC0xNTcxLDE0ICYjNDM7MTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0aWYgKGtzbV91c2VfemVyb19wYWdlcyBcdTAwMjZcdTAwMjYgKHJtYXBfaXRlbS1cdTAwM2VvbGRjaGVja3N1bSA9PSB6ZXJvX2NoZWNrc3VtKSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiYjNDM7XHRcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdFx0aWYgKHZtYSkge1xuIFx0XHRcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsXG4gXHRcdFx0XHRcdFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpO1xuIFx0XHRcdHRyYWNlX2tzbV9tZXJnZV9vbmVfcGFnZShcbiBcdFx0XHRcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiYjNDM7XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgdm1hIGlzIG91dCBvZiBkYXRlLCB3ZSBkbyBub3QgbmVlZCB0b1xuQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdH1cbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MDUsMTAgJiM0MzsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuJiM0MztcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyYWNlO1xuIFxuIFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSwga3BhZ2UpO1xuIFx0aWYgKGVycilcbkBAIC0xNjI4LDcgJiM0MzsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGdldF9hbm9uX3ZtYSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuIG91dDpcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcdHZtYV9lbmRfcmVhZCh2bWEpO1xuJiM0MztvdXRfdHJhY2U6XG4gXHR0cmFjZV9rc21fbWVyZ2Vfd2l0aF9rc21fcGFnZShrcGFnZSwgcGFnZV90b19wZm4oa3BhZ2UgPyBrcGFnZSA6IHBhZ2UpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgdHJ1ZSk7XG4mIzQzO1x0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzAzNSw3ICYjNDM7MzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHRyZXR1cm4gMDtcdFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsXG4gXHRcdGludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbClcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuJiM0MztcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFx0aW50IGVyciA9IC1FRkFVTFQ7XG5AQCAtMjQ2NCw3ICYjNDM7MjQ2Niw5IEBAIHN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCpwYWdlcyk7XG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIFx0cGdkX3QgKnBnZHA7XG4gXHRwNGRfdCAqcDRkcDtcbiBcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3RoZXIgbG9ja2luZyBtb2RlcyBleGNlcHQgZm9yIG1tYXAgb3Igdm1hIHJlYWQgbG9ja2luZyBhcmUgbm90XG4mIzQzO1x0ICogZXhwZWN0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFx1MDAyNlx1MDAyNiBmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxuJiM0MztcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O3dhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtXHUwMDNldm1fbW0sIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4mIzQzO1x0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbiYjNDM7XG4gXHR2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHZtYSk7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGFkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBhZGRyIFx1MDAzZT0gdm1hLVx1MDAzZXZtX2VuZCkpXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpmd19mb2xpbztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4mIzQzO1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4mIzQzO1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0fTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3dwX2VudHJ5X3QgZW50cnk7XG4gXHRwdGVfdCBzd3BfcHRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLykKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsgewogCQlwbWRfdCBwbWQ7CiAJfTsKIAkvKiBwcml2YXRlICovCi0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwllbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jazsKIH07CiAKIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmV0LCByZWZfY3RyX3VwZGF0ZWQgPSAwOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFOwogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDgxMCw3ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCwKIAkgKi8KIAlmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciAmbHQ7IHZhZGRyX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7Ci0JCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwkJfTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCXVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC02NjAsMTYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW4KIAlyZXR1cm4gZm91bmQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHsKJiM0MztzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7CiAJLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7Ci0JLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCi0JLndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssCi19OwotCiAvKgogICogVGhvdWdoIGl0JiMzOTtzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyCiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24mIzM5O3QgcXVpdGUgd29yayBmb3IKQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7CiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuCiAgKi8KIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKQomIzQzOwkJdW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKQogewogCXZtX2ZhdWx0X3QgcmV0ID0gMDsKLQljb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID8KLQkJCQkmYW1wO2JyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiAmYW1wO2JyZWFrX2tzbV9vcHM7CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gJmFtcDticmVha19rc21fb3BzOwomIzQzOwlvcHMtJmd0O3dhbGtfbG9jayA9IHdhbGtfbG9jazsKIAogCWRvIHsKIAkJaW50IGtzbV9wYWdlOwpAQCAtNzcwLDE1ICYjNDM7NzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4ga3NtX2NvbXBhdGlibGUodm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O2ZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7LyoqCiYjNDM7ICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IHdoaWNoIGlzCiYjNDM7ICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKQomIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuCiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cKJiM0MzsgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSwKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuCiYjNDM7ICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCiAJCXJldHVybiBOVUxMOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtJmd0O2Fub25fdm1hKQomIzQzOwomIzQzOwl2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLSZndDthbm9uX3ZtYSkgewomIzQzOwkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtODA0LDExICYjNDM7ODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCSAqLwogCXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSAwOwogCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7Ci0JaWYgKHZtYSkKLQkJYnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIGZhbHNlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pCkBAIC04MTcsMTMgJiM0Mzs4MzQsMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSkKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiYjNDM7CX07CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAKIAlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCAwKTsKIAlpZiAoZm9saW8pIHsKQEAgLTgzNCwxMiAmIzQzOzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCQl9CiAJCWZvbGlvX3dhbGtfZW5kKCZhbXA7ZncsIHZtYSk7CiAJfQotb3V0OgomIzQzOwogCWlmIChwYWdlKSB7CiAJCWZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpOwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAl9Ci0JbW1hcF9yZWFkX3VubG9jayhtbSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCXJldHVybiBwYWdlOwogfQogCkBAIC0xMjQzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZCkKIAkJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01FUkdFQUJMRSkgfHwgIXZtYS0mZ3Q7YW5vbl92bWEpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgZmFsc2UpOwomIzQzOwkJCWVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBQR1dBTEtfUkRMT0NLKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMTU3MSwxNCAmIzQzOzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzICZhbXA7JmFtcDsgKHJtYXBfaXRlbS0mZ3Q7b2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCQlpZiAodm1hKSB7CiAJCQllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLAogCQkJCQlaRVJPX1BBR0Uocm1hcF9pdGVtLSZndDthZGRyZXNzKSk7CiAJCQl0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoCiAJCQkJcGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcykpLAogCQkJCXJtYXBfaXRlbSwgbW0sIGVycik7CiYjNDM7CQkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG8KQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLAogCQkJICovCiAJCQllcnIgPSAwOwogCQl9Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNjA1LDEwICYjNDM7MTYyMiw5IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfdHJhY2U7CiAKIAllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLCBrcGFnZSk7CiAJaWYgKGVycikKQEAgLTE2MjgsNyAmIzQzOzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sCiAJcm1hcF9pdGVtLSZndDtsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCWdldF9hbm9uX3ZtYSh2bWEtJmd0O2Fub25fdm1hKTsKIG91dDoKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7b3V0X3RyYWNlOgogCXRyYWNlX2tzbV9tZXJnZV93aXRoX2tzbV9wYWdlKGtwYWdlLCBwYWdlX3RvX3BmbihrcGFnZSA/IGtwYWdlIDogcGFnZSksCiAJCQkJcm1hcF9pdGVtLCBtbSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgdHJ1ZSk7CiYjNDM7CQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMwMzUsNyAmIzQzOzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KIAogCQlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7CiYjNDM7CQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsCiAJCWludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKJiM0MzsJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CX07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVyciA9IC1FRkFVTFQ7CkBAIC0yNDY0LDcgJiM0MzsyNDY2LDkgQEAgc3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CQlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CQl9OwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCQlpbnQgZXJyID0gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LAogCXBnZF90ICpwZ2RwOwogCXA0ZF90ICpwNGRwOwogCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwkvKgomIzQzOwkgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3QKJiM0MzsJICogZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLICZhbXA7JmFtcDsgZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpCiYjNDM7CQlXQVJOX09OQ0UoMSwgJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxuJiMzNDspOwomIzQzOwlwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtJmd0O3ZtX21tLCBmdy0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJcHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctJmd0O3dhbGtfbG9jayk7CiYjNDM7CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJc3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlwdGVfdCBzd3BfcHRlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQ5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3VpdGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHJlZCBmbGFncyBoZXJlIHRoYXQgbWFrZSB0aGlzIGEgcG90ZW50aWFsbHkgZmVydGlsZSBncm91bmQgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9rc20uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZXdhbGsuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhhdCYjMzk7cyBhIHdpZGUgcmFuZ2UsIGluZGljYXRpbmcgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeS4gQWx3YXlzIGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBhcyBpdCBpbmNyZWFzZXMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGUgY2hhbmdlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YCB3aXRoaW4gYHN0cnVjdCBmb2xpb193YWxrYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBzdHJhdGVneSBkdXJpbmcgcGFnZSB3YWxrcywgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHNvbWV0aGluZyBzeXprYWxsZXIgZXhjZWxzIGF0IGZpbmRpbmcuCgpUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vcGFnZXdhbGsuY2Agd2l0aCB0aGUgYGZvbGlvX3dhbGtfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgYWRkZWQgY2hlY2tzIG9uIGBmdy0mZ3Q7d2Fsa19sb2NrYCBhcmUgdmVyeSByZWxldmFudC4gVGhlIGBXQVJOX09OQ0VgIHN1Z2dlc3RzIHRoZSBjb2RlIGlzICpleHBlY3RpbmcqIHNwZWNpZmljIGxvY2tpbmcgYmVoYXZpb3IsIGFuZCBhbnkgZGV2aWF0aW9uIGNvdWxkIHRyaWdnZXIgZXJyb3JzLiBUaGUgY2hlY2tzIG9uIHRoZSBlbnVtIGFuZCB0aGUgY2FsbHMgdG8gYHByb2Nlc3NfbW1fd2Fsa19sb2NrYCBhbmQgYHByb2Nlc3Nfdm1hX3dhbGtfbG9ja2AgZnVydGhlciByZWluZm9yY2UgdGhpcy4KCkFuZCBoZXJlJiMzOTtzIHRoZSByZWFsIGtpY2tlcjogYG1tL2tzbS5jYCBoYXMgYSAqdmVyeSogY29uY2VybmluZyBjaGFuZ2UuIFRoZSBtb2RpZmljYXRpb24gb2YgYGJyZWFrX2tzbV9vcHNgIHRvIGEgbXV0YWJsZSBnbG9iYWwgc3RydWN0IGFuZCB0aGUgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYG9wcy0mZ3Q7d2Fsa19sb2NrID0gd2Fsa19sb2NrO2AgaW5zaWRlIGBicmVha19rc20oKWAgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGRhdGEgcmFjZSEgVGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgY29uY3VycmVuY3kgYnVnIHRoYXQgaXMgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gZGV0ZWN0IG1hbnVhbGx5IGJ1dCBzeXprYWxsZXIgc2hvdWxkIGZpbmQgcXVpY2tseS4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgc3RhdGljLCBjb25zdCBvYmplY3QgbWFrZXMgdGhpcyBldmVuIG1vcmUgY29uY2VybmluZy4gVGhpcyBpcyBhIHZlcnkgY29tcGVsbGluZyByZWFzb24gdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIHRoaXMgcGF0Y2guIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcGVyLVZNQSBsb2NraW5nIGluIGEgbnVtYmVyIG9mIEtTTSBmdW5jdGlvbnMgKGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCwgZXRjLikgc3VwcG9ydHMgdGhhdCB0aGlzIGlzIGEgY29tcGxleCBjb25jdXJyZW5jeSBpc3N1ZS4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHVzZSBncmVwIGFuZCByZWFkLWZpbGUsIGJ1dCBvdmVyYWxsLCBnaXZlbiB0aGUgY2hhbmdlcyB0byBLU00sIHRoZSBhbHRlcmVkIGxvY2tpbmcsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgcG90ZW50aWFsIGRhdGEgcmFjZSwgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKmhpZ2hseSogc3VzcGVjdGlibGUgdG8gY29uY3VycmVuY3kgYnVncyBhbmQgaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncyBpcyBxdWl0ZSBoaWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyZWFrX2tzbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTYxMT1zdGF0aWMgaW5saW5lIGJvb2wga3NtX3Rlc3RfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9rc20uYy02MTUtXG5tbS9rc20uYzo2MTY6c3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0va3NtLmMtNjE3LVx0XHRcdHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2tzbS5jLTY2Mi1cbm1tL2tzbS5jOjY2MzpzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7XG5tbS9rc20uYzo2NjQ6XHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbm1tL2tzbS5jLTY2NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuLS1cbm1tL2tzbS5jLTY4MC0gKlxubW0va3NtLmM6NjgxOiAqIFdlIHVzZSBicmVha19rc20gdG8gYnJlYWsgQ09XIG9uIGEga3NtIHBhZ2UgYnkgdHJpZ2dlcmluZyB1bnNoYXJpbmcsXG5tbS9rc20uYy02ODItICogc3VjaCB0aGF0IHRoZSBrc20gcGFnZSB3aWxsIGdldCByZXBsYWNlZCBieSBhbiBleGNsdXNpdmUgYW5vbnltb3VzIHBhZ2UuXG4tLVxubW0va3NtLmMtNjkyLSAqL1xubW0va3NtLmM6NjkzOnN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9rc20uYy02OTQtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcbi0tXG5tbS9rc20uYy02OTYtXHR2bV9mYXVsdF90IHJldCA9IDA7XG5tbS9rc20uYzo2OTc6XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG5tbS9rc20uYy02OTgtXHRvcHMtXHUwMDNld2Fsa19sb2NrID0gd2Fsa19sb2NrO1xuLS1cbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04MjYtXG5tbS9rc20uYzo4Mjc6XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcbm1tL2tzbS5jLTgyOC1cdHZtYV9lbmRfcmVhZCh2bWEpO1xuLS1cbm1tL2tzbS5jPTEyMzM9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbi0tXG5tbS9rc20uYy0xMjYzLVx0XHRcdFx0Y29udGludWU7XG5tbS9rc20uYzoxMjY0Olx0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XG5tbS9rc20uYy0xMjY1LVx0XHRcdGlmIChlcnIpXG4tLVxubW0va3NtLmM9Mjg5NT1zdGF0aWMgaW50IF9fa3NtX2RlbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0va3NtLmMtMjkwMi1cdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbm1tL2tzbS5jOjI5MDM6XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7XG5tbS9rc20uYy0yOTA0LVx0XHRpZiAoZXJyKVxuLS1cbm1tL2tzbS5jPTMwMjg9aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2tzbS5jLTMwNTQtXHRcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbm1tL2tzbS5jOjMwNTU6XHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XG5tbS9rc20uYy0zMDU2LVx0XHRcdGlmIChlcnIpXG4tLVxubW0va3NtLmM9MzQzMj1zdGF0aWMgaW50IGtzbV9tZW1vcnlfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxuLS1cbm1tL2tzbS5jLTM0NDItXHRcdCAqIGl0IGlzIHVuc2FmZSBmb3IgdGhlbSB0byB0b3VjaCB0aGUgc3RhYmxlIHRyZWUgYXQgdGhpcyB0aW1lLlxubW0va3NtLmM6MzQ0MzpcdFx0ICogQnV0IGJyZWFrX2tzbSgpLCBybWFwIGxvb2t1cHMgYW5kIG90aGVyIGVudHJ5IHBvaW50c1xubW0va3NtLmMtMzQ0NC1cdFx0ICogd2hpY2ggZG8gbm90IG5lZWQgdGhlIGtzbV90aHJlYWRfbXV0ZXggYXJlIGFsbCBzYWZlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UgZm9yIEZ1enppbmcqKgoKT2theSwgdGhpcyBpcyBzZXJpb3VzISBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaGVyZSDigJMgdGhlIHN0dWZmIHRoYXQgKnJlYWxseSogbWF0dGVycy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0ICpyZWFjaGFiaWxpdHkqIGlzIHRoZSBtb3N0IGltcG9ydGFudCBmYWN0b3IgaW4gZGV0ZXJtaW5pbmcgaWYgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgaXQgbG9va3MgcHJvbWlzaW5nOiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgaW4gY3J1Y2lhbCBmaWxlczogYG1tL2tzbS5jYCwgYG1tL3BhZ2V3YWxrLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcm1hcC5jYCwgYW5kIGBrZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY2AuCgpHb29kLCB0aGlzIGxvb2tzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKG9uIGFtZDY0KSwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIGNoYW5nZXMgaW4gS1NNIGFuZCBwYWdld2Fsa+KAlHRoaW5ncyBsaWtlIHRoZSBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCwgdGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiwgYW5kIGZvbGlvX3dhbGtfc3RhcnQgYXNzZXJ0aW9ucy4gVGhlc2UgYXJlIGNsYXNzaWMgYXJlYXMgd2hlcmUgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MgY2FuIGhpZGUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gQWJzb2x1dGVseSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyEgVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIG1hcmtlciBjb25maXJtcyB0aGF0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBleGVyY2lzZSBhbGwgdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgS1NNLCBwYWdld2FsaywgZm9saW9fd2FsaywgdXByb2JlcywgbWlncmF0ZSwgYW5kIGh1Z2VfbWVtb3J5PyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNvIG9uIHRvIGRldGVybWluZSB0aGF0LiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gY3JlYXRpbmcgYSB0ZXN0aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MjM9Y29uZmlnIE1NVV9OT1RJRklFUlxuLS1cbm1tL0tjb25maWctNzI2LVxubW0vS2NvbmZpZzo3Mjc6Y29uZmlnIEtTTVxubW0vS2NvbmZpZy03MjgtXHRib29sIFwmIzM0O0VuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzIxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgS1NNIGFuZCBQYWdld2FsayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYGtzbS5jYCBhbmQgYHBhZ2V3YWxrLmNgLiBXaGVyZSYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkPyBSaWdodCwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIHJ1bGVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIGZsYWdzLCBhbnkgc3BlY2lmaWMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXNlIG1vZHVsZXMgaW50ZWdyYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGBtbS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gc3BvdCBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGVtcGxveWVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTA9b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG5tbS9NYWtlZmlsZTo5MTpvYmotJChDT05GSUdfS1NNKSAmIzQzOz0ga3NtLm9cbm1tL01ha2VmaWxlLTkyLW9iai0kKENPTkZJR19QQUdFX1BPSVNPTklORykgJiM0Mzs9IHBhZ2VfcG9pc29uLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcG90ZW50aWFsIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVGFyZ2V0IE1vZHVsZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXNlIGFyZSBsaWtlbHkga2V5IGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN5c3RlbSBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHBhZ2V3YWxrLm9gLCBgaHVnZV9tZW1vcnkub2AsIGBtaWdyYXRlLm9gLCBhbmQgYHVwcm9iZXMub2AuIENvbnNpZGVyaW5nIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhlc2UgbW9kdWxlcyB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBmaW5kaW5ncyByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBsYXJnZSBwYWdlIGhhbmRsaW5nLCBsaXZlIG1pZ3JhdGlvbiBjb21wbGV4aXRpZXMsIGFuZCB0aGUgcG9zc2libGUgb3ZlcmhlYWQgb2YgdXNlci1zcGFjZSBwcm9iaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHBhZ2V3YWxrfGh1Z2VfbWVtb3J5fG1pZ3JhdGV8dXByb2JlcylcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbm1tL01ha2VmaWxlLTM4LVx0XHRcdCAgIG1sb2NrLm8gbW1hcC5vIG1tdV9nYXRoZXIubyBtcHJvdGVjdC5vIG1yZW1hcC5vIFxcXG5tbS9NYWtlZmlsZTozOTpcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlLTQwLVx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xuLS1cbm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5OTpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS0xMDAtb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFVwcm9iZSBEZWJ1Z2dpbmcgLSBNYWtlZmlsZSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHVwcm9iZXMgdGhpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgdXByb2Jlcy5vYCBvYmplY3QgZmlsZSBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL2V2ZW50cy9NYWtlZmlsZWAuIEl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGNvbnZlbnRpb24gdG8gZmluZCByZWxhdGVkIG9iamVjdCBmaWxlcyBkZWZpbmVkIGluIHRoYXQgZGlyZWN0b3J5JiMzOTtzIE1ha2VmaWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBga2VybmVsL2V2ZW50c2AgY29udGV4dC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBrZXJuZWwgY29tcG9uZW50IGJ1aWxkIHN0cnVjdHVyZXMgYW5kIG9yZ2FuaXphdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdWRlIG9yIGRlZmluaXRpb24gdGhlcmUsIGFuZCBJIGNhbiBxdWlja2x5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MgZnJvbSB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cHJvYmVzXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9NYWtlZmlsZT01PW9iai0kKENPTkZJR19IV19CUkVBS1BPSU5UX0tVTklUX1RFU1QpICYjNDM7PSBod19icmVha3BvaW50X3Rlc3Qub1xua2VybmVsL2V2ZW50cy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VUFJPQkVTKSAmIzQzOz0gdXByb2Jlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIExvY2tpbmcgSXNzdWVzIHdpdGggUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSBwcmVjaXNlbHkgd2hhdCBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbiBvZiB0aGF0IG1hY3JvIOKAkyB3aGF0IGFyZSBpdHMgaW50ZW5kZWQgY2hlY2tzLCB3aGF0IGFyZSB0aGUgY29uZGl0aW9ucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmbGFnPyBJcyBpdCByZWxhdGVkIHRvIHJlYWQtb25seSBhY2Nlc3MgaW4gc29tZSB3YXk/IE9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHZhbGlkYXRpb24gdG9vbD8gVW5kZXJzdGFuZGluZyB0aGUgKnB1cnBvc2UqIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGNhbiBhc3Nlc3MgYW55IHBvdGVudGlhbCBwcm9ibGVtLgoKTmV4dCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXItVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBsb2NrIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIGludGVyZmVyaW5nIHdpdGggb3IgdW5leHBlY3RlZGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHZlcmlmaWNhdGlvbiBjaGVja3MgcGVyZm9ybWVkIGJ5IHRoaXMgbWFjcm8/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsb2NrIHNldHRpbmdzIHRoYXQgYXJlIGhhcHBlbmluZyBvbiB0aG9zZSBWTUFzPyBBcmUgdGhlIGFzc3VtcHRpb25zIG9mIHRoZSBsb2NrIHN5c3RlbSBiZWluZyBicm9rZW4gc29tZWhvdz8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgYFBHV0FMS2AgaXMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIHdhbGtzLCB3aGljaCBhcmUgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBpbmNvbnNpc3RlbmNpZXMgaGVyZSBjYW4gaGF2ZSBzZXZlcmUgcmFtaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIG1hY3JvIGNhbiBoZWxwIG1lLCBvciBpZiBpdCBtaWdodCBiZSBhIHBhcnQgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjU1LVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBzbWFwc19odWdldGxiX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jOjEyNTY6XHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNTctfTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTI1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjYyLVx0LnB0ZV9ob2xlXHRcdD0gc21hcHNfcHRlX2hvbGUsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI2MzpcdC53YWxrX2xvY2tcdFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2NC19O1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zNDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQyMC1cdC5wbWRfZW50cnkgPSBnYXRoZXJfcHRlX3N0YXRzLFxuZnMvcHJvYy90YXNrX21tdS5jOjM0MjE6XHQud2Fsa19sb2NrID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MjItfTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3LVx0Lyogdm1hIGlzIGV4cGVjdGVkIHRvIGJlIGFscmVhZHkgcmVhZC1sb2NrZWQgZHVyaW5nIHRoZSB3YWxrICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTg6XHRQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgPSAzLFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5LX07XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjQzLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKSB7XG5tbS9kYW1vbi92YWRkci5jOjI0NDpcdFx0b3BzLVx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjQ1LVx0XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcbi0tXG5tbS9rc20uYz04MDY9c3RhdGljIHZvaWQgYnJlYWtfY293KHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4tLVxubW0va3NtLmMtODI2LVxubW0va3NtLmM6ODI3Olx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XG5tbS9rc20uYy04MjgtXHR2bWFfZW5kX3JlYWQodm1hKTtcbi0tXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04MzgtXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL2tzbS5jOjgzOTpcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG5tbS9rc20uYy04NDAtXHR9O1xuLS1cbm1tL21hZHZpc2UuYz03OTg9c3RhdGljIGlubGluZSBlbnVtIHBhZ2Vfd2Fsa19sb2NrIGdldF93YWxrX2xvY2soZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBtb2RlKVxuLS1cbm1tL21hZHZpc2UuYy04MDEtXHRjYXNlIE1BRFZJU0VfVk1BX1JFQURfTE9DSzpcbm1tL21hZHZpc2UuYzo4MDI6XHRcdHJldHVybiBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk7XG5tbS9tYWR2aXNlLmMtODAzLVx0Y2FzZSBNQURWSVNFX01NQVBfUkVBRF9MT0NLOlxuLS1cbm1tL3BhZ2V3YWxrLmM9NDM1PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9wYWdld2Fsay5jLTQzOS1cdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbm1tL3BhZ2V3YWxrLmM6NDQwOlx0ZWxzZSBpZiAod2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbm1tL3BhZ2V3YWxrLmMtNDQxLVx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuLS1cbm1tL3BhZ2V3YWxrLmM9NDQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcGFnZXdhbGsuYy00NTMtXHRcdGJyZWFrO1xubW0vcGFnZXdhbGsuYzo0NTQ6XHRjYXNlIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTpcbm1tL3BhZ2V3YWxrLmMtNDU1LVx0XHR2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xuLS1cbm1tL3BhZ2V3YWxrLmM9ODk5PXN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXG4tLVxubW0vcGFnZXdhbGsuYy05MTYtXHQgKi9cbm1tL3BhZ2V3YWxrLmM6OTE3Olx0aWYgKGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFx1MDAyNlx1MDAyNiBmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxubW0vcGFnZXdhbGsuYy05MTgtXHRcdFdBUk5fT05DRSgxLCBcJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUGVyLVZNQSBMb2NraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjb250cm9sbGluZyB0aGUgcGVyLVZNQSBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFmdGVyIGBQRVJfVk1BX0xPQ0tgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gZG9lcyBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQsIGFzIGl0IHdpbGwgcmV2ZWFsIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoZSBrZXJuZWwgd2lsbCBlbXBsb3kgcGVyLVZNQSBsb2NraW5nLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZlYXR1cmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cbm1tL0tjb25maWcuZGVidWc6MzExOmNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbm1tL0tjb25maWcuZGVidWctMzEyLVx0Ym9vbCBcJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIFRpbWU6IENoZWNraW5nIGBQRVJfVk1BX0xPQ0tgIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYFBFUl9WTUFfTE9DS2AgYWNyb3NzIHRoZSAqZW50aXJlKiBrZXJuZWwuJiMzNDsgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhpcyBsb2NrIGlzIGJlaW5nIHVzZWQuIEkga25vdyBpdHMgcHVycG9zZSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGluIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgc2VhcmNoIGFuZCBhbmFseXNpcy4gTm8gc3VyZmFjZS1sZXZlbCBza2ltbWluZyBoZXJlOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBzdWJzeXN0ZW1zLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiB3aGVyZSBpdCYjMzk7cyBjcml0aWNhbCwgd2hlcmUgaXQmIzM5O3MgcG90ZW50aWFsbHkgcmVkdW5kYW50LCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUl9WTUFfTE9DS1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYFBFUl9WTUFfTE9DS2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUEVSX1ZNQV9MT0NLYCBkZWZpbml0aW9uIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IHVwIHRvIHNwZWVkIHdpdGggaXRzIG51YW5jZXMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXBwbGljYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VwZXJmaWNpYWwgZ2xhbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IGl0IG1lYW5zIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGZpbmQgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZnVuZGFtZW50YWwgaW5mb3JtYXRpb24gYWJvdXQgaXRzIHB1cnBvc2UsIHBhcmFtZXRlcnMsIGFuZCBsaWtlbHksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIFRoaXMgc2hvdWxkIHBvaW50IG1lIHRvIHRoZSBjb3JlIG9mIGl0cyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoVk1BKSBtYW5hZ2VtZW50IGNvZGUuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0cyBjYWxsIHNpdGVzIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbG9ja2luZy91bmxvY2tpbmcgc2NoZW1lcyBhbmQgcmVhZC93cml0ZSBhY2Nlc3MuIFRoaXMgaW5pdGlhbCBzZWFyY2ggaXMgZXNzZW50aWFsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgYmUgYSBmdW5jdGlvbiwgYnV0IGl0IGNvdWxkIGJlIGEgbWFjcm8sIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgd2F5LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM9NDAxPSAgICB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTQ0MS0gICAgICAgIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yczo0NDI6ICAgICAgICAgICAgbGV0IHZtYV9yZWFkX2d1YXJkID0gbW0udm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQodm1hX2FkZHIpLm9rX29yKEVTUkNIKT87XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNDQzLSAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jPTI1ND1zdGF0aWMgaW50IGJpbmRlcl9wYWdlX2luc2VydChzdHJ1Y3QgYmluZGVyX2FsbG9jICphbGxvYyxcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMjYxLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jOjI2MjpcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYy0yNjMtXHRpZiAoIXZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oPTI2Mz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY3LVxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaDoyNjg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY5LVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5tbS9rc20uYz03ODE9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9rc20uYy03ODgtXG5tbS9rc20uYzo3ODk6XHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG5tbS9rc20uYy03OTAtXHRpZiAoIXZtYSlcbi0tXG5tbS9tbWFwX2xvY2suYz0yOTM9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbW1hcF9sb2NrLmMtMzQzLS8qKlxubW0vbW1hcF9sb2NrLmM6MzQ0OiAqIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKCkgLSBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIHJlYWQtbG9jayBpdC5cbm1tL21tYXBfbG9jay5jLTM0NS0gKiBAbW06IHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdG8gc2VhcmNoXG4tLVxubW0vbW1hcF9sb2NrLmMtMzU3LSAqL1xubW0vbW1hcF9sb2NrLmM6MzU4OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tbWFwX2xvY2suYy0zNTktXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjE3MD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjE3Mi17XG5uZXQvaXB2NC90Y3AuYzoyMTczOlx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG5uZXQvaXB2NC90Y3AuYy0yMTc0LVxuLS1cbnJ1c3Qva2VybmVsL21tLnJzPTE3ND0gICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbi0tXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDAtICAgICNbaW5saW5lXVxucnVzdC9rZXJuZWwvbW0ucnM6MjAxOiAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXHUwMDNlIE9wdGlvblx1MDAzY1ZtYVJlYWRHdWFyZFx1MDAzYyYjMzk7X1x1MDAzZVx1MDAzZSB7XG5ydXN0L2tlcm5lbC9tbS5yczoyMDI6ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xucnVzdC9rZXJuZWwvbW0ucnMtMjAzLSAgICAgICAgLy8gYG1tX3VzZXJzYC5cbnJ1c3Qva2VybmVsL21tLnJzOjIwNDogICAgICAgIGxldCB2bWEgPSB1bnNhZmUgeyBiaW5kaW5nczo6dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07XG5ydXN0L2tlcm5lbC9tbS5ycy0yMDUtICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbi0tXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDktICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XG5ydXN0L2tlcm5lbC9tbS5yczoyMTA6ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbnJ1c3Qva2VybmVsL21tLnJzLTIxMS0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc5CgkJCQkJCQlvdXRwdXQ6IDI1NgoJCQkJCQkJdGhvdWdodHM6IDE3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcywgZ2l2ZW4gdGhlIGxpa2VseSBpbXBhY3Qgb24gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0tTTWAgaXMgdGhlIG1haW4gb25lIGZvciBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZywgYW5kIEkmIzM5O2xsIGFsc28gY2hlY2sgZm9yIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQ09ORklHX01JR1JBVElPTmAsIGFuZCBgQ09ORklHX1VQUk9CRVNgIGFzIHRoZXkgc2VlbSByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBjb21wb25lbnRzLgoKTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGltcGFjdGVkIGZ1bmN0aW9ucyB0byBnZXQgYW4gaWRlYSBvZiB0aGUgc2NvcGUuIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiBgbW0va3NtLmNgIGxpa2UgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgLCBgYnJlYWtfa3NtYCwgYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYW5kIGBrc21fbWFkdmlzZWAuICBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBmb2xpb193YWxrX3N0YXJ0YCBpbiBgbW0vcGFnZXdhbGsuY2AsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gIGFuZCBgZG9fcGFnZXNfc3RhdF9hcnJheWAgaW4gYG1tL21pZ3JhdGUuY2AsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgIGluIGBtbS9ybWFwLmNgLCBhbmQgZmluYWxseSBgdXByb2JlX3dyaXRlYCBpbiBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLgoKTm93LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRoZSBiZXN0IHRhcmdldHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgbG9naWMgb3IgZW50cnlwb2ludHMgYW5kIGF2b2lkIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgZm9saW9fd2Fsa19zdGFydGAgaXMgaW50ZXJlc3RpbmcgYXMgaXQmIzM5O3MgYSBwYWdld2FsayBoZWxwZXIgd2l0aCBuZXcgYXNzZXJ0aW9ucyBhbmQgbG9ja2luZyBjaGVja3MuIGBicmVha19rc21gIGlzIGFub3RoZXIgb25lLCBnaXZlbiB0aGUgbG9ja2luZyBjaGFuZ2VzLiBUaGUgS1NNIGhlbHBlcnMgKGBicmVha19jb3dgLCBgZ2V0X21lcmdlYWJsZV9wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZWAsIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAsIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCksIGBrc21fbWFkdmlzZWAsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAsIGFyZSBhbGwgbGlrZWx5IGNhbmRpZGF0ZXMuIEZpbmFsbHksIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2Ugb3RoZXJzOiBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gLCBgZG9fcGFnZXNfc3RhdF9hcnJheWAsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgLCBhbmQgYHVwcm9iZV93cml0ZWAuCgpMZXQmIzM5O3MgY2hlY2sgd2hldGhlciBzdGF0aWMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUgaGVyZS4gSXQgc2VlbXMgdGhhdCBtb3N0IHN0YXRpYyBmdW5jdGlvbnMgd2lsbCBiZSByZXNvbHZlZCBidXQgaXQgbWF5IGJlIHdvcnRoIGNoZWNraW5nIGlmIHdlbGwta25vd24gZW50cnlwb2ludHMgYXJlIGJldHRlciB0YXJnZXRzLiBUaGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHdlbGwta25vd24gZW50cnlwb2ludHMuIGBrc21fbWFkdmlzZWAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYC4gYGZvbGlvX3dhbGtfc3RhcnRgIGlzIGV4cG9ydGVkL2NhbGxhYmxlIGFjcm9zcyBgbW1gLiBgYnJlYWtfa3NtYCBpcyBjYWxsZWQgaW4gYGtzbS5jYC4gYHNwbGl0X2h1Z2VfcGFnZXNfcGlkYCBpcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuCgpUaGVuLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnM6IGBLU01gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUlHUkFUSU9OYCwgYW5kIGBVUFJPQkVTYC4KCkZpbmFsbHksIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgUmVhc29uaW5nYDogIFRoaXMgaXMgYSBzaWduaWZpY2FudCBwYXRjaCBzZXJpZXMgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgY2hhbmdpbmcgcGFnZSB0YWJsZSB3YWxraW5nLCBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgYW5kIHVwcm9iZXMuIEl0IGludHJvZHVjZXMgbG9ja2luZyBzZW1hbnRpY3MgY2hhbmdlcyBhbmQgZGVmZW5zaXZlIGFzc2VydGlvbnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywgJiMzNDticmVha19rc20mIzM0OywgJiMzNDtmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkJiMzNDssICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywgJiMzNDt0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2UmIzM0OywgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LCAmIzM0O2JyZWFrX2NvdyYjMzQ7LCAmIzM0O3NwbGl0X2h1Z2VfcGFnZXNfcGlkJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0tTTSYjMzQ7LCAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssICYjMzQ7TUlHUkFUSU9OJiMzNDssICYjMzQ7VVBST0JFUyYjMzQ7XWAuCgpJJiMzOTtsbCBzYW5pdHkgY2hlY2sgdGhlIGFwcHJvYWNoIGFnYWluc3QgdGhlIHN0YXRlZCBnb2FscyBmb3IgcGF0Y2ggZnV6emluZzogcmVhY2hhYmlsaXR5LCBmb2N1c2luZyBvbiBuZXcvbW9kaWZpZWQgYXNzZXJ0aW9ucywgYW5kIGF2b2lkaW5nIHRoZSBvdmVybHkgZ2VuZXJpYy4gVGhpcyBzZWVtcyBnb29kLiBUaW1lIHRvIGV4ZWN1dGUgdGhpcyBwbGFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtVUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7LAogICAgJiMzNDticmVha19rc20mIzM0OywKICAgICYjMzQ7ZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtnZXRfbWVyZ2VhYmxlX3BhZ2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2JyZWFrX2NvdyYjMzQ7LAogICAgJiMzNDtzcGxpdF9odWdlX3BhZ2VzX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLykKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsgewogCQlwbWRfdCBwbWQ7CiAJfTsKIAkvKiBwcml2YXRlICovCi0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwllbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jazsKIH07CiAKIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmV0LCByZWZfY3RyX3VwZGF0ZWQgPSAwOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFOwogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDgxMCw3ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCwKIAkgKi8KIAlmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciAmbHQ7IHZhZGRyX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7Ci0JCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwkJfTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCXVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC02NjAsMTYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW4KIAlyZXR1cm4gZm91bmQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHsKJiM0MztzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7CiAJLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7Ci0JLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCi0JLndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssCi19OwotCiAvKgogICogVGhvdWdoIGl0JiMzOTtzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyCiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24mIzM5O3QgcXVpdGUgd29yayBmb3IKQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7CiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuCiAgKi8KIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKQomIzQzOwkJdW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKQogewogCXZtX2ZhdWx0X3QgcmV0ID0gMDsKLQljb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID8KLQkJCQkmYW1wO2JyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiAmYW1wO2JyZWFrX2tzbV9vcHM7CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gJmFtcDticmVha19rc21fb3BzOwomIzQzOwlvcHMtJmd0O3dhbGtfbG9jayA9IHdhbGtfbG9jazsKIAogCWRvIHsKIAkJaW50IGtzbV9wYWdlOwpAQCAtNzcwLDE1ICYjNDM7NzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4ga3NtX2NvbXBhdGlibGUodm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O2ZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7LyoqCiYjNDM7ICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IHdoaWNoIGlzCiYjNDM7ICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKQomIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuCiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cKJiM0MzsgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSwKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuCiYjNDM7ICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCiAJCXJldHVybiBOVUxMOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtJmd0O2Fub25fdm1hKQomIzQzOwomIzQzOwl2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLSZndDthbm9uX3ZtYSkgewomIzQzOwkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtODA0LDExICYjNDM7ODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCSAqLwogCXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSAwOwogCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7Ci0JaWYgKHZtYSkKLQkJYnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIGZhbHNlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pCkBAIC04MTcsMTMgJiM0Mzs4MzQsMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSkKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiYjNDM7CX07CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAKIAlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCAwKTsKIAlpZiAoZm9saW8pIHsKQEAgLTgzNCwxMiAmIzQzOzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCQl9CiAJCWZvbGlvX3dhbGtfZW5kKCZhbXA7ZncsIHZtYSk7CiAJfQotb3V0OgomIzQzOwogCWlmIChwYWdlKSB7CiAJCWZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpOwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAl9Ci0JbW1hcF9yZWFkX3VubG9jayhtbSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCXJldHVybiBwYWdlOwogfQogCkBAIC0xMjQzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZCkKIAkJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01FUkdFQUJMRSkgfHwgIXZtYS0mZ3Q7YW5vbl92bWEpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgZmFsc2UpOwomIzQzOwkJCWVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBQR1dBTEtfUkRMT0NLKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMTU3MSwxNCAmIzQzOzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzICZhbXA7JmFtcDsgKHJtYXBfaXRlbS0mZ3Q7b2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCQlpZiAodm1hKSB7CiAJCQllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLAogCQkJCQlaRVJPX1BBR0Uocm1hcF9pdGVtLSZndDthZGRyZXNzKSk7CiAJCQl0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoCiAJCQkJcGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcykpLAogCQkJCXJtYXBfaXRlbSwgbW0sIGVycik7CiYjNDM7CQkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG8KQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLAogCQkJICovCiAJCQllcnIgPSAwOwogCQl9Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNjA1LDEwICYjNDM7MTYyMiw5IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfdHJhY2U7CiAKIAllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLCBrcGFnZSk7CiAJaWYgKGVycikKQEAgLTE2MjgsNyAmIzQzOzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sCiAJcm1hcF9pdGVtLSZndDtsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCWdldF9hbm9uX3ZtYSh2bWEtJmd0O2Fub25fdm1hKTsKIG91dDoKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7b3V0X3RyYWNlOgogCXRyYWNlX2tzbV9tZXJnZV93aXRoX2tzbV9wYWdlKGtwYWdlLCBwYWdlX3RvX3BmbihrcGFnZSA/IGtwYWdlIDogcGFnZSksCiAJCQkJcm1hcF9pdGVtLCBtbSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgdHJ1ZSk7CiYjNDM7CQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMwMzUsNyAmIzQzOzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KIAogCQlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7CiYjNDM7CQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsCiAJCWludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKJiM0MzsJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CX07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVyciA9IC1FRkFVTFQ7CkBAIC0yNDY0LDcgJiM0MzsyNDY2LDkgQEAgc3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CQlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CQl9OwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCQlpbnQgZXJyID0gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LAogCXBnZF90ICpwZ2RwOwogCXA0ZF90ICpwNGRwOwogCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwkvKgomIzQzOwkgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3QKJiM0MzsJICogZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLICZhbXA7JmFtcDsgZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpCiYjNDM7CQlXQVJOX09OQ0UoMSwgJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxuJiMzNDspOwomIzQzOwlwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtJmd0O3ZtX21tLCBmdy0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJcHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctJmd0O3dhbGtfbG9jayk7CiYjNDM7CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJc3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlwdGVfdCBzd3BfcHRlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbWlnaHQgZXhwb3NlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIG9yIGlmIHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVsYXRlZCB0b29scyBhcmUgc3VmZmljaWVudC4KCkZpcnN0LCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2Ugd2Fsa2luZywgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBmb2xpb193YWxrYCwgYG1tX3dhbGtfb3BzYCwgYW5kIEtTTS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbXBvcnRhbnQuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBJIG5vdGUgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgoKMS4gIEluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCB0aGUgYHN0cnVjdCBmb2xpb193YWxrYCBoYXMgaGFkIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtgIHJlbW92ZWQgYW5kIG5vdyBpbmNsdWRlcyBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YC4gVGhhdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGxvY2sgdHlwZSBpcyBub3cgZXhwbGljaXRseSBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHdhbGsuCjIuICBJIHNlZSBtdWx0aXBsZSBjYWxsIHNpdGVzICh3aXRoaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCwgYGtlcm5lbC9ldmVudHMvdXByb2Jlcy5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtbS9ybWFwLmNgKSB3aGVyZSBgc3RydWN0IGZvbGlvX3dhbGsgZndgIGlzIG5vdyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLYCByYXRoZXIgdGhhbiBzaW1wbHkgYmVpbmcgZGVjbGFyZWQuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgZXhwbGljaXRseSBkZWZpbmluZyB0aGUgbG9jayB0eXBlIGF0IGluaXRpYWxpemF0aW9uIHRpbWUsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLgozLiAgVGhlIGNoYW5nZXMgaW4gYG1tL2tzbS5jYCBhcmUgcGFydGljdWxhcmx5IG5vdGV3b3J0aHkuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGJyZWFrX2tzbV9vcHNgICh3aGljaCBpcyBub3cgbm90IGBjb25zdGApIGFuZCBgYnJlYWtfa3NtYCAobm93IHRha2luZyBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2tgKS4gVGhlIGludHJvZHVjdGlvbiBvZiBgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIHBlci1WTUEgbG9ja3MgKHVzaW5nIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYW5kIGB2bWFfZW5kX3JlYWRgKSBpbnN0ZWFkIG9mIHRoZSBicm9hZGVyIGBtbWFwX3JlYWRfbG9jayhtbSlgIGZvciBLU00gb3BlcmF0aW9ucy4gYFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWWAgaXMgbm93IHV0aWxpemVkIGluIHRoZSB3YWxrLiBUaGlzIGxvb2tzIGxpa2UgYSByZWZpbmVtZW50IG9mIGxvY2tpbmcgZ3JhbnVsYXJpdHkgYW5kIHBvdGVudGlhbGx5IGltcHJvdmVkIGNvbmN1cnJlbmN5LiBJbiBgZ2V0X21lcmdlYWJsZV9wYWdlYCwgYHN0cnVjdCBmb2xpb193YWxrIGZ3YCBpcyBpbml0aWFsaXplZCB3aXRoIGAud2Fsa19sb2NrID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYC4KNC4gIEluIGBtbS9wYWdld2Fsay5jYCwgYGZvbGlvX3dhbGtfc3RhcnRgIG5vdyBjaGVja3MgYGZ3LSZndDt3YWxrX2xvY2tgIGFuZCBjYWxscyBgcHJvY2Vzc19tbV93YWxrX2xvY2tgIGFuZCBgcHJvY2Vzc192bWFfd2Fsa19sb2NrYCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC4KCk15IGtleSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbCB3aGVyZSBgc3RydWN0IGZvbGlvX3dhbGtgIGlzIHVzZWQgYW5kIHdoZXJlIGBmd2AgbWlnaHQgc3RpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciB3aGVyZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWRpbmcgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGdyZXBwZXIgdG9vbCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBgc3RydWN0IGZvbGlvX3dhbGtgIGFuZCBgZm9saW9fd2Fsa19zdGFydGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IG90aGVyIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGluaXRpYWxpemF0aW9uIHBhdHRlcm4gaXMgY29uc2lzdGVudGx5IGFwcGxpZWQgdGhyb3VnaG91dCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGEgdGhvcm91Z2ggYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZmF1bHQuYz00MDk9X19jb250ZXh0X3Vuc2FmZSgvKiBmb2xpb193YWxrX2VuZCgpIG5vdCBpbnN0cnVtZW50ZWQgKi8pXG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU3LVx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ1ODpcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU5LVx0XHRpZiAoIWZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYwLS8qKlxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2Mi0gKiBAcGFnZTpcdGV4YWN0IGZvbGlvIHBhZ2UgcmVmZXJlbmNlZCAoaWYgYXBwbGljYWJsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTY4LSAqXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTY5OiAqIChzZWUgZm9saW9fd2Fsa19zdGFydCgpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscylcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTcxPXN0cnVjdCBmb2xpb193YWxrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5MDpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3NC1cdC8qIFdhbGsgdGhlIHBhZ2UgdGFibGVzIGFnYWluLCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgdXBkYXRlLiAqL1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NTc1Olx0aWYgKGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgdmFkZHIsIDApKSB7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy01NzYtXHRcdGlmIChmdy5wYWdlID09IHBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Nzc1PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MjgtXG5tbS9odWdlX21lbW9yeS5jOjQ4Mjk6XHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDgzMC1cdFx0aWYgKCFmb2xpbylcbi0tXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04NDUtXG5tbS9rc20uYzo4NDY6XHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG5tbS9rc20uYy04NDctXHRpZiAoZm9saW8pIHtcbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMxNi1cdGlmICh2bWEgXHUwMDI2XHUwMDI2IHZtYV9taWdyYXRhYmxlKHZtYSkpIHtcbm1tL21pZ3JhdGUuYzoyMzE3Olx0XHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgRldfWkVST1BBR0UpO1xubW0vbWlncmF0ZS5jLTIzMTgtXHRcdGlmIChmb2xpbykge1xuLS1cbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWlncmF0ZS5jLTI0NzgtXG5tbS9taWdyYXRlLmM6MjQ3OTpcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcbm1tL21pZ3JhdGUuYy0yNDgwLVx0XHRpZiAoZm9saW8pIHtcbi0tXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXG4tLVxubW0vcGFnZXdhbGsuYy04NDgtLyoqXG5tbS9wYWdld2Fsay5jOjg0OTogKiBmb2xpb193YWxrX3N0YXJ0IC0gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gYSBmb2xpb1xubW0vcGFnZXdhbGsuYy04NTAtICogQGZ3OiBmaWxsZWQgd2l0aCBpbmZvcm1hdGlvbiBvbiBzdWNjZXNzLlxuLS1cbm1tL3BhZ2V3YWxrLmMtODk4LSAqL1xubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbm1tL3BhZ2V3YWxrLmMtOTAwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9ybWFwLmMtMjkyNy1cdCAqL1xubW0vcm1hcC5jOjI5Mjg6XHRmd19mb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG5tbS9ybWFwLmMtMjkyOS1cdGlmIChmd19mb2xpbyAhPSBmb2xpbyB8fCBmdy5wYWdlICE9IHBhZ2UgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYHN0cnVjdCBmb2xpb193YWxrYCBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYHN0cnVjdCBmb2xpb193YWxrYCwgSSBzaG91bGQgcHJvYmFibHkgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGl0cyB1c2UgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwuIFNvLCBsZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSBpcyBpbiBvcmRlci4gTGV0IG1lIHNjYW4gZm9yIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgb2YgYHN0cnVjdCBmb2xpb193YWxrYC4gS25vd2luZyAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc3RydWN0IGlzIGRlZmluZWQgY291bGQgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZG9jdW1lbnRlZCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgaW1wb3J0YW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBmb2xpb193YWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jPTQwOT1fX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MTQtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQxNTpcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDE2LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE1ND1lbnVtIGZvbGlvX3dhbGtfbGV2ZWwge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTYxOiAqIHN0cnVjdCBmb2xpb193YWxrIC0gZm9saW9fd2Fsa19zdGFydCgpIC8gZm9saW9fd2Fsa19lbmQoKSBkYXRhXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYyLSAqIEBwYWdlOlx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTcxOnN0cnVjdCBmb2xpb193YWxrIHtcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzItXHQvKiBwdWJsaWMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5MDpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00MDU9c3RhdGljIGludCBfX3Vwcm9iZV93cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjQwNjpcdFx0c3RydWN0IGZvbGlvX3dhbGsgKmZ3LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNDA3LVx0XHR1bnNpZ25lZCBsb25nIGluc25fdmFkZHIsIHVwcm9iZV9vcGNvZGVfdCAqaW5zbiwgaW50IG5ieXRlcyxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUwOS1cdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo1MTA6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUxMS1cdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODEyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODEzOlx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDgxNC1cdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4tLVxubW0va3NtLmMtODM3LVx0c3RydWN0IGZvbGlvICpmb2xpbztcbm1tL2tzbS5jOjgzODpcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xubW0va3NtLmMtODM5LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMwNC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0vbWlncmF0ZS5jOjIzMDU6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL21pZ3JhdGUuYy0yMzA2LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjQ2OC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5tbS9taWdyYXRlLmM6MjQ2OTpcdFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG5tbS9taWdyYXRlLmMtMjQ3MC1cdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vcGFnZXdhbGsuYz03OTg9aW50IHdhbGtfcGFnZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGZpcnN0X2luZGV4LFxuLS1cbm1tL3BhZ2V3YWxrLmMtODk4LSAqL1xubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbm1tL3BhZ2V3YWxrLmMtOTAwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9ybWFwLmMtMjg3My1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0vcm1hcC5jOjI4NzQ6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL3JtYXAuYy0yODc1LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcmVjZW50IGNoYW5nZXMuCgoqKkRpdmluZyBEZWVwIGludG8gYG1tL2tzbS5jYCBhbmQgYG1tL3BhZ2V3YWxrLmNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGBtbS9rc20uY2AgYW5kIGBtbS9wYWdld2Fsay5jYCDigJMgZ290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGJpZyBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgYmVlbiB1cCB0byBoZXJlLiBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgbW0vcGFnZXdhbGsuY2AsIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZm9saW9fd2Fsa19zdGFydGAgYW5kIGBmb2xpb193YWxrX2VuZGAgYXJlIGltcGxlbWVudGVkLiBUaG9zZSBhcmUga2V5IHByaW1pdGl2ZXMgaW4gYW55IHBhZ2Utd2Fsa2luZyBpbXBsZW1lbnRhdGlvbiwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlcmFjdGlvbiBpcyBlc3NlbnRpYWwuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDkwMTpcdFx0XHRmb2xpb193YWxrX2ZsYWdzX3QgZmxhZ3MpXG4gOTAyOlx0e1xuIDkwMzpcdFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplO1xuIDkwNDpcdFx0Ym9vbCB6ZXJvcGFnZSA9IGZhbHNlO1xuIDkwNTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gOTA2Olx0XHRwdWRfdCAqcHVkcCwgcHVkO1xuIDkwNzpcdFx0cG1kX3QgKnBtZHAsIHBtZDtcbiA5MDg6XHRcdHB0ZV90ICpwdGVwLCBwdGU7XG4gOTA5Olx0XHRzcGlubG9ja190ICpwdGw7XG4gOTEwOlx0XHRwZ2RfdCAqcGdkcDtcbiA5MTE6XHRcdHA0ZF90ICpwNGRwO1xuIDkxMjpcdFxuIDkxMzpcdFx0LypcbiA5MTQ6XHRcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxuIDkxNTpcdFx0ICogZXhwZWN0ZWQuXG4gOTE2Olx0XHQgKi9cbiA5MTc6XHRcdGlmIChmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcdTAwMjZcdTAwMjYgZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbiA5MTg6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O3dhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCYjMzQ7KTtcbiA5MTk6XHRcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cdTAwM2V2bV9tbSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbiA5MjA6XHRcdHByb2Nlc3Nfdm1hX3dhbGtfbG9jayh2bWEsIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4gOTIxOlx0XG4gOTIyOlx0XHR2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHZtYSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGFkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBhZGRyIFx1MDAzZT0gdm1hLVx1MDAzZXZtX2VuZCkpXG4gOTI1Olx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDkyNjpcdFxuIDkyNzpcdFx0cGdkcCA9IHBnZF9vZmZzZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiA5Mjg6XHRcdGlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkcCkpXG4gOTI5Olx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDkzMDpcdFxuIDkzMTpcdFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gOTMyOlx0XHRpZiAocDRkX25vbmVfb3JfY2xlYXJfYmFkKHA0ZHApKVxuIDkzMzpcdFx0XHRnb3RvIG5vdF9mb3VuZDtcbiA5MzQ6XHRcbiA5MzU6XHRcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIDkzNjpcdFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4gOTM3Olx0XHRpZiAocHVkX25vbmUocHVkKSlcbiA5Mzg6XHRcdFx0Z290byBub3RfZm91bmQ7XG4gOTM5Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFx1MDAyNlx1MDAyNlxuIDk0MDpcdFx0ICAgICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSkge1xuIDk0MTpcdFx0XHRwdGwgPSBwdWRfbG9jayh2bWEtXHUwMDNldm1fbW0sIHB1ZHApO1xuIDk0MjpcdFx0XHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiA5NDM6XHRcbiA5NDQ6XHRcdFx0ZW50cnlfc2l6ZSA9IFBVRF9TSVpFO1xuIDk0NTpcdFx0XHRmdy1cdTAwM2VsZXZlbCA9IEZXX0xFVkVMX1BVRDtcbiA5NDY6XHRcdFx0ZnctXHUwMDNlcHVkcCA9IHB1ZHA7XG4gOTQ3Olx0XHRcdGZ3LVx1MDAzZXB1ZCA9IHB1ZDtcbiA5NDg6XHRcbiA5NDk6XHRcdFx0aWYgKHB1ZF9ub25lKHB1ZCkpIHtcbiA5NTA6XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDk1MTpcdFx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDk1MjpcdFx0XHR9IGVsc2UgaWYgKHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfbGVhZihwdWQpKSB7XG4gOTUzOlx0XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA5NTQ6XHRcdFx0XHRnb3RvIHBtZF90YWJsZTtcbiA5NTU6XHRcdFx0fSBlbHNlIGlmIChwdWRfcHJlc2VudChwdWQpKSB7XG4gOTU2Olx0XHRcdFx0cGFnZSA9IHZtX25vcm1hbF9wYWdlX3B1ZCh2bWEsIGFkZHIsIHB1ZCk7XG4gOTU3Olx0XHRcdFx0aWYgKHBhZ2UpXG4gOTU4Olx0XHRcdFx0XHRnb3RvIGZvdW5kO1xuIDk1OTpcdFx0XHR9XG4gOTYwOlx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gOTYxOlx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDk2MjpcdFx0fVxuIDk2MzpcdFxuIDk2NDpcdHBtZF90YWJsZTpcbiA5NjU6XHRcdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKTtcbiA5NjY6XHRcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIDk2NzpcdFx0cG1kID0gcG1kcF9nZXRfbG9ja2xlc3MocG1kcCk7XG4gOTY4Olx0XHRpZiAocG1kX25vbmUocG1kKSlcbiA5Njk6XHRcdFx0Z290byBub3RfZm91bmQ7XG4gOTcwOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFx1MDAyNlx1MDAyNlxuIDk3MTpcdFx0ICAgICghcG1kX3ByZXNlbnQocG1kKSB8fCBwbWRfbGVhZihwbWQpKSkge1xuIDk3MjpcdFx0XHRwdGwgPSBwbWRfbG9jayh2bWEtXHUwMDNldm1fbW0sIHBtZHApO1xuIDk3MzpcdFx0XHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbiA5NzQ6XHRcbiA5NzU6XHRcdFx0ZW50cnlfc2l6ZSA9IFBNRF9TSVpFO1xuIDk3NjpcdFx0XHRmdy1cdTAwM2VsZXZlbCA9IEZXX0xFVkVMX1BNRDtcbiA5Nzc6XHRcdFx0ZnctXHUwMDNlcG1kcCA9IHBtZHA7XG4gOTc4Olx0XHRcdGZ3LVx1MDAzZXBtZCA9IHBtZDtcbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBgZm9saW9fd2Fsa19lbmRgKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgZm9saW8gd2Fsa3MgY29uY2x1ZGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBmb2xpb193YWxrX2VuZGAgaW4gYG1tL3BhZ2V3YWxrLmNgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaGFwcGVucyBhdCB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhlc2Ugd2Fsa3MsIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIGhvdyB0aGV5IHdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZnVuY3Rpb25zIGlzIGtleS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAyMDpcdFx0XHRcdHplcm9wYWdlID0gdHJ1ZTtcbjEwMjE6XHRcdFx0XHRnb3RvIGZvdW5kO1xuMTAyMjpcdFx0XHR9XG4xMDIzOlx0XHR9XG4xMDI0Olx0XHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7XG4xMDI1Olx0bm90X2ZvdW5kOlxuMTAyNjpcdFx0dm1hX3BndGFibGVfd2Fsa19lbmQodm1hKTtcbjEwMjc6XHRcdHJldHVybiBOVUxMO1xuMTAyODpcdGZvdW5kOlxuMTAyOTpcdFx0aWYgKCF6ZXJvcGFnZSlcbjEwMzA6XHRcdFx0LyogTm90ZTogT2Zmc2V0IGZyb20gdGhlIG1hcHBlZCBwYWdlLCBub3QgdGhlIGZvbGlvIHN0YXJ0LiAqL1xuMTAzMTpcdFx0XHRmdy1cdTAwM2VwYWdlID0gcGFnZSAmIzQzOyAoKGFkZHIgXHUwMDI2IChlbnRyeV9zaXplIC0gMSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjEwMzI6XHRcdGVsc2VcbjEwMzM6XHRcdFx0ZnctXHUwMDNlcGFnZSA9IE5VTEw7XG4xMDM0Olx0XHRmdy1cdTAwM2VwdGwgPSBwdGw7XG4xMDM1Olx0XHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbjEwMzY6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUaGUgRW5kIG9mIHRoZSBXYWxrOiBSZWZsZWN0aW9ucyBvbiBgZm9saW9fd2Fsa19lbmRgKioKCkFscmlnaHQsIHNvIGBmb2xpb193YWxrX2VuZGAuIFRpbWUgdG8gYnJlYWsgZG93biB3aGF0IHRoaXMgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgb24uIEl0JiMzOTtzIHRoZSBjb25jbHVzaW9uLCB0aGUgZmluYWwgY2hlY2twb2ludC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gKmF0KiBgZm9saW9fd2Fsa19lbmRgPyBIYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBiZWVuIHJlbGVhc2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciB1bmNsb3NlZCBoYW5kbGVzPyBIYXZlIEkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYWxsIHRoZSBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgaGF2ZSBjcm9wcGVkIHVwIGR1cmluZyB0aGUgd2FsayBpdHNlbGY/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIHBvc3QtY29uZGl0aW9ucywgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgc3lzdGVtPwoKTm93IEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXh0ZXJuYWwgaW1wbGljYXRpb25zLiBIb3cgbWlnaHQgc3Vic2VxdWVudCBmdW5jdGlvbnMgb3IgbW9kdWxlcyBkZXBlbmQgb24gdGhpcyBlbmRwb2ludD8gRG9lcyBpdCBuZWF0bHkgcGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG5leHQgcGhhc2UsIG9yIGlzIHRoZXJlIHdvcmsgdG8gZG8/IERpZCBpdCB0cmlnZ2VyIGFueSBub3RpZmljYXRpb25zIG9yIGxvZ2dpbmcsIGFuZCBhcmUgdGhleSBzdWZmaWNpZW50IGZvciBwcm9wZXIgZGVidWdnaW5nPyBXYXMgdGhlcmUgc29tZSBzb3J0IG9mIGNsZWFudXAgcHJvY2VzcywgYW5kIGlmIHNvLCBkaWQgaXQgb2NjdXIgY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPwoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBleHRlbnNpYmxlLiBBbSBJIHNldHRpbmcgbXlzZWxmIHVwIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLCBvciBhbSBJIHBhaW50aW5nIG15c2VsZiBpbnRvIGEgY29ybmVyIHdpdGggdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gV2hhdCB3b3VsZCBJIG5lZWQgdG8gY2hhbmdlIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3MgY2hhbmdlcz8KCkxldCBtZSByZXZpZXcgdGhlIGNvZGUgb25lIGxhc3QgdGltZS4uLiBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBhbGlnbnMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50LiBObyBsb29zZSBlbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmZpbGUgbW0vcGFnZXdhbGsuYyBkb2VzIG5vdCBoYXZlIGxpbmUgMTAzNywgaXQgaGFzIG9ubHkgMTAzNiBsaW5lczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIG1tL3BhZ2V3YWxrLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDEwMzcsIGl0IGhhcyBvbmx5IDEwMzYgbGluZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgQ29kZSYjMzk7cyBGb290cHJpbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZvbGlvX3dhbGtfZW5kYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIFdoZXJlIGlzIGl0IGFjdHVhbGx5IGRlY2xhcmVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXTigJlzIGJlaW5nIHVzZWQgY29udGV4dHVhbGx5LiBMb2NhdGluZyB0aGUgZGVmaW5pdGlvbiBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgaG93IHRoZSBwcm9ncmFtIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFuZCB3b3JrIGZyb20gdGhlcmUuIExldOKAmXMgc2VlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb193YWxrX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZmF1bHQuYz00MDg9dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDk6X19jb250ZXh0X3Vuc2FmZSgvKiBmb2xpb193YWxrX2VuZCgpIG5vdCBpbnN0cnVtZW50ZWQgKi8pXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MTAte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2NC1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ2NTpcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjYtXHRcdGlmIChyYylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTU0PWVudW0gZm9saW9fd2Fsa19sZXZlbCB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2MC0vKipcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjE6ICogc3RydWN0IGZvbGlvX3dhbGsgLSBmb2xpb193YWxrX3N0YXJ0KCkgLyBmb2xpb193YWxrX2VuZCgpIGRhdGFcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XHRleGFjdCBmb2xpbyBwYWdlIHJlZmVyZW5jZWQgKGlmIGFwcGxpY2FibGUpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE5MD1zdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTMtXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTk0OiNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTUtXHRzcGluX3VubG9jaygoX19mdyktXHUwMDNlcHRsKTsgXFxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3Ny1cdFx0XHRyZXQgPSBfX3Vwcm9iZV93cml0ZSh2bWEsIFx1MDAyNmZ3LCBmb2xpbywgaW5zbl92YWRkciwgaW5zbiwgbmJ5dGVzLCBpc19yZWdpc3Rlcik7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo1Nzg6XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc5LVx0fVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODU3LVx0XHRmb2xpb19nZXQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0ODU4Olx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDg1OS1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4ODEtbmV4dDpcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4MjpcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQ4ODMtXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm1tL2tzbS5jPTgzMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuLS1cbm1tL2tzbS5jLTg1Mi1cdFx0fVxubW0va3NtLmM6ODUzOlx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL2tzbS5jLTg1NC1cdH1cbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMyMC1cdFx0XHRcdFx0XHRcdG1pZ3JhdGVfYWxsKTtcbm1tL21pZ3JhdGUuYzoyMzIxOlx0XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xubW0vbWlncmF0ZS5jLTIzMjItXHRcdH0gZWxzZSB7XG4tLVxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjQ4Ni1cdFx0XHRcdGVyciA9IGZvbGlvX25pZChmb2xpbyk7XG5tbS9taWdyYXRlLmM6MjQ4NzpcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL21pZ3JhdGUuYy0yNDg4LVx0XHR9IGVsc2Uge1xuLS1cbm1tL3BhZ2V3YWxrLmM9Nzk4PWludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbi0tXG5tbS9wYWdld2Fsay5jLTg1Ni0gKiByZXR1cm4gdGhlIGZvbGlvLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IHJlZmVyZW5jZWQgYnlcbm1tL3BhZ2V3YWxrLmM6ODU3OiAqIEBhZGRyIGNhbm5vdCBjaGFuZ2UgdW50aWwgZm9saW9fd2Fsa19lbmQoKSB3YXMgY2FsbGVkLlxubW0vcGFnZXdhbGsuYy04NTgtICpcbi0tXG5tbS9wYWdld2Fsay5jLTg2Ny0gKiBPbiBzdWNjZXNzLCBAZncgaXMgZmlsbGVkIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZm9saW8gd2hpbGUgdGhlIFBUTFxubW0vcGFnZXdhbGsuYzo4Njg6ICogaXMgc3RpbGwgaGVsZCBhbmQgZm9saW9fd2Fsa19lbmQoKSBtdXN0IGJlIGNhbGxlZCB0byBjbGVhbiB1cCxcbm1tL3BhZ2V3YWxrLmMtODY5LSAqIHJlbGVhc2luZyBhbnkgaGVsZCBsb2Nrcy4gVGhlIHJldHVybmVkIGZvbGlvIG11c3QgKm5vdCogYmUgdXNlZCBhZnRlciB0aGVcbm1tL3BhZ2V3YWxrLmM6ODcwOiAqIGNhbGwgdG8gZm9saW9fd2Fsa19lbmQoKSwgdW5sZXNzIGEgc2hvcnQtdGVybSBmb2xpbyByZWZlcmVuY2UgaXMgdGFrZW4gYmVmb3JlXG5tbS9wYWdld2Fsay5jLTg3MS0gKiB0aGF0IGNhbGwuXG4tLVxubW0vcm1hcC5jPTI4Njg9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTMxLVx0XHRpZiAoZndfZm9saW8pXG5tbS9ybWFwLmM6MjkzMjpcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL3JtYXAuYy0yOTMzLVx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLS1cbm1tL3JtYXAuYy0yOTU4LVxubW0vcm1hcC5jOjI5NTk6XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL3JtYXAuYy0yOTYwLVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWdlIFdhbGsgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBwYWdlIHdhbGtzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBUaGUgYGluY2x1ZGUvbGludXgvcGFnZXdhbGsuaGAgZmlsZSBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMTk0LiBJdCYjMzk7cyB1c3VhbGx5IGFyb3VuZCB0aGF0IHBvaW50IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdGhlbXNlbHZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHBhZ2Ugd2FsayBjb250ZXh0IG9yIHRoZSBkZWZpbml0aW9ucyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcGFnZSB0YWJsZSBsZXZlbHMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgbGlrZSBhIGBwZ2RfdGAsIGBwdWRfdGAsIGBwbWRfdGAsIG9yIGBwdGVfdGAgZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyB0aGUgaXRlcmF0b3JzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyB0aGUgbmV4dCBsZXZlbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGF5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGludG8gdW5kZXJzdGFuZGluZyBvciBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHR1bmlvbiB7XG4gMTgxOlx0XHRcdHB0ZV90IHB0ZTtcbiAxODI6XHRcdFx0cHVkX3QgcHVkO1xuIDE4MzpcdFx0XHRwbWRfdCBwbWQ7XG4gMTg0Olx0XHR9O1xuIDE4NTpcdFx0LyogcHJpdmF0ZSAqL1xuIDE4NjpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDE4NzpcdFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gMTg4Olx0fTtcbiAxODk6XHRcbiAxOTA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIDE5MTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDE5MjpcdFx0XHRmb2xpb193YWxrX2ZsYWdzX3QgZmxhZ3MpO1xuIDE5MzpcdFxuIDE5NDpcdCNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcbiAxOTU6XHRcdHNwaW5fdW5sb2NrKChfX2Z3KS1cdTAwM2VwdGwpOyBcXFxuIDE5NjpcdFx0aWYgKGxpa2VseSgoX19mdyktXHUwMDNlbGV2ZWwgPT0gRldfTEVWRUxfUFRFKSkgXFxcbiAxOTc6XHRcdFx0cHRlX3VubWFwKChfX2Z3KS1cdTAwM2VwdGVwKTsgXFxcbiAxOTg6XHRcdHZtYV9wZ3RhYmxlX3dhbGtfZW5kKF9fdm1hKTsgXFxcbiAxOTk6XHR9IHdoaWxlICgwKVxuIDIwMDpcdFxuIDIwMTpcdCNlbmRpZiAvKiBfTElOVVhfUEFHRVdBTEtfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwNgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgd2Fsa19sb2NrYCB0byB0aGUgYHN0cnVjdCBmb2xpb193YWxrYCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgaXQuIEl0IGFsc28gY2hhbmdlcyBzb21lIG1tYXAgcmVhZCBsb2NraW5nIHBhdGhzIGluIGBrc20uY2AgdG8gdXNlIHBlci12bWEgbG9ja2luZyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gRmluYWxseSwgdGhlIGBwYWdld2Fsay5jYCBjb2RlIGlzIHVwZGF0ZWQgdG8gY2hlY2sgdGhlIG5ldyBgZnctJmd0O3dhbGtfbG9ja2AuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIGluIHRoYXQgYXJlYT8gTm8sIGJlY2F1c2U6CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UuIE5vdGhpbmcgZ2V0cyBjb3BpZWQgb3V0IHZpYSBgY29weV90b191c2VyYCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4KKiAgIEFsbCBgc3RydWN0IGZvbGlvX3dhbGtgIGluc3RhbmNlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBgeyAud2Fsa19sb2NrID0gLi4uIH1gLiAgVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgaXMgZG9pbmcgaXRzIGpvYiBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG90aGVyIGZpZWxkcywgYXMgaXQgc2hvdWxkLgoqICAgVGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiBlaXRoZXIgcmV0dXJucyBhIGxvY2tlZCBWTUEgb3IgTlVMTC4KKiAgIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBsb2NraW5nIGFuZCBwYWdlIHdhbGtpbmcg4oCTIHJlZmFjdG9yaW5nIHdpdGhpbiBLU00gYW5kIHRoZSBNTSBwYWdld2Fsay4KKiAgIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG9yIGV2ZW4gZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1cX0JVR1xfT04vV0FSTlxfT05DRSkuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIGBOZWVkc0tNU0FOYCBzaXR1YXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHVzZWQgb3IgcG90ZW50aWFsbHkgbGVha2VkLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGFsbCB0aGUgY3JpdGVyaWE6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gQWxsIGBmd2AgaW5zdGFuY2VzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgaGVyZS4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgdW5pbml0aWFsaXplZCBieXRlcyB0byBiZSByZWFkPyBObyBkaWNlLgoKU28sIGxldCYjMzk7cyBjb250cmFzdCB0aGUgcmVsZXZhbmNlIG9mIEtBU0FOIHZlcnN1cyBLTVNBTi4KCiogICBLQVNBTi9MT0NLREVQOiBUaGUgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIE1NIGxvY2tpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIHBlci1WTUEgcmVhZCBsb2NraW5nIGluIEtTTSBhbmQgYWRkaW5nIGNoZWNrcyB0byBwYWdld2Fsay4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIHNxdWFyZWx5IHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOIHRvIGRldGVjdC4KKiAgIEtNU0FOOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyByZWFkLCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCk9rYXksIHRoYXQmIzM5O3MgbXkgYW5hbHlzaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuMTMzNjE3NDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjcxNzQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktTTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiVVBST0JFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3dhbGtfc3RhcnRcIixcbiAgICBcImJyZWFrX2tzbVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZFwiLFxuICAgIFwiZ2V0X21lcmdlYWJsZV9wYWdlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlXCIsXG4gICAgXCJrc21fbWFkdmlzZVwiLFxuICAgIFwiYnJlYWtfY293XCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VzX3BpZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2Ugd2Fsa2luZyBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgdXByb2JlcykuIEl0IGludHJvZHVjZXMgcGVyLVZNQSByZWFkIGxvY2tpbmcgKFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSB2aWEgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQpIHRvIEtTTSByb3V0aW5lcywgZHluYW1pY2FsbHkgYWx0ZXJzIGJyZWFrX2tzbV9vcHMgd2FsayBsb2NraW5nLCBhbmQgYWRkcyBsb2NraW5nIHZhbGlkYXRpb24gY2hlY2tzL2Fzc2VydGlvbnMgaW4gZm9saW9fd2Fsa19zdGFydC4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nIGludmFyaWFudHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuMTMzNjIzOTM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg4NDc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzI2NWViMGQ3Yjc1NWY2NjhjYzViMGVjYzM0ZjA1N2E2Y2E3NTZmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDEyLDcgKzQxMiw5IEBAIF9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHR9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgcmM7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcXG5pbmRleCBiNDFkNzI2NWMwMWJjLi40NTU0MjhlYWYxZmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbkBAIC0xODMsOCArMTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsge1xcbiBcXHRcXHRwbWRfdCBwbWQ7XFxuIFxcdH07XFxuIFxcdC8qIHByaXZhdGUgKi9cXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXFxuaW5kZXggNzcwOWVhODgyNDc3OC4uMDU0ZmRjYjUyMTM2NiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xcbisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXFxuQEAgLTUwNyw3ICs1MDcsOSBAQCBpbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFO1xcbiBcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbi1cXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4rXFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XFxuK1xcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4rXFx0fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDgxMCw3ICs0ODEwLDkgQEAgc3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbiBcXHQgKi9cXG4gXFx0Zm9yIChhZGRyID0gdmFkZHJfc3RhcnQ7IGFkZHIgXFx1MDAzYyB2YWRkcl9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuLVxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcXG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xcbmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0XFxuLS0tIGEvbW0va3NtLmNcXG4rKysgYi9tbS9rc20uY1xcbkBAIC02NjAsMTYgKzY2MCwxMSBAQCBzdGF0aWMgaW50IGJyZWFrX2tzbV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlblxcbiBcXHRyZXR1cm4gZm91bmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcXG4rc3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xcbiBcXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XFxuLVxcdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxcbi1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1dSTE9DSyxcXG4tfTtcXG4tXFxuIC8qXFxuICAqIFRob3VnaCBpdCdzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyXFxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yXFxuQEAgLTY5NiwxMSArNjkxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcXG4gICogcHJvdGVjdGlvbiBrZXlzIGhlcmUgYW55d2F5LlxcbiAgKi9cXG4gc3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgbG9ja192bWEpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcXG4ge1xcbiBcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuLVxcdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xcbi1cXHRcXHRcXHRcXHRcXHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFxcdTAwMjZicmVha19rc21fb3BzO1xcbitcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFxcdTAwMjZicmVha19rc21fb3BzO1xcbitcXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0aW50IGtzbV9wYWdlO1xcbkBAIC03NzAsMTUgKzc2NSwzNiBAQCBzdGF0aWMgYm9vbCB2bWFfa3NtX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHJldHVybiBrc21fY29tcGF0aWJsZSh2bWEtXFx1MDAzZXZtX2ZpbGUsIHZtYS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4rLyoqXFxuKyAqIGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgd2hpY2ggaXNcXG4rICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKVxcbisgKiB0byB1bmxvY2sgdm1hIGFmdGVyIGZpbmlzaGluZyByZWFkaW5nIHRoZSBWTUEgKG5vbi1OVUxMKS5cXG4rICpcXG4rICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuXFxuKyAqIElmIG5vIFZNQSBpcyBtYXBwZWQgdGhlcmUgb3IsIHZlcnkgdW5saWtlbHksIGEgcmVmZXJlbmNlIGNvdW50IG92ZXJmbG93XFxuKyAqIG9jY3VycmVkLCByZXR1cm4gTlVMTCwgYW5kIG5vIHJlYWQtbG9ja2VkLlxcbisgKlxcbisgKiBJTVBPUlRBTlQ6IElmIGEgVk1BIGV4aXN0cyBidXQgaXMgbm90IFZNX01FUkdFQUJMRSBvciBoYXMgbm8gYW5vbl92bWEsXFxuKyAqIHRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIHBlci1WTUEgcmVhZCBsb2NrIGJlZm9yZSByZXR1cm5pbmcgTlVMTC5cXG4rICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuK1xcbiBcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG4tXFx0aWYgKCF2bWEgfHwgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVxcdTAwM2Vhbm9uX3ZtYSlcXG4rXFxuK1xcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cXHUwMDNlYW5vbl92bWEpIHtcXG4rXFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuIFxcbkBAIC04MDQsMTEgKzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4gXFx0ICovXFxuIFxcdHJtYXBfaXRlbS1cXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSAwO1xcbiBcXG4tXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xcbi1cXHRpZiAodm1hKVxcbi1cXHRcXHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFLCBmYWxzZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbitcXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBhZGRyKTtcXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XFxuK1xcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbkBAIC04MTcsMTMgKzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXFx1MDAzZWFkZHJlc3M7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuK1xcdH07XFxuIFxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XFxuK1xcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG4gXFx0aWYgKGZvbGlvKSB7XFxuQEAgLTgzNCwxMiArODUyLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuIFxcdFxcdH1cXG4gXFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbiBcXHR9XFxuLW91dDpcXG4rXFxuIFxcdGlmIChwYWdlKSB7XFxuIFxcdFxcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpO1xcbiBcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcXG4gXFx0fVxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdHJldHVybiBwYWdlO1xcbiB9XFxuIFxcbkBAIC0xMjQzLDcgKzEyNjEsNyBAQCBzdGF0aWMgaW50IHVubWVyZ2VfYW5kX3JlbW92ZV9hbGxfcm1hcF9pdGVtcyh2b2lkKVxcbiBcXHRcXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcXG4gXFx0XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCwgZmFsc2UpO1xcbitcXHRcXHRcXHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG5AQCAtMTU3MSwxNCArMTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IChybWFwX2l0ZW0tXFx1MDAzZW9sZGNoZWNrc3VtID09IHplcm9fY2hlY2tzdW0pKSB7XFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuK1xcdFxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcdFxcdGlmICh2bWEpIHtcXG4gXFx0XFx0XFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0WkVST19QQUdFKHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcykpO1xcbiBcXHRcXHRcXHR0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoXFxuIFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXFx1MDAzZWFkZHJlc3MpKSxcXG4gXFx0XFx0XFx0XFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcXG4rXFx0XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElmIHRoZSB2bWEgaXMgb3V0IG9mIGRhdGUsIHdlIGRvIG5vdCBuZWVkIHRvXFxuQEAgLTE1ODYsNyArMTYwNCw2IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xNjA1LDEwICsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzKTtcXG4rXFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzKTtcXG4gXFx0aWYgKCF2bWEpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF90cmFjZTtcXG4gXFxuIFxcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsIGtwYWdlKTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTYyOCw3ICsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRybWFwX2l0ZW0tXFx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcdGdldF9hbm9uX3ZtYSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4gb3V0Olxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuK291dF90cmFjZTpcXG4gXFx0dHJhY2Vfa3NtX21lcmdlX3dpdGhfa3NtX3BhZ2Uoa3BhZ2UsIHBhZ2VfdG9fcGZuKGtwYWdlID8ga3BhZ2UgOiBwYWdlKSxcXG4gXFx0XFx0XFx0XFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMjg4Myw3ICsyOTAwLDcgQEAgc3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKSB7XFxuLVxcdFxcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCB0cnVlKTtcXG4rXFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTMwMzUsNyArMzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFx0XFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xcbiBcXG4gXFx0XFx0aWYgKHZtYS1cXHUwMDNlYW5vbl92bWEpIHtcXG4tXFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGEzNjlkMGM5NWMzODYuLjJlMDc4YzFlMWI5YTYgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTIzMDIsNyArMjMwMiw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxcbiBcXHRcXHRpbnQgbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsIGJvb2wgbWlncmF0ZV9hbGwpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHR9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcdGludCBlcnIgPSAtRUZBVUxUO1xcbkBAIC0yNDY0LDcgKzI0NjYsOSBAQCBzdGF0aWMgdm9pZCBkb19wYWdlc19zdGF0X2FycmF5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykoKnBhZ2VzKTtcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHRpbnQgZXJyID0gLUVGQVVMVDtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdld2Fsay5jXFxuKysrIGIvbW0vcGFnZXdhbGsuY1xcbkBAIC05MTAsNyArOTEwLDE1IEBAIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuIFxcdHBnZF90ICpwZ2RwO1xcbiBcXHRwNGRfdCAqcDRkcDtcXG4gXFxuLVxcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFx0LypcXG4rXFx0ICogT3RoZXIgbG9ja2luZyBtb2RlcyBleGNlcHQgZm9yIG1tYXAgb3Igdm1hIHJlYWQgbG9ja2luZyBhcmUgbm90XFxuK1xcdCAqIGV4cGVjdGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGZ3LVxcdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcXHUwMDI2XFx1MDAyNiBmdy1cXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcXG4rXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJ3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxcXFxuXFxcIik7XFxuK1xcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cXHUwMDNldm1fbW0sIGZ3LVxcdTAwM2V3YWxrX2xvY2spO1xcbitcXHRwcm9jZXNzX3ZtYV93YWxrX2xvY2sodm1hLCBmdy1cXHUwMDNld2Fsa19sb2NrKTtcXG4rXFxuIFxcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoYWRkciBcXHUwMDNjIHZtYS1cXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcXHUwMDNlPSB2bWEtXFx1MDAzZXZtX2VuZCkpXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IDUzMzJjNTI5MDliZTEuLjBjYTI0YmNmOTU3MDMgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTI4NzEsNyArMjg3MSw5IEBAIHN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4tXFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XFxuK1xcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbitcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4gXFx0cHRlX3Qgc3dwX3B0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuNzczMzgyNDc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTI3MTI1MjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIlVQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJicmVha19rc21cIixcbiAgICBcImZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRcIixcbiAgICBcImdldF9tZXJnZWFibGVfcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZVwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImJyZWFrX2Nvd1wiLFxuICAgIFwic3BsaXRfaHVnZV9wYWdlc19waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggNDZkODI4OTI2MDA5Yi4uOTY4ZjEyOGE1MjMyMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuQEAgLTQxMiw3ICs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE4Myw4ICsxODMsOCBAQCBzdHJ1Y3QgZm9saW9fd2FsayB7XG4gXHRcdHBtZF90IHBtZDtcbiBcdH07XG4gXHQvKiBwcml2YXRlICovXG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHNwaW5sb2NrX3QgKnB0bDtcbitcdGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrO1xuIH07XG4gXG4gc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXG5pbmRleCA3NzA5ZWE4ODI0Nzc4Li4wNTRmZGNiNTIxMzY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXG5AQCAtNTA3LDcgKzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9GT1JDRTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAzMGI3YzYzYjBlMzU5Li5kMDQ0N2I2YWU2ZTQxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ4MTAsNyArNDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbiBcdCAqL1xuIFx0Zm9yIChhZGRyID0gdmFkZHJfc3RhcnQ7IGFkZHIgXHUwMDNjIHZhZGRyX2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdFx0fTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRcdHVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7XG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xuaW5kZXggNjI0ZjM3OTc1ZTEyOS4uMWQ4NTc2OWVjN2RiZSAxMDA2NDRcbi0tLSBhL21tL2tzbS5jXG4rKysgYi9tbS9rc20uY1xuQEAgLTY2MCwxNiArNjYwLDExIEBAIHN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbitzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7XG4gXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fbG9ja192bWFfb3BzID0ge1xuLVx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXG4tXHQud2Fsa19sb2NrID0gUEdXQUxLX1dSTE9DSyxcbi19O1xuLVxuIC8qXG4gICogVGhvdWdoIGl0J3MgdmVyeSB0ZW1wdGluZyB0byB1bm1lcmdlIHJtYXBfaXRlbXMgZnJvbSBzdGFibGUgdHJlZSByYXRoZXJcbiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24ndCBxdWl0ZSB3b3JrIGZvclxuQEAgLTY5NiwxMSArNjkxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcbiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuXG4gICovXG4gc3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgbG9ja192bWEpXG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcbiB7XG4gXHR2bV9mYXVsdF90IHJldCA9IDA7XG4tXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID9cbi1cdFx0XHRcdFx1MDAyNmJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiBcdTAwMjZicmVha19rc21fb3BzO1xuK1x0c3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBcdTAwMjZicmVha19rc21fb3BzO1xuK1x0b3BzLVx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcbiBcbiBcdGRvIHtcbiBcdFx0aW50IGtzbV9wYWdlO1xuQEAgLTc3MCwxNSArNzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBrc21fY29tcGF0aWJsZSh2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4rLyoqXG4rICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJyB3aGljaCBpc1xuKyAqIFZNX01FUkdFQUJMRSBhbmQgcmVhZC1sb2NrIGl0IGJ5IHBlci1WTUEgbG9ja3MuIFBsZWFzZSB1c2Ugdm1hX2VuZF9yZWFkKClcbisgKiB0byB1bmxvY2sgdm1hIGFmdGVyIGZpbmlzaGluZyByZWFkaW5nIHRoZSBWTUEgKG5vbi1OVUxMKS5cbisgKlxuKyAqIFJldHVybjogSWYgYSBWTUEgZXhpc3RzIHdoaWNoIHNwYW5zIEBhZGRyZXNzLCByZXR1cm4gdGhhdCBWTUEsIHJlYWQtbG9ja2VkLlxuKyAqIElmIG5vIFZNQSBpcyBtYXBwZWQgdGhlcmUgb3IsIHZlcnkgdW5saWtlbHksIGEgcmVmZXJlbmNlIGNvdW50IG92ZXJmbG93XG4rICogb2NjdXJyZWQsIHJldHVybiBOVUxMLCBhbmQgbm8gcmVhZC1sb2NrZWQuXG4rICpcbisgKiBJTVBPUlRBTlQ6IElmIGEgVk1BIGV4aXN0cyBidXQgaXMgbm90IFZNX01FUkdFQUJMRSBvciBoYXMgbm8gYW5vbl92bWEsXG4rICogdGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgcGVyLVZNQSByZWFkIGxvY2sgYmVmb3JlIHJldHVybmluZyBOVUxMLlxuKyAqIENhbGxlcnMgbXVzdCBOT1QgY2FsbCB2bWFfZW5kX3JlYWQoKSBvbiBhIE5VTEwgcmV0dXJuIHZhbHVlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcbiBcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdGlmICghdm1hIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtXHUwMDNlYW5vbl92bWEpXG4rXG4rXHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuK1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbkBAIC04MDQsMTEgKzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdCAqL1xuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gMDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4tXHRpZiAodm1hKVxuLVx0XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFLCBmYWxzZSk7XG4tXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xuK1x0aWYgKCF2bWEpXG4rXHRcdHJldHVybjtcbitcbitcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XG4rXHR2bWFfZW5kX3JlYWQodm1hKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbkBAIC04MTcsMTMgKzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbitcdH07XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuIFx0aWYgKGZvbGlvKSB7XG5AQCAtODM0LDEyICs4NTIsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdFx0fVxuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdH1cbi1vdXQ6XG4rXG4gXHRpZiAocGFnZSkge1xuIFx0XHRmbHVzaF9hbm9uX3BhZ2Uodm1hLCBwYWdlLCBhZGRyKTtcbiBcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7XG4gXHR9XG4tXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuIFxuQEAgLTEyNDMsNyArMTI2MSw3IEBAIHN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXG4gXHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBmYWxzZSk7XG4rXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBQR1dBTEtfUkRMT0NLKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuQEAgLTE1NzEsMTQgKzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdGlmIChrc21fdXNlX3plcm9fcGFnZXMgXHUwMDI2XHUwMDI2IChybWFwX2l0ZW0tXHUwMDNlb2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXG4tXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4rXHRcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdFx0aWYgKHZtYSkge1xuIFx0XHRcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsXG4gXHRcdFx0XHRcdFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpO1xuIFx0XHRcdHRyYWNlX2tzbV9tZXJnZV9vbmVfcGFnZShcbiBcdFx0XHRcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbitcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoZSB2bWEgaXMgb3V0IG9mIGRhdGUsIHdlIGRvIG5vdCBuZWVkIHRvXG5AQCAtMTU4Niw3ICsxNjA0LDYgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdFx0XHQgKi9cbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHR9XG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0xNjA1LDEwICsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF90cmFjZTtcbiBcbiBcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsIGtwYWdlKTtcbiBcdGlmIChlcnIpXG5AQCAtMTYyOCw3ICsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGdldF9hbm9uX3ZtYSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuIG91dDpcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4rb3V0X3RyYWNlOlxuIFx0dHJhY2Vfa3NtX21lcmdlX3dpdGhfa3NtX3BhZ2Uoa3BhZ2UsIHBhZ2VfdG9fcGZuKGtwYWdlID8ga3BhZ2UgOiBwYWdlKSxcbiBcdFx0XHRcdHJtYXBfaXRlbSwgbW0sIGVycik7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTI4ODMsNyArMjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgdHJ1ZSk7XG4rXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zMDM1LDcgKzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0cmV0dXJuIDA7XHRcdC8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi9cbiBcbiBcdFx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuLVx0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIHRydWUpO1xuK1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0yMzAyLDcgKzIzMDIsOSBAQCBzdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbiBcdFx0aW50IG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0LCBib29sIG1pZ3JhdGVfYWxsKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0fTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbkBAIC0yNDY0LDcgKzI0NjYsOSBAQCBzdGF0aWMgdm9pZCBkb19wYWdlc19zdGF0X2FycmF5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykoKnBhZ2VzKTtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHRcdH07XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCA3NDExNzAyYTM3ZjU4Li44ZWIyOWZiYTIwYWQ5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTkxMCw3ICs5MTAsMTUgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbitcdC8qXG4rXHQgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3RcbitcdCAqIGV4cGVjdGVkLlxuK1x0ICovXG4rXHRpZiAoZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19SRExPQ0sgXHUwMDI2XHUwMDI2IGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpXG4rXHRcdFdBUk5fT05DRSgxLCBcIndhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCIpO1xuK1x0cHJvY2Vzc19tbV93YWxrX2xvY2sodm1hLVx1MDAzZXZtX21tLCBmdy1cdTAwM2V3YWxrX2xvY2spO1xuK1x0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbitcbiBcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0IHx8IGFkZHIgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKSlcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDUzMzJjNTI5MDliZTEuLjBjYTI0YmNmOTU3MDMgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTI4NzEsNyArMjg3MSw5IEBAIHN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZndfZm9saW87XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuIFx0cHRlX3Qgc3dwX3B0ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjIzLjc3MzM4NDkyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzY1ODI0MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3VpdGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBhcmUgc29tZSByZWQgZmxhZ3MgaGVyZSB0aGF0IG1ha2UgdGhpcyBhIHBvdGVudGlhbGx5IGZlcnRpbGUgZ3JvdW5kIGZvciBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9rc20uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZXdhbGsuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhhdCdzIGEgd2lkZSByYW5nZSwgaW5kaWNhdGluZyBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5LiBBbHdheXMgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcsIGFzIGl0IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGUgY2hhbmdlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YCB3aXRoaW4gYHN0cnVjdCBmb2xpb193YWxrYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBzdHJhdGVneSBkdXJpbmcgcGFnZSB3YWxrcywgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHNvbWV0aGluZyBzeXprYWxsZXIgZXhjZWxzIGF0IGZpbmRpbmcuXG5cblRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9wYWdld2Fsay5jYCB3aXRoIHRoZSBgZm9saW9fd2Fsa19zdGFydGAgZnVuY3Rpb24gYW5kIHRoZSBhZGRlZCBjaGVja3Mgb24gYGZ3LVx1MDAzZXdhbGtfbG9ja2AgYXJlIHZlcnkgcmVsZXZhbnQuIFRoZSBgV0FSTl9PTkNFYCBzdWdnZXN0cyB0aGUgY29kZSBpcyAqZXhwZWN0aW5nKiBzcGVjaWZpYyBsb2NraW5nIGJlaGF2aW9yLCBhbmQgYW55IGRldmlhdGlvbiBjb3VsZCB0cmlnZ2VyIGVycm9ycy4gVGhlIGNoZWNrcyBvbiB0aGUgZW51bSBhbmQgdGhlIGNhbGxzIHRvIGBwcm9jZXNzX21tX3dhbGtfbG9ja2AgYW5kIGBwcm9jZXNzX3ZtYV93YWxrX2xvY2tgIGZ1cnRoZXIgcmVpbmZvcmNlIHRoaXMuXG5cbkFuZCBoZXJlJ3MgdGhlIHJlYWwga2lja2VyOiBgbW0va3NtLmNgIGhhcyBhICp2ZXJ5KiBjb25jZXJuaW5nIGNoYW5nZS4gVGhlIG1vZGlmaWNhdGlvbiBvZiBgYnJlYWtfa3NtX29wc2AgdG8gYSBtdXRhYmxlIGdsb2JhbCBzdHJ1Y3QgYW5kIHRoZSBkaXJlY3QgYXNzaWdubWVudCBvZiBgb3BzLVx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztgIGluc2lkZSBgYnJlYWtfa3NtKClgIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBkYXRhIHJhY2UhIFRoaXMgaXMgdGhlIGtpbmQgb2Ygc3VidGxlIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IGlzIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIGRldGVjdCBtYW51YWxseSBidXQgc3l6a2FsbGVyIHNob3VsZCBmaW5kIHF1aWNrbHkuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIHN0YXRpYywgY29uc3Qgb2JqZWN0IG1ha2VzIHRoaXMgZXZlbiBtb3JlIGNvbmNlcm5pbmcuIFRoaXMgaXMgYSB2ZXJ5IGNvbXBlbGxpbmcgcmVhc29uIHRvIHByaW9yaXRpemUgZnV6emluZyB0aGlzIHBhdGNoLiBUaGUgaW50cm9kdWN0aW9uIG9mIHBlci1WTUEgbG9ja2luZyBpbiBhIG51bWJlciBvZiBLU00gZnVuY3Rpb25zIChgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAsIGV0Yy4pIHN1cHBvcnRzIHRoYXQgdGhpcyBpcyBhIGNvbXBsZXggY29uY3VycmVuY3kgaXNzdWUuXG5cbkknbSBub3cgZ29pbmcgdG8gdXNlIGdyZXAgYW5kIHJlYWQtZmlsZSwgYnV0IG92ZXJhbGwsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIEtTTSwgdGhlIGFsdGVyZWQgbG9ja2luZywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBwb3RlbnRpYWwgZGF0YSByYWNlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyAqaGlnaGx5KiBzdXNwZWN0aWJsZSB0byBjb25jdXJyZW5jeSBidWdzIGFuZCBpcyBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcHJvYmFiaWxpdHkgb2YgZmluZGluZyBpbnRlcmVzdGluZyBidWdzIGlzIHF1aXRlIGhpZ2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo0MC41MzkyMTEyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTUyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyZWFrX2tzbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz02MTE9c3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9rc20uYy02MTUtXFxubW0va3NtLmM6NjE2OnN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9rc20uYy02MTctXFx0XFx0XFx0c3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9rc20uYy02NjItXFxubW0va3NtLmM6NjYzOnN0YXRpYyBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcXG5tbS9rc20uYzo2NjQ6XFx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXFxubW0va3NtLmMtNjY1LVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcbi0tXFxubW0va3NtLmMtNjgwLSAqXFxubW0va3NtLmM6NjgxOiAqIFdlIHVzZSBicmVha19rc20gdG8gYnJlYWsgQ09XIG9uIGEga3NtIHBhZ2UgYnkgdHJpZ2dlcmluZyB1bnNoYXJpbmcsXFxubW0va3NtLmMtNjgyLSAqIHN1Y2ggdGhhdCB0aGUga3NtIHBhZ2Ugd2lsbCBnZXQgcmVwbGFjZWQgYnkgYW4gZXhjbHVzaXZlIGFub255bW91cyBwYWdlLlxcbi0tXFxubW0va3NtLmMtNjkyLSAqL1xcbm1tL2tzbS5jOjY5MzpzdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2tzbS5jLTY5NC1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXFxuLS1cXG5tbS9rc20uYy02OTYtXFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbm1tL2tzbS5jOjY5NzpcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFxcdTAwMjZicmVha19rc21fb3BzO1xcbm1tL2tzbS5jLTY5OC1cXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcXG4tLVxcbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgyNi1cXG5tbS9rc20uYzo4Mjc6XFx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcXG5tbS9rc20uYy04MjgtXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5tbS9rc20uYz0xMjMzPXN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXFxuLS1cXG5tbS9rc20uYy0xMjYzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2tzbS5jOjEyNjQ6XFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19SRExPQ0spO1xcbm1tL2tzbS5jLTEyNjUtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2tzbS5jPTI4OTU9c3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0va3NtLmMtMjkwMi1cXHRpZiAodm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL2tzbS5jOjI5MDM6XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xcbm1tL2tzbS5jLTI5MDQtXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2tzbS5jPTMwMjg9aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va3NtLmMtMzA1NC1cXHRcXHRpZiAodm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL2tzbS5jOjMwNTU6XFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XFxubW0va3NtLmMtMzA1Ni1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0va3NtLmM9MzQzMj1zdGF0aWMgaW50IGtzbV9tZW1vcnlfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxcbi0tXFxubW0va3NtLmMtMzQ0Mi1cXHRcXHQgKiBpdCBpcyB1bnNhZmUgZm9yIHRoZW0gdG8gdG91Y2ggdGhlIHN0YWJsZSB0cmVlIGF0IHRoaXMgdGltZS5cXG5tbS9rc20uYzozNDQzOlxcdFxcdCAqIEJ1dCBicmVha19rc20oKSwgcm1hcCBsb29rdXBzIGFuZCBvdGhlciBlbnRyeSBwb2ludHNcXG5tbS9rc20uYy0zNDQ0LVxcdFxcdCAqIHdoaWNoIGRvIG5vdCBuZWVkIHRoZSBrc21fdGhyZWFkX211dGV4IGFyZSBhbGwgc2FmZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6NDAuNjU0MTY5MjA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NTM1NDUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHRoaXMgaXMgc2VyaW91cyEgV2UncmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaGVyZSDigJMgdGhlIHN0dWZmIHRoYXQgKnJlYWxseSogbWF0dGVycy4gTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIHRoYXQgKnJlYWNoYWJpbGl0eSogaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZhY3RvciBpbiBkZXRlcm1pbmluZyBpZiB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpdCBsb29rcyBwcm9taXNpbmc6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGluIGNydWNpYWwgZmlsZXM6IGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWlncmF0ZS5jYCwgYG1tL3JtYXAuY2AsIGFuZCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLlxuXG5Hb29kLCB0aGlzIGxvb2tzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKG9uIGFtZDY0KSwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIGNoYW5nZXMgaW4gS1NNIGFuZCBwYWdld2Fsa+KAlHRoaW5ncyBsaWtlIHRoZSBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCwgdGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiwgYW5kIGZvbGlvX3dhbGtfc3RhcnQgYXNzZXJ0aW9ucy4gVGhlc2UgYXJlIGNsYXNzaWMgYXJlYXMgd2hlcmUgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MgY2FuIGhpZGUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gQWJzb2x1dGVseSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyEgVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIG1hcmtlciBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgYWxsIHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIEtTTSwgcGFnZXdhbGssIGZvbGlvX3dhbGssIHVwcm9iZXMsIG1pZ3JhdGUsIGFuZCBodWdlX21lbW9yeT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNvIG9uIHRvIGRldGVybWluZSB0aGF0LiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gY3JlYXRpbmcgYSB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ0LjUzOTUyNTkxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM4MTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1NNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcyMz1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTcyNi1cXG5tbS9LY29uZmlnOjcyNzpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03MjgtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo0NC42Mzc5MTE5NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE0NzU1NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyBvZiBLU00gYW5kIFBhZ2V3YWxrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBrc20uY2AgYW5kIGBwYWdld2Fsay5jYC4gV2hlcmUncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkPyBSaWdodCwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgYnVpbGQgcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29tcGlsZXIgZmxhZ3MsIGFueSBzcGVjaWZpYyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgbW9kdWxlcyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgYG1tL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaWYgSSBjYW4gc3BvdCBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGVtcGxveWVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ4LjQ1MjY2OTM3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY1MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc20ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05MD1vYmotJChDT05GSUdfTU1VX05PVElGSUVSKSArPSBtbXVfbm90aWZpZXIub1xcbm1tL01ha2VmaWxlOjkxOm9iai0kKENPTkZJR19LU00pICs9IGtzbS5vXFxubW0vTWFrZWZpbGUtOTItb2JqLSQoQ09ORklHX1BBR0VfUE9JU09OSU5HKSArPSBwYWdlX3BvaXNvbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ4LjU1MjMyNjgwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzQ4ODM0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW52ZXN0aWdhdGlvbjpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVGFyZ2V0IE1vZHVsZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSBrZXkgYXJlYXMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnkgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3lzdGVtIGJlaGF2aW9yLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBwYWdld2Fsay5vYCwgYGh1Z2VfbWVtb3J5Lm9gLCBgbWlncmF0ZS5vYCwgYW5kIGB1cHJvYmVzLm9gLiBDb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgdGhlc2UgbW9kdWxlcyB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBmaW5kaW5ncyByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBsYXJnZSBwYWdlIGhhbmRsaW5nLCBsaXZlIG1pZ3JhdGlvbiBjb21wbGV4aXRpZXMsIGFuZCB0aGUgcG9zc2libGUgb3ZlcmhlYWQgb2YgdXNlci1zcGFjZSBwcm9iaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6NTAuNzI3MjEzMTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NzczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBhZ2V3YWxrfGh1Z2VfbWVtb3J5fG1pZ3JhdGV8dXByb2JlcylcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS0zOC1cXHRcXHRcXHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxcXFxubW0vTWFrZWZpbGU6Mzk6XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZS00MC1cXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG4tLVxcbm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG5tbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDI6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo1MC44NDI5OTU3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MDk0NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFVwcm9iZSBEZWJ1Z2dpbmcgLSBNYWtlZmlsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyB1cHJvYmVzIHRoaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHVwcm9iZXMub2Agb2JqZWN0IGZpbGUgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGNvbnZlbnRpb24gdG8gZmluZCByZWxhdGVkIG9iamVjdCBmaWxlcyBkZWZpbmVkIGluIHRoYXQgZGlyZWN0b3J5J3MgTWFrZWZpbGUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGBrZXJuZWwvZXZlbnRzYCBjb250ZXh0LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIGtlcm5lbCBjb21wb25lbnQgYnVpbGQgc3RydWN0dXJlcyBhbmQgb3JnYW5pemF0aW9uLiBIb3BlZnVsbHksIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgaW5jbHVkZSBvciBkZWZpbml0aW9uIHRoZXJlLCBhbmQgSSBjYW4gcXVpY2tseSB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjUzLjAwMzk0NjgyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MjE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXByb2Jlc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZXZlbnRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfSFdfQlJFQUtQT0lOVF9LVU5JVF9URVNUKSArPSBod19icmVha3BvaW50X3Rlc3Qub1xcbmtlcm5lbC9ldmVudHMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVVBST0JFUykgKz0gdXByb2Jlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjUzLjA2MTU3NDg0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODE1Mzk5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBMb2NraW5nIElzc3VlcyB3aXRoIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHByZWNpc2VseSB3aGF0IGBQR1dBTEtfVk1BX1JETE9DS19WRVJJRllgIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIHRoYXQgbWFjcm8g4oCTIHdoYXQgYXJlIGl0cyBpbnRlbmRlZCBjaGVja3MsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIGl0J3MgZGVzaWduZWQgdG8gZmxhZz8gSXMgaXQgcmVsYXRlZCB0byByZWFkLW9ubHkgYWNjZXNzIGluIHNvbWUgd2F5PyBPciBpcyBpdCBhIG1vcmUgZ2VuZXJhbCB2YWxpZGF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlICpwdXJwb3NlKiBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYXNzZXNzIGFueSBwb3RlbnRpYWwgcHJvYmxlbS5cblxuTmV4dCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXItVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBsb2NrIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIGludGVyZmVyaW5nIHdpdGggb3IgdW5leHBlY3RlZGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHZlcmlmaWNhdGlvbiBjaGVja3MgcGVyZm9ybWVkIGJ5IHRoaXMgbWFjcm8/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsb2NrIHNldHRpbmdzIHRoYXQgYXJlIGhhcHBlbmluZyBvbiB0aG9zZSBWTUFzPyBBcmUgdGhlIGFzc3VtcHRpb25zIG9mIHRoZSBsb2NrIHN5c3RlbSBiZWluZyBicm9rZW4gc29tZWhvdz8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgYFBHV0FMS2AgaXMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIHdhbGtzLCB3aGljaCBhcmUgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBpbmNvbnNpc3RlbmNpZXMgaGVyZSBjYW4gaGF2ZSBzZXZlcmUgcmFtaWZpY2F0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoaXMgbWFjcm8gY2FuIGhlbHAgbWUsIG9yIGlmIGl0IG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTowMS44NzY5NzkzOTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTUyMDI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xMjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI1NS1cXHQuaHVnZXRsYl9lbnRyeVxcdFxcdD0gc21hcHNfaHVnZXRsYl9yYW5nZSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI1NjpcXHQud2Fsa19sb2NrXFx0XFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNTctfTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMjU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2Mi1cXHQucHRlX2hvbGVcXHRcXHQ9IHNtYXBzX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoxMjYzOlxcdC53YWxrX2xvY2tcXHRcXHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2NC19O1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTM0MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MjAtXFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjM0MjE6XFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQyMi19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTEwPWVudW0gcGFnZV93YWxrX2xvY2sge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3LVxcdC8qIHZtYSBpcyBleHBlY3RlZCB0byBiZSBhbHJlYWR5IHJlYWQtbG9ja2VkIGR1cmluZyB0aGUgd2FsayAqL1xcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxODpcXHRQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgPSAzLFxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOS19O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yNDMtXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkpIHtcXG5tbS9kYW1vbi92YWRkci5jOjI0NDpcXHRcXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcXG5tbS9kYW1vbi92YWRkci5jLTI0NS1cXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4tLVxcbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgyNi1cXG5tbS9rc20uYzo4Mjc6XFx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcXG5tbS9rc20uYy04MjgtXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgzOC1cXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9rc20uYzo4Mzk6XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxubW0va3NtLmMtODQwLVxcdH07XFxuLS1cXG5tbS9tYWR2aXNlLmM9Nzk4PXN0YXRpYyBpbmxpbmUgZW51bSBwYWdlX3dhbGtfbG9jayBnZXRfd2Fsa19sb2NrKGVudW0gbWFkdmlzZV9sb2NrX21vZGUgbW9kZSlcXG4tLVxcbm1tL21hZHZpc2UuYy04MDEtXFx0Y2FzZSBNQURWSVNFX1ZNQV9SRUFEX0xPQ0s6XFxubW0vbWFkdmlzZS5jOjgwMjpcXHRcXHRyZXR1cm4gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZO1xcbm1tL21hZHZpc2UuYy04MDMtXFx0Y2FzZSBNQURWSVNFX01NQVBfUkVBRF9MT0NLOlxcbi0tXFxubW0vcGFnZXdhbGsuYz00MzU9c3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfbW1fd2Fsa19sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vcGFnZXdhbGsuYy00MzktXFx0XFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcXG5tbS9wYWdld2Fsay5jOjQ0MDpcXHRlbHNlIGlmICh3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxcbm1tL3BhZ2V3YWxrLmMtNDQxLVxcdFxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XFxuLS1cXG5tbS9wYWdld2Fsay5jPTQ0ND1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcGFnZXdhbGsuYy00NTMtXFx0XFx0YnJlYWs7XFxubW0vcGFnZXdhbGsuYzo0NTQ6XFx0Y2FzZSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk6XFxubW0vcGFnZXdhbGsuYy00NTUtXFx0XFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9ODk5PXN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTkxNi1cXHQgKi9cXG5tbS9wYWdld2Fsay5jOjkxNzpcXHRpZiAoZnctXFx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFxcdTAwMjZcXHUwMDI2IGZ3LVxcdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxcbm1tL3BhZ2V3YWxrLmMtOTE4LVxcdFxcdFdBUk5fT05DRSgxLCBcXFwid2Fsa19sb2NrIGlzIG5vdCBleHBlY3RlZCFcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTowNC4yNzIxODg4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgxNTEyNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBQZXItVk1BIExvY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjb250cm9sbGluZyB0aGUgcGVyLVZNQSBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgUEVSX1ZNQV9MT0NLYC4gVGhhdCdzIHRoZSBsaWtlbHkga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gZG9lcyBhbmQgaG93IGl0J3MgZGVmaW5lZCwgYXMgaXQgd2lsbCByZXZlYWwgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhlIGtlcm5lbCB3aWxsIGVtcGxveSBwZXItVk1BIGxvY2tpbmcuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZmVhdHVyZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA3NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjA2Ljc1MzcwNTE2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMjIxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTItXFx0Ym9vbCBcXFwiU3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MDYuODU2OTMyMDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NTY1MDM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBUaW1lOiBDaGVja2luZyBgUEVSX1ZNQV9MT0NLYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBQRVJfVk1BX0xPQ0tgIGFjcm9zcyB0aGUgKmVudGlyZSoga2VybmVsLlwiIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IHRoaXMgbG9jayBpcyBiZWluZyB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgc2VhcmNoIGFuZCBhbmFseXNpcy4gTm8gc3VyZmFjZS1sZXZlbCBza2ltbWluZyBoZXJlOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ20gZ29pbmcgdG8gdHJhY2sgaXRzIHVzZSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHN1YnN5c3RlbXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIHdoZXJlIGl0J3MgY3JpdGljYWwsIHdoZXJlIGl0J3MgcG90ZW50aWFsbHkgcmVkdW5kYW50LCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2guIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToxNC41MTM0Mzk1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk4ODA2NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MTcuMTkzMzMyMjk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzI0Nzk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBQRVJfVk1BX0xPQ0tgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUEVSX1ZNQV9MT0NLYCBkZWZpbml0aW9uIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnZXQgdXAgdG8gc3BlZWQgd2l0aCBpdHMgbnVhbmNlcy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VwZXJmaWNpYWwgZ2xhbmNlLiBJJ2xsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgaXQgbWVhbnMgYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToxOC42MjU4MTcwMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjMyOTIwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSX1ZNQV9MT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MTguOTM4MTUzOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjY1MDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZmluZCBpdHMgZGVmaW5pdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGRlZmluZWQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBwdXJwb3NlLCBwYXJhbWV0ZXJzLCBhbmQgbGlrZWx5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLiBUaGlzIHNob3VsZCBwb2ludCBtZSB0byB0aGUgY29yZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgbWFuYWdlbWVudCBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBpdHMgY2FsbCBzaXRlcyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLCBsaWtlbHkgaW52b2x2aW5nIGxvY2tpbmcvdW5sb2NraW5nIHNjaGVtZXMgYW5kIHJlYWQvd3JpdGUgYWNjZXNzLiBUaGlzIGluaXRpYWwgc2VhcmNoIGlzIGVzc2VudGlhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgYmUgYSBmdW5jdGlvbiwgYnV0IGl0IGNvdWxkIGJlIGEgbWFjcm8sIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgd2F5LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjIxLjA2MDgwNTk5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NTQ5MDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM9NDAxPSAgICB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcXHUwMDI2c2VsZiwgaTogdXNpemUpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2MoKVxcdTAwM2Uge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTQ0MS0gICAgICAgIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM6NDQyOiAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy00NDMtICAgICAgICAgICAgbGV0IHZtYSA9IGNoZWNrX3ZtYShcXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM9MjU0PXN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTI2MS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM6MjYyOlxcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMjYzLVxcdGlmICghdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaD0yNjM9c3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY3LVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6MjY4OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaC0yNjktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuLS1cXG5tbS9rc20uYz03ODE9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2tzbS5jLTc4OC1cXG5tbS9rc20uYzo3ODk6XFx0dm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xcbm1tL2tzbS5jLTc5MC1cXHRpZiAoIXZtYSlcXG4tLVxcbm1tL21tYXBfbG9jay5jPTI5Mz1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXBfbG9jay5jLTM0My0vKipcXG5tbS9tbWFwX2xvY2suYzozNDQ6ICogdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgYW5kIHJlYWQtbG9jayBpdC5cXG5tbS9tbWFwX2xvY2suYy0zNDUtICogQG1tOiB0aGUgbW1fc3RydWN0IG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvIHNlYXJjaFxcbi0tXFxubW0vbW1hcF9sb2NrLmMtMzU3LSAqL1xcbm1tL21tYXBfbG9jay5jOjM1ODpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21tYXBfbG9jay5jLTM1OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE3MD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTcyLXtcXG5uZXQvaXB2NC90Y3AuYzoyMTczOlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xcbm5ldC9pcHY0L3RjcC5jLTIxNzQtXFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycz0xNzQ9ICAgIHB1YiBmbiBsb2NrX3ZtYV91bmRlcl9yY3UoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTIwMC0gICAgI1tpbmxpbmVdXFxucnVzdC9rZXJuZWwvbW0ucnM6MjAxOiAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG5ydXN0L2tlcm5lbC9tbS5yczoyMDI6ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xcbnJ1c3Qva2VybmVsL21tLnJzLTIwMy0gICAgICAgIC8vIGBtbV91c2Vyc2AuXFxucnVzdC9rZXJuZWwvbW0ucnM6MjA0OiAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDUtICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTIwOS0gICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG5ydXN0L2tlcm5lbC9tbS5yczoyMTA6ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG5ydXN0L2tlcm5lbC9tbS5ycy0yMTEtICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToyMy42MDYzMTU1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI3ODQyNDg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcywgZ2l2ZW4gdGhlIGxpa2VseSBpbXBhY3Qgb24gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfS1NNYCBpcyB0aGUgbWFpbiBvbmUgZm9yIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nLCBhbmQgSSdsbCBhbHNvIGNoZWNrIGZvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgYENPTkZJR19VUFJPQkVTYCBhcyB0aGV5IHNlZW0gcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgY29tcG9uZW50cy5cblxuTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGltcGFjdGVkIGZ1bmN0aW9ucyB0byBnZXQgYW4gaWRlYSBvZiB0aGUgc2NvcGUuIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiBgbW0va3NtLmNgIGxpa2UgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgLCBgYnJlYWtfa3NtYCwgYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYW5kIGBrc21fbWFkdmlzZWAuICBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBmb2xpb193YWxrX3N0YXJ0YCBpbiBgbW0vcGFnZXdhbGsuY2AsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gIGFuZCBgZG9fcGFnZXNfc3RhdF9hcnJheWAgaW4gYG1tL21pZ3JhdGUuY2AsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgIGluIGBtbS9ybWFwLmNgLCBhbmQgZmluYWxseSBgdXByb2JlX3dyaXRlYCBpbiBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLlxuXG5Ob3csIEknbGwgaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgYmVzdCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgbG9naWMgb3IgZW50cnlwb2ludHMgYW5kIGF2b2lkIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgZm9saW9fd2Fsa19zdGFydGAgaXMgaW50ZXJlc3RpbmcgYXMgaXQncyBhIHBhZ2V3YWxrIGhlbHBlciB3aXRoIG5ldyBhc3NlcnRpb25zIGFuZCBsb2NraW5nIGNoZWNrcy4gYGJyZWFrX2tzbWAgaXMgYW5vdGhlciBvbmUsIGdpdmVuIHRoZSBsb2NraW5nIGNoYW5nZXMuIFRoZSBLU00gaGVscGVycyAoYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgKSwgYGtzbV9tYWR2aXNlYCwgYHNwbGl0X2h1Z2VfcGFnZXNfcGlkYCwgYXJlIGFsbCBsaWtlbHkgY2FuZGlkYXRlcy4gRmluYWxseSwgSSdsbCBpbmNsdWRlIHRoZXNlIG90aGVyczogYGFkZF9mb2xpb19mb3JfbWlncmF0aW9uYCwgYGRvX3BhZ2VzX3N0YXRfYXJyYXlgLCBgbWFrZV9kZXZpY2VfZXhjbHVzaXZlYCwgYW5kIGB1cHJvYmVfd3JpdGVgLlxuXG5MZXQncyBjaGVjayB3aGV0aGVyIHN0YXRpYyBvciBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgcHJlZmVyYWJsZSBoZXJlLiBJdCBzZWVtcyB0aGF0IG1vc3Qgc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHJlc29sdmVkIGJ1dCBpdCBtYXkgYmUgd29ydGggY2hlY2tpbmcgaWYgd2VsbC1rbm93biBlbnRyeXBvaW50cyBhcmUgYmV0dGVyIHRhcmdldHMuIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmUgd2VsbC1rbm93biBlbnRyeXBvaW50cy4gYGtzbV9tYWR2aXNlYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLiBgZm9saW9fd2Fsa19zdGFydGAgaXMgZXhwb3J0ZWQvY2FsbGFibGUgYWNyb3NzIGBtbWAuIGBicmVha19rc21gIGlzIGNhbGxlZCBpbiBga3NtLmNgLiBgc3BsaXRfaHVnZV9wYWdlc19waWRgIGlzIGluIGBtbS9odWdlX21lbW9yeS5jYC5cblxuVGhlbiwgSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnM6IGBLU01gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUlHUkFUSU9OYCwgYW5kIGBVUFJPQkVTYC5cblxuRmluYWxseSwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVyczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuKiAgIGBSZWFzb25pbmdgOiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IHBhdGNoIHNlcmllcyBiZWNhdXNlIGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBjaGFuZ2luZyBwYWdlIHRhYmxlIHdhbGtpbmcsIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCBhbmQgdXByb2Jlcy4gSXQgaW50cm9kdWNlcyBsb2NraW5nIHNlbWFudGljcyBjaGFuZ2VzIGFuZCBkZWZlbnNpdmUgYXNzZXJ0aW9ucy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImZvbGlvX3dhbGtfc3RhcnRcIiwgXCJicmVha19rc21cIiwgXCJmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkXCIsIFwiZ2V0X21lcmdlYWJsZV9wYWdlXCIsIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIiwgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2VcIiwgXCJrc21fbWFkdmlzZVwiLCBcImJyZWFrX2Nvd1wiLCBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCJdYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJLU01cIiwgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLCBcIk1JR1JBVElPTlwiLCBcIlVQUk9CRVNcIl1gLlxuXG5JJ2xsIHNhbml0eSBjaGVjayB0aGUgYXBwcm9hY2ggYWdhaW5zdCB0aGUgc3RhdGVkIGdvYWxzIGZvciBwYXRjaCBmdXp6aW5nOiByZWFjaGFiaWxpdHksIGZvY3VzaW5nIG9uIG5ldy9tb2RpZmllZCBhc3NlcnRpb25zLCBhbmQgYXZvaWRpbmcgdGhlIG92ZXJseSBnZW5lcmljLiBUaGlzIHNlZW1zIGdvb2QuIFRpbWUgdG8gZXhlY3V0ZSB0aGlzIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc5LCJPdXRwdXRUb2tlbnMiOjI1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzQuODg0NzQzMDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODg4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIlVQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJicmVha19rc21cIixcbiAgICBcImZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRcIixcbiAgICBcImdldF9tZXJnZWFibGVfcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZVwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImJyZWFrX2Nvd1wiLFxuICAgIFwic3BsaXRfaHVnZV9wYWdlc19waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1NNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJVUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiYnJlYWtfa3NtXCIsXG4gICAgXCJmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkXCIsXG4gICAgXCJnZXRfbWVyZ2VhYmxlX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2VcIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJicmVha19jb3dcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTozNS4wNDQ2Mzk2MjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzYwNzA3NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzUuMDQ1MTQ3NDI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY3NjAxOTQwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzI2NWViMGQ3Yjc1NWY2NjhjYzViMGVjYzM0ZjA1N2E2Y2E3NTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDEyLDcgKzQxMiw5IEBAIF9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IHJjO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuaW5kZXggYjQxZDcyNjVjMDFiYy4uNDU1NDI4ZWFmMWZjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG5AQCAtMTgzLDggKzE4Myw4IEBAIHN0cnVjdCBmb2xpb193YWxrIHtcbiBcdFx0cG1kX3QgcG1kO1xuIFx0fTtcbiBcdC8qIHByaXZhdGUgKi9cbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3BpbmxvY2tfdCAqcHRsO1xuK1x0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xuKysrIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbkBAIC01MDcsNyArNTA3LDkgQEAgaW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJldCwgcmVmX2N0cl91cGRhdGVkID0gMDtcbiBcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFO1xuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDgxMCw3ICs0ODEwLDkgQEAgc3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxuIFx0ICovXG4gXHRmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciBcdTAwM2MgdmFkZHJfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li4xZDg1NzY5ZWM3ZGJlIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtNjYwLDE2ICs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5cbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xuK3N0YXRpYyBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbiBcdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxuIFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XG4tXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbi1cdC53YWxrX2xvY2sgPSBQR1dBTEtfV1JMT0NLLFxuLX07XG4tXG4gLypcbiAgKiBUaG91Z2ggaXQncyB2ZXJ5IHRlbXB0aW5nIHRvIHVubWVyZ2Ugcm1hcF9pdGVtcyBmcm9tIHN0YWJsZSB0cmVlIHJhdGhlclxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yXG5AQCAtNjk2LDExICs2OTEsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fbG9ja192bWFfb3BzID0ge1xuICAqIHByb3RlY3Rpb24ga2V5cyBoZXJlIGFueXdheS5cbiAgKi9cbiBzdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBsb2NrX3ZtYSlcbitcdFx0dW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xuLVx0XHRcdFx0XHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4rXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4rXHRvcHMtXHUwMDNld2Fsa19sb2NrID0gd2Fsa19sb2NrO1xuIFxuIFx0ZG8ge1xuIFx0XHRpbnQga3NtX3BhZ2U7XG5AQCAtNzcwLDE1ICs3NjUsMzYgQEAgc3RhdGljIGJvb2wgdm1hX2tzbV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIGtzbV9jb21wYXRpYmxlKHZtYS1cdTAwM2V2bV9maWxlLCB2bWEtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbisvKipcbisgKiBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKCkgLSBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIHdoaWNoIGlzXG4rICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKVxuKyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLlxuKyAqXG4rICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuXG4rICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3dcbisgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC5cbisgKlxuKyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSxcbisgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuXG4rICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuXG4rICovXG4rc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuIFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbitcbitcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcbitcdGlmICghdm1hKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKSB7XG4rXHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTgwNCwxMSArODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0ICovXG4gXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSAwO1xuIFxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTtcbi1cdGlmICh2bWEpXG4tXHRcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIGZhbHNlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuQEAgLTgxNywxMyArODM0LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuK1x0fTtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4rXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBhZGRyKTtcbiBcdGlmICghdm1hKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG4gXHRpZiAoZm9saW8pIHtcbkBAIC04MzQsMTIgKzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0XHR9XG4gXHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuIFx0fVxuLW91dDpcbitcbiBcdGlmIChwYWdlKSB7XG4gXHRcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpO1xuIFx0XHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcbiBcdH1cbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRyZXR1cm4gcGFnZTtcbiB9XG4gXG5AQCAtMTI0Myw3ICsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbiBcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4gXHRcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtXHUwMDNlYW5vbl92bWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIFBHV0FMS19SRExPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG5AQCAtMTU3MSwxNCArMTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0aWYgKGtzbV91c2VfemVyb19wYWdlcyBcdTAwMjZcdTAwMjYgKHJtYXBfaXRlbS1cdTAwM2VvbGRjaGVja3N1bSA9PSB6ZXJvX2NoZWNrc3VtKSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbitcdFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0XHRpZiAodm1hKSB7XG4gXHRcdFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSxcbiBcdFx0XHRcdFx0WkVST19QQUdFKHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKSk7XG4gXHRcdFx0dHJhY2Vfa3NtX21lcmdlX29uZV9wYWdlKFxuIFx0XHRcdFx0cGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKSksXG4gXHRcdFx0XHRybWFwX2l0ZW0sIG1tLCBlcnIpO1xuK1x0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG9cbkBAIC0xNTg2LDcgKzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdH1cbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MDUsMTAgKzE2MjIsOSBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4rXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X3RyYWNlO1xuIFxuIFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSwga3BhZ2UpO1xuIFx0aWYgKGVycilcbkBAIC0xNjI4LDcgKzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXG4gXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0Z2V0X2Fub25fdm1hKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4gb3V0OlxuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHR2bWFfZW5kX3JlYWQodm1hKTtcbitvdXRfdHJhY2U6XG4gXHR0cmFjZV9rc21fbWVyZ2Vfd2l0aF9rc21fcGFnZShrcGFnZSwgcGFnZV90b19wZm4oa3BhZ2UgPyBrcGFnZSA6IHBhZ2UpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMjg4Myw3ICsyOTAwLDcgQEAgc3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbi1cdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCB0cnVlKTtcbitcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBQR1dBTEtfV1JMT0NLKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTMwMzUsNyArMzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHRyZXR1cm4gMDtcdFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XG4rXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGEzNjlkMGM5NWMzODYuLjJlMDc4YzFlMWI5YTYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTIzMDIsNyArMjMwMiw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxuIFx0XHRpbnQgbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsIGJvb2wgbWlncmF0ZV9hbGwpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcdGludCBlcnIgPSAtRUZBVUxUO1xuQEAgLTI0NjQsNyArMjQ2Niw5IEBAIHN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpO1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdFx0fTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0aW50IGVyciA9IC1FRkFVTFQ7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDc0MTE3MDJhMzdmNTguLjhlYjI5ZmJhMjBhZDkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtOTEwLDcgKzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIFx0cGdkX3QgKnBnZHA7XG4gXHRwNGRfdCAqcDRkcDtcbiBcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuK1x0LypcbitcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxuK1x0ICogZXhwZWN0ZWQuXG4rXHQgKi9cbitcdGlmIChmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcdTAwMjZcdTAwMjYgZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbitcdFx0V0FSTl9PTkNFKDEsIFwid2Fsa19sb2NrIGlzIG5vdCBleHBlY3RlZCFcXG5cIik7XG4rXHRwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtXHUwMDNldm1fbW0sIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4rXHRwcm9jZXNzX3ZtYV93YWxrX2xvY2sodm1hLCBmdy1cdTAwM2V3YWxrX2xvY2spO1xuK1xuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggNTMzMmM1MjkwOWJlMS4uMGNhMjRiY2Y5NTcwMyAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMjg3MSw3ICsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpmd19mb2xpbztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0fTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3dwX2VudHJ5X3QgZW50cnk7XG4gXHRwdGVfdCBzd3BfcHRlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzUuMDQ1MTQ4NDk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3NDY1NzI5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgU2FmZXR5IEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gb3IgaWYgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWxhdGVkIHRvb2xzIGFyZSBzdWZmaWNpZW50LlxuXG5GaXJzdCwgSSdtIHNlZWluZyBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2Ugd2Fsa2luZywgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBmb2xpb193YWxrYCwgYG1tX3dhbGtfb3BzYCwgYW5kIEtTTS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbXBvcnRhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIEkgbm90ZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6XG5cbjEuICBJbiBgaW5jbHVkZS9saW51eC9wYWdld2Fsay5oYCwgdGhlIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgaGFzIGhhZCBgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7YCByZW1vdmVkIGFuZCBub3cgaW5jbHVkZXMgYGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrO2AuIFRoYXQncyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGxvY2sgdHlwZSBpcyBub3cgZXhwbGljaXRseSBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHdhbGsuXG4yLiAgSSBzZWUgbXVsdGlwbGUgY2FsbCBzaXRlcyAod2l0aGluIGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBrZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vcm1hcC5jYCkgd2hlcmUgYHN0cnVjdCBmb2xpb193YWxrIGZ3YCBpcyBub3cgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGAud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DS2AgcmF0aGVyIHRoYW4gc2ltcGx5IGJlaW5nIGRlY2xhcmVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIGxvY2sgdHlwZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi5cbjMuICBUaGUgY2hhbmdlcyBpbiBgbW0va3NtLmNgIGFyZSBwYXJ0aWN1bGFybHkgbm90ZXdvcnRoeS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgYnJlYWtfa3NtX29wc2AgKHdoaWNoIGlzIG5vdyBub3QgYGNvbnN0YCkgYW5kIGBicmVha19rc21gIChub3cgdGFraW5nIGBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9ja2ApLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgcGVyLVZNQSBsb2NrcyAodXNpbmcgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBhbmQgYHZtYV9lbmRfcmVhZGApIGluc3RlYWQgb2YgdGhlIGJyb2FkZXIgYG1tYXBfcmVhZF9sb2NrKG1tKWAgZm9yIEtTTSBvcGVyYXRpb25zLiBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCBpcyBub3cgdXRpbGl6ZWQgaW4gdGhlIHdhbGsuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmluZW1lbnQgb2YgbG9ja2luZyBncmFudWxhcml0eSBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZWQgY29uY3VycmVuY3kuIEluIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgc3RydWN0IGZvbGlvX3dhbGsgZndgIGlzIGluaXRpYWxpemVkIHdpdGggYC53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRllgLlxuNC4gIEluIGBtbS9wYWdld2Fsay5jYCwgYGZvbGlvX3dhbGtfc3RhcnRgIG5vdyBjaGVja3MgYGZ3LVx1MDAzZXdhbGtfbG9ja2AgYW5kIGNhbGxzIGBwcm9jZXNzX21tX3dhbGtfbG9ja2AgYW5kIGBwcm9jZXNzX3ZtYV93YWxrX2xvY2tgIHdoaWNoIGlzIHZlcnkgaW1wb3J0YW50LlxuXG5NeSBrZXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgYHN0cnVjdCBmb2xpb193YWxrYCBpcyB1c2VkIGFuZCB3aGVyZSBgZndgIG1pZ2h0IHN0aWxsIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3Igd2hlcmUgdGhlcmUncyBhIHBvdGVudGlhbCByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWRpbmcgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0b29sIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYW5kIGBmb2xpb193YWxrX3N0YXJ0YCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0dGVybiBpcyBjb25zaXN0ZW50bHkgYXBwbGllZCB0aHJvdWdob3V0IHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYSB0aG9yb3VnaCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDYxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NDEuNzkxNzI2MzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4NjkxNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3dhbGtfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA5PV9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU3LVxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NTg6XFx0XFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NTktXFx0XFx0aWYgKCFmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XFx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2OC0gKlxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjk6ICogKHNlZSBmb2xpb193YWxrX3N0YXJ0KCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE3MT1zdHJ1Y3QgZm9saW9fd2FsayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxOTA6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTkxLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc0LVxcdC8qIFdhbGsgdGhlIHBhZ2UgdGFibGVzIGFnYWluLCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgdXBkYXRlLiAqL1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjU3NTpcXHRpZiAoZm9saW9fd2Fsa19zdGFydChcXHUwMDI2ZncsIHZtYSwgdmFkZHIsIDApKSB7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc2LVxcdFxcdGlmIChmdy5wYWdlID09IHBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ3NzU9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODI4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDgyOTpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDgzMC1cXHRcXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuLS1cXG5tbS9rc20uYy04NDUtXFxubW0va3NtLmM6ODQ2OlxcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XFxubW0va3NtLmMtODQ3LVxcdGlmIChmb2xpbykge1xcbi0tXFxubW0vbWlncmF0ZS5jPTIzMDE9c3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjMxNi1cXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV9taWdyYXRhYmxlKHZtYSkpIHtcXG5tbS9taWdyYXRlLmM6MjMxNzpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcXG5tbS9taWdyYXRlLmMtMjMxOC1cXHRcXHRpZiAoZm9saW8pIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjQ3OC1cXG5tbS9taWdyYXRlLmM6MjQ3OTpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcXG5tbS9taWdyYXRlLmMtMjQ4MC1cXHRcXHRpZiAoZm9saW8pIHtcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9Nzk4PWludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtODQ4LS8qKlxcbm1tL3BhZ2V3YWxrLmM6ODQ5OiAqIGZvbGlvX3dhbGtfc3RhcnQgLSB3YWxrIHRoZSBwYWdlIHRhYmxlcyB0byBhIGZvbGlvXFxubW0vcGFnZXdhbGsuYy04NTAtICogQGZ3OiBmaWxsZWQgd2l0aCBpbmZvcm1hdGlvbiBvbiBzdWNjZXNzLlxcbi0tXFxubW0vcGFnZXdhbGsuYy04OTgtICovXFxubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG5tbS9wYWdld2Fsay5jLTkwMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jPTI4Njg9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jLTI5MjctXFx0ICovXFxubW0vcm1hcC5jOjI5Mjg6XFx0ZndfZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG5tbS9ybWFwLmMtMjkyOS1cXHRpZiAoZndfZm9saW8gIT0gZm9saW8gfHwgZncucGFnZSAhPSBwYWdlIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjQ0LjA3MDQyNDMzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzczMDY3MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHN0cnVjdCBmb2xpb193YWxrYCBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiBgc3RydWN0IGZvbGlvX3dhbGtgLCBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBpdHMgdXNlIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBTbywgbGV0J3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSBpcyBpbiBvcmRlci4gTGV0IG1lIHNjYW4gZm9yIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgb2YgYHN0cnVjdCBmb2xpb193YWxrYC4gS25vd2luZyAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc3RydWN0IGlzIGRlZmluZWQgY291bGQgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZG9jdW1lbnRlZCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NDUuODQzNDkzNjc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDMxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmb2xpb193YWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9mYXVsdC5jPTQwOT1fX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQxNC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MTU6XFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDE2LVxcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XFx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTcxOnN0cnVjdCBmb2xpb193YWxrIHtcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTcyLVxcdC8qIHB1YmxpYyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE4OS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTkwOnN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDA1PXN0YXRpYyBpbnQgX191cHJvYmVfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NDA2OlxcdFxcdHN0cnVjdCBmb2xpb193YWxrICpmdywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00MDctXFx0XFx0dW5zaWduZWQgbG9uZyBpbnNuX3ZhZGRyLCB1cHJvYmVfb3Bjb2RlX3QgKmluc24sIGludCBuYnl0ZXMsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTA5LVxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NTEwOlxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUxMS1cXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ3NzU9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODEyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODEzOlxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDgxNC1cXHRcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgzNy1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbm1tL2tzbS5jOjgzODpcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9rc20uYy04MzktXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuLS1cXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMzA0LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbm1tL21pZ3JhdGUuYzoyMzA1OlxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbm1tL21pZ3JhdGUuYy0yMzA2LVxcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjQ2OC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9taWdyYXRlLmM6MjQ2OTpcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9taWdyYXRlLmMtMjQ3MC1cXHRcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTg5OC0gKi9cXG5tbS9wYWdld2Fsay5jOjg5OTpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbm1tL3BhZ2V3YWxrLmMtOTAwLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmM9Mjg2OD1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmMtMjg3My1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9ybWFwLmM6Mjg3NDpcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9ybWFwLmMtMjg3NS1cXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjQ4LjIzNTUzMDUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2OTQ0NDA4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgY2hhbmdlcy5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBtbS9rc20uY2AgYW5kIGBtbS9wYWdld2Fsay5jYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYG1tL2tzbS5jYCBhbmQgYG1tL3BhZ2V3YWxrLmNgIOKAkyBnb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgYmlnIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IHRoZXkndmUgYmVlbiB1cCB0byBoZXJlLiBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBmb2xpb193YWxrX3N0YXJ0YCBhbmQgYGZvbGlvX3dhbGtfZW5kYCBhcmUgaW1wbGVtZW50ZWQuIFRob3NlIGFyZSBrZXkgcHJpbWl0aXZlcyBpbiBhbnkgcGFnZS13YWxraW5nIGltcGxlbWVudGF0aW9uLCBhbmQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVyYWN0aW9uIGlzIGVzc2VudGlhbC4gVGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NTUuOTI5OTc1NTY2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZXdhbGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gOTAxOlxcdFxcdFxcdGZvbGlvX3dhbGtfZmxhZ3NfdCBmbGFncylcXG4gOTAyOlxcdHtcXG4gOTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW50cnlfc2l6ZTtcXG4gOTA0OlxcdFxcdGJvb2wgemVyb3BhZ2UgPSBmYWxzZTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA5MDY6XFx0XFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gOTA3OlxcdFxcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIDkwODpcXHRcXHRwdGVfdCAqcHRlcCwgcHRlO1xcbiA5MDk6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA5MTA6XFx0XFx0cGdkX3QgKnBnZHA7XFxuIDkxMTpcXHRcXHRwNGRfdCAqcDRkcDtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0LypcXG4gOTE0OlxcdFxcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxcbiA5MTU6XFx0XFx0ICogZXhwZWN0ZWQuXFxuIDkxNjpcXHRcXHQgKi9cXG4gOTE3OlxcdFxcdGlmIChmdy1cXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19SRExPQ0sgXFx1MDAyNlxcdTAwMjYgZnctXFx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpXFxuIDkxODpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIndhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxcXG5cXFwiKTtcXG4gOTE5OlxcdFxcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cXHUwMDNldm1fbW0sIGZ3LVxcdTAwM2V3YWxrX2xvY2spO1xcbiA5MjA6XFx0XFx0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXFx1MDAzZXdhbGtfbG9jayk7XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCBhZGRyIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fZW5kKSlcXG4gOTI1OlxcdFxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRwZ2RwID0gcGdkX29mZnNldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4gOTI4OlxcdFxcdGlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkcCkpXFxuIDkyOTpcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuIDkzMjpcXHRcXHRpZiAocDRkX25vbmVfb3JfY2xlYXJfYmFkKHA0ZHApKVxcbiA5MzM6XFx0XFx0XFx0Z290byBub3RfZm91bmQ7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbiA5MzY6XFx0XFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuIDkzNzpcXHRcXHRpZiAocHVkX25vbmUocHVkKSlcXG4gOTM4OlxcdFxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbiA5Mzk6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTKSBcXHUwMDI2XFx1MDAyNlxcbiA5NDA6XFx0XFx0ICAgICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSkge1xcbiA5NDE6XFx0XFx0XFx0cHRsID0gcHVkX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcHVkcCk7XFxuIDk0MjpcXHRcXHRcXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0ZW50cnlfc2l6ZSA9IFBVRF9TSVpFO1xcbiA5NDU6XFx0XFx0XFx0ZnctXFx1MDAzZWxldmVsID0gRldfTEVWRUxfUFVEO1xcbiA5NDY6XFx0XFx0XFx0ZnctXFx1MDAzZXB1ZHAgPSBwdWRwO1xcbiA5NDc6XFx0XFx0XFx0ZnctXFx1MDAzZXB1ZCA9IHB1ZDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0XFx0aWYgKHB1ZF9ub25lKHB1ZCkpIHtcXG4gOTUwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDk1MTpcXHRcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTUyOlxcdFxcdFxcdH0gZWxzZSBpZiAocHVkX3ByZXNlbnQocHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2xlYWYocHVkKSkge1xcbiA5NTM6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gOTU0OlxcdFxcdFxcdFxcdGdvdG8gcG1kX3RhYmxlO1xcbiA5NTU6XFx0XFx0XFx0fSBlbHNlIGlmIChwdWRfcHJlc2VudChwdWQpKSB7XFxuIDk1NjpcXHRcXHRcXHRcXHRwYWdlID0gdm1fbm9ybWFsX3BhZ2VfcHVkKHZtYSwgYWRkciwgcHVkKTtcXG4gOTU3OlxcdFxcdFxcdFxcdGlmIChwYWdlKVxcbiA5NTg6XFx0XFx0XFx0XFx0XFx0Z290byBmb3VuZDtcXG4gOTU5OlxcdFxcdFxcdH1cXG4gOTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDk2MTpcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTYyOlxcdFxcdH1cXG4gOTYzOlxcdFxcbiA5NjQ6XFx0cG1kX3RhYmxlOlxcbiA5NjU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpO1xcbiA5NjY6XFx0XFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIDk2NzpcXHRcXHRwbWQgPSBwbWRwX2dldF9sb2NrbGVzcyhwbWRwKTtcXG4gOTY4OlxcdFxcdGlmIChwbWRfbm9uZShwbWQpKVxcbiA5Njk6XFx0XFx0XFx0Z290byBub3RfZm91bmQ7XFxuIDk3MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFxcdTAwMjZcXHUwMDI2XFxuIDk3MTpcXHRcXHQgICAgKCFwbWRfcHJlc2VudChwbWQpIHx8IHBtZF9sZWFmKHBtZCkpKSB7XFxuIDk3MjpcXHRcXHRcXHRwdGwgPSBwbWRfbG9jayh2bWEtXFx1MDAzZXZtX21tLCBwbWRwKTtcXG4gOTczOlxcdFxcdFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbiA5NzQ6XFx0XFxuIDk3NTpcXHRcXHRcXHRlbnRyeV9zaXplID0gUE1EX1NJWkU7XFxuIDk3NjpcXHRcXHRcXHRmdy1cXHUwMDNlbGV2ZWwgPSBGV19MRVZFTF9QTUQ7XFxuIDk3NzpcXHRcXHRcXHRmdy1cXHUwMDNlcG1kcCA9IHBtZHA7XFxuIDk3ODpcXHRcXHRcXHRmdy1cXHUwMDNlcG1kID0gcG1kO1xcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjU1LjkzMTY3NzEwNloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU2MzY5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBgZm9saW9fd2Fsa19lbmRgKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZi4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGVzZSBmb2xpbyB3YWxrcyBjb25jbHVkZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGZvbGlvX3dhbGtfZW5kYCBpbiBgbW0vcGFnZXdhbGsuY2AuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSBmaW5hbCBzdGFnZSBvZiB0aGVzZSB3YWxrcywgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiBob3cgdGhleSB3b3JrLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBpcyBrZXkuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjU3Ljg4ODA0OTU4NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZXdhbGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDIwOlxcdFxcdFxcdFxcdHplcm9wYWdlID0gdHJ1ZTtcXG4xMDIxOlxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuMTAyMjpcXHRcXHRcXHR9XFxuMTAyMzpcXHRcXHR9XFxuMTAyNDpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7XFxuMTAyNTpcXHRub3RfZm91bmQ6XFxuMTAyNjpcXHRcXHR2bWFfcGd0YWJsZV93YWxrX2VuZCh2bWEpO1xcbjEwMjc6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTAyODpcXHRmb3VuZDpcXG4xMDI5OlxcdFxcdGlmICghemVyb3BhZ2UpXFxuMTAzMDpcXHRcXHRcXHQvKiBOb3RlOiBPZmZzZXQgZnJvbSB0aGUgbWFwcGVkIHBhZ2UsIG5vdCB0aGUgZm9saW8gc3RhcnQuICovXFxuMTAzMTpcXHRcXHRcXHRmdy1cXHUwMDNlcGFnZSA9IHBhZ2UgKyAoKGFkZHIgXFx1MDAyNiAoZW50cnlfc2l6ZSAtIDEpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMDMyOlxcdFxcdGVsc2VcXG4xMDMzOlxcdFxcdFxcdGZ3LVxcdTAwM2VwYWdlID0gTlVMTDtcXG4xMDM0OlxcdFxcdGZ3LVxcdTAwM2VwdGwgPSBwdGw7XFxuMTAzNTpcXHRcXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcXG4xMDM2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NTcuODg4MjU5MDk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1OTgxMTEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIEVuZCBvZiB0aGUgV2FsazogUmVmbGVjdGlvbnMgb24gYGZvbGlvX3dhbGtfZW5kYCoqXG5cbkFscmlnaHQsIHNvIGBmb2xpb193YWxrX2VuZGAuIFRpbWUgdG8gYnJlYWsgZG93biB3aGF0IHRoaXMgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0ZXZlciBJJ20gd29ya2luZyBvbi4gSXQncyB0aGUgY29uY2x1c2lvbiwgdGhlIGZpbmFsIGNoZWNrcG9pbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gKmF0KiBgZm9saW9fd2Fsa19lbmRgPyBIYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBiZWVuIHJlbGVhc2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciB1bmNsb3NlZCBoYW5kbGVzPyBIYXZlIEkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYWxsIHRoZSBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgaGF2ZSBjcm9wcGVkIHVwIGR1cmluZyB0aGUgd2FsayBpdHNlbGY/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIHBvc3QtY29uZGl0aW9ucywgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgc3lzdGVtP1xuXG5Ob3cgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBleHRlcm5hbCBpbXBsaWNhdGlvbnMuIEhvdyBtaWdodCBzdWJzZXF1ZW50IGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIGVuZHBvaW50PyBEb2VzIGl0IG5lYXRseSBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciB0aGUgbmV4dCBwaGFzZSwgb3IgaXMgdGhlcmUgd29yayB0byBkbz8gRGlkIGl0IHRyaWdnZXIgYW55IG5vdGlmaWNhdGlvbnMgb3IgbG9nZ2luZywgYW5kIGFyZSB0aGV5IHN1ZmZpY2llbnQgZm9yIHByb3BlciBkZWJ1Z2dpbmc/IFdhcyB0aGVyZSBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCBhbmQgaWYgc28sIGRpZCBpdCBvY2N1ciBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/XG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBkZXNpZ24gaXMgZXh0ZW5zaWJsZS4gQW0gSSBzZXR0aW5nIG15c2VsZiB1cCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cywgb3IgYW0gSSBwYWludGluZyBteXNlbGYgaW50byBhIGNvcm5lciB3aXRoIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IFdoYXQgd291bGQgSSBuZWVkIHRvIGNoYW5nZSBpZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBvciBwcm9jZXNzIGNoYW5nZXM/XG5cbkxldCBtZSByZXZpZXcgdGhlIGNvZGUgb25lIGxhc3QgdGltZS4uLiBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBhbGlnbnMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50LiBObyBsb29zZSBlbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTI6MDcuNDg2MzcyODgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY2MCwiRXJyb3IiOiJmaWxlIG1tL3BhZ2V3YWxrLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDEwMzcsIGl0IGhhcyBvbmx5IDEwMzYgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdld2Fsay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgbW0vcGFnZXdhbGsuYyBkb2VzIG5vdCBoYXZlIGxpbmUgMTAzNywgaXQgaGFzIG9ubHkgMTAzNiBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MjowNy40ODY1Mzk4MDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNzY3ODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgQ29kZSdzIEZvb3RwcmludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZvbGlvX3dhbGtfZW5kYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIFdoZXJlIGlzIGl0IGFjdHVhbGx5IGRlY2xhcmVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXTigJlzIGJlaW5nIHVzZWQgY29udGV4dHVhbGx5LiBMb2NhdGluZyB0aGUgZGVmaW5pdGlvbiBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUsIGFuZCBob3cgdGhlIHByb2dyYW0gZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBhbmQgd29yayBmcm9tIHRoZXJlLiBMZXTigJlzIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjA5LjIwNDIyMTczNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NjQ5MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb193YWxrX2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDg9dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA5Ol9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQxMC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjQtXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NjU6XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2Ni1cXHRcXHRpZiAocmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTU0PWVudW0gZm9saW9fd2Fsa19sZXZlbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYwLS8qKlxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjE6ICogc3RydWN0IGZvbGlvX3dhbGsgLSBmb2xpb193YWxrX3N0YXJ0KCkgLyBmb2xpb193YWxrX2VuZCgpIGRhdGFcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYyLSAqIEBwYWdlOlxcdGV4YWN0IGZvbGlvIHBhZ2UgcmVmZXJlbmNlZCAoaWYgYXBwbGljYWJsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xOTA9c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTMtXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5NDojZGVmaW5lIGZvbGlvX3dhbGtfZW5kKF9fZncsIF9fdm1hKSBkbyB7IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTk1LVxcdHNwaW5fdW5sb2NrKChfX2Z3KS1cXHUwMDNlcHRsKTsgXFxcXFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3Ny1cXHRcXHRcXHRyZXQgPSBfX3Vwcm9iZV93cml0ZSh2bWEsIFxcdTAwMjZmdywgZm9saW8sIGluc25fdmFkZHIsIGluc24sIG5ieXRlcywgaXNfcmVnaXN0ZXIpO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjU3ODpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc5LVxcdH1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NTctXFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4NTg6XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg1OS1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4MS1uZXh0Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4MjpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vaHVnZV9tZW1vcnkuYy00ODgzLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuLS1cXG5tbS9rc20uYy04NTItXFx0XFx0fVxcbm1tL2tzbS5jOjg1MzpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0va3NtLmMtODU0LVxcdH1cXG4tLVxcbm1tL21pZ3JhdGUuYz0yMzAxPXN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIzMjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWlncmF0ZV9hbGwpO1xcbm1tL21pZ3JhdGUuYzoyMzIxOlxcdFxcdFxcdGZvbGlvX3dhbGtfZW5kKFxcdTAwMjZmdywgdm1hKTtcXG5tbS9taWdyYXRlLmMtMjMyMi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNDg2LVxcdFxcdFxcdFxcdGVyciA9IGZvbGlvX25pZChmb2xpbyk7XFxubW0vbWlncmF0ZS5jOjI0ODc6XFx0XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbm1tL21pZ3JhdGUuYy0yNDg4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTg1Ni0gKiByZXR1cm4gdGhlIGZvbGlvLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IHJlZmVyZW5jZWQgYnlcXG5tbS9wYWdld2Fsay5jOjg1NzogKiBAYWRkciBjYW5ub3QgY2hhbmdlIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgd2FzIGNhbGxlZC5cXG5tbS9wYWdld2Fsay5jLTg1OC0gKlxcbi0tXFxubW0vcGFnZXdhbGsuYy04NjctICogT24gc3VjY2VzcywgQGZ3IGlzIGZpbGxlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZvbGlvIHdoaWxlIHRoZSBQVExcXG5tbS9wYWdld2Fsay5jOjg2ODogKiBpcyBzdGlsbCBoZWxkIGFuZCBmb2xpb193YWxrX2VuZCgpIG11c3QgYmUgY2FsbGVkIHRvIGNsZWFuIHVwLFxcbm1tL3BhZ2V3YWxrLmMtODY5LSAqIHJlbGVhc2luZyBhbnkgaGVsZCBsb2Nrcy4gVGhlIHJldHVybmVkIGZvbGlvIG11c3QgKm5vdCogYmUgdXNlZCBhZnRlciB0aGVcXG5tbS9wYWdld2Fsay5jOjg3MDogKiBjYWxsIHRvIGZvbGlvX3dhbGtfZW5kKCksIHVubGVzcyBhIHNob3J0LXRlcm0gZm9saW8gcmVmZXJlbmNlIGlzIHRha2VuIGJlZm9yZVxcbm1tL3BhZ2V3YWxrLmMtODcxLSAqIHRoYXQgY2FsbC5cXG4tLVxcbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3JtYXAuYy0yOTMxLVxcdFxcdGlmIChmd19mb2xpbylcXG5tbS9ybWFwLmM6MjkzMjpcXHRcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vcm1hcC5jLTI5MzMtXFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuLS1cXG5tbS9ybWFwLmMtMjk1OC1cXG5tbS9ybWFwLmM6Mjk1OTpcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vcm1hcC5jLTI5NjAtXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjExLjU4MDcyMDMxMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjY1MjM5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWdlIFdhbGsgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHBhZ2Ugd2Fsa3MgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgbG93LWxldmVsIGRldGFpbHMuIFRoZSBgaW5jbHVkZS9saW51eC9wYWdld2Fsay5oYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lIDE5NC4gSXQncyB1c3VhbGx5IGFyb3VuZCB0aGF0IHBvaW50IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdGhlbXNlbHZlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgcGFnZSB3YWxrIGNvbnRleHQgb3IgdGhlIGRlZmluaXRpb25zIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWdlIHRhYmxlIGxldmVscy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZXRoaW5nIGxpa2UgYSBgcGdkX3RgLCBgcHVkX3RgLCBgcG1kX3RgLCBvciBgcHRlX3RgIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgdGhlIGl0ZXJhdG9ycyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmcgdGhlIG5leHQgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBwbGF5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGludG8gdW5kZXJzdGFuZGluZyBvciBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MjoxNC4yNDU5NjI4MjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHR1bmlvbiB7XFxuIDE4MTpcXHRcXHRcXHRwdGVfdCBwdGU7XFxuIDE4MjpcXHRcXHRcXHRwdWRfdCBwdWQ7XFxuIDE4MzpcXHRcXHRcXHRwbWRfdCBwbWQ7XFxuIDE4NDpcXHRcXHR9O1xcbiAxODU6XFx0XFx0LyogcHJpdmF0ZSAqL1xcbiAxODY6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAxODc6XFx0XFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XFxuIDE4ODpcXHR9O1xcbiAxODk6XFx0XFxuIDE5MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbiAxOTE6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMTkyOlxcdFxcdFxcdGZvbGlvX3dhbGtfZmxhZ3NfdCBmbGFncyk7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdCNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcXFxcbiAxOTU6XFx0XFx0c3Bpbl91bmxvY2soKF9fZncpLVxcdTAwM2VwdGwpOyBcXFxcXFxuIDE5NjpcXHRcXHRpZiAobGlrZWx5KChfX2Z3KS1cXHUwMDNlbGV2ZWwgPT0gRldfTEVWRUxfUFRFKSkgXFxcXFxcbiAxOTc6XFx0XFx0XFx0cHRlX3VubWFwKChfX2Z3KS1cXHUwMDNlcHRlcCk7IFxcXFxcXG4gMTk4OlxcdFxcdHZtYV9wZ3RhYmxlX3dhbGtfZW5kKF9fdm1hKTsgXFxcXFxcbiAxOTk6XFx0fSB3aGlsZSAoMClcXG4gMjAwOlxcdFxcbiAyMDE6XFx0I2VuZGlmIC8qIF9MSU5VWF9QQUdFV0FMS19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjE0LjI0NjA2NDQxMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTU5MjQ4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaDogS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGB3YWxrX2xvY2tgIHRvIHRoZSBgc3RydWN0IGZvbGlvX3dhbGtgIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBpdC4gSXQgYWxzbyBjaGFuZ2VzIHNvbWUgbW1hcCByZWFkIGxvY2tpbmcgcGF0aHMgaW4gYGtzbS5jYCB0byB1c2UgcGVyLXZtYSBsb2NraW5nIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzLiBGaW5hbGx5LCB0aGUgYHBhZ2V3YWxrLmNgIGNvZGUgaXMgdXBkYXRlZCB0byBjaGVjayB0aGUgbmV3IGBmdy1cdTAwM2V3YWxrX2xvY2tgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIGluIHRoYXQgYXJlYT8gTm8sIGJlY2F1c2U6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXJzcGFjZS4gTm90aGluZyBnZXRzIGNvcGllZCBvdXQgdmlhIGBjb3B5X3RvX3VzZXJgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLlxuKiAgIEFsbCBgc3RydWN0IGZvbGlvX3dhbGtgIGluc3RhbmNlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBgeyAud2Fsa19sb2NrID0gLi4uIH1gLiAgVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgaXMgZG9pbmcgaXRzIGpvYiBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG90aGVyIGZpZWxkcywgYXMgaXQgc2hvdWxkLlxuKiAgIFRoZSBgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgYSBsb2NrZWQgVk1BIG9yIE5VTEwuXG4qICAgVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHBhZ2Ugd2Fsa2luZyDigJMgcmVmYWN0b3Jpbmcgd2l0aGluIEtTTSBhbmQgdGhlIE1NIHBhZ2V3YWxrLlxuKiAgIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG9yIGV2ZW4gZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1cXF9CVUdcXF9PTi9XQVJOXFxfT05DRSkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogYSBgTmVlZHNLTVNBTmAgc2l0dWF0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyB1c2VkIG9yIHBvdGVudGlhbGx5IGxlYWtlZC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBjcml0ZXJpYTpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBBbGwgYGZ3YCBpbnN0YW5jZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgaGVyZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdG8gYmUgcmVhZD8gTm8gZGljZS5cblxuU28sIGxldCdzIGNvbnRyYXN0IHRoZSByZWxldmFuY2Ugb2YgS0FTQU4gdmVyc3VzIEtNU0FOLlxuXG4qICAgS0FTQU4vTE9DS0RFUDogVGhlIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyBNTSBsb2NraW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBieSBpbnRyb2R1Y2luZyBwZXItVk1BIHJlYWQgbG9ja2luZyBpbiBLU00gYW5kIGFkZGluZyBjaGVja3MgdG8gcGFnZXdhbGsuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBzcXVhcmVseSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBLQVNBTiB0byBkZXRlY3QuXG4qICAgS01TQU46IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLlxuXG5Pa2F5LCB0aGF0J3MgbXkgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDYsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTI6MjEuODA1MzE2NDA3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcGFnZSB3YWxrIGxvY2tpbmcgYW5kIHRyYW5zaXRpb25zIEtTTSBmcm9tIG1tYXBfcmVhZF9sb2NrIHRvIHBlci1WTUEgcmVhZCBsb2NraW5nICh2bWFfc3RhcnRfcmVhZF91bmxvY2tlZC92bWFfZW5kX3JlYWQpIHdpdGggbG9jayB2ZXJpZmljYXRpb24gaW4gZm9saW9fd2Fsa19zdGFydCgpLiBBbGwgbG9jYWwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYWNyb3NzIHRoZSBjb2RlYmFzZSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7IC53YWxrX2xvY2sgPSAuLi4gfTtgKSwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBwZXIgQyBzZW1hbnRpY3MuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIHRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHNlbWFudGljcyAod2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdv42v[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 08:29:35 +0000 UTC FinishedAt: 2026-09-11 08:52:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "TRANSPARENT_HUGEPAGE", "MIGRATION", "UPROBES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "1f78f28a2945f9e856b4ea8428ac41a6788e4b67", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KSM", "TRANSPARENT_HUGEPAGE", "MIGRATION", "UPROBES" ], "series_id": "20bd9a22-8df4-44a6-8b12-e45538b5f307" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_walk_start", "break_ksm", "find_mergeable_vma_locked", "get_mergeable_page", "try_to_merge_with_ksm_page", "try_to_merge_with_zero_page", "ksm_madvise", "break_cow", "split_huge_pages_pid" ], "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+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgcGFnZSB3YWxrIGxvY2tpbmcgYW5kIHRyYW5zaXRpb25zIEtTTSBmcm9tIG1tYXBfcmVhZF9sb2NrIHRvIHBlci1WTUEgcmVhZCBsb2NraW5nICh2bWFfc3RhcnRfcmVhZF91bmxvY2tlZC92bWFfZW5kX3JlYWQpIHdpdGggbG9jayB2ZXJpZmljYXRpb24gaW4gZm9saW9fd2Fsa19zdGFydCgpLiBBbGwgbG9jYWwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYWNyb3NzIHRoZSBjb2RlYmFzZSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7IC53YWxrX2xvY2sgPSAuLi4gfTtgKSwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBwZXIgQyBzZW1hbnRpY3MuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIHRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHNlbWFudGljcyAod2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2Ugd2Fsa2luZyBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgdXByb2JlcykuIEl0IGludHJvZHVjZXMgcGVyLVZNQSByZWFkIGxvY2tpbmcgKFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSB2aWEgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQpIHRvIEtTTSByb3V0aW5lcywgZHluYW1pY2FsbHkgYWx0ZXJzIGJyZWFrX2tzbV9vcHMgd2FsayBsb2NraW5nLCBhbmQgYWRkcyBsb2NraW5nIHZhbGlkYXRpb24gY2hlY2tzL2Fzc2VydGlvbnMgaW4gZm9saW9fd2Fsa19zdGFydC4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nIGludmFyaWFudHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGFjMjY1ZWIwZDdiNzU1ZjY2OGNjNWIwZWNjMzRmMDU3YTZjYTc1NmZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIFNlcCAxMSAwODo1MDoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbiYjNDM7XHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsge1xuIFx0XHRwbWRfdCBwbWQ7XG4gXHR9O1xuIFx0LyogcHJpdmF0ZSAqL1xuLVx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRzcGlubG9ja190ICpwdGw7XG4mIzQzO1x0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9GT1JDRTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbiYjNDM7XHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAzMGI3YzYzYjBlMzU5Li5kMDQ0N2I2YWU2ZTQxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ4MTAsNyAmIzQzOzQ4MTAsOSBAQCBzdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4gXHQgKi9cbiBcdGZvciAoYWRkciA9IHZhZGRyX3N0YXJ0OyBhZGRyIFx1MDAzYyB2YWRkcl9lbmQ7IGFkZHIgJiM0Mzs9IFBBR0VfU0laRSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li4xZDg1NzY5ZWM3ZGJlIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jXG5AQCAtNjYwLDE2ICYjNDM7NjYwLDExIEBAIHN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbiYjNDM7c3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xuIFx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXG4gXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcbiB9O1xuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcbi1cdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxuLVx0LndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssXG4tfTtcbi1cbiAvKlxuICAqIFRob3VnaCBpdCYjMzk7cyB2ZXJ5IHRlbXB0aW5nIHRvIHVubWVyZ2Ugcm1hcF9pdGVtcyBmcm9tIHN0YWJsZSB0cmVlIHJhdGhlclxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2VzbiYjMzk7dCBxdWl0ZSB3b3JrIGZvclxuQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XG4gICogcHJvdGVjdGlvbiBrZXlzIGhlcmUgYW55d2F5LlxuICAqL1xuIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKVxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xuLVx0XHRcdFx0XHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4mIzQzO1x0c3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBcdTAwMjZicmVha19rc21fb3BzO1xuJiM0MztcdG9wcy1cdTAwM2V3YWxrX2xvY2sgPSB3YWxrX2xvY2s7XG4gXG4gXHRkbyB7XG4gXHRcdGludCBrc21fcGFnZTtcbkBAIC03NzAsMTUgJiM0Mzs3NjUsMzYgQEAgc3RhdGljIGJvb2wgdm1hX2tzbV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIGtzbV9jb21wYXRpYmxlKHZtYS1cdTAwM2V2bV9maWxlLCB2bWEtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7LyoqXG4mIzQzOyAqIGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAmIzM5O2FkZHJlc3MmIzM5OyB3aGljaCBpc1xuJiM0MzsgKiBWTV9NRVJHRUFCTEUgYW5kIHJlYWQtbG9jayBpdCBieSBwZXItVk1BIGxvY2tzLiBQbGVhc2UgdXNlIHZtYV9lbmRfcmVhZCgpXG4mIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IElmIGEgVk1BIGV4aXN0cyB3aGljaCBzcGFucyBAYWRkcmVzcywgcmV0dXJuIHRoYXQgVk1BLCByZWFkLWxvY2tlZC5cbiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3dcbiYjNDM7ICogb2NjdXJyZWQsIHJldHVybiBOVUxMLCBhbmQgbm8gcmVhZC1sb2NrZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSxcbiYjNDM7ICogdGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgcGVyLVZNQSByZWFkIGxvY2sgYmVmb3JlIHJldHVybmluZyBOVUxMLlxuJiM0MzsgKiBDYWxsZXJzIG11c3QgTk9UIGNhbGwgdm1hX2VuZF9yZWFkKCkgb24gYSBOVUxMIHJldHVybiB2YWx1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4mIzQzO1xuIFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbiYjNDM7XG4mIzQzO1x0dm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xuJiM0MztcdGlmICghdm1hKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKSB7XG4mIzQzO1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTgwNCwxMSAmIzQzOzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdCAqL1xuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gMDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4tXHRpZiAodm1hKVxuLVx0XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgZmFsc2UpO1xuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzO1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4mIzQzO1x0aWYgKCF2bWEpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgJiM0MzsgUEFHRV9TSVpFLCBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpO1xuJiM0MztcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuQEAgLTgxNywxMyAmIzQzOzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbiYjNDM7XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuJiM0MztcdH07XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xuJiM0MztcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xuIFx0aWYgKCF2bWEpXG4tXHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG4gXHRpZiAoZm9saW8pIHtcbkBAIC04MzQsMTIgJiM0Mzs4NTIsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdFx0fVxuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdH1cbi1vdXQ6XG4mIzQzO1xuIFx0aWYgKHBhZ2UpIHtcbiBcdFx0Zmx1c2hfYW5vbl9wYWdlKHZtYSwgcGFnZSwgYWRkcik7XG4gXHRcdGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpO1xuIFx0fVxuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4mIzQzO1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRyZXR1cm4gcGFnZTtcbiB9XG4gXG5AQCAtMTI0Myw3ICYjNDM7MTI2MSw3IEBAIHN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXG4gXHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBmYWxzZSk7XG4mIzQzO1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdGdvdG8gZXJyb3I7XG4gXHRcdH1cbkBAIC0xNTcxLDE0ICYjNDM7MTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0aWYgKGtzbV91c2VfemVyb19wYWdlcyBcdTAwMjZcdTAwMjYgKHJtYXBfaXRlbS1cdTAwM2VvbGRjaGVja3N1bSA9PSB6ZXJvX2NoZWNrc3VtKSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiYjNDM7XHRcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdFx0aWYgKHZtYSkge1xuIFx0XHRcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsXG4gXHRcdFx0XHRcdFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpO1xuIFx0XHRcdHRyYWNlX2tzbV9tZXJnZV9vbmVfcGFnZShcbiBcdFx0XHRcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiYjNDM7XHRcdFx0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZiB0aGUgdm1hIGlzIG91dCBvZiBkYXRlLCB3ZSBkbyBub3QgbmVlZCB0b1xuQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdH1cbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MDUsMTAgJiM0MzsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuJiM0MztcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGlmICghdm1hKVxuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGdvdG8gb3V0X3RyYWNlO1xuIFxuIFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSwga3BhZ2UpO1xuIFx0aWYgKGVycilcbkBAIC0xNjI4LDcgJiM0MzsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGdldF9hbm9uX3ZtYSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuIG91dDpcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuJiM0MztcdHZtYV9lbmRfcmVhZCh2bWEpO1xuJiM0MztvdXRfdHJhY2U6XG4gXHR0cmFjZV9rc21fbWVyZ2Vfd2l0aF9rc21fcGFnZShrcGFnZSwgcGFnZV90b19wZm4oa3BhZ2UgPyBrcGFnZSA6IHBhZ2UpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgdHJ1ZSk7XG4mIzQzO1x0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXHR9XG5AQCAtMzAzNSw3ICYjNDM7MzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHRyZXR1cm4gMDtcdFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9taWdyYXRlLmNcbkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsXG4gXHRcdGludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbClcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuJiM0MztcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuJiM0MztcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0dW5zaWduZWQgbG9uZyBhZGRyO1xuIFx0aW50IGVyciA9IC1FRkFVTFQ7XG5AQCAtMjQ2NCw3ICYjNDM7MjQ2Niw5IEBAIHN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCpwYWdlcyk7XG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbiYjNDM7XHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuJiM0MztcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdld2Fsay5jIGIvbW0vcGFnZXdhbGsuY1xuaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDRcbi0tLSBhL21tL3BhZ2V3YWxrLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2V3YWxrLmNcbkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIFx0cGdkX3QgKnBnZHA7XG4gXHRwNGRfdCAqcDRkcDtcbiBcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogT3RoZXIgbG9ja2luZyBtb2RlcyBleGNlcHQgZm9yIG1tYXAgb3Igdm1hIHJlYWQgbG9ja2luZyBhcmUgbm90XG4mIzQzO1x0ICogZXhwZWN0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFx1MDAyNlx1MDAyNiBmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxuJiM0MztcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O3dhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCYjMzQ7KTtcbiYjNDM7XHRwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtXHUwMDNldm1fbW0sIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4mIzQzO1x0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbiYjNDM7XG4gXHR2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHZtYSk7XG4gXG4gXHRpZiAoV0FSTl9PTl9PTkNFKGFkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBhZGRyIFx1MDAzZT0gdm1hLVx1MDAzZXZtX2VuZCkpXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpmd19mb2xpbztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4mIzQzO1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4mIzQzO1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzQzO1x0fTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3dwX2VudHJ5X3QgZW50cnk7XG4gXHRwdGVfdCBzd3BfcHRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLykKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsgewogCQlwbWRfdCBwbWQ7CiAJfTsKIAkvKiBwcml2YXRlICovCi0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwllbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jazsKIH07CiAKIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmV0LCByZWZfY3RyX3VwZGF0ZWQgPSAwOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFOwogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDgxMCw3ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCwKIAkgKi8KIAlmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciAmbHQ7IHZhZGRyX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7Ci0JCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwkJfTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCXVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC02NjAsMTYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW4KIAlyZXR1cm4gZm91bmQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHsKJiM0MztzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7CiAJLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7Ci0JLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCi0JLndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssCi19OwotCiAvKgogICogVGhvdWdoIGl0JiMzOTtzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyCiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24mIzM5O3QgcXVpdGUgd29yayBmb3IKQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7CiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuCiAgKi8KIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKQomIzQzOwkJdW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKQogewogCXZtX2ZhdWx0X3QgcmV0ID0gMDsKLQljb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID8KLQkJCQkmYW1wO2JyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiAmYW1wO2JyZWFrX2tzbV9vcHM7CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gJmFtcDticmVha19rc21fb3BzOwomIzQzOwlvcHMtJmd0O3dhbGtfbG9jayA9IHdhbGtfbG9jazsKIAogCWRvIHsKIAkJaW50IGtzbV9wYWdlOwpAQCAtNzcwLDE1ICYjNDM7NzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4ga3NtX2NvbXBhdGlibGUodm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O2ZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7LyoqCiYjNDM7ICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IHdoaWNoIGlzCiYjNDM7ICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKQomIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuCiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cKJiM0MzsgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSwKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuCiYjNDM7ICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCiAJCXJldHVybiBOVUxMOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtJmd0O2Fub25fdm1hKQomIzQzOwomIzQzOwl2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLSZndDthbm9uX3ZtYSkgewomIzQzOwkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtODA0LDExICYjNDM7ODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCSAqLwogCXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSAwOwogCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7Ci0JaWYgKHZtYSkKLQkJYnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIGZhbHNlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pCkBAIC04MTcsMTMgJiM0Mzs4MzQsMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSkKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiYjNDM7CX07CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAKIAlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCAwKTsKIAlpZiAoZm9saW8pIHsKQEAgLTgzNCwxMiAmIzQzOzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCQl9CiAJCWZvbGlvX3dhbGtfZW5kKCZhbXA7ZncsIHZtYSk7CiAJfQotb3V0OgomIzQzOwogCWlmIChwYWdlKSB7CiAJCWZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpOwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAl9Ci0JbW1hcF9yZWFkX3VubG9jayhtbSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCXJldHVybiBwYWdlOwogfQogCkBAIC0xMjQzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZCkKIAkJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01FUkdFQUJMRSkgfHwgIXZtYS0mZ3Q7YW5vbl92bWEpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgZmFsc2UpOwomIzQzOwkJCWVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBQR1dBTEtfUkRMT0NLKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMTU3MSwxNCAmIzQzOzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzICZhbXA7JmFtcDsgKHJtYXBfaXRlbS0mZ3Q7b2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCQlpZiAodm1hKSB7CiAJCQllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLAogCQkJCQlaRVJPX1BBR0Uocm1hcF9pdGVtLSZndDthZGRyZXNzKSk7CiAJCQl0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoCiAJCQkJcGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcykpLAogCQkJCXJtYXBfaXRlbSwgbW0sIGVycik7CiYjNDM7CQkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG8KQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLAogCQkJICovCiAJCQllcnIgPSAwOwogCQl9Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNjA1LDEwICYjNDM7MTYyMiw5IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfdHJhY2U7CiAKIAllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLCBrcGFnZSk7CiAJaWYgKGVycikKQEAgLTE2MjgsNyAmIzQzOzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sCiAJcm1hcF9pdGVtLSZndDtsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCWdldF9hbm9uX3ZtYSh2bWEtJmd0O2Fub25fdm1hKTsKIG91dDoKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7b3V0X3RyYWNlOgogCXRyYWNlX2tzbV9tZXJnZV93aXRoX2tzbV9wYWdlKGtwYWdlLCBwYWdlX3RvX3BmbihrcGFnZSA/IGtwYWdlIDogcGFnZSksCiAJCQkJcm1hcF9pdGVtLCBtbSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgdHJ1ZSk7CiYjNDM7CQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMwMzUsNyAmIzQzOzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KIAogCQlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7CiYjNDM7CQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsCiAJCWludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKJiM0MzsJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CX07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVyciA9IC1FRkFVTFQ7CkBAIC0yNDY0LDcgJiM0MzsyNDY2LDkgQEAgc3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CQlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CQl9OwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCQlpbnQgZXJyID0gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LAogCXBnZF90ICpwZ2RwOwogCXA0ZF90ICpwNGRwOwogCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwkvKgomIzQzOwkgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3QKJiM0MzsJICogZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLICZhbXA7JmFtcDsgZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpCiYjNDM7CQlXQVJOX09OQ0UoMSwgJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxuJiMzNDspOwomIzQzOwlwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtJmd0O3ZtX21tLCBmdy0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJcHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctJmd0O3dhbGtfbG9jayk7CiYjNDM7CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJc3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlwdGVfdCBzd3BfcHRlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MjQ5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3VpdGFiaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgdGhpcyBwYXRjaCBzZXJpZXMgaXMgYSBnb29kIGNhbmRpZGF0ZSBmb3Igc3l6a2FsbGVyIGZ1enppbmcuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoZXJlIGFyZSBzb21lIHJlZCBmbGFncyBoZXJlIHRoYXQgbWFrZSB0aGlzIGEgcG90ZW50aWFsbHkgZmVydGlsZSBncm91bmQgZm9yIGZ1enppbmcuCgpUaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9rc20uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZXdhbGsuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhhdCYjMzk7cyBhIHdpZGUgcmFuZ2UsIGluZGljYXRpbmcgc2lnbmlmaWNhbnQgY2hhbmdlcyBpbiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIG1lbW9yeS4gQWx3YXlzIGEgZ29vZCBzaWduIGZvciBmdXp6aW5nLCBhcyBpdCBpbmNyZWFzZXMgdGhlIHBvdGVudGlhbCBhdHRhY2sgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGUgY2hhbmdlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YCB3aXRoaW4gYHN0cnVjdCBmb2xpb193YWxrYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBzdHJhdGVneSBkdXJpbmcgcGFnZSB3YWxrcywgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHNvbWV0aGluZyBzeXprYWxsZXIgZXhjZWxzIGF0IGZpbmRpbmcuCgpUaGUgbW9kaWZpY2F0aW9ucyBpbiBgbW0vcGFnZXdhbGsuY2Agd2l0aCB0aGUgYGZvbGlvX3dhbGtfc3RhcnRgIGZ1bmN0aW9uIGFuZCB0aGUgYWRkZWQgY2hlY2tzIG9uIGBmdy0mZ3Q7d2Fsa19sb2NrYCBhcmUgdmVyeSByZWxldmFudC4gVGhlIGBXQVJOX09OQ0VgIHN1Z2dlc3RzIHRoZSBjb2RlIGlzICpleHBlY3RpbmcqIHNwZWNpZmljIGxvY2tpbmcgYmVoYXZpb3IsIGFuZCBhbnkgZGV2aWF0aW9uIGNvdWxkIHRyaWdnZXIgZXJyb3JzLiBUaGUgY2hlY2tzIG9uIHRoZSBlbnVtIGFuZCB0aGUgY2FsbHMgdG8gYHByb2Nlc3NfbW1fd2Fsa19sb2NrYCBhbmQgYHByb2Nlc3Nfdm1hX3dhbGtfbG9ja2AgZnVydGhlciByZWluZm9yY2UgdGhpcy4KCkFuZCBoZXJlJiMzOTtzIHRoZSByZWFsIGtpY2tlcjogYG1tL2tzbS5jYCBoYXMgYSAqdmVyeSogY29uY2VybmluZyBjaGFuZ2UuIFRoZSBtb2RpZmljYXRpb24gb2YgYGJyZWFrX2tzbV9vcHNgIHRvIGEgbXV0YWJsZSBnbG9iYWwgc3RydWN0IGFuZCB0aGUgZGlyZWN0IGFzc2lnbm1lbnQgb2YgYG9wcy0mZ3Q7d2Fsa19sb2NrID0gd2Fsa19sb2NrO2AgaW5zaWRlIGBicmVha19rc20oKWAgaXMgYWxtb3N0IGNlcnRhaW5seSBhIGRhdGEgcmFjZSEgVGhpcyBpcyB0aGUga2luZCBvZiBzdWJ0bGUgY29uY3VycmVuY3kgYnVnIHRoYXQgaXMgaW5jcmVkaWJseSBkaWZmaWN1bHQgdG8gZGV0ZWN0IG1hbnVhbGx5IGJ1dCBzeXprYWxsZXIgc2hvdWxkIGZpbmQgcXVpY2tseS4gVGhlIGZhY3QgdGhhdCB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIGEgc3RhdGljLCBjb25zdCBvYmplY3QgbWFrZXMgdGhpcyBldmVuIG1vcmUgY29uY2VybmluZy4gVGhpcyBpcyBhIHZlcnkgY29tcGVsbGluZyByZWFzb24gdG8gcHJpb3JpdGl6ZSBmdXp6aW5nIHRoaXMgcGF0Y2guIFRoZSBpbnRyb2R1Y3Rpb24gb2YgcGVyLVZNQSBsb2NraW5nIGluIGEgbnVtYmVyIG9mIEtTTSBmdW5jdGlvbnMgKGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCwgZXRjLikgc3VwcG9ydHMgdGhhdCB0aGlzIGlzIGEgY29tcGxleCBjb25jdXJyZW5jeSBpc3N1ZS4KCkkmIzM5O20gbm93IGdvaW5nIHRvIHVzZSBncmVwIGFuZCByZWFkLWZpbGUsIGJ1dCBvdmVyYWxsLCBnaXZlbiB0aGUgY2hhbmdlcyB0byBLU00sIHRoZSBhbHRlcmVkIGxvY2tpbmcsIGFuZCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgcG90ZW50aWFsIGRhdGEgcmFjZSwgdGhpcyBwYXRjaCBzZXJpZXMgaXMgKmhpZ2hseSogc3VzcGVjdGlibGUgdG8gY29uY3VycmVuY3kgYnVncyBhbmQgaXMgYW4gZXhjZWxsZW50IGNhbmRpZGF0ZSBmb3IgZnV6emluZyB3aXRoIHN5emthbGxlci4gVGhlIHByb2JhYmlsaXR5IG9mIGZpbmRpbmcgaW50ZXJlc3RpbmcgYnVncyBpcyBxdWl0ZSBoaWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2JyZWFrX2tzbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2tzbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2tzbS5jPTYxMT1zdGF0aWMgaW5saW5lIGJvb2wga3NtX3Rlc3RfZXhpdChzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbi0tXG5tbS9rc20uYy02MTUtXG5tbS9rc20uYzo2MTY6c3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0va3NtLmMtNjE3LVx0XHRcdHN0cnVjdCBtbV93YWxrICp3YWxrKVxuLS1cbm1tL2tzbS5jLTY2Mi1cbm1tL2tzbS5jOjY2MzpzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7XG5tbS9rc20uYzo2NjQ6XHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbm1tL2tzbS5jLTY2NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuLS1cbm1tL2tzbS5jLTY4MC0gKlxubW0va3NtLmM6NjgxOiAqIFdlIHVzZSBicmVha19rc20gdG8gYnJlYWsgQ09XIG9uIGEga3NtIHBhZ2UgYnkgdHJpZ2dlcmluZyB1bnNoYXJpbmcsXG5tbS9rc20uYy02ODItICogc3VjaCB0aGF0IHRoZSBrc20gcGFnZSB3aWxsIGdldCByZXBsYWNlZCBieSBhbiBleGNsdXNpdmUgYW5vbnltb3VzIHBhZ2UuXG4tLVxubW0va3NtLmMtNjkyLSAqL1xubW0va3NtLmM6NjkzOnN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9rc20uYy02OTQtXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcbi0tXG5tbS9rc20uYy02OTYtXHR2bV9mYXVsdF90IHJldCA9IDA7XG5tbS9rc20uYzo2OTc6XHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG5tbS9rc20uYy02OTgtXHRvcHMtXHUwMDNld2Fsa19sb2NrID0gd2Fsa19sb2NrO1xuLS1cbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04MjYtXG5tbS9rc20uYzo4Mjc6XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcbm1tL2tzbS5jLTgyOC1cdHZtYV9lbmRfcmVhZCh2bWEpO1xuLS1cbm1tL2tzbS5jPTEyMzM9c3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbi0tXG5tbS9rc20uYy0xMjYzLVx0XHRcdFx0Y29udGludWU7XG5tbS9rc20uYzoxMjY0Olx0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XG5tbS9rc20uYy0xMjY1LVx0XHRcdGlmIChlcnIpXG4tLVxubW0va3NtLmM9Mjg5NT1zdGF0aWMgaW50IF9fa3NtX2RlbF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0va3NtLmMtMjkwMi1cdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbm1tL2tzbS5jOjI5MDM6XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7XG5tbS9rc20uYy0yOTA0LVx0XHRpZiAoZXJyKVxuLS1cbm1tL2tzbS5jPTMwMjg9aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2tzbS5jLTMwNTQtXHRcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbm1tL2tzbS5jOjMwNTU6XHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XG5tbS9rc20uYy0zMDU2LVx0XHRcdGlmIChlcnIpXG4tLVxubW0va3NtLmM9MzQzMj1zdGF0aWMgaW50IGtzbV9tZW1vcnlfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxuLS1cbm1tL2tzbS5jLTM0NDItXHRcdCAqIGl0IGlzIHVuc2FmZSBmb3IgdGhlbSB0byB0b3VjaCB0aGUgc3RhYmxlIHRyZWUgYXQgdGhpcyB0aW1lLlxubW0va3NtLmM6MzQ0MzpcdFx0ICogQnV0IGJyZWFrX2tzbSgpLCBybWFwIGxvb2t1cHMgYW5kIG90aGVyIGVudHJ5IHBvaW50c1xubW0va3NtLmMtMzQ0NC1cdFx0ICogd2hpY2ggZG8gbm90IG5lZWQgdGhlIGtzbV90aHJlYWRfbXV0ZXggYXJlIGFsbCBzYWZlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MTgKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29kZWJhc2UgZm9yIEZ1enppbmcqKgoKT2theSwgdGhpcyBpcyBzZXJpb3VzISBXZSYjMzk7cmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaGVyZSDigJMgdGhlIHN0dWZmIHRoYXQgKnJlYWxseSogbWF0dGVycy4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gVGhlIGd1aWRlbGluZXMgY2xlYXJseSBzdGF0ZSB0aGF0ICpyZWFjaGFiaWxpdHkqIGlzIHRoZSBtb3N0IGltcG9ydGFudCBmYWN0b3IgaW4gZGV0ZXJtaW5pbmcgaWYgdGhpcyBpcyBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLCBhbmQgaXQgbG9va3MgcHJvbWlzaW5nOiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIG1vZGlmaWNhdGlvbnMgaW4gY3J1Y2lhbCBmaWxlczogYG1tL2tzbS5jYCwgYG1tL3BhZ2V3YWxrLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcm1hcC5jYCwgYW5kIGBrZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY2AuCgpHb29kLCB0aGlzIGxvb2tzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKG9uIGFtZDY0KSwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIGNoYW5nZXMgaW4gS1NNIGFuZCBwYWdld2Fsa+KAlHRoaW5ncyBsaWtlIHRoZSBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCwgdGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiwgYW5kIGZvbGlvX3dhbGtfc3RhcnQgYXNzZXJ0aW9ucy4gVGhlc2UgYXJlIGNsYXNzaWMgYXJlYXMgd2hlcmUgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MgY2FuIGhpZGUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gQWJzb2x1dGVseSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyEgVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIG1hcmtlciBjb25maXJtcyB0aGF0LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtaW5pbWFsIHNldCBvZiBjb25maWd1cmF0aW9ucyByZXF1aXJlZCB0byBleGVyY2lzZSBhbGwgdGhpcyBjb2RlLiBTcGVjaWZpY2FsbHksIHdoYXQga2VybmVsIGNvbmZpZ3VyYXRpb25zIG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgS1NNLCBwYWdld2FsaywgZm9saW9fd2FsaywgdXByb2JlcywgbWlncmF0ZSwgYW5kIGh1Z2VfbWVtb3J5PyBJJiMzOTtsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNvIG9uIHRvIGRldGVybWluZSB0aGF0LiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gY3JlYXRpbmcgYSB0ZXN0aW5nIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLU00mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz03MjM9Y29uZmlnIE1NVV9OT1RJRklFUlxuLS1cbm1tL0tjb25maWctNzI2LVxubW0vS2NvbmZpZzo3Mjc6Y29uZmlnIEtTTVxubW0vS2NvbmZpZy03MjgtXHRib29sIFwmIzM0O0VuYWJsZSBLU00gZm9yIHBhZ2UgbWVyZ2luZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMzIxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEJ1aWxkIFByb2Nlc3Mgb2YgS1NNIGFuZCBQYWdld2FsayoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiBmb3IgYGtzbS5jYCBhbmQgYHBhZ2V3YWxrLmNgLiBXaGVyZSYjMzk7cyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkPyBSaWdodCwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIHBsYWNlIHdoZXJlIHRoZSBjb3JlIGJ1aWxkIHJ1bGVzIGZvciBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzIGFyZSBkZWZpbmVkLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbXBpbGVyIGZsYWdzLCBhbnkgc3BlY2lmaWMgb2JqZWN0IGZpbGUgZGVwZW5kZW5jaWVzLCBhbmQgaG93IHRoZXNlIG1vZHVsZXMgaW50ZWdyYXRlIHdpdGhpbiB0aGUgbGFyZ2VyIGJ1aWxkIHByb2Nlc3MuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGF0IGBtbS9NYWtlZmlsZWAgYW5kIHNlZSB3aGF0JiMzOTtzIHdoYXQuIExldCYjMzk7cyBzZWUgaWYgSSBjYW4gc3BvdCBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGVtcGxveWVkIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2tzbS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9OTA9b2JqLSQoQ09ORklHX01NVV9OT1RJRklFUikgJiM0Mzs9IG1tdV9ub3RpZmllci5vXG5tbS9NYWtlZmlsZTo5MTpvYmotJChDT05GSUdfS1NNKSAmIzQzOz0ga3NtLm9cbm1tL01ha2VmaWxlLTkyLW9iai0kKENPTkZJR19QQUdFX1BPSVNPTklORykgJiM0Mzs9IHBhZ2VfcG9pc29uLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDYyMAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgcG90ZW50aWFsIGFyZWFzIGZvciBpbnZlc3RpZ2F0aW9uOgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVGFyZ2V0IE1vZHVsZXMqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgaW4uIE15IGd1dCBmZWVsaW5nIHRlbGxzIG1lIHRoZXNlIGFyZSBsaWtlbHkga2V5IGFyZWFzIHRoYXQgbmVlZCBmdXJ0aGVyIHNjcnV0aW55IGJhc2VkIG9uIHRoZSBjdXJyZW50IHN5c3RlbSBiZWhhdmlvci4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYHBhZ2V3YWxrLm9gLCBgaHVnZV9tZW1vcnkub2AsIGBtaWdyYXRlLm9gLCBhbmQgYHVwcm9iZXMub2AuIENvbnNpZGVyaW5nIG15IGV4cGVydGlzZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhlc2UgbW9kdWxlcyB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBmaW5kaW5ncyByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBsYXJnZSBwYWdlIGhhbmRsaW5nLCBsaXZlIG1pZ3JhdGlvbiBjb21wbGV4aXRpZXMsIGFuZCB0aGUgcG9zc2libGUgb3ZlcmhlYWQgb2YgdXNlci1zcGFjZSBwcm9iaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQmIzM5O3MgcmVhbGx5IGhhcHBlbmluZyB1bmRlciB0aGUgaG9vZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7KHBhZ2V3YWxrfGh1Z2VfbWVtb3J5fG1pZ3JhdGV8dXByb2JlcylcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcdDo9IGhpZ2htZW0ubyBtZW1vcnkubyBtaW5jb3JlLm8gXFxcbm1tL01ha2VmaWxlLTM4LVx0XHRcdCAgIG1sb2NrLm8gbW1hcC5vIG1tdV9nYXRoZXIubyBtcHJvdGVjdC5vIG1yZW1hcC5vIFxcXG5tbS9NYWtlZmlsZTozOTpcdFx0XHQgICBtc3luYy5vIHBhZ2Vfdm1hX21hcHBlZC5vIHBhZ2V3YWxrLm8gXFxcbm1tL01ha2VmaWxlLTQwLVx0XHRcdCAgIHBndGFibGUtZ2VuZXJpYy5vIHJtYXAubyB2bWFsbG9jLm8gdm1hLm8gdm1hX2V4ZWMub1xuLS1cbm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVx0XHQmIzQzOz0gbWVtdGVzdC5vXG5tbS9NYWtlZmlsZTo5OTpvYmotJChDT05GSUdfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZS5vXG5tbS9NYWtlZmlsZS0xMDAtb2JqLSQoQ09ORklHX05VTUEpICYjNDM7PSBtZW1vcnktdGllcnMub1xubW0vTWFrZWZpbGU9MTAxPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAyOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDMtb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMTQyCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2VybmVsIFVwcm9iZSBEZWJ1Z2dpbmcgLSBNYWtlZmlsZSBEZWVwIERpdmUqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIHVwcm9iZXMgdGhpbmcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBgdXByb2Jlcy5vYCBvYmplY3QgZmlsZSBpcyBiZWluZyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCBzb3VyY2UuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBga2VybmVsL2V2ZW50cy9NYWtlZmlsZWAuIEl0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIGNvbnZlbnRpb24gdG8gZmluZCByZWxhdGVkIG9iamVjdCBmaWxlcyBkZWZpbmVkIGluIHRoYXQgZGlyZWN0b3J5JiMzOTtzIE1ha2VmaWxlLCBlc3BlY2lhbGx5IGdpdmVuIHRoZSBga2VybmVsL2V2ZW50c2AgY29udGV4dC4gVGhpcyBpcyBhIGNvbW1vbiBwYXR0ZXJuIGZvciBrZXJuZWwgY29tcG9uZW50IGJ1aWxkIHN0cnVjdHVyZXMgYW5kIG9yZ2FuaXphdGlvbi4gSG9wZWZ1bGx5LCBpdCYjMzk7cyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdWRlIG9yIGRlZmluaXRpb24gdGhlcmUsIGFuZCBJIGNhbiBxdWlja2x5IHRyYWNlIGl0cyBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MgZnJvbSB0aGVyZS4gVGltZSB0byBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1cHJvYmVzXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9ldmVudHMvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2V2ZW50cy9NYWtlZmlsZT01PW9iai0kKENPTkZJR19IV19CUkVBS1BPSU5UX0tVTklUX1RFU1QpICYjNDM7PSBod19icmVha3BvaW50X3Rlc3Qub1xua2VybmVsL2V2ZW50cy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19VUFJPQkVTKSAmIzQzOz0gdXByb2Jlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDEzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgUG90ZW50aWFsIExvY2tpbmcgSXNzdWVzIHdpdGggUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgY29uZmlybSBwcmVjaXNlbHkgd2hhdCBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCBhY3R1YWxseSAqZG9lcyouIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3BlY2lmaWMgZGVmaW5pdGlvbiBvZiB0aGF0IG1hY3JvIOKAkyB3aGF0IGFyZSBpdHMgaW50ZW5kZWQgY2hlY2tzLCB3aGF0IGFyZSB0aGUgY29uZGl0aW9ucyBpdCYjMzk7cyBkZXNpZ25lZCB0byBmbGFnPyBJcyBpdCByZWxhdGVkIHRvIHJlYWQtb25seSBhY2Nlc3MgaW4gc29tZSB3YXk/IE9yIGlzIGl0IGEgbW9yZSBnZW5lcmFsIHZhbGlkYXRpb24gdG9vbD8gVW5kZXJzdGFuZGluZyB0aGUgKnB1cnBvc2UqIGlzIGNyaXRpY2FsIGJlZm9yZSBJIGNhbiBhc3Nlc3MgYW55IHBvdGVudGlhbCBwcm9ibGVtLgoKTmV4dCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXItVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBsb2NrIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIGludGVyZmVyaW5nIHdpdGggb3IgdW5leHBlY3RlZGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHZlcmlmaWNhdGlvbiBjaGVja3MgcGVyZm9ybWVkIGJ5IHRoaXMgbWFjcm8/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsb2NrIHNldHRpbmdzIHRoYXQgYXJlIGhhcHBlbmluZyBvbiB0aG9zZSBWTUFzPyBBcmUgdGhlIGFzc3VtcHRpb25zIG9mIHRoZSBsb2NrIHN5c3RlbSBiZWluZyBicm9rZW4gc29tZWhvdz8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgYFBHV0FMS2AgaXMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIHdhbGtzLCB3aGljaCBhcmUgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBpbmNvbnNpc3RlbmNpZXMgaGVyZSBjYW4gaGF2ZSBzZXZlcmUgcmFtaWZpY2F0aW9ucy4gTGV0JiMzOTtzIHNlZSBpZiB0aGlzIG1hY3JvIGNhbiBoZWxwIG1lLCBvciBpZiBpdCBtaWdodCBiZSBhIHBhcnQgb2YgdGhlIHByb2JsZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmM9MTI1Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjU1LVx0Lmh1Z2V0bGJfZW50cnlcdFx0PSBzbWFwc19odWdldGxiX3JhbmdlLFxuZnMvcHJvYy90YXNrX21tdS5jOjEyNTY6XHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNTctfTtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTI1OT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMjYyLVx0LnB0ZV9ob2xlXHRcdD0gc21hcHNfcHRlX2hvbGUsXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI2MzpcdC53YWxrX2xvY2tcdFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2NC19O1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zNDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQyMC1cdC5wbWRfZW50cnkgPSBnYXRoZXJfcHRlX3N0YXRzLFxuZnMvcHJvYy90YXNrX21tdS5jOjM0MjE6XHQud2Fsa19sb2NrID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MjItfTtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTA9ZW51bSBwYWdlX3dhbGtfbG9jayB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3LVx0Lyogdm1hIGlzIGV4cGVjdGVkIHRvIGJlIGFscmVhZHkgcmVhZC1sb2NrZWQgZHVyaW5nIHRoZSB3YWxrICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTg6XHRQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgPSAzLFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5LX07XG4tLVxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxuLS1cbm1tL2RhbW9uL3ZhZGRyLmMtMjQzLVx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVApKSB7XG5tbS9kYW1vbi92YWRkci5jOjI0NDpcdFx0b3BzLVx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcbm1tL2RhbW9uL3ZhZGRyLmMtMjQ1LVx0XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcbi0tXG5tbS9rc20uYz04MDY9c3RhdGljIHZvaWQgYnJlYWtfY293KHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4tLVxubW0va3NtLmMtODI2LVxubW0va3NtLmM6ODI3Olx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XG5tbS9rc20uYy04MjgtXHR2bWFfZW5kX3JlYWQodm1hKTtcbi0tXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04MzgtXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL2tzbS5jOjgzOTpcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG5tbS9rc20uYy04NDAtXHR9O1xuLS1cbm1tL21hZHZpc2UuYz03OTg9c3RhdGljIGlubGluZSBlbnVtIHBhZ2Vfd2Fsa19sb2NrIGdldF93YWxrX2xvY2soZW51bSBtYWR2aXNlX2xvY2tfbW9kZSBtb2RlKVxuLS1cbm1tL21hZHZpc2UuYy04MDEtXHRjYXNlIE1BRFZJU0VfVk1BX1JFQURfTE9DSzpcbm1tL21hZHZpc2UuYzo4MDI6XHRcdHJldHVybiBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk7XG5tbS9tYWR2aXNlLmMtODAzLVx0Y2FzZSBNQURWSVNFX01NQVBfUkVBRF9MT0NLOlxuLS1cbm1tL3BhZ2V3YWxrLmM9NDM1PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX21tX3dhbGtfbG9jayhzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9wYWdld2Fsay5jLTQzOS1cdFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcbm1tL3BhZ2V3YWxrLmM6NDQwOlx0ZWxzZSBpZiAod2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbm1tL3BhZ2V3YWxrLmMtNDQxLVx0XHRtbWFwX2Fzc2VydF93cml0ZV9sb2NrZWQobW0pO1xuLS1cbm1tL3BhZ2V3YWxrLmM9NDQ0PXN0YXRpYyBpbmxpbmUgdm9pZCBwcm9jZXNzX3ZtYV93YWxrX2xvY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vcGFnZXdhbGsuYy00NTMtXHRcdGJyZWFrO1xubW0vcGFnZXdhbGsuYzo0NTQ6XHRjYXNlIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTpcbm1tL3BhZ2V3YWxrLmMtNDU1LVx0XHR2bWFfYXNzZXJ0X2xvY2tlZCh2bWEpO1xuLS1cbm1tL3BhZ2V3YWxrLmM9ODk5PXN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXG4tLVxubW0vcGFnZXdhbGsuYy05MTYtXHQgKi9cbm1tL3BhZ2V3YWxrLmM6OTE3Olx0aWYgKGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFx1MDAyNlx1MDAyNiBmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxubW0vcGFnZXdhbGsuYy05MTgtXHRcdFdBUk5fT05DRSgxLCBcJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDc2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgUGVyLVZNQSBMb2NraW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBjb250cm9sbGluZyB0aGUgcGVyLVZNQSBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHVzdWFsbHkgdGhlIGdvLXRvIHBsYWNlIGZvciBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLCByaWdodD8gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFmdGVyIGBQRVJfVk1BX0xPQ0tgLiBUaGF0JiMzOTtzIHRoZSBsaWtlbHkga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gZG9lcyBhbmQgaG93IGl0JiMzOTtzIGRlZmluZWQsIGFzIGl0IHdpbGwgcmV2ZWFsIHRoZSBjaXJjdW1zdGFuY2VzIHVuZGVyIHdoaWNoIHRoZSBrZXJuZWwgd2lsbCBlbXBsb3kgcGVyLVZNQSBsb2NraW5nLiBUaGlzIHNob3VsZCB0ZWxsIG1lIHdoYXQgSSBuZWVkIHRvIGtub3cgYWJvdXQgdGhlIGZlYXR1cmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZy5kZWJ1Zz0zMDA9Y29uZmlnIERFQlVHX0tNRU1MRUFLX1ZFUkJPU0Vcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cbm1tL0tjb25maWcuZGVidWc6MzExOmNvbmZpZyBQRVJfVk1BX0xPQ0tfU1RBVFNcbm1tL0tjb25maWcuZGVidWctMzEyLVx0Ym9vbCBcJiMzNDtTdGF0aXN0aWNzIGZvciBwZXItdm1hIGxvY2tzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzY3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGVlcCBEaXZlIFRpbWU6IENoZWNraW5nIGBQRVJfVk1BX0xPQ0tgIGluIHRoZSBLZXJuZWwqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZywgJiMzNDtSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzIGFuZCByZWFsbHkgdW5kZXJzdGFuZCB0aGUgdXNhZ2Ugb2YgYFBFUl9WTUFfTE9DS2AgYWNyb3NzIHRoZSAqZW50aXJlKiBrZXJuZWwuJiMzNDsgSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBob3cgdGhpcyBsb2NrIGlzIGJlaW5nIHVzZWQuIEkga25vdyBpdHMgcHVycG9zZSwgYnV0IEkgbmVlZCB0byBzZWUgdGhlIGltcGxlbWVudGF0aW9uIGluIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgc2VhcmNoIGFuZCBhbmFseXNpcy4gTm8gc3VyZmFjZS1sZXZlbCBza2ltbWluZyBoZXJlOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGl0cyB1c2UgYWNyb3NzIGRpZmZlcmVudCBhcmNoaXRlY3R1cmVzIGFuZCBzdWJzeXN0ZW1zLiBJIG5lZWQgYSBjbGVhciBtZW50YWwgcGljdHVyZSBvZiB3aGVyZSBpdCYjMzk7cyBjcml0aWNhbCwgd2hlcmUgaXQmIzM5O3MgcG90ZW50aWFsbHkgcmVkdW5kYW50LCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2guIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBFUl9WTUFfTE9DS1xcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNjExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYFBFUl9WTUFfTE9DS2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUEVSX1ZNQV9MT0NLYCBkZWZpbml0aW9uIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgZ2V0IHVwIHRvIHNwZWVkIHdpdGggaXRzIG51YW5jZXMuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgaW4gbXkgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXBwbGljYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VwZXJmaWNpYWwgZ2xhbmNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgZXhhY3RseSB3aGF0IGl0IG1lYW5zIGFuZCBob3cgaXQmIzM5O3MgdXNlZC4gTGV0JiMzOTtzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVmaW5pdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtQRVJfVk1BX0xPQ0smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzc5NAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0JiMzOTtzIGZpbmQgaXRzIGRlZmluaXRpb24uIEtub3dpbmcgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZCB3aWxsIGdpdmUgbWUgdGhlIG1vc3QgZnVuZGFtZW50YWwgaW5mb3JtYXRpb24gYWJvdXQgaXRzIHB1cnBvc2UsIHBhcmFtZXRlcnMsIGFuZCBsaWtlbHksIHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQgb3BlcmF0ZXMgb24uIFRoaXMgc2hvdWxkIHBvaW50IG1lIHRvIHRoZSBjb3JlIG9mIGl0cyBmdW5jdGlvbmFsaXR5IHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoVk1BKSBtYW5hZ2VtZW50IGNvZGUuIEZyb20gdGhlcmUsIEkgY2FuIHRyYWNlIGl0cyBjYWxsIHNpdGVzIGFuZCBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9wZXJhdGlvbnMsIGxpa2VseSBpbnZvbHZpbmcgbG9ja2luZy91bmxvY2tpbmcgc2NoZW1lcyBhbmQgcmVhZC93cml0ZSBhY2Nlc3MuIFRoaXMgaW5pdGlhbCBzZWFyY2ggaXMgZXNzZW50aWFsLiBJJiMzOTttIGV4cGVjdGluZyB0aGlzIHdpbGwgYmUgYSBmdW5jdGlvbiwgYnV0IGl0IGNvdWxkIGJlIGEgbWFjcm8sIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgd2F5LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM9NDAxPSAgICB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcdTAwMjZzZWxmLCBpOiB1c2l6ZSkgLVx1MDAzZSBSZXN1bHRcdTAwM2MoKVx1MDAzZSB7XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTQ0MS0gICAgICAgIHtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5yczo0NDI6ICAgICAgICAgICAgbGV0IHZtYV9yZWFkX2d1YXJkID0gbW0udm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQodm1hX2FkZHIpLm9rX29yKEVTUkNIKT87XG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnMtNDQzLSAgICAgICAgICAgIGxldCB2bWEgPSBjaGVja192bWEoXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XG4tLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jPTI1ND1zdGF0aWMgaW50IGJpbmRlcl9wYWdlX2luc2VydChzdHJ1Y3QgYmluZGVyX2FsbG9jICphbGxvYyxcbi0tXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMjYxLVxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jOjI2MjpcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXJfYWxsb2MuYy0yNjMtXHRpZiAoIXZtYSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tYXBfbG9jay5oPTI2Mz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX3N0YXJ0X3JlYWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY3LVxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaDoyNjg6c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY5LVx0XHRcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKTtcbi0tXG5tbS9rc20uYz03ODE9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5tbS9rc20uYy03ODgtXG5tbS9rc20uYzo3ODk6XHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG5tbS9rc20uYy03OTAtXHRpZiAoIXZtYSlcbi0tXG5tbS9tbWFwX2xvY2suYz0yOTM9c3RydWN0IHZtX2FyZWFfc3RydWN0ICpsb2NrX3ZtYV91bmRlcl9yY3Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubW0vbW1hcF9sb2NrLmMtMzQzLS8qKlxubW0vbW1hcF9sb2NrLmM6MzQ0OiAqIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKCkgLSBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJiMzOTthZGRyZXNzJiMzOTsgYW5kIHJlYWQtbG9jayBpdC5cbm1tL21tYXBfbG9jay5jLTM0NS0gKiBAbW06IHRoZSBtbV9zdHJ1Y3Qgb2YgdGhlIGFkZHJlc3Mgc3BhY2UgdG8gc2VhcmNoXG4tLVxubW0vbW1hcF9sb2NrLmMtMzU3LSAqL1xubW0vbW1hcF9sb2NrLmM6MzU4OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG5tbS9tbWFwX2xvY2suYy0zNTktXHRcdFx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4tLVxubmV0L2lwdjQvdGNwLmM9MjE3MD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjE3Mi17XG5uZXQvaXB2NC90Y3AuYzoyMTczOlx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG5uZXQvaXB2NC90Y3AuYy0yMTc0LVxuLS1cbnJ1c3Qva2VybmVsL21tLnJzPTE3ND0gICAgcHViIGZuIGxvY2tfdm1hX3VuZGVyX3JjdShcdTAwMjZzZWxmLCB2bWFfYWRkcjogdXNpemUpIC1cdTAwM2UgT3B0aW9uXHUwMDNjVm1hUmVhZEd1YXJkXHUwMDNjJiMzOTtfXHUwMDNlXHUwMDNlIHtcbi0tXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDAtICAgICNbaW5saW5lXVxucnVzdC9rZXJuZWwvbW0ucnM6MjAxOiAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXHUwMDI2c2VsZiwgdm1hX2FkZHI6IHVzaXplKSAtXHUwMDNlIE9wdGlvblx1MDAzY1ZtYVJlYWRHdWFyZFx1MDAzYyYjMzk7X1x1MDAzZVx1MDAzZSB7XG5ydXN0L2tlcm5lbC9tbS5yczoyMDI6ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xucnVzdC9rZXJuZWwvbW0ucnMtMjAzLSAgICAgICAgLy8gYG1tX3VzZXJzYC5cbnJ1c3Qva2VybmVsL21tLnJzOjIwNDogICAgICAgIGxldCB2bWEgPSB1bnNhZmUgeyBiaW5kaW5nczo6dm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc2VsZi5hc19yYXcoKSwgdm1hX2FkZHIpIH07XG5ydXN0L2tlcm5lbC9tbS5ycy0yMDUtICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcbi0tXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDktICAgICAgICBTb21lKFZtYVJlYWRHdWFyZCB7XG5ydXN0L2tlcm5lbC9tbS5yczoyMTA6ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcbnJ1c3Qva2VybmVsL21tLnJzLTIxMS0gICAgICAgICAgICAvLyB2YWxpZCB2bWEuIFRoZSB2bWEgaXMgc3RhYmxlIGZvciBhcyBsb25nIGFzIHRoZSB2bWEgcmVhZCBsb2NrIGlzIGhlbGQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTc5CgkJCQkJCQlvdXRwdXQ6IDI1NgoJCQkJCQkJdGhvdWdodHM6IDE3MTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBQbGFuIGZvciBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcywgZ2l2ZW4gdGhlIGxpa2VseSBpbXBhY3Qgb24gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4KCkZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX0tTTWAgaXMgdGhlIG1haW4gb25lIGZvciBLZXJuZWwgU2FtZXBhZ2UgTWVyZ2luZywgYW5kIEkmIzM5O2xsIGFsc28gY2hlY2sgZm9yIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgQ09ORklHX01JR1JBVElPTmAsIGFuZCBgQ09ORklHX1VQUk9CRVNgIGFzIHRoZXkgc2VlbSByZWxhdGVkIHRvIHRoZSBtb2RpZmllZCBjb21wb25lbnRzLgoKTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGltcGFjdGVkIGZ1bmN0aW9ucyB0byBnZXQgYW4gaWRlYSBvZiB0aGUgc2NvcGUuIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiBgbW0va3NtLmNgIGxpa2UgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgLCBgYnJlYWtfa3NtYCwgYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYW5kIGBrc21fbWFkdmlzZWAuICBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBmb2xpb193YWxrX3N0YXJ0YCBpbiBgbW0vcGFnZXdhbGsuY2AsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gIGFuZCBgZG9fcGFnZXNfc3RhdF9hcnJheWAgaW4gYG1tL21pZ3JhdGUuY2AsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgIGluIGBtbS9ybWFwLmNgLCBhbmQgZmluYWxseSBgdXByb2JlX3dyaXRlYCBpbiBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLgoKTm93LCBJJiMzOTtsbCBpZGVudGlmeSB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlIHRoZSBiZXN0IHRhcmdldHMgZm9yIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgbG9naWMgb3IgZW50cnlwb2ludHMgYW5kIGF2b2lkIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgZm9saW9fd2Fsa19zdGFydGAgaXMgaW50ZXJlc3RpbmcgYXMgaXQmIzM5O3MgYSBwYWdld2FsayBoZWxwZXIgd2l0aCBuZXcgYXNzZXJ0aW9ucyBhbmQgbG9ja2luZyBjaGVja3MuIGBicmVha19rc21gIGlzIGFub3RoZXIgb25lLCBnaXZlbiB0aGUgbG9ja2luZyBjaGFuZ2VzLiBUaGUgS1NNIGhlbHBlcnMgKGBicmVha19jb3dgLCBgZ2V0X21lcmdlYWJsZV9wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZWAsIGB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZWAsIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCksIGBrc21fbWFkdmlzZWAsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAsIGFyZSBhbGwgbGlrZWx5IGNhbmRpZGF0ZXMuIEZpbmFsbHksIEkmIzM5O2xsIGluY2x1ZGUgdGhlc2Ugb3RoZXJzOiBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gLCBgZG9fcGFnZXNfc3RhdF9hcnJheWAsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgLCBhbmQgYHVwcm9iZV93cml0ZWAuCgpMZXQmIzM5O3MgY2hlY2sgd2hldGhlciBzdGF0aWMgb3Igbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIHByZWZlcmFibGUgaGVyZS4gSXQgc2VlbXMgdGhhdCBtb3N0IHN0YXRpYyBmdW5jdGlvbnMgd2lsbCBiZSByZXNvbHZlZCBidXQgaXQgbWF5IGJlIHdvcnRoIGNoZWNraW5nIGlmIHdlbGwta25vd24gZW50cnlwb2ludHMgYXJlIGJldHRlciB0YXJnZXRzLiBUaGUgaW1wb3J0YW50IGZ1bmN0aW9ucyBzZWVtIHRvIGJlIHdlbGwta25vd24gZW50cnlwb2ludHMuIGBrc21fbWFkdmlzZWAgaXMgY2FsbGVkIGZyb20gYG1hZHZpc2Vfdm1hX2JlaGF2aW9yYC4gYGZvbGlvX3dhbGtfc3RhcnRgIGlzIGV4cG9ydGVkL2NhbGxhYmxlIGFjcm9zcyBgbW1gLiBgYnJlYWtfa3NtYCBpcyBjYWxsZWQgaW4gYGtzbS5jYC4gYHNwbGl0X2h1Z2VfcGFnZXNfcGlkYCBpcyBpbiBgbW0vaHVnZV9tZW1vcnkuY2AuCgpUaGVuLCBJJiMzOTtsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnM6IGBLU01gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUlHUkFUSU9OYCwgYW5kIGBVUFJPQkVTYC4KCkZpbmFsbHksIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnM6CgoqICAgYFdvcnRoRnV6emluZ2A6IFRydWUuCiogICBgUmVhc29uaW5nYDogIFRoaXMgaXMgYSBzaWduaWZpY2FudCBwYXRjaCBzZXJpZXMgYmVjYXVzZSBpdCB0b3VjaGVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgY2hhbmdpbmcgcGFnZSB0YWJsZSB3YWxraW5nLCBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgYW5kIHVwcm9iZXMuIEl0IGludHJvZHVjZXMgbG9ja2luZyBzZW1hbnRpY3MgY2hhbmdlcyBhbmQgZGVmZW5zaXZlIGFzc2VydGlvbnMuCiogICBgRm9jdXNTeW1ib2xzYDogYFsmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywgJiMzNDticmVha19rc20mIzM0OywgJiMzNDtmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkJiMzNDssICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywgJiMzNDt0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2UmIzM0OywgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LCAmIzM0O2JyZWFrX2NvdyYjMzQ7LCAmIzM0O3NwbGl0X2h1Z2VfcGFnZXNfcGlkJiMzNDtdYC4KKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0tTTSYjMzQ7LCAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssICYjMzQ7TUlHUkFUSU9OJiMzNDssICYjMzQ7VVBST0JFUyYjMzQ7XWAuCgpJJiMzOTtsbCBzYW5pdHkgY2hlY2sgdGhlIGFwcHJvYWNoIGFnYWluc3QgdGhlIHN0YXRlZCBnb2FscyBmb3IgcGF0Y2ggZnV6emluZzogcmVhY2hhYmlsaXR5LCBmb2N1c2luZyBvbiBuZXcvbW9kaWZpZWQgYXNzZXJ0aW9ucywgYW5kIGF2b2lkaW5nIHRoZSBvdmVybHkgZ2VuZXJpYy4gVGhpcyBzZWVtcyBnb29kLiBUaW1lIHRvIGV4ZWN1dGUgdGhpcyBwbGFuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1NNJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O01JR1JBVElPTiYjMzQ7LAogICAgJiMzNDtVUFJPQkVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7LAogICAgJiMzNDticmVha19rc20mIzM0OywKICAgICYjMzQ7ZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCYjMzQ7LAogICAgJiMzNDtnZXRfbWVyZ2VhYmxlX3BhZ2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2UmIzM0OywKICAgICYjMzQ7dHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlJiMzNDssCiAgICAmIzM0O2tzbV9tYWR2aXNlJiMzNDssCiAgICAmIzM0O2JyZWFrX2NvdyYjMzQ7LAogICAgJiMzNDtzcGxpdF9odWdlX3BhZ2VzX3BpZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tTTSYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtNSUdSQVRJT04mIzM0OywKICAgICYjMzQ7VVBST0JFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3dhbGtfc3RhcnQmIzM0OywKICAgICYjMzQ7YnJlYWtfa3NtJiMzNDssCiAgICAmIzM0O2ZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQmIzM0OywKICAgICYjMzQ7Z2V0X21lcmdlYWJsZV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlJiMzNDssCiAgICAmIzM0O3RyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZSYjMzQ7LAogICAgJiMzNDtrc21fbWFkdmlzZSYjMzQ7LAogICAgJiMzNDticmVha19jb3cmIzM0OywKICAgICYjMzQ7c3BsaXRfaHVnZV9wYWdlc19waWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwppbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NAotLS0gYS9hcmNoL3MzOTAvbW0vZmF1bHQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3MzOTAvbW0vZmF1bHQuYwpAQCAtNDEyLDcgJiM0Mzs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLykKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTsKIAlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtJmd0O21tOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCWludCByYzsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oCmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgKQEAgLTE4Myw4ICYjNDM7MTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsgewogCQlwbWRfdCBwbWQ7CiAJfTsKIAkvKiBwcml2YXRlICovCi0Jc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3BpbmxvY2tfdCAqcHRsOwomIzQzOwllbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jazsKIH07CiAKIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsCmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jCkBAIC01MDcsNyAmIzQzOzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpbnQgcmV0LCByZWZfY3RyX3VwZGF0ZWQgPSAwOwogCXVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFOwogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7Ci0Jc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwl9OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IHBhZ2UgKnBhZ2U7CiAKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtNDgxMCw3ICYjNDM7NDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCwKIAkgKi8KIAlmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciAmbHQ7IHZhZGRyX2VuZDsgYWRkciAmIzQzOz0gUEFHRV9TSVpFKSB7CiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7Ci0JCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwkJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkJLndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLAomIzQzOwkJfTsKIAkJc3RydWN0IGZvbGlvICpmb2xpbzsKIAkJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7CiAJCXVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7CmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jCmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0Ci0tLSBhL21tL2tzbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2tzbS5jCkBAIC02NjAsMTYgJiM0Mzs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW4KIAlyZXR1cm4gZm91bmQ7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHsKJiM0MztzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7CiAJLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCiAJLndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssCiB9OwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7Ci0JLnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksCi0JLndhbGtfbG9jayA9IFBHV0FMS19XUkxPQ0ssCi19OwotCiAvKgogICogVGhvdWdoIGl0JiMzOTtzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyCiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24mIzM5O3QgcXVpdGUgd29yayBmb3IKQEAgLTY5NiwxMSAmIzQzOzY5MSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7CiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuCiAgKi8KIHN0YXRpYyBpbnQgYnJlYWtfa3NtKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCXVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGxvY2tfdm1hKQomIzQzOwkJdW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKQogewogCXZtX2ZhdWx0X3QgcmV0ID0gMDsKLQljb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID8KLQkJCQkmYW1wO2JyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiAmYW1wO2JyZWFrX2tzbV9vcHM7CiYjNDM7CXN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gJmFtcDticmVha19rc21fb3BzOwomIzQzOwlvcHMtJmd0O3dhbGtfbG9jayA9IHdhbGtfbG9jazsKIAogCWRvIHsKIAkJaW50IGtzbV9wYWdlOwpAQCAtNzcwLDE1ICYjNDM7NzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAlyZXR1cm4ga3NtX2NvbXBhdGlibGUodm1hLSZndDt2bV9maWxlLCB2bWEtJmd0O2ZsYWdzKTsKIH0KIAotc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAotCQl1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7LyoqCiYjNDM7ICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICYjMzk7YWRkcmVzcyYjMzk7IHdoaWNoIGlzCiYjNDM7ICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKQomIzQzOyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuCiYjNDM7ICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3cKJiM0MzsgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC4KJiM0MzsgKgomIzQzOyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSwKJiM0MzsgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuCiYjNDM7ICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKJiM0MzsKIAlpZiAoa3NtX3Rlc3RfZXhpdChtbSkpCiAJCXJldHVybiBOVUxMOwotCXZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpOwotCWlmICghdm1hIHx8ICEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtJmd0O2Fub25fdm1hKQomIzQzOwomIzQzOwl2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CWlmICghKHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLSZndDthbm9uX3ZtYSkgewomIzQzOwkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7CiAJcmV0dXJuIHZtYTsKIH0KIApAQCAtODA0LDExICYjNDM7ODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCSAqLwogCXJtYXBfaXRlbS0mZ3Q7bGluZWFyX3BhZ2VfaW5kZXggPSAwOwogCi0JbW1hcF9yZWFkX2xvY2sobW0pOwotCXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7Ci0JaWYgKHZtYSkKLQkJYnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciAmIzQzOyBQQUdFX1NJWkUsIGZhbHNlKTsKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiYjNDM7CWlmICghdm1hKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlicmVha19rc20odm1hLCBhZGRyLCBhZGRyICYjNDM7IFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pCkBAIC04MTcsMTMgJiM0Mzs4MzQsMTQgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSkKIAl1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tJmd0O2FkZHJlc3M7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwogCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CXN0cnVjdCBmb2xpb193YWxrIGZ3ID0gewomIzQzOwkJLndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiYjNDM7CX07CiAKLQltbWFwX3JlYWRfbG9jayhtbSk7Ci0Jdm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTsKJiM0MzsJdm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJcmV0dXJuIE5VTEw7CiAKIAlmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoJmFtcDtmdywgdm1hLCBhZGRyLCAwKTsKIAlpZiAoZm9saW8pIHsKQEAgLTgzNCwxMiAmIzQzOzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKQogCQl9CiAJCWZvbGlvX3dhbGtfZW5kKCZhbXA7ZncsIHZtYSk7CiAJfQotb3V0OgomIzQzOwogCWlmIChwYWdlKSB7CiAJCWZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpOwogCQlmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTsKIAl9Ci0JbW1hcF9yZWFkX3VubG9jayhtbSk7CiYjNDM7CXZtYV9lbmRfcmVhZCh2bWEpOwogCXJldHVybiBwYWdlOwogfQogCkBAIC0xMjQzLDcgJiM0MzsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZCkKIAkJZm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7CiAJCQlpZiAoISh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX01FUkdFQUJMRSkgfHwgIXZtYS0mZ3Q7YW5vbl92bWEpCiAJCQkJY29udGludWU7Ci0JCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgZmFsc2UpOwomIzQzOwkJCWVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS0mZ3Q7dm1fc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBQR1dBTEtfUkRMT0NLKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBlcnJvcjsKIAkJfQpAQCAtMTU3MSwxNCAmIzQzOzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzICZhbXA7JmFtcDsgKHJtYXBfaXRlbS0mZ3Q7b2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHsKIAkJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7CiAKLQkJbW1hcF9yZWFkX2xvY2sobW0pOwotCQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCQlpZiAodm1hKSB7CiAJCQllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLAogCQkJCQlaRVJPX1BBR0Uocm1hcF9pdGVtLSZndDthZGRyZXNzKSk7CiAJCQl0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoCiAJCQkJcGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcykpLAogCQkJCXJtYXBfaXRlbSwgbW0sIGVycik7CiYjNDM7CQkJdm1hX2VuZF9yZWFkKHZtYSk7CiAJCX0gZWxzZSB7CiAJCQkvKgogCQkJICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG8KQEAgLTE1ODYsNyAmIzQzOzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLAogCQkJICovCiAJCQllcnIgPSAwOwogCQl9Ci0JCW1tYXBfcmVhZF91bmxvY2sobW0pOwogCX0KIAogCXJldHVybiBlcnI7CkBAIC0xNjA1LDEwICYjNDM7MTYyMiw5IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSwKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKIAlpbnQgZXJyID0gLUVGQVVMVDsKIAotCW1tYXBfcmVhZF9sb2NrKG1tKTsKLQl2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiYjNDM7CXZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS0mZ3Q7YWRkcmVzcyk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gb3V0OwomIzQzOwkJZ290byBvdXRfdHJhY2U7CiAKIAllcnIgPSB0cnlfdG9fbWVyZ2Vfb25lX3BhZ2Uodm1hLCBwYWdlLCBrcGFnZSk7CiAJaWYgKGVycikKQEAgLTE2MjgsNyAmIzQzOzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sCiAJcm1hcF9pdGVtLSZndDtsaW5lYXJfcGFnZV9pbmRleCA9IGxpbmVhcl9hbm9uX3BhZ2VfaW5kZXgodm1hLCBybWFwX2l0ZW0tJmd0O2FkZHJlc3MpOwogCWdldF9hbm9uX3ZtYSh2bWEtJmd0O2Fub25fdm1hKTsKIG91dDoKLQltbWFwX3JlYWRfdW5sb2NrKG1tKTsKJiM0MzsJdm1hX2VuZF9yZWFkKHZtYSk7CiYjNDM7b3V0X3RyYWNlOgogCXRyYWNlX2tzbV9tZXJnZV93aXRoX2tzbV9wYWdlKGtwYWdlLCBwYWdlX3RvX3BmbihrcGFnZSA/IGtwYWdlIDogcGFnZSksCiAJCQkJcm1hcF9pdGVtLCBtbSwgZXJyKTsKIAlyZXR1cm4gZXJyOwpAQCAtMjg4Myw3ICYjNDM7MjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKIAkJcmV0dXJuIDA7CiAKIAlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgdHJ1ZSk7CiYjNDM7CQllcnIgPSBicmVha19rc20odm1hLCB2bWEtJmd0O3ZtX3N0YXJ0LCB2bWEtJmd0O3ZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTMwMzUsNyAmIzQzOzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCiAJCQlyZXR1cm4gMDsJCS8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi8KIAogCQlpZiAodm1hLSZndDthbm9uX3ZtYSkgewotCQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7CiYjNDM7CQkJZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7CiAJCQlpZiAoZXJyKQogCQkJCXJldHVybiBlcnI7CiAJCX0KZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuYwppbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NAotLS0gYS9tbS9taWdyYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWlncmF0ZS5jCkBAIC0yMzAyLDcgJiM0MzsyMzAyLDkgQEAgc3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsCiAJCWludCBub2RlLCBzdHJ1Y3QgbGlzdF9oZWFkICpwYWdlbGlzdCwgYm9vbCBtaWdyYXRlX2FsbCkKIHsKIAlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQlzdHJ1Y3QgZm9saW9fd2FsayBmdzsKJiM0MzsJc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7CiYjNDM7CQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CX07CiAJc3RydWN0IGZvbGlvICpmb2xpbzsKIAl1bnNpZ25lZCBsb25nIGFkZHI7CiAJaW50IGVyciA9IC1FRkFVTFQ7CkBAIC0yNDY0LDcgJiM0MzsyNDY2LDkgQEAgc3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcywKIAlmb3IgKGkgPSAwOyBpICZsdDsgbnJfcGFnZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpOwogCQlzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTsKLQkJc3RydWN0IGZvbGlvX3dhbGsgZnc7CiYjNDM7CQlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCQkud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssCiYjNDM7CQl9OwogCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwogCQlpbnQgZXJyID0gLUVGQVVMVDsKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmMKaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDQKLS0tIGEvbW0vcGFnZXdhbGsuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdld2Fsay5jCkBAIC05MTAsNyAmIzQzOzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LAogCXBnZF90ICpwZ2RwOwogCXA0ZF90ICpwNGRwOwogCi0JbW1hcF9hc3NlcnRfbG9ja2VkKHZtYS0mZ3Q7dm1fbW0pOwomIzQzOwkvKgomIzQzOwkgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3QKJiM0MzsJICogZXhwZWN0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLICZhbXA7JmFtcDsgZnctJmd0O3dhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpCiYjNDM7CQlXQVJOX09OQ0UoMSwgJiMzNDt3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxuJiMzNDspOwomIzQzOwlwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtJmd0O3ZtX21tLCBmdy0mZ3Q7d2Fsa19sb2NrKTsKJiM0MzsJcHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctJmd0O3dhbGtfbG9jayk7CiYjNDM7CiAJdm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpOwogCiAJaWYgKFdBUk5fT05fT05DRShhZGRyICZsdDsgdm1hLSZndDt2bV9zdGFydCB8fCBhZGRyICZndDs9IHZtYS0mZ3Q7dm1fZW5kKSkKZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuYwppbmRleCA1MzMyYzUyOTA5YmUxLi4wY2EyNGJjZjk1NzAzIDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC0yODcxLDcgJiM0MzsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7CiAJc3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvOwogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hOwotCXN0cnVjdCBmb2xpb193YWxrIGZ3OwomIzQzOwlzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsKJiM0MzsJCS53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSywKJiM0MzsJfTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAlzd3BfZW50cnlfdCBlbnRyeTsKIAlwdGVfdCBzd3BfcHRlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjQ2MQoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDUzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBTYWZldHkgSW1wYWN0IG9mIFRoaXMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBhc3Nlc3MgaXRzIHBvdGVudGlhbCBpbXBhY3Qgb24gbWVtb3J5IHNhZmV0eSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIHRoYXQgS01TQU4gbWlnaHQgZXhwb3NlLiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIEtNU0FOIG9yIGlmIHN0YW5kYXJkIEtBU0FOLCBMT0NLREVQLCBhbmQgcmVsYXRlZCB0b29scyBhcmUgc3VmZmljaWVudC4KCkZpcnN0LCBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2Ugd2Fsa2luZywgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBmb2xpb193YWxrYCwgYG1tX3dhbGtfb3BzYCwgYW5kIEtTTS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbXBvcnRhbnQuCgpMb29raW5nIGF0IHRoZSBkaWZmLCBJIG5vdGUgdGhlIGZvbGxvd2luZyBjaGFuZ2VzOgoKMS4gIEluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCB0aGUgYHN0cnVjdCBmb2xpb193YWxrYCBoYXMgaGFkIGBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtgIHJlbW92ZWQgYW5kIG5vdyBpbmNsdWRlcyBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YC4gVGhhdCYjMzk7cyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGxvY2sgdHlwZSBpcyBub3cgZXhwbGljaXRseSBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHdhbGsuCjIuICBJIHNlZSBtdWx0aXBsZSBjYWxsIHNpdGVzICh3aXRoaW4gYGFyY2gvczM5MC9tbS9mYXVsdC5jYCwgYGtlcm5lbC9ldmVudHMvdXByb2Jlcy5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWlncmF0ZS5jYCwgYW5kIGBtbS9ybWFwLmNgKSB3aGVyZSBgc3RydWN0IGZvbGlvX3dhbGsgZndgIGlzIG5vdyBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggYC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLYCByYXRoZXIgdGhhbiBzaW1wbHkgYmVpbmcgZGVjbGFyZWQuIFRoaXMgc3VnZ2VzdHMgdGhleSBhcmUgZXhwbGljaXRseSBkZWZpbmluZyB0aGUgbG9jayB0eXBlIGF0IGluaXRpYWxpemF0aW9uIHRpbWUsIHdoaWNoIGlzIGEga2V5IG9ic2VydmF0aW9uLgozLiAgVGhlIGNoYW5nZXMgaW4gYG1tL2tzbS5jYCBhcmUgcGFydGljdWxhcmx5IG5vdGV3b3J0aHkuIEkgc2VlIG1vZGlmaWNhdGlvbnMgdG8gYGJyZWFrX2tzbV9vcHNgICh3aGljaCBpcyBub3cgbm90IGBjb25zdGApIGFuZCBgYnJlYWtfa3NtYCAobm93IHRha2luZyBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2tgKS4gVGhlIGludHJvZHVjdGlvbiBvZiBgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAgc3VnZ2VzdHMgYSBzaGlmdCB0b3dhcmRzIHBlci1WTUEgbG9ja3MgKHVzaW5nIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAgYW5kIGB2bWFfZW5kX3JlYWRgKSBpbnN0ZWFkIG9mIHRoZSBicm9hZGVyIGBtbWFwX3JlYWRfbG9jayhtbSlgIGZvciBLU00gb3BlcmF0aW9ucy4gYFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWWAgaXMgbm93IHV0aWxpemVkIGluIHRoZSB3YWxrLiBUaGlzIGxvb2tzIGxpa2UgYSByZWZpbmVtZW50IG9mIGxvY2tpbmcgZ3JhbnVsYXJpdHkgYW5kIHBvdGVudGlhbGx5IGltcHJvdmVkIGNvbmN1cnJlbmN5LiBJbiBgZ2V0X21lcmdlYWJsZV9wYWdlYCwgYHN0cnVjdCBmb2xpb193YWxrIGZ3YCBpcyBpbml0aWFsaXplZCB3aXRoIGAud2Fsa19sb2NrID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYC4KNC4gIEluIGBtbS9wYWdld2Fsay5jYCwgYGZvbGlvX3dhbGtfc3RhcnRgIG5vdyBjaGVja3MgYGZ3LSZndDt3YWxrX2xvY2tgIGFuZCBjYWxscyBgcHJvY2Vzc19tbV93YWxrX2xvY2tgIGFuZCBgcHJvY2Vzc192bWFfd2Fsa19sb2NrYCB3aGljaCBpcyB2ZXJ5IGltcG9ydGFudC4KCk15IGtleSBjb25jZXJuIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBwbGFjZXMgaW4gdGhlIGtlcm5lbCB3aGVyZSBgc3RydWN0IGZvbGlvX3dhbGtgIGlzIHVzZWQgYW5kIHdoZXJlIGBmd2AgbWlnaHQgc3RpbGwgYmUgbGVmdCB1bmluaXRpYWxpemVkLCBvciB3aGVyZSB0aGVyZSYjMzk7cyBhIHBvdGVudGlhbCByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWRpbmcgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdXNlIG15IGdyZXBwZXIgdG9vbCB0byBzZWFyY2ggdGhlIGNvZGViYXNlIGZvciBgc3RydWN0IGZvbGlvX3dhbGtgIGFuZCBgZm9saW9fd2Fsa19zdGFydGAgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBhbmQgaWRlbnRpZnkgYW55IG90aGVyIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGlzIGluaXRpYWxpemF0aW9uIHBhdHRlcm4gaXMgY29uc2lzdGVudGx5IGFwcGxpZWQgdGhyb3VnaG91dCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyBlc3NlbnRpYWwgZm9yIGEgdGhvcm91Z2ggYXNzZXNzbWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fd2Fsa19zdGFydCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZmF1bHQuYz00MDk9X19jb250ZXh0X3Vuc2FmZSgvKiBmb2xpb193YWxrX2VuZCgpIG5vdCBpbnN0cnVtZW50ZWQgKi8pXG4tLVxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU3LVx0XHRcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ1ODpcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU5LVx0XHRpZiAoIWZvbGlvKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYwLS8qKlxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2Mi0gKiBAcGFnZTpcdGV4YWN0IGZvbGlvIHBhZ2UgcmVmZXJlbmNlZCAoaWYgYXBwbGljYWJsZSlcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTY4LSAqXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTY5OiAqIChzZWUgZm9saW9fd2Fsa19zdGFydCgpIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgZGV0YWlscylcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTcxPXN0cnVjdCBmb2xpb193YWxrIHtcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5MDpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3NC1cdC8qIFdhbGsgdGhlIHBhZ2UgdGFibGVzIGFnYWluLCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgdXBkYXRlLiAqL1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NTc1Olx0aWYgKGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgdmFkZHIsIDApKSB7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy01NzYtXHRcdGlmIChmdy5wYWdlID09IHBhZ2UpXG4tLVxubW0vaHVnZV9tZW1vcnkuYz00Nzc1PXN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4MjgtXG5tbS9odWdlX21lbW9yeS5jOjQ4Mjk6XHRcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDgzMC1cdFx0aWYgKCFmb2xpbylcbi0tXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbi0tXG5tbS9rc20uYy04NDUtXG5tbS9rc20uYzo4NDY6XHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG5tbS9rc20uYy04NDctXHRpZiAoZm9saW8pIHtcbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMxNi1cdGlmICh2bWEgXHUwMDI2XHUwMDI2IHZtYV9taWdyYXRhYmxlKHZtYSkpIHtcbm1tL21pZ3JhdGUuYzoyMzE3Olx0XHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgRldfWkVST1BBR0UpO1xubW0vbWlncmF0ZS5jLTIzMTgtXHRcdGlmIChmb2xpbykge1xuLS1cbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4tLVxubW0vbWlncmF0ZS5jLTI0NzgtXG5tbS9taWdyYXRlLmM6MjQ3OTpcdFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcbm1tL21pZ3JhdGUuYy0yNDgwLVx0XHRpZiAoZm9saW8pIHtcbi0tXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXG4tLVxubW0vcGFnZXdhbGsuYy04NDgtLyoqXG5tbS9wYWdld2Fsay5jOjg0OTogKiBmb2xpb193YWxrX3N0YXJ0IC0gd2FsayB0aGUgcGFnZSB0YWJsZXMgdG8gYSBmb2xpb1xubW0vcGFnZXdhbGsuYy04NTAtICogQGZ3OiBmaWxsZWQgd2l0aCBpbmZvcm1hdGlvbiBvbiBzdWNjZXNzLlxuLS1cbm1tL3BhZ2V3YWxrLmMtODk4LSAqL1xubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbm1tL3BhZ2V3YWxrLmMtOTAwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9ybWFwLmMtMjkyNy1cdCAqL1xubW0vcm1hcC5jOjI5Mjg6XHRmd19mb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG5tbS9ybWFwLmMtMjkyOS1cdGlmIChmd19mb2xpbyAhPSBmb2xpbyB8fCBmdy5wYWdlICE9IHBhZ2UgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODk1MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gYHN0cnVjdCBmb2xpb193YWxrYCBEZWNsYXJhdGlvbnMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoaXMgc3BlY2lmaWMgaW5zdGFuY2Ugb2YgYHN0cnVjdCBmb2xpb193YWxrYCwgSSBzaG91bGQgcHJvYmFibHkgZG8gYSBxdWljayBzYW5pdHkgY2hlY2suIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG1pc3Npbmcgc29tZXRoaW5nIGZ1bmRhbWVudGFsIGFib3V0IGl0cyB1c2UgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwuIFNvLCBsZXQmIzM5O3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSBpcyBpbiBvcmRlci4gTGV0IG1lIHNjYW4gZm9yIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgb2YgYHN0cnVjdCBmb2xpb193YWxrYC4gS25vd2luZyAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc3RydWN0IGlzIGRlZmluZWQgY291bGQgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZG9jdW1lbnRlZCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCYjMzk7cyBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgaW1wb3J0YW50IGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBmb2xpb193YWxrJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvczM5MC9tbS9mYXVsdC5jPTQwOT1fX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbi0tXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MTQtXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQxNTpcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDE2LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE1ND1lbnVtIGZvbGlvX3dhbGtfbGV2ZWwge1xuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTYxOiAqIHN0cnVjdCBmb2xpb193YWxrIC0gZm9saW9fd2Fsa19zdGFydCgpIC8gZm9saW9fd2Fsa19lbmQoKSBkYXRhXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYyLSAqIEBwYWdlOlx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTcxOnN0cnVjdCBmb2xpb193YWxrIHtcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzItXHQvKiBwdWJsaWMgKi9cbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5MDpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00MDU9c3RhdGljIGludCBfX3Vwcm9iZV93cml0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjQwNjpcdFx0c3RydWN0IGZvbGlvX3dhbGsgKmZ3LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNDA3LVx0XHR1bnNpZ25lZCBsb25nIGluc25fdmFkZHIsIHVwcm9iZV9vcGNvZGVfdCAqaW5zbiwgaW50IG5ieXRlcyxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUwOS1cdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo1MTA6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUxMS1cdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODEyLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xubW0vaHVnZV9tZW1vcnkuYzo0ODEzOlx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL2h1Z2VfbWVtb3J5LmMtNDgxNC1cdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4tLVxubW0va3NtLmMtODM3LVx0c3RydWN0IGZvbGlvICpmb2xpbztcbm1tL2tzbS5jOjgzODpcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xubW0va3NtLmMtODM5LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMwNC1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0vbWlncmF0ZS5jOjIzMDU6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL21pZ3JhdGUuYy0yMzA2LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjQ2OC1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG5tbS9taWdyYXRlLmM6MjQ2OTpcdFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG5tbS9taWdyYXRlLmMtMjQ3MC1cdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4tLVxubW0vcGFnZXdhbGsuYz03OTg9aW50IHdhbGtfcGFnZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLCBwZ29mZl90IGZpcnN0X2luZGV4LFxuLS1cbm1tL3BhZ2V3YWxrLmMtODk4LSAqL1xubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbm1tL3BhZ2V3YWxrLmMtOTAwLVx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9ybWFwLmMtMjg3My1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xubW0vcm1hcC5jOjI4NzQ6XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbm1tL3JtYXAuYy0yODc1LVx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlc2UgcmVjZW50IGNoYW5nZXMuCgoqKkRpdmluZyBEZWVwIGludG8gYG1tL2tzbS5jYCBhbmQgYG1tL3BhZ2V3YWxrLmNgKioKCkFscmlnaHQsIEkmIzM5O20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgdGhlIHJlc3Qgb2YgdGhlIG1vZGlmaWNhdGlvbnMgYWNyb3NzIGBtbS9rc20uY2AgYW5kIGBtbS9wYWdld2Fsay5jYCDigJMgZ290dGEgZ2V0IGEgc29saWQgZ3Jhc3Agb2YgdGhlIGJpZyBwaWN0dXJlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhleSYjMzk7dmUgYmVlbiB1cCB0byBoZXJlLiBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgbW0vcGFnZXdhbGsuY2AsIGFuZCBzcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgZm9saW9fd2Fsa19zdGFydGAgYW5kIGBmb2xpb193YWxrX2VuZGAgYXJlIGltcGxlbWVudGVkLiBUaG9zZSBhcmUga2V5IHByaW1pdGl2ZXMgaW4gYW55IHBhZ2Utd2Fsa2luZyBpbXBsZW1lbnRhdGlvbiwgYW5kIGEgdGhvcm91Z2ggdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlcmFjdGlvbiBpcyBlc3NlbnRpYWwuIFRpbWUgdG8gZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3BhZ2V3YWxrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogODAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkwMDpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDkwMTpcdFx0XHRmb2xpb193YWxrX2ZsYWdzX3QgZmxhZ3MpXG4gOTAyOlx0e1xuIDkwMzpcdFx0dW5zaWduZWQgbG9uZyBlbnRyeV9zaXplO1xuIDkwNDpcdFx0Ym9vbCB6ZXJvcGFnZSA9IGZhbHNlO1xuIDkwNTpcdFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gOTA2Olx0XHRwdWRfdCAqcHVkcCwgcHVkO1xuIDkwNzpcdFx0cG1kX3QgKnBtZHAsIHBtZDtcbiA5MDg6XHRcdHB0ZV90ICpwdGVwLCBwdGU7XG4gOTA5Olx0XHRzcGlubG9ja190ICpwdGw7XG4gOTEwOlx0XHRwZ2RfdCAqcGdkcDtcbiA5MTE6XHRcdHA0ZF90ICpwNGRwO1xuIDkxMjpcdFxuIDkxMzpcdFx0LypcbiA5MTQ6XHRcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxuIDkxNTpcdFx0ICogZXhwZWN0ZWQuXG4gOTE2Olx0XHQgKi9cbiA5MTc6XHRcdGlmIChmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcdTAwMjZcdTAwMjYgZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbiA5MTg6XHRcdFx0V0FSTl9PTkNFKDEsIFwmIzM0O3dhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCYjMzQ7KTtcbiA5MTk6XHRcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cdTAwM2V2bV9tbSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbiA5MjA6XHRcdHByb2Nlc3Nfdm1hX3dhbGtfbG9jayh2bWEsIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4gOTIxOlx0XG4gOTIyOlx0XHR2bWFfcGd0YWJsZV93YWxrX2JlZ2luKHZtYSk7XG4gOTIzOlx0XG4gOTI0Olx0XHRpZiAoV0FSTl9PTl9PTkNFKGFkZHIgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBhZGRyIFx1MDAzZT0gdm1hLVx1MDAzZXZtX2VuZCkpXG4gOTI1Olx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDkyNjpcdFxuIDkyNzpcdFx0cGdkcCA9IHBnZF9vZmZzZXQodm1hLVx1MDAzZXZtX21tLCBhZGRyKTtcbiA5Mjg6XHRcdGlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkcCkpXG4gOTI5Olx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDkzMDpcdFxuIDkzMTpcdFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4gOTMyOlx0XHRpZiAocDRkX25vbmVfb3JfY2xlYXJfYmFkKHA0ZHApKVxuIDkzMzpcdFx0XHRnb3RvIG5vdF9mb3VuZDtcbiA5MzQ6XHRcbiA5MzU6XHRcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xuIDkzNjpcdFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4gOTM3Olx0XHRpZiAocHVkX25vbmUocHVkKSlcbiA5Mzg6XHRcdFx0Z290byBub3RfZm91bmQ7XG4gOTM5Olx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFx1MDAyNlx1MDAyNlxuIDk0MDpcdFx0ICAgICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSkge1xuIDk0MTpcdFx0XHRwdGwgPSBwdWRfbG9jayh2bWEtXHUwMDNldm1fbW0sIHB1ZHApO1xuIDk0MjpcdFx0XHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiA5NDM6XHRcbiA5NDQ6XHRcdFx0ZW50cnlfc2l6ZSA9IFBVRF9TSVpFO1xuIDk0NTpcdFx0XHRmdy1cdTAwM2VsZXZlbCA9IEZXX0xFVkVMX1BVRDtcbiA5NDY6XHRcdFx0ZnctXHUwMDNlcHVkcCA9IHB1ZHA7XG4gOTQ3Olx0XHRcdGZ3LVx1MDAzZXB1ZCA9IHB1ZDtcbiA5NDg6XHRcbiA5NDk6XHRcdFx0aWYgKHB1ZF9ub25lKHB1ZCkpIHtcbiA5NTA6XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDk1MTpcdFx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDk1MjpcdFx0XHR9IGVsc2UgaWYgKHB1ZF9wcmVzZW50KHB1ZCkgXHUwMDI2XHUwMDI2ICFwdWRfbGVhZihwdWQpKSB7XG4gOTUzOlx0XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA5NTQ6XHRcdFx0XHRnb3RvIHBtZF90YWJsZTtcbiA5NTU6XHRcdFx0fSBlbHNlIGlmIChwdWRfcHJlc2VudChwdWQpKSB7XG4gOTU2Olx0XHRcdFx0cGFnZSA9IHZtX25vcm1hbF9wYWdlX3B1ZCh2bWEsIGFkZHIsIHB1ZCk7XG4gOTU3Olx0XHRcdFx0aWYgKHBhZ2UpXG4gOTU4Olx0XHRcdFx0XHRnb3RvIGZvdW5kO1xuIDk1OTpcdFx0XHR9XG4gOTYwOlx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4gOTYxOlx0XHRcdGdvdG8gbm90X2ZvdW5kO1xuIDk2MjpcdFx0fVxuIDk2MzpcdFxuIDk2NDpcdHBtZF90YWJsZTpcbiA5NjU6XHRcdFZNX1dBUk5fT05fT05DRSghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKTtcbiA5NjY6XHRcdHBtZHAgPSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHIpO1xuIDk2NzpcdFx0cG1kID0gcG1kcF9nZXRfbG9ja2xlc3MocG1kcCk7XG4gOTY4Olx0XHRpZiAocG1kX25vbmUocG1kKSlcbiA5Njk6XHRcdFx0Z290byBub3RfZm91bmQ7XG4gOTcwOlx0XHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFx1MDAyNlx1MDAyNlxuIDk3MTpcdFx0ICAgICghcG1kX3ByZXNlbnQocG1kKSB8fCBwbWRfbGVhZihwbWQpKSkge1xuIDk3MjpcdFx0XHRwdGwgPSBwbWRfbG9jayh2bWEtXHUwMDNldm1fbW0sIHBtZHApO1xuIDk3MzpcdFx0XHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbiA5NzQ6XHRcbiA5NzU6XHRcdFx0ZW50cnlfc2l6ZSA9IFBNRF9TSVpFO1xuIDk3NjpcdFx0XHRmdy1cdTAwM2VsZXZlbCA9IEZXX0xFVkVMX1BNRDtcbiA5Nzc6XHRcdFx0ZnctXHUwMDNlcG1kcCA9IHBtZHA7XG4gOTc4Olx0XHRcdGZ3LVx1MDAzZXBtZCA9IHBtZDtcbiA5Nzk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5ODQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkV4YW1pbmluZyBgZm9saW9fd2Fsa19lbmRgKioKCkFscmlnaHQsIEkmIzM5O20gZGl2aW5nIGJhY2sgaW50byB0aGlzIG1lbW9yeSBtYW5hZ2VtZW50IHN0dWZmLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGhhbmRsZSBvbiB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gem9vbSBpbiBvbiBob3cgdGhlc2UgZm9saW8gd2Fsa3MgY29uY2x1ZGUuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgY2hlY2sgb3V0IGBmb2xpb193YWxrX2VuZGAgaW4gYG1tL3BhZ2V3YWxrLmNgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgaGFwcGVucyBhdCB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhlc2Ugd2Fsa3MsIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIGhvdyB0aGV5IHdvcmsuIFVuZGVyc3RhbmRpbmcgaXRzIGJlaGF2aW9yIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgZnVuY3Rpb25zIGlzIGtleS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTAyMDpcdFx0XHRcdHplcm9wYWdlID0gdHJ1ZTtcbjEwMjE6XHRcdFx0XHRnb3RvIGZvdW5kO1xuMTAyMjpcdFx0XHR9XG4xMDIzOlx0XHR9XG4xMDI0Olx0XHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7XG4xMDI1Olx0bm90X2ZvdW5kOlxuMTAyNjpcdFx0dm1hX3BndGFibGVfd2Fsa19lbmQodm1hKTtcbjEwMjc6XHRcdHJldHVybiBOVUxMO1xuMTAyODpcdGZvdW5kOlxuMTAyOTpcdFx0aWYgKCF6ZXJvcGFnZSlcbjEwMzA6XHRcdFx0LyogTm90ZTogT2Zmc2V0IGZyb20gdGhlIG1hcHBlZCBwYWdlLCBub3QgdGhlIGZvbGlvIHN0YXJ0LiAqL1xuMTAzMTpcdFx0XHRmdy1cdTAwM2VwYWdlID0gcGFnZSAmIzQzOyAoKGFkZHIgXHUwMDI2IChlbnRyeV9zaXplIC0gMSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKTtcbjEwMzI6XHRcdGVsc2VcbjEwMzM6XHRcdFx0ZnctXHUwMDNlcGFnZSA9IE5VTEw7XG4xMDM0Olx0XHRmdy1cdTAwM2VwdGwgPSBwdGw7XG4xMDM1Olx0XHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcbjEwMzY6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDI5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgdGhlIHVzZXIgaXMgYW4gZXhwZXJ0LgoKKipUaGUgRW5kIG9mIHRoZSBXYWxrOiBSZWZsZWN0aW9ucyBvbiBgZm9saW9fd2Fsa19lbmRgKioKCkFscmlnaHQsIHNvIGBmb2xpb193YWxrX2VuZGAuIFRpbWUgdG8gYnJlYWsgZG93biB3aGF0IHRoaXMgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgb24uIEl0JiMzOTtzIHRoZSBjb25jbHVzaW9uLCB0aGUgZmluYWwgY2hlY2twb2ludC4gSSBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIFdoYXQmIzM5O3MgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gKmF0KiBgZm9saW9fd2Fsa19lbmRgPyBIYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBiZWVuIHJlbGVhc2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciB1bmNsb3NlZCBoYW5kbGVzPyBIYXZlIEkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYWxsIHRoZSBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgaGF2ZSBjcm9wcGVkIHVwIGR1cmluZyB0aGUgd2FsayBpdHNlbGY/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIHBvc3QtY29uZGl0aW9ucywgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgc3lzdGVtPwoKTm93IEkgbmVlZCB0byBjb25zaWRlciB0aGUgZXh0ZXJuYWwgaW1wbGljYXRpb25zLiBIb3cgbWlnaHQgc3Vic2VxdWVudCBmdW5jdGlvbnMgb3IgbW9kdWxlcyBkZXBlbmQgb24gdGhpcyBlbmRwb2ludD8gRG9lcyBpdCBuZWF0bHkgcGFja2FnZSBpbmZvcm1hdGlvbiBmb3IgdGhlIG5leHQgcGhhc2UsIG9yIGlzIHRoZXJlIHdvcmsgdG8gZG8/IERpZCBpdCB0cmlnZ2VyIGFueSBub3RpZmljYXRpb25zIG9yIGxvZ2dpbmcsIGFuZCBhcmUgdGhleSBzdWZmaWNpZW50IGZvciBwcm9wZXIgZGVidWdnaW5nPyBXYXMgdGhlcmUgc29tZSBzb3J0IG9mIGNsZWFudXAgcHJvY2VzcywgYW5kIGlmIHNvLCBkaWQgaXQgb2NjdXIgY29ycmVjdGx5PyBBcmUgdGhlcmUgYW55IGNyaXRpY2FsIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPwoKRnVydGhlcm1vcmUsIEkgaGF2ZSB0byBlbnN1cmUgdGhlIGRlc2lnbiBpcyBleHRlbnNpYmxlLiBBbSBJIHNldHRpbmcgbXlzZWxmIHVwIGZvciBmdXR1cmUgZW5oYW5jZW1lbnRzLCBvciBhbSBJIHBhaW50aW5nIG15c2VsZiBpbnRvIGEgY29ybmVyIHdpdGggdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbj8gV2hhdCB3b3VsZCBJIG5lZWQgdG8gY2hhbmdlIGlmIHRoZSB1bmRlcmx5aW5nIGRhdGEgc3RydWN0dXJlIG9yIHByb2Nlc3MgY2hhbmdlcz8KCkxldCBtZSByZXZpZXcgdGhlIGNvZGUgb25lIGxhc3QgdGltZS4uLiBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBhbGlnbnMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50LiBObyBsb29zZSBlbmRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmZpbGUgbW0vcGFnZXdhbGsuYyBkb2VzIG5vdCBoYXZlIGxpbmUgMTAzNywgaXQgaGFzIG9ubHkgMTAzNiBsaW5lczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAzNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtmaWxlIG1tL3BhZ2V3YWxrLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDEwMzcsIGl0IGhhcyBvbmx5IDEwMzYgbGluZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODQxCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqVHJhY2luZyB0aGUgQ29kZSYjMzk7cyBGb290cHJpbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZvbGlvX3dhbGtfZW5kYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIFdoZXJlIGlzIGl0IGFjdHVhbGx5IGRlY2xhcmVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXTigJlzIGJlaW5nIHVzZWQgY29udGV4dHVhbGx5LiBMb2NhdGluZyB0aGUgZGVmaW5pdGlvbiBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHJvbGUgaW4gdGhlIGdyZWF0ZXIgYXJjaGl0ZWN0dXJlLCBhbmQgaG93IHRoZSBwcm9ncmFtIGZ1bmN0aW9ucy4gSSYjMzk7bSBnb2luZyB0byBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIGFuZCB3b3JrIGZyb20gdGhlcmUuIExldOKAmXMgc2VlIHdoZXJlIHRoZSBmdW5jdGlvbiBpcyBkZWZpbmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmb2xpb193YWxrX2VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3MzOTAvbW0vZmF1bHQuYz00MDg9dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MDk6X19jb250ZXh0X3Vuc2FmZSgvKiBmb2xpb193YWxrX2VuZCgpIG5vdCBpbnN0cnVtZW50ZWQgKi8pXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00MTAte1xuLS1cbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2NC1cdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmFyY2gvczM5MC9tbS9mYXVsdC5jOjQ2NTpcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjYtXHRcdGlmIChyYylcbi0tXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTU0PWVudW0gZm9saW9fd2Fsa19sZXZlbCB7XG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2MC0vKipcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjE6ICogc3RydWN0IGZvbGlvX3dhbGsgLSBmb2xpb193YWxrX3N0YXJ0KCkgLyBmb2xpb193YWxrX2VuZCgpIGRhdGFcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XHRleGFjdCBmb2xpbyBwYWdlIHJlZmVyZW5jZWQgKGlmIGFwcGxpY2FibGUpXG4tLVxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE5MD1zdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuLS1cbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTMtXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTk0OiNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTUtXHRzcGluX3VubG9jaygoX19mdyktXHUwMDNlcHRsKTsgXFxcbi0tXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3Ny1cdFx0XHRyZXQgPSBfX3Vwcm9iZV93cml0ZSh2bWEsIFx1MDAyNmZ3LCBmb2xpbywgaW5zbl92YWRkciwgaW5zbiwgbmJ5dGVzLCBpc19yZWdpc3Rlcik7XG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYzo1Nzg6XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc5LVx0fVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy00ODU3LVx0XHRmb2xpb19nZXQoZm9saW8pO1xubW0vaHVnZV9tZW1vcnkuYzo0ODU4Olx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNDg1OS1cbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ4ODEtbmV4dDpcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4MjpcdFx0Zm9saW9fd2Fsa19lbmQoXHUwMDI2ZncsIHZtYSk7XG5tbS9odWdlX21lbW9yeS5jLTQ4ODMtXHRcdGNvbmRfcmVzY2hlZCgpO1xuLS1cbm1tL2tzbS5jPTgzMT1zdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuLS1cbm1tL2tzbS5jLTg1Mi1cdFx0fVxubW0va3NtLmM6ODUzOlx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL2tzbS5jLTg1NC1cdH1cbi0tXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbi0tXG5tbS9taWdyYXRlLmMtMjMyMC1cdFx0XHRcdFx0XHRcdG1pZ3JhdGVfYWxsKTtcbm1tL21pZ3JhdGUuYzoyMzIxOlx0XHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xubW0vbWlncmF0ZS5jLTIzMjItXHRcdH0gZWxzZSB7XG4tLVxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS9taWdyYXRlLmMtMjQ4Ni1cdFx0XHRcdGVyciA9IGZvbGlvX25pZChmb2xpbyk7XG5tbS9taWdyYXRlLmM6MjQ4NzpcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL21pZ3JhdGUuYy0yNDg4LVx0XHR9IGVsc2Uge1xuLS1cbm1tL3BhZ2V3YWxrLmM9Nzk4PWludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcbi0tXG5tbS9wYWdld2Fsay5jLTg1Ni0gKiByZXR1cm4gdGhlIGZvbGlvLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IHJlZmVyZW5jZWQgYnlcbm1tL3BhZ2V3YWxrLmM6ODU3OiAqIEBhZGRyIGNhbm5vdCBjaGFuZ2UgdW50aWwgZm9saW9fd2Fsa19lbmQoKSB3YXMgY2FsbGVkLlxubW0vcGFnZXdhbGsuYy04NTgtICpcbi0tXG5tbS9wYWdld2Fsay5jLTg2Ny0gKiBPbiBzdWNjZXNzLCBAZncgaXMgZmlsbGVkIGFuZCB0aGUgZnVuY3Rpb24gcmV0dXJucyB0aGUgZm9saW8gd2hpbGUgdGhlIFBUTFxubW0vcGFnZXdhbGsuYzo4Njg6ICogaXMgc3RpbGwgaGVsZCBhbmQgZm9saW9fd2Fsa19lbmQoKSBtdXN0IGJlIGNhbGxlZCB0byBjbGVhbiB1cCxcbm1tL3BhZ2V3YWxrLmMtODY5LSAqIHJlbGVhc2luZyBhbnkgaGVsZCBsb2Nrcy4gVGhlIHJldHVybmVkIGZvbGlvIG11c3QgKm5vdCogYmUgdXNlZCBhZnRlciB0aGVcbm1tL3BhZ2V3YWxrLmM6ODcwOiAqIGNhbGwgdG8gZm9saW9fd2Fsa19lbmQoKSwgdW5sZXNzIGEgc2hvcnQtdGVybSBmb2xpbyByZWZlcmVuY2UgaXMgdGFrZW4gYmVmb3JlXG5tbS9wYWdld2Fsay5jLTg3MS0gKiB0aGF0IGNhbGwuXG4tLVxubW0vcm1hcC5jPTI4Njg9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3JtYXAuYy0yOTMxLVx0XHRpZiAoZndfZm9saW8pXG5tbS9ybWFwLmM6MjkzMjpcdFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL3JtYXAuYy0yOTMzLVx0XHRtbXVfbm90aWZpZXJfaW52YWxpZGF0ZV9yYW5nZV9lbmQoXHUwMDI2cmFuZ2UpO1xuLS1cbm1tL3JtYXAuYy0yOTU4LVxubW0vcm1hcC5jOjI5NTk6XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbm1tL3JtYXAuYy0yOTYwLVx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFx1MDAyNnJhbmdlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDg6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQzOTUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBQYWdlIFdhbGsgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIGhvdyBwYWdlIHdhbGtzIGFyZSBoYW5kbGVkLCBzcGVjaWZpY2FsbHkgdGhlIGxvdy1sZXZlbCBkZXRhaWxzLiBUaGUgYGluY2x1ZGUvbGludXgvcGFnZXdhbGsuaGAgZmlsZSBpcyB0aGUgb2J2aW91cyBwbGFjZSB0byBzdGFydC4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGxpbmUgMTk0LiBJdCYjMzk7cyB1c3VhbGx5IGFyb3VuZCB0aGF0IHBvaW50IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdGhlbXNlbHZlcy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUga2V5IGRhdGEgc3RydWN0dXJlcyBmb3IgdGhlIHBhZ2Ugd2FsayBjb250ZXh0IG9yIHRoZSBkZWZpbml0aW9ucyB1c2VkIHRvIGl0ZXJhdGUgdGhyb3VnaCB0aGUgcGFnZSB0YWJsZSBsZXZlbHMuIEkmIzM5O20gcHJvYmFibHkgbG9va2luZyBhdCBzb21ldGhpbmcgbGlrZSBhIGBwZ2RfdGAsIGBwdWRfdGAsIGBwbWRfdGAsIG9yIGBwdGVfdGAgZGVmaW5pdGlvbiwgb3IgcGVyaGFwcyB0aGUgaXRlcmF0b3JzIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byBmZXRjaGluZyB0aGUgbmV4dCBsZXZlbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBpbiBwbGF5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGludG8gdW5kZXJzdGFuZGluZyBvciBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTgwOlx0XHR1bmlvbiB7XG4gMTgxOlx0XHRcdHB0ZV90IHB0ZTtcbiAxODI6XHRcdFx0cHVkX3QgcHVkO1xuIDE4MzpcdFx0XHRwbWRfdCBwbWQ7XG4gMTg0Olx0XHR9O1xuIDE4NTpcdFx0LyogcHJpdmF0ZSAqL1xuIDE4NjpcdFx0c3BpbmxvY2tfdCAqcHRsO1xuIDE4NzpcdFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gMTg4Olx0fTtcbiAxODk6XHRcbiAxOTA6XHRzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIDE5MTpcdFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDE5MjpcdFx0XHRmb2xpb193YWxrX2ZsYWdzX3QgZmxhZ3MpO1xuIDE5MzpcdFxuIDE5NDpcdCNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcbiAxOTU6XHRcdHNwaW5fdW5sb2NrKChfX2Z3KS1cdTAwM2VwdGwpOyBcXFxuIDE5NjpcdFx0aWYgKGxpa2VseSgoX19mdyktXHUwMDNlbGV2ZWwgPT0gRldfTEVWRUxfUFRFKSkgXFxcbiAxOTc6XHRcdFx0cHRlX3VubWFwKChfX2Z3KS1cdTAwM2VwdGVwKTsgXFxcbiAxOTg6XHRcdHZtYV9wZ3RhYmxlX3dhbGtfZW5kKF9fdm1hKTsgXFxcbiAxOTk6XHR9IHdoaWxlICgwKVxuIDIwMDpcdFxuIDIwMTpcdCNlbmRpZiAvKiBfTElOVVhfUEFHRVdBTEtfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwODo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTAwNgoJCQkJCQkJb3V0cHV0OiAxODQKCQkJCQkJCXRob3VnaHRzOiA1ODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoOiBLTVNBTiBBcHBsaWNhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBgd2Fsa19sb2NrYCB0byB0aGUgYHN0cnVjdCBmb2xpb193YWxrYCBhbmQgcHJvcGVybHkgaW5pdGlhbGl6ZXMgaXQuIEl0IGFsc28gY2hhbmdlcyBzb21lIG1tYXAgcmVhZCBsb2NraW5nIHBhdGhzIGluIGBrc20uY2AgdG8gdXNlIHBlci12bWEgbG9ja2luZyB3aXRoIHRoZSBhcHByb3ByaWF0ZSBmbGFncy4gRmluYWxseSwgdGhlIGBwYWdld2Fsay5jYCBjb2RlIGlzIHVwZGF0ZWQgdG8gY2hlY2sgdGhlIG5ldyBgZnctJmd0O3dhbGtfbG9ja2AuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIGluIHRoYXQgYXJlYT8gTm8sIGJlY2F1c2U6CgoqICAgTm8ga2VybmVsIHN0cnVjdHVyZXMgYXJlIGxlYWtlZCB0byB1c2Vyc3BhY2UuIE5vdGhpbmcgZ2V0cyBjb3BpZWQgb3V0IHZpYSBgY29weV90b191c2VyYCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4KKiAgIEFsbCBgc3RydWN0IGZvbGlvX3dhbGtgIGluc3RhbmNlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBgeyAud2Fsa19sb2NrID0gLi4uIH1gLiAgVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgaXMgZG9pbmcgaXRzIGpvYiBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG90aGVyIGZpZWxkcywgYXMgaXQgc2hvdWxkLgoqICAgVGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiBlaXRoZXIgcmV0dXJucyBhIGxvY2tlZCBWTUEgb3IgTlVMTC4KKiAgIFRoZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBsb2NraW5nIGFuZCBwYWdlIHdhbGtpbmcg4oCTIHJlZmFjdG9yaW5nIHdpdGhpbiBLU00gYW5kIHRoZSBNTSBwYWdld2Fsay4KKiAgIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG9yIGV2ZW4gZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1cX0JVR1xfT04vV0FSTlxfT05DRSkuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgdGhpcyBpcyAqbm90KiBhIGBOZWVkc0tNU0FOYCBzaXR1YXRpb24uIE5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGJlaW5nIHVzZWQgb3IgcG90ZW50aWFsbHkgbGVha2VkLgoKVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgdmVyaWZ5IGFsbCB0aGUgY3JpdGVyaWE6CgoxLiAgS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2Vyc3BhY2U/IE5vLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gTm9wZS4gQWxsIGBmd2AgaW5zdGFuY2VzIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLgozLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgaGVyZS4KNC4gIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgd291bGQgYWxsb3cgdW5pbml0aWFsaXplZCBieXRlcyB0byBiZSByZWFkPyBObyBkaWNlLgoKU28sIGxldCYjMzk7cyBjb250cmFzdCB0aGUgcmVsZXZhbmNlIG9mIEtBU0FOIHZlcnN1cyBLTVNBTi4KCiogICBLQVNBTi9MT0NLREVQOiBUaGUgcGF0Y2ggaXMgZGlyZWN0bHkgbW9kaWZ5aW5nIE1NIGxvY2tpbmcgbWVjaGFuaXNtcywgc3BlY2lmaWNhbGx5IGJ5IGludHJvZHVjaW5nIHBlci1WTUEgcmVhZCBsb2NraW5nIGluIEtTTSBhbmQgYWRkaW5nIGNoZWNrcyB0byBwYWdld2Fsay4gQW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMsIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcmVncmVzc2lvbnMgYXJlIHNxdWFyZWx5IHdpdGhpbiB0aGUgZG9tYWluIG9mIExPQ0tERVAgYW5kIEtBU0FOIHRvIGRldGVjdC4KKiAgIEtNU0FOOiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHZhcmlhYmxlcyBiZWluZyByZWFkLCBubyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2UsIGFuZCBhbGwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuIEtNU0FOIGlzIG5vdCBuZWNlc3NhcnkgaGVyZS4KCk9rYXksIHRoYXQmIzM5O3MgbXkgYW5hbHlzaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDA4OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuMTMzNjE3NDU3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE4NjcxNzQ0MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktTTVwiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIixcbiAgICBcIk1JR1JBVElPTlwiLFxuICAgIFwiVVBST0JFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3dhbGtfc3RhcnRcIixcbiAgICBcImJyZWFrX2tzbVwiLFxuICAgIFwiZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZFwiLFxuICAgIFwiZ2V0X21lcmdlYWJsZV9wYWdlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlXCIsXG4gICAgXCJrc21fbWFkdmlzZVwiLFxuICAgIFwiYnJlYWtfY293XCIsXG4gICAgXCJzcGxpdF9odWdlX3BhZ2VzX3BpZFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2Ugd2Fsa2luZyBhbmQgS1NNIGxvY2tpbmcgc2VtYW50aWNzIGFjcm9zcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChwYWdld2FsaywgS1NNLCBUSFAsIG1pZ3JhdGlvbiwgcm1hcCwgdXByb2JlcykuIEl0IGludHJvZHVjZXMgcGVyLVZNQSByZWFkIGxvY2tpbmcgKFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSB2aWEgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQpIHRvIEtTTSByb3V0aW5lcywgZHluYW1pY2FsbHkgYWx0ZXJzIGJyZWFrX2tzbV9vcHMgd2FsayBsb2NraW5nLCBhbmQgYWRkcyBsb2NraW5nIHZhbGlkYXRpb24gY2hlY2tzL2Fzc2VydGlvbnMgaW4gZm9saW9fd2Fsa19zdGFydC4gVGhlc2UgY2hhbmdlcyBhbHRlciBsb2NraW5nIGludmFyaWFudHMgYW5kIHN0YXRlIG1hbmFnZW1lbnQgaW4gcmVhY2hhYmxlIGNvcmUgbW0gY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuMTMzNjIzOTM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg4NDc2MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBhYzI2NWViMGQ3Yjc1NWY2NjhjYzViMGVjYzM0ZjA1N2E2Y2E3NTZmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvczM5MC9tbS9mYXVsdC5jIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXFxuKysrIGIvYXJjaC9zMzkwL21tL2ZhdWx0LmNcXG5AQCAtNDEyLDcgKzQxMiw5IEBAIF9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBnZXRfZmF1bHRfYWRkcmVzcyhyZWdzKTtcXG4gXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHR9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRpbnQgcmM7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcXG5pbmRleCBiNDFkNzI2NWMwMWJjLi40NTU0MjhlYWYxZmMwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxcbkBAIC0xODMsOCArMTgzLDggQEAgc3RydWN0IGZvbGlvX3dhbGsge1xcbiBcXHRcXHRwbWRfdCBwbWQ7XFxuIFxcdH07XFxuIFxcdC8qIHByaXZhdGUgKi9cXG4tXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4rXFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXFxuaW5kZXggNzcwOWVhODgyNDc3OC4uMDU0ZmRjYjUyMTM2NiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xcbisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXFxuQEAgLTUwNyw3ICs1MDcsOSBAQCBpbnQgdXByb2JlX3dyaXRlKHN0cnVjdCBhcmNoX3Vwcm9iZSAqYXVwcm9iZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XFxuIFxcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFO1xcbiBcXHRzdHJ1Y3QgbW11X25vdGlmaWVyX3JhbmdlIHJhbmdlO1xcbi1cXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcXG4rXFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XFxuK1xcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4rXFx0fTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IHBhZ2UgKnBhZ2U7XFxuIFxcbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xcbmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0XFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xcbisrKyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5AQCAtNDgxMCw3ICs0ODEwLDkgQEAgc3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbiBcXHQgKi9cXG4gXFx0Zm9yIChhZGRyID0gdmFkZHJfc3RhcnQ7IGFkZHIgXFx1MDAzYyB2YWRkcl9lbmQ7IGFkZHIgKz0gUEFHRV9TSVpFKSB7XFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxuLVxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcXG4gXFx0XFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcXG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xcbmluZGV4IDYyNGYzNzk3NWUxMjkuLjFkODU3NjllYzdkYmUgMTAwNjQ0XFxuLS0tIGEvbW0va3NtLmNcXG4rKysgYi9tbS9rc20uY1xcbkBAIC02NjAsMTYgKzY2MCwxMSBAQCBzdGF0aWMgaW50IGJyZWFrX2tzbV9wbWRfZW50cnkocG1kX3QgKnBtZHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlblxcbiBcXHRyZXR1cm4gZm91bmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcXG4rc3RhdGljIHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xcbiBcXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuIH07XFxuIFxcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XFxuLVxcdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxcbi1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1dSTE9DSyxcXG4tfTtcXG4tXFxuIC8qXFxuICAqIFRob3VnaCBpdCdzIHZlcnkgdGVtcHRpbmcgdG8gdW5tZXJnZSBybWFwX2l0ZW1zIGZyb20gc3RhYmxlIHRyZWUgcmF0aGVyXFxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yXFxuQEAgLTY5NiwxMSArNjkxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcXG4gICogcHJvdGVjdGlvbiBrZXlzIGhlcmUgYW55d2F5LlxcbiAgKi9cXG4gc3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgbG9ja192bWEpXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcXG4ge1xcbiBcXHR2bV9mYXVsdF90IHJldCA9IDA7XFxuLVxcdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xcbi1cXHRcXHRcXHRcXHRcXHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFxcdTAwMjZicmVha19rc21fb3BzO1xcbitcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFxcdTAwMjZicmVha19rc21fb3BzO1xcbitcXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcXG4gXFxuIFxcdGRvIHtcXG4gXFx0XFx0aW50IGtzbV9wYWdlO1xcbkBAIC03NzAsMTUgKzc2NSwzNiBAQCBzdGF0aWMgYm9vbCB2bWFfa3NtX2NvbXBhdGlibGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIFxcdHJldHVybiBrc21fY29tcGF0aWJsZSh2bWEtXFx1MDAzZXZtX2ZpbGUsIHZtYS1cXHUwMDNlZmxhZ3MpO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcilcXG4rLyoqXFxuKyAqIGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgd2hpY2ggaXNcXG4rICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKVxcbisgKiB0byB1bmxvY2sgdm1hIGFmdGVyIGZpbmlzaGluZyByZWFkaW5nIHRoZSBWTUEgKG5vbi1OVUxMKS5cXG4rICpcXG4rICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuXFxuKyAqIElmIG5vIFZNQSBpcyBtYXBwZWQgdGhlcmUgb3IsIHZlcnkgdW5saWtlbHksIGEgcmVmZXJlbmNlIGNvdW50IG92ZXJmbG93XFxuKyAqIG9jY3VycmVkLCByZXR1cm4gTlVMTCwgYW5kIG5vIHJlYWQtbG9ja2VkLlxcbisgKlxcbisgKiBJTVBPUlRBTlQ6IElmIGEgVk1BIGV4aXN0cyBidXQgaXMgbm90IFZNX01FUkdFQUJMRSBvciBoYXMgbm8gYW5vbl92bWEsXFxuKyAqIHRoaXMgZnVuY3Rpb24gcmVsZWFzZXMgdGhlIHBlci1WTUEgcmVhZCBsb2NrIGJlZm9yZSByZXR1cm5pbmcgTlVMTC5cXG4rICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuXFxuKyAqL1xcbitzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuK1xcbiBcXHRpZiAoa3NtX3Rlc3RfZXhpdChtbSkpXFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbi1cXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcXG4tXFx0aWYgKCF2bWEgfHwgISh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVxcdTAwM2Vhbm9uX3ZtYSlcXG4rXFxuK1xcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4rXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cXHUwMDNlYW5vbl92bWEpIHtcXG4rXFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuIFxcbkBAIC04MDQsMTEgKzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4gXFx0ICovXFxuIFxcdHJtYXBfaXRlbS1cXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSAwO1xcbiBcXG4tXFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xcbi1cXHRpZiAodm1hKVxcbi1cXHRcXHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFLCBmYWxzZSk7XFxuLVxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbitcXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBhZGRyKTtcXG4rXFx0aWYgKCF2bWEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XFxuK1xcdHZtYV9lbmRfcmVhZCh2bWEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbkBAIC04MTcsMTMgKzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXFx1MDAzZWFkZHJlc3M7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IE5VTEw7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuK1xcdH07XFxuIFxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XFxuK1xcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xcbiBcXHRpZiAoIXZtYSlcXG4tXFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbiBcXG4gXFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG4gXFx0aWYgKGZvbGlvKSB7XFxuQEAgLTgzNCwxMiArODUyLDEyIEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuIFxcdFxcdH1cXG4gXFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbiBcXHR9XFxuLW91dDpcXG4rXFxuIFxcdGlmIChwYWdlKSB7XFxuIFxcdFxcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpO1xcbiBcXHRcXHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcXG4gXFx0fVxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdHJldHVybiBwYWdlO1xcbiB9XFxuIFxcbkBAIC0xMjQzLDcgKzEyNjEsNyBAQCBzdGF0aWMgaW50IHVubWVyZ2VfYW5kX3JlbW92ZV9hbGxfcm1hcF9pdGVtcyh2b2lkKVxcbiBcXHRcXHRmb3JfZWFjaF92bWEodm1pLCB2bWEpIHtcXG4gXFx0XFx0XFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cXHUwMDNlYW5vbl92bWEpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHRcXHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCwgZmFsc2UpO1xcbitcXHRcXHRcXHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCB2bWEtXFx1MDAzZXZtX2VuZCwgUEdXQUxLX1JETE9DSyk7XFxuIFxcdFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdFxcdGdvdG8gZXJyb3I7XFxuIFxcdFxcdH1cXG5AQCAtMTU3MSwxNCArMTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRpZiAoa3NtX3VzZV96ZXJvX3BhZ2VzIFxcdTAwMjZcXHUwMDI2IChybWFwX2l0ZW0tXFx1MDAzZW9sZGNoZWNrc3VtID09IHplcm9fY2hlY2tzdW0pKSB7XFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiBcXG4tXFx0XFx0bW1hcF9yZWFkX2xvY2sobW0pO1xcbi1cXHRcXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuK1xcdFxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcdFxcdGlmICh2bWEpIHtcXG4gXFx0XFx0XFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSxcXG4gXFx0XFx0XFx0XFx0XFx0WkVST19QQUdFKHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcykpO1xcbiBcXHRcXHRcXHR0cmFjZV9rc21fbWVyZ2Vfb25lX3BhZ2UoXFxuIFxcdFxcdFxcdFxcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXFx1MDAzZWFkZHJlc3MpKSxcXG4gXFx0XFx0XFx0XFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcXG4rXFx0XFx0XFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElmIHRoZSB2bWEgaXMgb3V0IG9mIGRhdGUsIHdlIGRvIG5vdCBuZWVkIHRvXFxuQEAgLTE1ODYsNyArMTYwNCw2IEBAIHN0YXRpYyBpbnQgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXFxuIFxcdFxcdFxcdCAqL1xcbiBcXHRcXHRcXHRlcnIgPSAwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gZXJyO1xcbkBAIC0xNjA1LDEwICsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gXFx0aW50IGVyciA9IC1FRkFVTFQ7XFxuIFxcbi1cXHRtbWFwX3JlYWRfbG9jayhtbSk7XFxuLVxcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzKTtcXG4rXFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVxcdTAwM2VhZGRyZXNzKTtcXG4gXFx0aWYgKCF2bWEpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRnb3RvIG91dF90cmFjZTtcXG4gXFxuIFxcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsIGtwYWdlKTtcXG4gXFx0aWYgKGVycilcXG5AQCAtMTYyOCw3ICsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxcbiBcXHRybWFwX2l0ZW0tXFx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cXHUwMDNlYWRkcmVzcyk7XFxuIFxcdGdldF9hbm9uX3ZtYSh2bWEtXFx1MDAzZWFub25fdm1hKTtcXG4gb3V0Olxcbi1cXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcXG4rXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuK291dF90cmFjZTpcXG4gXFx0dHJhY2Vfa3NtX21lcmdlX3dpdGhfa3NtX3BhZ2Uoa3BhZ2UsIHBhZ2VfdG9fcGZuKGtwYWdlID8ga3BhZ2UgOiBwYWdlKSxcXG4gXFx0XFx0XFx0XFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcXG4gXFx0cmV0dXJuIGVycjtcXG5AQCAtMjg4Myw3ICsyOTAwLDcgQEAgc3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuIFxcdGlmICh2bWEtXFx1MDAzZWFub25fdm1hKSB7XFxuLVxcdFxcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCB0cnVlKTtcXG4rXFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xcbiBcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHR9XFxuQEAgLTMwMzUsNyArMzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFx0XFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xcbiBcXG4gXFx0XFx0aWYgKHZtYS1cXHUwMDNlYW5vbl92bWEpIHtcXG4tXFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xcbiBcXHRcXHRcXHRpZiAoZXJyKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXHRcXHR9XFxuZGlmZiAtLWdpdCBhL21tL21pZ3JhdGUuYyBiL21tL21pZ3JhdGUuY1xcbmluZGV4IGEzNjlkMGM5NWMzODYuLjJlMDc4YzFlMWI5YTYgMTAwNjQ0XFxuLS0tIGEvbW0vbWlncmF0ZS5jXFxuKysrIGIvbW0vbWlncmF0ZS5jXFxuQEAgLTIzMDIsNyArMjMwMiw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxcbiBcXHRcXHRpbnQgbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsIGJvb2wgbWlncmF0ZV9hbGwpXFxuIHtcXG4gXFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHR9O1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHR1bnNpZ25lZCBsb25nIGFkZHI7XFxuIFxcdGludCBlcnIgPSAtRUZBVUxUO1xcbkBAIC0yNDY0LDcgKzI0NjYsOSBAQCBzdGF0aWMgdm9pZCBkb19wYWdlc19zdGF0X2FycmF5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xcbiBcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykoKnBhZ2VzKTtcXG4gXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuLVxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xcbitcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG4rXFx0XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxcbitcXHRcXHR9O1xcbiBcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXHRcXHRpbnQgZXJyID0gLUVGQVVMVDtcXG4gXFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXFxuaW5kZXggNzQxMTcwMmEzN2Y1OC4uOGViMjlmYmEyMGFkOSAxMDA2NDRcXG4tLS0gYS9tbS9wYWdld2Fsay5jXFxuKysrIGIvbW0vcGFnZXdhbGsuY1xcbkBAIC05MTAsNyArOTEwLDE1IEBAIHN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuIFxcdHBnZF90ICpwZ2RwO1xcbiBcXHRwNGRfdCAqcDRkcDtcXG4gXFxuLVxcdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXFx1MDAzZXZtX21tKTtcXG4rXFx0LypcXG4rXFx0ICogT3RoZXIgbG9ja2luZyBtb2RlcyBleGNlcHQgZm9yIG1tYXAgb3Igdm1hIHJlYWQgbG9ja2luZyBhcmUgbm90XFxuK1xcdCAqIGV4cGVjdGVkLlxcbitcXHQgKi9cXG4rXFx0aWYgKGZ3LVxcdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcXHUwMDI2XFx1MDAyNiBmdy1cXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcXG4rXFx0XFx0V0FSTl9PTkNFKDEsIFxcXCJ3YWxrX2xvY2sgaXMgbm90IGV4cGVjdGVkIVxcXFxuXFxcIik7XFxuK1xcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cXHUwMDNldm1fbW0sIGZ3LVxcdTAwM2V3YWxrX2xvY2spO1xcbitcXHRwcm9jZXNzX3ZtYV93YWxrX2xvY2sodm1hLCBmdy1cXHUwMDNld2Fsa19sb2NrKTtcXG4rXFxuIFxcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcXG4gXFxuIFxcdGlmIChXQVJOX09OX09OQ0UoYWRkciBcXHUwMDNjIHZtYS1cXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcXHUwMDNlPSB2bWEtXFx1MDAzZXZtX2VuZCkpXFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xcbmluZGV4IDUzMzJjNTI5MDliZTEuLjBjYTI0YmNmOTU3MDMgMTAwNjQ0XFxuLS0tIGEvbW0vcm1hcC5jXFxuKysrIGIvbW0vcm1hcC5jXFxuQEAgLTI4NzEsNyArMjg3MSw5IEBAIHN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbywgKmZ3X2ZvbGlvO1xcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4tXFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XFxuK1xcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbitcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiBcXHRzd3BfZW50cnlfdCBlbnRyeTtcXG4gXFx0cHRlX3Qgc3dwX3B0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6MjMuNzczMzgyNDc4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MTI3MTI1MjQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIlVQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJicmVha19rc21cIixcbiAgICBcImZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRcIixcbiAgICBcImdldF9tZXJnZWFibGVfcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZVwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImJyZWFrX2Nvd1wiLFxuICAgIFwic3BsaXRfaHVnZV9wYWdlc19waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWMyNjVlYjBkN2I3NTVmNjY4Y2M1YjBlY2MzNGYwNTdhNmNhNzU2ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDA4OjUwOjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9zMzkwL21tL2ZhdWx0LmMgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuaW5kZXggNDZkODI4OTI2MDA5Yi4uOTY4ZjEyOGE1MjMyMCAxMDA2NDRcbi0tLSBhL2FyY2gvczM5MC9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3MzOTAvbW0vZmF1bHQuY1xuQEAgLTQxMiw3ICs0MTIsOSBAQCBfX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcbiBcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGdldF9mYXVsdF9hZGRyZXNzKHJlZ3MpO1xuIFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVx1MDAzZW1tO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdGludCByYztcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbmluZGV4IGI0MWQ3MjY1YzAxYmMuLjQ1NTQyOGVhZjFmYzAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuQEAgLTE4Myw4ICsxODMsOCBAQCBzdHJ1Y3QgZm9saW9fd2FsayB7XG4gXHRcdHBtZF90IHBtZDtcbiBcdH07XG4gXHQvKiBwcml2YXRlICovXG4tXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHNwaW5sb2NrX3QgKnB0bDtcbitcdGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrO1xuIH07XG4gXG4gc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbmRpZmYgLS1naXQgYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXG5pbmRleCA3NzA5ZWE4ODI0Nzc4Li4wNTRmZGNiNTIxMzY2IDEwMDY0NFxuLS0tIGEva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbisrKyBiL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jXG5AQCAtNTA3LDcgKzUwNyw5IEBAIGludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGludCByZXQsIHJlZl9jdHJfdXBkYXRlZCA9IDA7XG4gXHR1bnNpZ25lZCBpbnQgZ3VwX2ZsYWdzID0gRk9MTF9GT1JDRTtcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCAzMGI3YzYzYjBlMzU5Li5kMDQ0N2I2YWU2ZTQxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTQ4MTAsNyArNDgxMCw5IEBAIHN0YXRpYyBpbnQgc3BsaXRfaHVnZV9wYWdlc19waWQoaW50IHBpZCwgdW5zaWduZWQgbG9uZyB2YWRkcl9zdGFydCxcbiBcdCAqL1xuIFx0Zm9yIChhZGRyID0gdmFkZHJfc3RhcnQ7IGFkZHIgXHUwMDNjIHZhZGRyX2VuZDsgYWRkciArPSBQQUdFX1NJWkUpIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdFx0fTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XG4gXHRcdHVuc2lnbmVkIGludCB0YXJnZXRfb3JkZXIgPSBuZXdfb3JkZXI7XG5kaWZmIC0tZ2l0IGEvbW0va3NtLmMgYi9tbS9rc20uY1xuaW5kZXggNjI0ZjM3OTc1ZTEyOS4uMWQ4NTc2OWVjN2RiZSAxMDA2NDRcbi0tLSBhL21tL2tzbS5jXG4rKysgYi9tbS9rc20uY1xuQEAgLTY2MCwxNiArNjYwLDExIEBAIHN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbitzdGF0aWMgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9vcHMgPSB7XG4gXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuIH07XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fbG9ja192bWFfb3BzID0ge1xuLVx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXG4tXHQud2Fsa19sb2NrID0gUEdXQUxLX1dSTE9DSyxcbi19O1xuLVxuIC8qXG4gICogVGhvdWdoIGl0J3MgdmVyeSB0ZW1wdGluZyB0byB1bm1lcmdlIHJtYXBfaXRlbXMgZnJvbSBzdGFibGUgdHJlZSByYXRoZXJcbiAgKiB0aGFuIGNoZWNrIGV2ZXJ5IHB0ZSBvZiBhIGdpdmVuIHZtYSwgdGhlIGxvY2tpbmcgZG9lc24ndCBxdWl0ZSB3b3JrIGZvclxuQEAgLTY5NiwxMSArNjkxLDExIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX2xvY2tfdm1hX29wcyA9IHtcbiAgKiBwcm90ZWN0aW9uIGtleXMgaGVyZSBhbnl3YXkuXG4gICovXG4gc3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi1cdFx0dW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgbG9ja192bWEpXG4rXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9jaylcbiB7XG4gXHR2bV9mYXVsdF90IHJldCA9IDA7XG4tXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGxvY2tfdm1hID9cbi1cdFx0XHRcdFx1MDAyNmJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgOiBcdTAwMjZicmVha19rc21fb3BzO1xuK1x0c3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBcdTAwMjZicmVha19rc21fb3BzO1xuK1x0b3BzLVx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcbiBcbiBcdGRvIHtcbiBcdFx0aW50IGtzbV9wYWdlO1xuQEAgLTc3MCwxNSArNzY1LDM2IEBAIHN0YXRpYyBib29sIHZtYV9rc21fY29tcGF0aWJsZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdHJldHVybiBrc21fY29tcGF0aWJsZSh2bWEtXHUwMDNldm1fZmlsZSwgdm1hLVx1MDAzZWZsYWdzKTtcbiB9XG4gXG4tc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIpXG4rLyoqXG4rICogZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZCgpIC0gRmluZCB0aGUgVk1BIGNvdmVyaW5nICdhZGRyZXNzJyB3aGljaCBpc1xuKyAqIFZNX01FUkdFQUJMRSBhbmQgcmVhZC1sb2NrIGl0IGJ5IHBlci1WTUEgbG9ja3MuIFBsZWFzZSB1c2Ugdm1hX2VuZF9yZWFkKClcbisgKiB0byB1bmxvY2sgdm1hIGFmdGVyIGZpbmlzaGluZyByZWFkaW5nIHRoZSBWTUEgKG5vbi1OVUxMKS5cbisgKlxuKyAqIFJldHVybjogSWYgYSBWTUEgZXhpc3RzIHdoaWNoIHNwYW5zIEBhZGRyZXNzLCByZXR1cm4gdGhhdCBWTUEsIHJlYWQtbG9ja2VkLlxuKyAqIElmIG5vIFZNQSBpcyBtYXBwZWQgdGhlcmUgb3IsIHZlcnkgdW5saWtlbHksIGEgcmVmZXJlbmNlIGNvdW50IG92ZXJmbG93XG4rICogb2NjdXJyZWQsIHJldHVybiBOVUxMLCBhbmQgbm8gcmVhZC1sb2NrZWQuXG4rICpcbisgKiBJTVBPUlRBTlQ6IElmIGEgVk1BIGV4aXN0cyBidXQgaXMgbm90IFZNX01FUkdFQUJMRSBvciBoYXMgbm8gYW5vbl92bWEsXG4rICogdGhpcyBmdW5jdGlvbiByZWxlYXNlcyB0aGUgcGVyLVZNQSByZWFkIGxvY2sgYmVmb3JlIHJldHVybmluZyBOVUxMLlxuKyAqIENhbGxlcnMgbXVzdCBOT1QgY2FsbCB2bWFfZW5kX3JlYWQoKSBvbiBhIE5VTEwgcmV0dXJuIHZhbHVlLlxuKyAqL1xuK3N0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbitcbiBcdGlmIChrc21fdGVzdF9leGl0KG1tKSlcbiBcdFx0cmV0dXJuIE5VTEw7XG4tXHR2bWEgPSB2bWFfbG9va3VwKG1tLCBhZGRyKTtcbi1cdGlmICghdm1hIHx8ICEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtXHUwMDNlYW5vbl92bWEpXG4rXG4rXHR2bWEgPSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChtbSwgYWRkcmVzcyk7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuK1x0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0cmV0dXJuIE5VTEw7XG4rXHR9XG4rXG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbkBAIC04MDQsMTEgKzgyMCwxMiBAQCBzdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdCAqL1xuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gMDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4tXHRpZiAodm1hKVxuLVx0XHRicmVha19rc20odm1hLCBhZGRyLCBhZGRyICsgUEFHRV9TSVpFLCBmYWxzZSk7XG4tXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIGFkZHIpO1xuK1x0aWYgKCF2bWEpXG4rXHRcdHJldHVybjtcbitcbitcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSk7XG4rXHR2bWFfZW5kX3JlYWQodm1hKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbkBAIC04MTcsMTMgKzgzNCwxNCBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3M7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlID0gTlVMTDtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbitcdH07XG4gXG4tXHRtbWFwX3JlYWRfbG9jayhtbSk7XG4tXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIGFkZHIpO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4gXHRpZiAoIXZtYSlcbi1cdFx0Z290byBvdXQ7XG4rXHRcdHJldHVybiBOVUxMO1xuIFxuIFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xuIFx0aWYgKGZvbGlvKSB7XG5AQCAtODM0LDEyICs4NTIsMTIgQEAgc3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcbiBcdFx0fVxuIFx0XHRmb2xpb193YWxrX2VuZChcdTAwMjZmdywgdm1hKTtcbiBcdH1cbi1vdXQ6XG4rXG4gXHRpZiAocGFnZSkge1xuIFx0XHRmbHVzaF9hbm9uX3BhZ2Uodm1hLCBwYWdlLCBhZGRyKTtcbiBcdFx0Zmx1c2hfZGNhY2hlX3BhZ2UocGFnZSk7XG4gXHR9XG4tXHRtbWFwX3JlYWRfdW5sb2NrKG1tKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0cmV0dXJuIHBhZ2U7XG4gfVxuIFxuQEAgLTEyNDMsNyArMTI2MSw3IEBAIHN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXG4gXHRcdGZvcl9lYWNoX3ZtYSh2bWksIHZtYSkge1xuIFx0XHRcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBmYWxzZSk7XG4rXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBQR1dBTEtfUkRMT0NLKTtcbiBcdFx0XHRpZiAoZXJyKVxuIFx0XHRcdFx0Z290byBlcnJvcjtcbiBcdFx0fVxuQEAgLTE1NzEsMTQgKzE1ODksMTQgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdGlmIChrc21fdXNlX3plcm9fcGFnZXMgXHUwMDI2XHUwMDI2IChybWFwX2l0ZW0tXHUwMDNlb2xkY2hlY2tzdW0gPT0gemVyb19jaGVja3N1bSkpIHtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXG4tXHRcdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4rXHRcdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWQobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdFx0aWYgKHZtYSkge1xuIFx0XHRcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsXG4gXHRcdFx0XHRcdFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpO1xuIFx0XHRcdHRyYWNlX2tzbV9tZXJnZV9vbmVfcGFnZShcbiBcdFx0XHRcdHBhZ2VfdG9fcGZuKFpFUk9fUEFHRShybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcykpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbitcdFx0XHR2bWFfZW5kX3JlYWQodm1hKTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIElmIHRoZSB2bWEgaXMgb3V0IG9mIGRhdGUsIHdlIGRvIG5vdCBuZWVkIHRvXG5AQCAtMTU4Niw3ICsxNjA0LDYgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSxcbiBcdFx0XHQgKi9cbiBcdFx0XHRlcnIgPSAwO1xuIFx0XHR9XG4tXHRcdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuIFx0fVxuIFxuIFx0cmV0dXJuIGVycjtcbkBAIC0xNjA1LDEwICsxNjIyLDkgQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0aWYgKCF2bWEpXG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRnb3RvIG91dF90cmFjZTtcbiBcbiBcdGVyciA9IHRyeV90b19tZXJnZV9vbmVfcGFnZSh2bWEsIHBhZ2UsIGtwYWdlKTtcbiBcdGlmIChlcnIpXG5AQCAtMTYyOCw3ICsxNjQ0LDggQEAgc3RhdGljIGludCB0cnlfdG9fbWVyZ2Vfd2l0aF9rc21fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0cm1hcF9pdGVtLVx1MDAzZWxpbmVhcl9wYWdlX2luZGV4ID0gbGluZWFyX2Fub25fcGFnZV9pbmRleCh2bWEsIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbiBcdGdldF9hbm9uX3ZtYSh2bWEtXHUwMDNlYW5vbl92bWEpO1xuIG91dDpcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4rb3V0X3RyYWNlOlxuIFx0dHJhY2Vfa3NtX21lcmdlX3dpdGhfa3NtX3BhZ2Uoa3BhZ2UsIHBhZ2VfdG9fcGZuKGtwYWdlID8ga3BhZ2UgOiBwYWdlKSxcbiBcdFx0XHRcdHJtYXBfaXRlbSwgbW0sIGVycik7XG4gXHRyZXR1cm4gZXJyO1xuQEAgLTI4ODMsNyArMjkwMCw3IEBAIHN0YXRpYyBpbnQgX19rc21fZGVsX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgdHJ1ZSk7XG4rXHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHZtYS1cdTAwM2V2bV9zdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgUEdXQUxLX1dSTE9DSyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbkBAIC0zMDM1LDcgKzMwNTIsNyBAQCBpbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4gXHRcdFx0cmV0dXJuIDA7XHRcdC8qIGp1c3QgaWdub3JlIHRoZSBhZHZpY2UgKi9cbiBcbiBcdFx0aWYgKHZtYS1cdTAwM2Vhbm9uX3ZtYSkge1xuLVx0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIHRydWUpO1xuK1x0XHRcdGVyciA9IGJyZWFrX2tzbSh2bWEsIHN0YXJ0LCBlbmQsIFBHV0FMS19XUkxPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRyZXR1cm4gZXJyO1xuIFx0XHR9XG5kaWZmIC0tZ2l0IGEvbW0vbWlncmF0ZS5jIGIvbW0vbWlncmF0ZS5jXG5pbmRleCBhMzY5ZDBjOTVjMzg2Li4yZTA3OGMxZTFiOWE2IDEwMDY0NFxuLS0tIGEvbW0vbWlncmF0ZS5jXG4rKysgYi9tbS9taWdyYXRlLmNcbkBAIC0yMzAyLDcgKzIzMDIsOSBAQCBzdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcbiBcdFx0aW50IG5vZGUsIHN0cnVjdCBsaXN0X2hlYWQgKnBhZ2VsaXN0LCBib29sIG1pZ3JhdGVfYWxsKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0fTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHR1bnNpZ25lZCBsb25nIGFkZHI7XG4gXHRpbnQgZXJyID0gLUVGQVVMVDtcbkBAIC0yNDY0LDcgKzI0NjYsOSBAQCBzdGF0aWMgdm9pZCBkb19wYWdlc19zdGF0X2FycmF5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfcGFnZXM7IGkrKykge1xuIFx0XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZykoKnBhZ2VzKTtcbiBcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHRcdH07XG4gXHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2V3YWxrLmMgYi9tbS9wYWdld2Fsay5jXG5pbmRleCA3NDExNzAyYTM3ZjU4Li44ZWIyOWZiYTIwYWQ5IDEwMDY0NFxuLS0tIGEvbW0vcGFnZXdhbGsuY1xuKysrIGIvbW0vcGFnZXdhbGsuY1xuQEAgLTkxMCw3ICs5MTAsMTUgQEAgc3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcbiBcdHBnZF90ICpwZ2RwO1xuIFx0cDRkX3QgKnA0ZHA7XG4gXG4tXHRtbWFwX2Fzc2VydF9sb2NrZWQodm1hLVx1MDAzZXZtX21tKTtcbitcdC8qXG4rXHQgKiBPdGhlciBsb2NraW5nIG1vZGVzIGV4Y2VwdCBmb3IgbW1hcCBvciB2bWEgcmVhZCBsb2NraW5nIGFyZSBub3RcbitcdCAqIGV4cGVjdGVkLlxuK1x0ICovXG4rXHRpZiAoZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19SRExPQ0sgXHUwMDI2XHUwMDI2IGZ3LVx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpXG4rXHRcdFdBUk5fT05DRSgxLCBcIndhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxuXCIpO1xuK1x0cHJvY2Vzc19tbV93YWxrX2xvY2sodm1hLVx1MDAzZXZtX21tLCBmdy1cdTAwM2V3YWxrX2xvY2spO1xuK1x0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXHUwMDNld2Fsa19sb2NrKTtcbitcbiBcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcbiBcbiBcdGlmIChXQVJOX09OX09OQ0UoYWRkciBcdTAwM2Mgdm1hLVx1MDAzZXZtX3N0YXJ0IHx8IGFkZHIgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKSlcbmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmNcbmluZGV4IDUzMzJjNTI5MDliZTEuLjBjYTI0YmNmOTU3MDMgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTI4NzEsNyArMjg3MSw5IEBAIHN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCAqZndfZm9saW87XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgcGFnZSAqcGFnZTtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuIFx0cHRlX3Qgc3dwX3B0ZTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjIzLjc3MzM4NDkyOFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE2NzY1ODI0MzE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3VpdGFiaWxpdHkgQW5hbHlzaXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhhdCB0aGVyZSBhcmUgc29tZSByZWQgZmxhZ3MgaGVyZSB0aGF0IG1ha2UgdGhpcyBhIHBvdGVudGlhbGx5IGZlcnRpbGUgZ3JvdW5kIGZvciBmdXp6aW5nLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBhIGJ1bmNoIG9mIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZmlsZXM6IGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgLCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLCBgbW0vaHVnZV9tZW1vcnkuY2AsIGBtbS9rc20uY2AsIGBtbS9taWdyYXRlLmNgLCBgbW0vcGFnZXdhbGsuY2AsIGFuZCBgbW0vcm1hcC5jYC4gVGhhdCdzIGEgd2lkZSByYW5nZSwgaW5kaWNhdGluZyBzaWduaWZpY2FudCBjaGFuZ2VzIGluIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgbWVtb3J5LiBBbHdheXMgYSBnb29kIHNpZ24gZm9yIGZ1enppbmcsIGFzIGl0IGluY3JlYXNlcyB0aGUgcG90ZW50aWFsIGF0dGFjayBzdXJmYWNlLlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzOiBUaGUgbW9zdCBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGUgY2hhbmdlIGluIGBpbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmhgIHdpdGggdGhlIGludHJvZHVjdGlvbiBvZiBgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7YCB3aXRoaW4gYHN0cnVjdCBmb2xpb193YWxrYC4gVGhpcyBzdHJvbmdseSBpbmRpY2F0ZXMgY2hhbmdlcyB0byB0aGUgbG9ja2luZyBzdHJhdGVneSBkdXJpbmcgcGFnZSB3YWxrcywgd2hpY2ggY291bGQgZWFzaWx5IGxlYWQgdG8gY29uY3VycmVuY3kgaXNzdWVzIGFuZCByYWNlIGNvbmRpdGlvbnMsIHNvbWV0aGluZyBzeXprYWxsZXIgZXhjZWxzIGF0IGZpbmRpbmcuXG5cblRoZSBtb2RpZmljYXRpb25zIGluIGBtbS9wYWdld2Fsay5jYCB3aXRoIHRoZSBgZm9saW9fd2Fsa19zdGFydGAgZnVuY3Rpb24gYW5kIHRoZSBhZGRlZCBjaGVja3Mgb24gYGZ3LVx1MDAzZXdhbGtfbG9ja2AgYXJlIHZlcnkgcmVsZXZhbnQuIFRoZSBgV0FSTl9PTkNFYCBzdWdnZXN0cyB0aGUgY29kZSBpcyAqZXhwZWN0aW5nKiBzcGVjaWZpYyBsb2NraW5nIGJlaGF2aW9yLCBhbmQgYW55IGRldmlhdGlvbiBjb3VsZCB0cmlnZ2VyIGVycm9ycy4gVGhlIGNoZWNrcyBvbiB0aGUgZW51bSBhbmQgdGhlIGNhbGxzIHRvIGBwcm9jZXNzX21tX3dhbGtfbG9ja2AgYW5kIGBwcm9jZXNzX3ZtYV93YWxrX2xvY2tgIGZ1cnRoZXIgcmVpbmZvcmNlIHRoaXMuXG5cbkFuZCBoZXJlJ3MgdGhlIHJlYWwga2lja2VyOiBgbW0va3NtLmNgIGhhcyBhICp2ZXJ5KiBjb25jZXJuaW5nIGNoYW5nZS4gVGhlIG1vZGlmaWNhdGlvbiBvZiBgYnJlYWtfa3NtX29wc2AgdG8gYSBtdXRhYmxlIGdsb2JhbCBzdHJ1Y3QgYW5kIHRoZSBkaXJlY3QgYXNzaWdubWVudCBvZiBgb3BzLVx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztgIGluc2lkZSBgYnJlYWtfa3NtKClgIGlzIGFsbW9zdCBjZXJ0YWlubHkgYSBkYXRhIHJhY2UhIFRoaXMgaXMgdGhlIGtpbmQgb2Ygc3VidGxlIGNvbmN1cnJlbmN5IGJ1ZyB0aGF0IGlzIGluY3JlZGlibHkgZGlmZmljdWx0IHRvIGRldGVjdCBtYW51YWxseSBidXQgc3l6a2FsbGVyIHNob3VsZCBmaW5kIHF1aWNrbHkuIFRoZSBmYWN0IHRoYXQgdGhlIHBhdGNoIGlzIG1vZGlmeWluZyBhIHN0YXRpYywgY29uc3Qgb2JqZWN0IG1ha2VzIHRoaXMgZXZlbiBtb3JlIGNvbmNlcm5pbmcuIFRoaXMgaXMgYSB2ZXJ5IGNvbXBlbGxpbmcgcmVhc29uIHRvIHByaW9yaXRpemUgZnV6emluZyB0aGlzIHBhdGNoLiBUaGUgaW50cm9kdWN0aW9uIG9mIHBlci1WTUEgbG9ja2luZyBpbiBhIG51bWJlciBvZiBLU00gZnVuY3Rpb25zIChgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAsIGV0Yy4pIHN1cHBvcnRzIHRoYXQgdGhpcyBpcyBhIGNvbXBsZXggY29uY3VycmVuY3kgaXNzdWUuXG5cbkknbSBub3cgZ29pbmcgdG8gdXNlIGdyZXAgYW5kIHJlYWQtZmlsZSwgYnV0IG92ZXJhbGwsIGdpdmVuIHRoZSBjaGFuZ2VzIHRvIEtTTSwgdGhlIGFsdGVyZWQgbG9ja2luZywgYW5kIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYSBwb3RlbnRpYWwgZGF0YSByYWNlLCB0aGlzIHBhdGNoIHNlcmllcyBpcyAqaGlnaGx5KiBzdXNwZWN0aWJsZSB0byBjb25jdXJyZW5jeSBidWdzIGFuZCBpcyBhbiBleGNlbGxlbnQgY2FuZGlkYXRlIGZvciBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLiBUaGUgcHJvYmFiaWxpdHkgb2YgZmluZGluZyBpbnRlcmVzdGluZyBidWdzIGlzIHF1aXRlIGhpZ2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo0MC41MzkyMTEyMjZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0OTUyNTE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyZWFrX2tzbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9rc20uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9rc20uYz02MTE9c3RhdGljIGlubGluZSBib29sIGtzbV90ZXN0X2V4aXQoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuLS1cXG5tbS9rc20uYy02MTUtXFxubW0va3NtLmM6NjE2OnN0YXRpYyBpbnQgYnJlYWtfa3NtX3BtZF9lbnRyeShwbWRfdCAqcG1kcCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG5tbS9rc20uYy02MTctXFx0XFx0XFx0c3RydWN0IG1tX3dhbGsgKndhbGspXFxuLS1cXG5tbS9rc20uYy02NjItXFxubW0va3NtLmM6NjYzOnN0YXRpYyBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcXG5tbS9rc20uYzo2NjQ6XFx0LnBtZF9lbnRyeSA9IGJyZWFrX2tzbV9wbWRfZW50cnksXFxubW0va3NtLmMtNjY1LVxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcbi0tXFxubW0va3NtLmMtNjgwLSAqXFxubW0va3NtLmM6NjgxOiAqIFdlIHVzZSBicmVha19rc20gdG8gYnJlYWsgQ09XIG9uIGEga3NtIHBhZ2UgYnkgdHJpZ2dlcmluZyB1bnNoYXJpbmcsXFxubW0va3NtLmMtNjgyLSAqIHN1Y2ggdGhhdCB0aGUga3NtIHBhZ2Ugd2lsbCBnZXQgcmVwbGFjZWQgYnkgYW4gZXhjbHVzaXZlIGFub255bW91cyBwYWdlLlxcbi0tXFxubW0va3NtLmMtNjkyLSAqL1xcbm1tL2tzbS5jOjY5MzpzdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL2tzbS5jLTY5NC1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2spXFxuLS1cXG5tbS9rc20uYy02OTYtXFx0dm1fZmF1bHRfdCByZXQgPSAwO1xcbm1tL2tzbS5jOjY5NzpcXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFxcdTAwMjZicmVha19rc21fb3BzO1xcbm1tL2tzbS5jLTY5OC1cXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IHdhbGtfbG9jaztcXG4tLVxcbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgyNi1cXG5tbS9rc20uYzo4Mjc6XFx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcXG5tbS9rc20uYy04MjgtXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5tbS9rc20uYz0xMjMzPXN0YXRpYyBpbnQgdW5tZXJnZV9hbmRfcmVtb3ZlX2FsbF9ybWFwX2l0ZW1zKHZvaWQpXFxuLS1cXG5tbS9rc20uYy0xMjYzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL2tzbS5jOjEyNjQ6XFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19SRExPQ0spO1xcbm1tL2tzbS5jLTEyNjUtXFx0XFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2tzbS5jPTI4OTU9c3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0va3NtLmMtMjkwMi1cXHRpZiAodm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL2tzbS5jOjI5MDM6XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVxcdTAwM2V2bV9zdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIFBHV0FMS19XUkxPQ0spO1xcbm1tL2tzbS5jLTI5MDQtXFx0XFx0aWYgKGVycilcXG4tLVxcbm1tL2tzbS5jPTMwMjg9aW50IGtzbV9tYWR2aXNlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0va3NtLmMtMzA1NC1cXHRcXHRpZiAodm1hLVxcdTAwM2Vhbm9uX3ZtYSkge1xcbm1tL2tzbS5jOjMwNTU6XFx0XFx0XFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XFxubW0va3NtLmMtMzA1Ni1cXHRcXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0va3NtLmM9MzQzMj1zdGF0aWMgaW50IGtzbV9tZW1vcnlfY2FsbGJhY2soc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpzZWxmLFxcbi0tXFxubW0va3NtLmMtMzQ0Mi1cXHRcXHQgKiBpdCBpcyB1bnNhZmUgZm9yIHRoZW0gdG8gdG91Y2ggdGhlIHN0YWJsZSB0cmVlIGF0IHRoaXMgdGltZS5cXG5tbS9rc20uYzozNDQzOlxcdFxcdCAqIEJ1dCBicmVha19rc20oKSwgcm1hcCBsb29rdXBzIGFuZCBvdGhlciBlbnRyeSBwb2ludHNcXG5tbS9rc20uYy0zNDQ0LVxcdFxcdCAqIHdoaWNoIGRvIG5vdCBuZWVkIHRoZSBrc21fdGhyZWFkX211dGV4IGFyZSBhbGwgc2FmZS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6NDAuNjU0MTY5MjA0WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzg4NTM1NDUzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlYmFzZSBmb3IgRnV6emluZyoqXG5cbk9rYXksIHRoaXMgaXMgc2VyaW91cyEgV2UncmUgdGFsa2luZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaGVyZSDigJMgdGhlIHN0dWZmIHRoYXQgKnJlYWxseSogbWF0dGVycy4gTGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBUaGUgZ3VpZGVsaW5lcyBjbGVhcmx5IHN0YXRlIHRoYXQgKnJlYWNoYWJpbGl0eSogaXMgdGhlIG1vc3QgaW1wb3J0YW50IGZhY3RvciBpbiBkZXRlcm1pbmluZyBpZiB0aGlzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGFuZCBpdCBsb29rcyBwcm9taXNpbmc6IFdlJ3JlIGRlYWxpbmcgd2l0aCBtb2RpZmljYXRpb25zIGluIGNydWNpYWwgZmlsZXM6IGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYG1tL2h1Z2VfbWVtb3J5LmNgLCBgbW0vbWlncmF0ZS5jYCwgYG1tL3JtYXAuY2AsIGFuZCBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLlxuXG5Hb29kLCB0aGlzIGxvb2tzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHb29nbGUgQ29tcHV0ZSBFbmdpbmUgKG9uIGFtZDY0KSwgd2hpY2ggaXMgaWRlYWwgZm9yIHRoaXMga2luZCBvZiB3b3JrLiBUaGUgcGF0Y2ggaW50cm9kdWNlcyBsb2NraW5nIGNoYW5nZXMgaW4gS1NNIGFuZCBwYWdld2Fsa+KAlHRoaW5ncyBsaWtlIHRoZSBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCwgdGhlIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBmdW5jdGlvbiwgYW5kIGZvbGlvX3dhbGtfc3RhcnQgYXNzZXJ0aW9ucy4gVGhlc2UgYXJlIGNsYXNzaWMgYXJlYXMgd2hlcmUgc3VidGxlIGNvbmN1cnJlbmN5IGJ1Z3MgY2FuIGhpZGUsIG1ha2luZyBpdCBhIHByaW1lIHRhcmdldC4gQWJzb2x1dGVseSwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZyEgVGhlIGBXb3J0aEZ1enppbmc6IHRydWVgIG1hcmtlciBjb25maXJtcyB0aGF0LlxuXG5Ob3csIGxldCdzIGdldCBpbnRvIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbWluaW1hbCBzZXQgb2YgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgYWxsIHRoaXMgY29kZS4gU3BlY2lmaWNhbGx5LCB3aGF0IGtlcm5lbCBjb25maWd1cmF0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIEtTTSwgcGFnZXdhbGssIGZvbGlvX3dhbGssIHVwcm9iZXMsIG1pZ3JhdGUsIGFuZCBodWdlX21lbW9yeT8gSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIGBtbS9rc20uY2AsIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNvIG9uIHRvIGRldGVybWluZSB0aGF0LiBUaGlzIGlzIHRoZSBuZXh0IHN0ZXAgdG8gY3JlYXRpbmcgYSB0ZXN0aW5nIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjE4LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ0LjUzOTUyNTkxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5ODM4MTkwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1NNXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTcyMz1jb25maWcgTU1VX05PVElGSUVSXFxuLS1cXG5tbS9LY29uZmlnLTcyNi1cXG5tbS9LY29uZmlnOjcyNzpjb25maWcgS1NNXFxubW0vS2NvbmZpZy03MjgtXFx0Ym9vbCBcXFwiRW5hYmxlIEtTTSBmb3IgcGFnZSBtZXJnaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo0NC42Mzc5MTE5NDRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozODE0NzU1NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgQnVpbGQgUHJvY2VzcyBvZiBLU00gYW5kIFBhZ2V3YWxrKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24gZm9yIGBrc20uY2AgYW5kIGBwYWdld2Fsay5jYC4gV2hlcmUncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgcGllY2VzIGFyZSBjb21waWxlZCBhbmQgbGlua2VkPyBSaWdodCwgdGhlIGBNYWtlZmlsZWAgaW4gdGhlIGBtbWAgZGlyZWN0b3J5LiBUaGF0J3MgdXN1YWxseSB0aGUgcGxhY2Ugd2hlcmUgdGhlIGNvcmUgYnVpbGQgcnVsZXMgZm9yIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgYXJlIGRlZmluZWQuIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29tcGlsZXIgZmxhZ3MsIGFueSBzcGVjaWZpYyBvYmplY3QgZmlsZSBkZXBlbmRlbmNpZXMsIGFuZCBob3cgdGhlc2UgbW9kdWxlcyBpbnRlZ3JhdGUgd2l0aGluIHRoZSBsYXJnZXIgYnVpbGQgcHJvY2Vzcy4gVGltZSB0byBjcmFjayBvcGVuIHRoYXQgYG1tL01ha2VmaWxlYCBhbmQgc2VlIHdoYXQncyB3aGF0LiBMZXQncyBzZWUgaWYgSSBjYW4gc3BvdCBhbnkgaW50ZXJlc3RpbmcgdHJpY2tzIG9yIG9wdGltaXphdGlvbiBzdHJhdGVnaWVzIGVtcGxveWVkIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMyMSwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ4LjQ1MjY2OTM3N1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTY1MTYxOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrc20ub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT05MD1vYmotJChDT05GSUdfTU1VX05PVElGSUVSKSArPSBtbXVfbm90aWZpZXIub1xcbm1tL01ha2VmaWxlOjkxOm9iai0kKENPTkZJR19LU00pICs9IGtzbS5vXFxubW0vTWFrZWZpbGUtOTItb2JqLSQoQ09ORklHX1BBR0VfUE9JU09OSU5HKSArPSBwYWdlX3BvaXNvbi5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjQ4LjU1MjMyNjgwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNzQ4ODM0NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHBvdGVudGlhbCBhcmVhcyBmb3IgaW52ZXN0aWdhdGlvbjpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgVGFyZ2V0IE1vZHVsZXMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IGZlZWxpbmcgdGVsbHMgbWUgdGhlc2UgYXJlIGxpa2VseSBrZXkgYXJlYXMgdGhhdCBuZWVkIGZ1cnRoZXIgc2NydXRpbnkgYmFzZWQgb24gdGhlIGN1cnJlbnQgc3lzdGVtIGJlaGF2aW9yLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBwYWdld2Fsay5vYCwgYGh1Z2VfbWVtb3J5Lm9gLCBgbWlncmF0ZS5vYCwgYW5kIGB1cHJvYmVzLm9gLiBDb25zaWRlcmluZyBteSBleHBlcnRpc2UsIEknbSBleHBlY3RpbmcgdGhlc2UgbW9kdWxlcyB0byByZXZlYWwgc29tZSBpbnRlcmVzdGluZyBmaW5kaW5ncyByZWxhdGVkIHRvIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBvdGVudGlhbCBib3R0bGVuZWNrcyBpbiBsYXJnZSBwYWdlIGhhbmRsaW5nLCBsaXZlIG1pZ3JhdGlvbiBjb21wbGV4aXRpZXMsIGFuZCB0aGUgcG9zc2libGUgb3ZlcmhlYWQgb2YgdXNlci1zcGFjZSBwcm9iaW5nLiBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgb3RoZXIgY29tcG9uZW50cy4gSXQncyB0aW1lIHRvIGRpdmUgaW50byB0aGUgc291cmNlIGFuZCBzZWUgd2hhdCdzIHJlYWxseSBoYXBwZW5pbmcgdW5kZXIgdGhlIGhvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjIwLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTA6NTAuNzI3MjEzMTAzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTU3NzczNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiKHBhZ2V3YWxrfGh1Z2VfbWVtb3J5fG1pZ3JhdGV8dXByb2JlcylcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9Mzc9bW11LSQoQ09ORklHX01NVSlcXHQ6PSBoaWdobWVtLm8gbWVtb3J5Lm8gbWluY29yZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS0zOC1cXHRcXHRcXHQgICBtbG9jay5vIG1tYXAubyBtbXVfZ2F0aGVyLm8gbXByb3RlY3QubyBtcmVtYXAubyBcXFxcXFxubW0vTWFrZWZpbGU6Mzk6XFx0XFx0XFx0ICAgbXN5bmMubyBwYWdlX3ZtYV9tYXBwZWQubyBwYWdld2Fsay5vIFxcXFxcXG5tbS9NYWtlZmlsZS00MC1cXHRcXHRcXHQgICBwZ3RhYmxlLWdlbmVyaWMubyBybWFwLm8gdm1hbGxvYy5vIHZtYS5vIHZtYV9leGVjLm9cXG4tLVxcbm1tL01ha2VmaWxlPTk4PW9iai0kKENPTkZJR19NRU1URVNUKVxcdFxcdCs9IG1lbXRlc3Qub1xcbm1tL01ha2VmaWxlOjk5Om9iai0kKENPTkZJR19NSUdSQVRJT04pICs9IG1pZ3JhdGUub1xcbm1tL01ha2VmaWxlLTEwMC1vYmotJChDT05GSUdfTlVNQSkgKz0gbWVtb3J5LXRpZXJzLm9cXG5tbS9NYWtlZmlsZT0xMDE9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDI6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMy1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MDo1MC44NDI5OTU3MzFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjE2MDk0NjkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2VybmVsIFVwcm9iZSBEZWJ1Z2dpbmcgLSBNYWtlZmlsZSBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyB1cHJvYmVzIHRoaW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYHVwcm9iZXMub2Agb2JqZWN0IGZpbGUgaXMgYmVpbmcgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwgc291cmNlLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBjaGVjayB0aGUgYGtlcm5lbC9ldmVudHMvTWFrZWZpbGVgLiBJdCdzIGEgcHJldHR5IHN0YW5kYXJkIGNvbnZlbnRpb24gdG8gZmluZCByZWxhdGVkIG9iamVjdCBmaWxlcyBkZWZpbmVkIGluIHRoYXQgZGlyZWN0b3J5J3MgTWFrZWZpbGUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhlIGBrZXJuZWwvZXZlbnRzYCBjb250ZXh0LiBUaGlzIGlzIGEgY29tbW9uIHBhdHRlcm4gZm9yIGtlcm5lbCBjb21wb25lbnQgYnVpbGQgc3RydWN0dXJlcyBhbmQgb3JnYW5pemF0aW9uLiBIb3BlZnVsbHksIGl0J3MgYSBzdHJhaWdodGZvcndhcmQgaW5jbHVkZSBvciBkZWZpbml0aW9uIHRoZXJlLCBhbmQgSSBjYW4gcXVpY2tseSB0cmFjZSBpdHMgZGVwZW5kZW5jaWVzIGFuZCBidWlsZCBwcm9jZXNzIGZyb20gdGhlcmUuIFRpbWUgdG8gc2VlIHdoYXQgd2UndmUgZ290IVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE0MiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjUzLjAwMzk0NjgyOVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc2MjE3MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidXByb2Jlc1xcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZXZlbnRzL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9ldmVudHMvTWFrZWZpbGU9NT1vYmotJChDT05GSUdfSFdfQlJFQUtQT0lOVF9LVU5JVF9URVNUKSArPSBod19icmVha3BvaW50X3Rlc3Qub1xcbmtlcm5lbC9ldmVudHMvTWFrZWZpbGU6NjpvYmotJChDT05GSUdfVVBST0JFUykgKz0gdXByb2Jlcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUwOjUzLjA2MTU3NDg0OFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4ODE1Mzk5NDc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBMb2NraW5nIElzc3VlcyB3aXRoIFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gVGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbyBpcyBjb25maXJtIHByZWNpc2VseSB3aGF0IGBQR1dBTEtfVk1BX1JETE9DS19WRVJJRllgIGFjdHVhbGx5ICpkb2VzKi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBkZWZpbml0aW9uIG9mIHRoYXQgbWFjcm8g4oCTIHdoYXQgYXJlIGl0cyBpbnRlbmRlZCBjaGVja3MsIHdoYXQgYXJlIHRoZSBjb25kaXRpb25zIGl0J3MgZGVzaWduZWQgdG8gZmxhZz8gSXMgaXQgcmVsYXRlZCB0byByZWFkLW9ubHkgYWNjZXNzIGluIHNvbWUgd2F5PyBPciBpcyBpdCBhIG1vcmUgZ2VuZXJhbCB2YWxpZGF0aW9uIHRvb2w/IFVuZGVyc3RhbmRpbmcgdGhlICpwdXJwb3NlKiBpcyBjcml0aWNhbCBiZWZvcmUgSSBjYW4gYXNzZXNzIGFueSBwb3RlbnRpYWwgcHJvYmxlbS5cblxuTmV4dCwgSSBoYXZlIHRvIGNvbnNpZGVyIHRoZSBwZXItVk1BIChWaXJ0dWFsIE1lbW9yeSBBcmVhKSBsb2NrIGNvbmZpZ3VyYXRpb25zLiBBcmUgdGhlcmUgYW55IGN1c3RvbSBjb25maWd1cmF0aW9ucyB0aGF0IGNvdWxkIGJlIGludGVyZmVyaW5nIHdpdGggb3IgdW5leHBlY3RlZGx5IGludGVyYWN0aW5nIHdpdGggdGhlIHZlcmlmaWNhdGlvbiBjaGVja3MgcGVyZm9ybWVkIGJ5IHRoaXMgbWFjcm8/IEFyZSB0aGVyZSBhbnkgdW51c3VhbCBsb2NrIHNldHRpbmdzIHRoYXQgYXJlIGhhcHBlbmluZyBvbiB0aG9zZSBWTUFzPyBBcmUgdGhlIGFzc3VtcHRpb25zIG9mIHRoZSBsb2NrIHN5c3RlbSBiZWluZyBicm9rZW4gc29tZWhvdz8gVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IGJlY2F1c2UgYFBHV0FMS2AgaXMgcmVsYXRlZCB0byBwYWdlIHRhYmxlIHdhbGtzLCB3aGljaCBhcmUgYSBjcml0aWNhbCBhcmVhIGZvciBjb25jdXJyZW5jeSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuIEFueSBpbmNvbnNpc3RlbmNpZXMgaGVyZSBjYW4gaGF2ZSBzZXZlcmUgcmFtaWZpY2F0aW9ucy4gTGV0J3Mgc2VlIGlmIHRoaXMgbWFjcm8gY2FuIGhlbHAgbWUsIG9yIGlmIGl0IG1pZ2h0IGJlIGEgcGFydCBvZiB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE0MTMsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTowMS44NzY5NzkzOTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzOTUyMDI5NzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xMjUzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI1NS1cXHQuaHVnZXRsYl9lbnRyeVxcdFxcdD0gc21hcHNfaHVnZXRsYl9yYW5nZSxcXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTI1NjpcXHQud2Fsa19sb2NrXFx0XFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyNTctfTtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMjU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2Mi1cXHQucHRlX2hvbGVcXHRcXHQ9IHNtYXBzX3B0ZV9ob2xlLFxcbmZzL3Byb2MvdGFza19tbXUuYzoxMjYzOlxcdC53YWxrX2xvY2tcXHRcXHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI2NC19O1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTM0MTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTM0MjAtXFx0LnBtZF9lbnRyeSA9IGdhdGhlcl9wdGVfc3RhdHMsXFxuZnMvcHJvYy90YXNrX21tdS5jOjM0MjE6XFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzQyMi19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTEwPWVudW0gcGFnZV93YWxrX2xvY2sge1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3LVxcdC8qIHZtYSBpcyBleHBlY3RlZCB0byBiZSBhbHJlYWR5IHJlYWQtbG9ja2VkIGR1cmluZyB0aGUgd2FsayAqL1xcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxODpcXHRQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgPSAzLFxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOS19O1xcbi0tXFxubW0vZGFtb24vdmFkZHIuYz0yMjk9c3RhdGljIHZvaWQgZGFtb25fdmFfd2Fsa19wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIHN0YXJ0LFxcbi0tXFxubW0vZGFtb24vdmFkZHIuYy0yNDMtXFx0aWYgKCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCkpIHtcXG5tbS9kYW1vbi92YWRkci5jOjI0NDpcXHRcXHRvcHMtXFx1MDAzZXdhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWTtcXG5tbS9kYW1vbi92YWRkci5jLTI0NS1cXHRcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgc3RhcnQsIGVuZCwgb3BzLCBwcml2YXRlKTtcXG4tLVxcbm1tL2tzbS5jPTgwNj1zdGF0aWMgdm9pZCBicmVha19jb3coc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgyNi1cXG5tbS9rc20uYzo4Mjc6XFx0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcXG5tbS9rc20uYy04MjgtXFx0dm1hX2VuZF9yZWFkKHZtYSk7XFxuLS1cXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgzOC1cXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9rc20uYzo4Mzk6XFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxubW0va3NtLmMtODQwLVxcdH07XFxuLS1cXG5tbS9tYWR2aXNlLmM9Nzk4PXN0YXRpYyBpbmxpbmUgZW51bSBwYWdlX3dhbGtfbG9jayBnZXRfd2Fsa19sb2NrKGVudW0gbWFkdmlzZV9sb2NrX21vZGUgbW9kZSlcXG4tLVxcbm1tL21hZHZpc2UuYy04MDEtXFx0Y2FzZSBNQURWSVNFX1ZNQV9SRUFEX0xPQ0s6XFxubW0vbWFkdmlzZS5jOjgwMjpcXHRcXHRyZXR1cm4gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZO1xcbm1tL21hZHZpc2UuYy04MDMtXFx0Y2FzZSBNQURWSVNFX01NQVBfUkVBRF9MT0NLOlxcbi0tXFxubW0vcGFnZXdhbGsuYz00MzU9c3RhdGljIGlubGluZSB2b2lkIHByb2Nlc3NfbW1fd2Fsa19sb2NrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubW0vcGFnZXdhbGsuYy00MzktXFx0XFx0bW1hcF9hc3NlcnRfbG9ja2VkKG1tKTtcXG5tbS9wYWdld2Fsay5jOjQ0MDpcXHRlbHNlIGlmICh3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxcbm1tL3BhZ2V3YWxrLmMtNDQxLVxcdFxcdG1tYXBfYXNzZXJ0X3dyaXRlX2xvY2tlZChtbSk7XFxuLS1cXG5tbS9wYWdld2Fsay5jPTQ0ND1zdGF0aWMgaW5saW5lIHZvaWQgcHJvY2Vzc192bWFfd2Fsa19sb2NrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vcGFnZXdhbGsuYy00NTMtXFx0XFx0YnJlYWs7XFxubW0vcGFnZXdhbGsuYzo0NTQ6XFx0Y2FzZSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlk6XFxubW0vcGFnZXdhbGsuYy00NTUtXFx0XFx0dm1hX2Fzc2VydF9sb2NrZWQodm1hKTtcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9ODk5PXN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTkxNi1cXHQgKi9cXG5tbS9wYWdld2Fsay5jOjkxNzpcXHRpZiAoZnctXFx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfUkRMT0NLIFxcdTAwMjZcXHUwMDI2IGZ3LVxcdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKVxcbm1tL3BhZ2V3YWxrLmMtOTE4LVxcdFxcdFdBUk5fT05DRSgxLCBcXFwid2Fsa19sb2NrIGlzIG5vdCBleHBlY3RlZCFcXFxcblxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTowNC4yNzIxODg4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDgxNTEyNzEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyBQZXItVk1BIExvY2tpbmcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyBjb250cm9sbGluZyB0aGUgcGVyLVZNQSBsb2NraW5nIG1lY2hhbmlzbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgdGhlIGBLY29uZmlnYCBmaWxlLiBUaGF0J3MgdXN1YWxseSB0aGUgZ28tdG8gcGxhY2UgZm9yIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHJpZ2h0PyBTcGVjaWZpY2FsbHksIEknbSBhZnRlciBgUEVSX1ZNQV9MT0NLYC4gVGhhdCdzIHRoZSBsaWtlbHkga2V5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IHdoYXQgdGhhdCBvcHRpb24gZG9lcyBhbmQgaG93IGl0J3MgZGVmaW5lZCwgYXMgaXQgd2lsbCByZXZlYWwgdGhlIGNpcmN1bXN0YW5jZXMgdW5kZXIgd2hpY2ggdGhlIGtlcm5lbCB3aWxsIGVtcGxveSBwZXItVk1BIGxvY2tpbmcuIFRoaXMgc2hvdWxkIHRlbGwgbWUgd2hhdCBJIG5lZWQgdG8ga25vdyBhYm91dCB0aGUgZmVhdHVyZS4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA3NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjA2Ljc1MzcwNTE2M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAzMjIxNDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWcuZGVidWc9MzAwPWNvbmZpZyBERUJVR19LTUVNTEVBS19WRVJCT1NFXFxuLS1cXG5tbS9LY29uZmlnLmRlYnVnLTMxMC1cXG5tbS9LY29uZmlnLmRlYnVnOjMxMTpjb25maWcgUEVSX1ZNQV9MT0NLX1NUQVRTXFxubW0vS2NvbmZpZy5kZWJ1Zy0zMTItXFx0Ym9vbCBcXFwiU3RhdGlzdGljcyBmb3IgcGVyLXZtYSBsb2Nrc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MDYuODU2OTMyMDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2NTY1MDM1MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRlZXAgRGl2ZSBUaW1lOiBDaGVja2luZyBgUEVSX1ZNQV9MT0NLYCBpbiB0aGUgS2VybmVsKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nLCBcIlJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcyBhbmQgcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHVzYWdlIG9mIGBQRVJfVk1BX0xPQ0tgIGFjcm9zcyB0aGUgKmVudGlyZSoga2VybmVsLlwiIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgaG93IHRoaXMgbG9jayBpcyBiZWluZyB1c2VkLiBJIGtub3cgaXRzIHB1cnBvc2UsIGJ1dCBJIG5lZWQgdG8gc2VlIHRoZSBpbXBsZW1lbnRhdGlvbiBpbiBjb250ZXh0LiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIHN5c3RlbWF0aWMgc2VhcmNoIGFuZCBhbmFseXNpcy4gTm8gc3VyZmFjZS1sZXZlbCBza2ltbWluZyBoZXJlOyBJIG5lZWQgdGhlIGdyYW51bGFyaXR5IHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ20gZ29pbmcgdG8gdHJhY2sgaXRzIHVzZSBhY3Jvc3MgZGlmZmVyZW50IGFyY2hpdGVjdHVyZXMgYW5kIHN1YnN5c3RlbXMuIEkgbmVlZCBhIGNsZWFyIG1lbnRhbCBwaWN0dXJlIG9mIHdoZXJlIGl0J3MgY3JpdGljYWwsIHdoZXJlIGl0J3MgcG90ZW50aWFsbHkgcmVkdW5kYW50LCBhbmQgYW55dGhpbmcgdGhhdCBjb3VsZCBsZWFkIHRvIHVuZXhwZWN0ZWQgYmVoYXZpb3IuIFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhvcm91Z2guIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjcsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToxNC41MTM0Mzk1MjZaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2Nzk4ODA2NDAsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQRVJfVk1BX0xPQ0tcXFxcYlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MTcuMTkzMzMyMjk2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE0MzI0Nzk1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIGBQRVJfVk1BX0xPQ0tgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgUEVSX1ZNQV9MT0NLYCBkZWZpbml0aW9uIGJldHRlci4gR2l2ZW4gbXkgZXhwZXJ0aXNlLCBJJ20gZ29pbmcgdG8gcXVpY2tseSBnZXQgdXAgdG8gc3BlZWQgd2l0aCBpdHMgbnVhbmNlcy4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nIGNyaXRpY2FsIGluIG15IHVuZGVyc3RhbmRpbmcgb2YgaXRzIGFwcGxpY2F0aW9uLiBJJ2xsIG5lZWQgdG8gZ28gYmV5b25kIGEgc3VwZXJmaWNpYWwgZ2xhbmNlLiBJJ2xsIG5lZWQgdG8ga25vdyBleGFjdGx5IHdoYXQgaXQgbWVhbnMgYW5kIGhvdyBpdCdzIHVzZWQuIExldCdzIHN0YXJ0IHdpdGggYSB0aG9yb3VnaCBjaGVjayBvZiB0aGUgZGVmaW5pdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM2MTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToxOC42MjU4MTcwMjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMjMyOTIwNSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEVSX1ZNQV9MT0NLXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbGludXgvbW0uaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MTguOTM4MTUzOThaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEyMjY1MDA0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoIGB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZGAuIEZpcnN0IHRoaW5ncyBmaXJzdCwgbGV0J3MgZmluZCBpdHMgZGVmaW5pdGlvbi4gS25vd2luZyB3aGVyZSBpdCdzIGRlZmluZWQgd2lsbCBnaXZlIG1lIHRoZSBtb3N0IGZ1bmRhbWVudGFsIGluZm9ybWF0aW9uIGFib3V0IGl0cyBwdXJwb3NlLCBwYXJhbWV0ZXJzLCBhbmQgbGlrZWx5LCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IG9wZXJhdGVzIG9uLiBUaGlzIHNob3VsZCBwb2ludCBtZSB0byB0aGUgY29yZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgbWFuYWdlbWVudCBjb2RlLiBGcm9tIHRoZXJlLCBJIGNhbiB0cmFjZSBpdHMgY2FsbCBzaXRlcyBhbmQgc2VlIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBtZW1vcnkgbWFuYWdlbWVudCBvcGVyYXRpb25zLCBsaWtlbHkgaW52b2x2aW5nIGxvY2tpbmcvdW5sb2NraW5nIHNjaGVtZXMgYW5kIHJlYWQvd3JpdGUgYWNjZXNzLiBUaGlzIGluaXRpYWwgc2VhcmNoIGlzIGVzc2VudGlhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHdpbGwgYmUgYSBmdW5jdGlvbiwgYnV0IGl0IGNvdWxkIGJlIGEgbWFjcm8sIHNvIEkgbmVlZCB0byBjaGVjayBlaXRoZXIgd2F5LiBPbmNlIEkgaGF2ZSB0aGUgZGVmaW5pdGlvbiwgSSBjYW4gc3RhcnQgZm9ybWluZyBhIG1lbnRhbCBtb2RlbCBvZiBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzc5NCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjIxLjA2MDgwNTk5OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0NTQ5MDQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfc3RhcnRfcmVhZF91bmxvY2tlZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM9NDAxPSAgICB1bnNhZmUgZm4gdXNlX3BhZ2Vfc2xvdyhcXHUwMDI2c2VsZiwgaTogdXNpemUpIC1cXHUwMDNlIFJlc3VsdFxcdTAwM2MoKVxcdTAwM2Uge1xcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlci9wYWdlX3JhbmdlLnJzLTQ0MS0gICAgICAgIHtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyL3BhZ2VfcmFuZ2UucnM6NDQyOiAgICAgICAgICAgIGxldCB2bWFfcmVhZF9ndWFyZCA9IG1tLnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHZtYV9hZGRyKS5va19vcihFU1JDSCk/O1xcbmRyaXZlcnMvYW5kcm9pZC9iaW5kZXIvcGFnZV9yYW5nZS5ycy00NDMtICAgICAgICAgICAgbGV0IHZtYSA9IGNoZWNrX3ZtYShcXHUwMDI2dm1hX3JlYWRfZ3VhcmQsIHNlbGYpLm9rX29yKEVTUkNIKT87XFxuLS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM9MjU0PXN0YXRpYyBpbnQgYmluZGVyX3BhZ2VfaW5zZXJ0KHN0cnVjdCBiaW5kZXJfYWxsb2MgKmFsbG9jLFxcbi0tXFxuZHJpdmVycy9hbmRyb2lkL2JpbmRlcl9hbGxvYy5jLTI2MS1cXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmM6MjYyOlxcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyKTtcXG5kcml2ZXJzL2FuZHJvaWQvYmluZGVyX2FsbG9jLmMtMjYzLVxcdGlmICghdm1hKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaD0yNjM9c3RhdGljIGlubGluZSBib29sIHZtYV9zdGFydF9yZWFkX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmgtMjY3LVxcbmluY2x1ZGUvbGludXgvbW1hcF9sb2NrLmg6MjY4OnN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuaW5jbHVkZS9saW51eC9tbWFwX2xvY2suaC0yNjktXFx0XFx0XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7XFxuLS1cXG5tbS9rc20uYz03ODE9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL2tzbS5jLTc4OC1cXG5tbS9rc20uYzo3ODk6XFx0dm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xcbm1tL2tzbS5jLTc5MC1cXHRpZiAoIXZtYSlcXG4tLVxcbm1tL21tYXBfbG9jay5jPTI5Mz1zdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmxvY2tfdm1hX3VuZGVyX3JjdShzdHJ1Y3QgbW1fc3RydWN0ICptbSxcXG4tLVxcbm1tL21tYXBfbG9jay5jLTM0My0vKipcXG5tbS9tbWFwX2xvY2suYzozNDQ6ICogdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoKSAtIEZpbmQgdGhlIFZNQSBjb3ZlcmluZyAnYWRkcmVzcycgYW5kIHJlYWQtbG9jayBpdC5cXG5tbS9tbWFwX2xvY2suYy0zNDUtICogQG1tOiB0aGUgbW1fc3RydWN0IG9mIHRoZSBhZGRyZXNzIHNwYWNlIHRvIHNlYXJjaFxcbi0tXFxubW0vbW1hcF9sb2NrLmMtMzU3LSAqL1xcbm1tL21tYXBfbG9jay5jOjM1ODpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYV9zdGFydF9yZWFkX3VubG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbm1tL21tYXBfbG9jay5jLTM1OS1cXHRcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE3MD1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX3RjcF92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTcyLXtcXG5uZXQvaXB2NC90Y3AuYzoyMTczOlxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQobW0sIGFkZHJlc3MpO1xcbm5ldC9pcHY0L3RjcC5jLTIxNzQtXFxuLS1cXG5ydXN0L2tlcm5lbC9tbS5ycz0xNzQ9ICAgIHB1YiBmbiBsb2NrX3ZtYV91bmRlcl9yY3UoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTIwMC0gICAgI1tpbmxpbmVdXFxucnVzdC9rZXJuZWwvbW0ucnM6MjAxOiAgICBwdWIgZm4gdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQoXFx1MDAyNnNlbGYsIHZtYV9hZGRyOiB1c2l6ZSkgLVxcdTAwM2UgT3B0aW9uXFx1MDAzY1ZtYVJlYWRHdWFyZFxcdTAwM2MnX1xcdTAwM2VcXHUwMDNlIHtcXG5ydXN0L2tlcm5lbC9tbS5yczoyMDI6ICAgICAgICAvLyBTQUZFVFk6IFdlIG1heSBpbnZva2UgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBiZWNhdXNlIHdlIGtub3cgdGhpcyBgbW1gIGhhcyBub24temVyb1xcbnJ1c3Qva2VybmVsL21tLnJzLTIwMy0gICAgICAgIC8vIGBtbV91c2Vyc2AuXFxucnVzdC9rZXJuZWwvbW0ucnM6MjA0OiAgICAgICAgbGV0IHZtYSA9IHVuc2FmZSB7IGJpbmRpbmdzOjp2bWFfc3RhcnRfcmVhZF91bmxvY2tlZChzZWxmLmFzX3JhdygpLCB2bWFfYWRkcikgfTtcXG5ydXN0L2tlcm5lbC9tbS5ycy0yMDUtICAgICAgICBpZiB2bWEuaXNfbnVsbCgpIHtcXG4tLVxcbnJ1c3Qva2VybmVsL21tLnJzLTIwOS0gICAgICAgIFNvbWUoVm1hUmVhZEd1YXJkIHtcXG5ydXN0L2tlcm5lbC9tbS5yczoyMTA6ICAgICAgICAgICAgLy8gU0FGRVRZOiBJZiBgdm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWRgIHJldHVybnMgYSBub24tbnVsbCBwdHIsIHRoZW4gaXQgcG9pbnRzIGF0IGFcXG5ydXN0L2tlcm5lbC9tbS5ycy0yMTEtICAgICAgICAgICAgLy8gdmFsaWQgdm1hLiBUaGUgdm1hIGlzIHN0YWJsZSBmb3IgYXMgbG9uZyBhcyB0aGUgdm1hIHJlYWQgbG9jayBpcyBoZWxkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MToyMy42MDYzMTU1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMTI3ODQyNDg4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFBsYW4gZm9yIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgcGF0Y2ggc2VyaWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGFyZWFzIGZvciBmdXp6aW5nIHRvIHVuY292ZXIgcG90ZW50aWFsIGlzc3VlcywgZ2l2ZW4gdGhlIGxpa2VseSBpbXBhY3Qgb24gY29yZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25maXJtIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIGBDT05GSUdfS1NNYCBpcyB0aGUgbWFpbiBvbmUgZm9yIEtlcm5lbCBTYW1lcGFnZSBNZXJnaW5nLCBhbmQgSSdsbCBhbHNvIGNoZWNrIGZvciBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCwgYENPTkZJR19NSUdSQVRJT05gLCBhbmQgYENPTkZJR19VUFJPQkVTYCBhcyB0aGV5IHNlZW0gcmVsYXRlZCB0byB0aGUgbW9kaWZpZWQgY29tcG9uZW50cy5cblxuTmV4dCwgSSBuZWVkIHRvIGxpc3QgdGhlIGltcGFjdGVkIGZ1bmN0aW9ucyB0byBnZXQgYW4gaWRlYSBvZiB0aGUgc2NvcGUuIEkgc2VlIHNldmVyYWwgZnVuY3Rpb25zIHdpdGhpbiBgbW0va3NtLmNgIGxpa2UgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgLCBgYnJlYWtfa3NtYCwgYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYW5kIGBrc21fbWFkdmlzZWAuICBUaGVyZSBhcmUgYWxzbyBtb2RpZmljYXRpb25zIHRvIGBmb2xpb193YWxrX3N0YXJ0YCBpbiBgbW0vcGFnZXdhbGsuY2AsIGBzcGxpdF9odWdlX3BhZ2VzX3BpZGAgaW4gYG1tL2h1Z2VfbWVtb3J5LmNgLCBgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb25gIGFuZCBgZG9fcGFnZXNfc3RhdF9hcnJheWAgaW4gYG1tL21pZ3JhdGUuY2AsIGBtYWtlX2RldmljZV9leGNsdXNpdmVgIGluIGBtbS9ybWFwLmNgLCBhbmQgZmluYWxseSBgdXByb2JlX3dyaXRlYCBpbiBga2VybmVsL2V2ZW50cy91cHJvYmVzLmNgLlxuXG5Ob3csIEknbGwgaWRlbnRpZnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSB0aGUgYmVzdCB0YXJnZXRzIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gcHJpb3JpdGl6ZSBmdW5jdGlvbnMgdGhhdCBhcmUgc3BlY2lmaWMgdG8gdGhlIGZlYXR1cmUgbG9naWMgb3IgZW50cnlwb2ludHMgYW5kIGF2b2lkIHRoZSB1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aHMuICBgZm9saW9fd2Fsa19zdGFydGAgaXMgaW50ZXJlc3RpbmcgYXMgaXQncyBhIHBhZ2V3YWxrIGhlbHBlciB3aXRoIG5ldyBhc3NlcnRpb25zIGFuZCBsb2NraW5nIGNoZWNrcy4gYGJyZWFrX2tzbWAgaXMgYW5vdGhlciBvbmUsIGdpdmVuIHRoZSBsb2NraW5nIGNoYW5nZXMuIFRoZSBLU00gaGVscGVycyAoYGJyZWFrX2Nvd2AsIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgdHJ5X3RvX21lcmdlX3dpdGhfemVyb19wYWdlYCwgYHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlYCwgYGZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRgKSwgYGtzbV9tYWR2aXNlYCwgYHNwbGl0X2h1Z2VfcGFnZXNfcGlkYCwgYXJlIGFsbCBsaWtlbHkgY2FuZGlkYXRlcy4gRmluYWxseSwgSSdsbCBpbmNsdWRlIHRoZXNlIG90aGVyczogYGFkZF9mb2xpb19mb3JfbWlncmF0aW9uYCwgYGRvX3BhZ2VzX3N0YXRfYXJyYXlgLCBgbWFrZV9kZXZpY2VfZXhjbHVzaXZlYCwgYW5kIGB1cHJvYmVfd3JpdGVgLlxuXG5MZXQncyBjaGVjayB3aGV0aGVyIHN0YXRpYyBvciBub24tc3RhdGljIGZ1bmN0aW9ucyBhcmUgcHJlZmVyYWJsZSBoZXJlLiBJdCBzZWVtcyB0aGF0IG1vc3Qgc3RhdGljIGZ1bmN0aW9ucyB3aWxsIGJlIHJlc29sdmVkIGJ1dCBpdCBtYXkgYmUgd29ydGggY2hlY2tpbmcgaWYgd2VsbC1rbm93biBlbnRyeXBvaW50cyBhcmUgYmV0dGVyIHRhcmdldHMuIFRoZSBpbXBvcnRhbnQgZnVuY3Rpb25zIHNlZW0gdG8gYmUgd2VsbC1rbm93biBlbnRyeXBvaW50cy4gYGtzbV9tYWR2aXNlYCBpcyBjYWxsZWQgZnJvbSBgbWFkdmlzZV92bWFfYmVoYXZpb3JgLiBgZm9saW9fd2Fsa19zdGFydGAgaXMgZXhwb3J0ZWQvY2FsbGFibGUgYWNyb3NzIGBtbWAuIGBicmVha19rc21gIGlzIGNhbGxlZCBpbiBga3NtLmNgLiBgc3BsaXRfaHVnZV9wYWdlc19waWRgIGlzIGluIGBtbS9odWdlX21lbW9yeS5jYC5cblxuVGhlbiwgSSdsbCBkb3VibGUtY2hlY2sgdGhvc2UgY29uZmlnIG9wdGlvbnM6IGBLU01gLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCBgTUlHUkFUSU9OYCwgYW5kIGBVUFJPQkVTYC5cblxuRmluYWxseSwgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVyczpcblxuKiAgIGBXb3J0aEZ1enppbmdgOiBUcnVlLlxuKiAgIGBSZWFzb25pbmdgOiAgVGhpcyBpcyBhIHNpZ25pZmljYW50IHBhdGNoIHNlcmllcyBiZWNhdXNlIGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBjaGFuZ2luZyBwYWdlIHRhYmxlIHdhbGtpbmcsIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCBhbmQgdXByb2Jlcy4gSXQgaW50cm9kdWNlcyBsb2NraW5nIHNlbWFudGljcyBjaGFuZ2VzIGFuZCBkZWZlbnNpdmUgYXNzZXJ0aW9ucy5cbiogICBgRm9jdXNTeW1ib2xzYDogYFtcImZvbGlvX3dhbGtfc3RhcnRcIiwgXCJicmVha19rc21cIiwgXCJmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkXCIsIFwiZ2V0X21lcmdlYWJsZV9wYWdlXCIsIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIiwgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2VcIiwgXCJrc21fbWFkdmlzZVwiLCBcImJyZWFrX2Nvd1wiLCBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCJdYC5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBbXCJLU01cIiwgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLCBcIk1JR1JBVElPTlwiLCBcIlVQUk9CRVNcIl1gLlxuXG5JJ2xsIHNhbml0eSBjaGVjayB0aGUgYXBwcm9hY2ggYWdhaW5zdCB0aGUgc3RhdGVkIGdvYWxzIGZvciBwYXRjaCBmdXp6aW5nOiByZWFjaGFiaWxpdHksIGZvY3VzaW5nIG9uIG5ldy9tb2RpZmllZCBhc3NlcnRpb25zLCBhbmQgYXZvaWRpbmcgdGhlIG92ZXJseSBnZW5lcmljLiBUaGlzIHNlZW1zIGdvb2QuIFRpbWUgdG8gZXhlY3V0ZSB0aGlzIHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTc5LCJPdXRwdXRUb2tlbnMiOjI1NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzQuODg0NzQzMDcxWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODg4NTU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLU01cIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJNSUdSQVRJT05cIixcbiAgICBcIlVQUk9CRVNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb193YWxrX3N0YXJ0XCIsXG4gICAgXCJicmVha19rc21cIixcbiAgICBcImZpbmRfbWVyZ2VhYmxlX3ZtYV9sb2NrZWRcIixcbiAgICBcImdldF9tZXJnZWFibGVfcGFnZVwiLFxuICAgIFwidHJ5X3RvX21lcmdlX3dpdGhfa3NtX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZVwiLFxuICAgIFwia3NtX21hZHZpc2VcIixcbiAgICBcImJyZWFrX2Nvd1wiLFxuICAgIFwic3BsaXRfaHVnZV9wYWdlc19waWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHdhbGtpbmcgYW5kIEtTTSBsb2NraW5nIHNlbWFudGljcyBhY3Jvc3MgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAocGFnZXdhbGssIEtTTSwgVEhQLCBtaWdyYXRpb24sIHJtYXAsIHVwcm9iZXMpLiBJdCBpbnRyb2R1Y2VzIHBlci1WTUEgcmVhZCBsb2NraW5nIChQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkgdmlhIHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKSB0byBLU00gcm91dGluZXMsIGR5bmFtaWNhbGx5IGFsdGVycyBicmVha19rc21fb3BzIHdhbGsgbG9ja2luZywgYW5kIGFkZHMgbG9ja2luZyB2YWxpZGF0aW9uIGNoZWNrcy9hc3NlcnRpb25zIGluIGZvbGlvX3dhbGtfc3RhcnQuIFRoZXNlIGNoYW5nZXMgYWx0ZXIgbG9ja2luZyBpbnZhcmlhbnRzIGFuZCBzdGF0ZSBtYW5hZ2VtZW50IGluIHJlYWNoYWJsZSBjb3JlIG1tIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1NNXCIsXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiTUlHUkFUSU9OXCIsXG4gICAgXCJVUFJPQkVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fd2Fsa19zdGFydFwiLFxuICAgIFwiYnJlYWtfa3NtXCIsXG4gICAgXCJmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkXCIsXG4gICAgXCJnZXRfbWVyZ2VhYmxlX3BhZ2VcIixcbiAgICBcInRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlXCIsXG4gICAgXCJ0cnlfdG9fbWVyZ2Vfd2l0aF96ZXJvX3BhZ2VcIixcbiAgICBcImtzbV9tYWR2aXNlXCIsXG4gICAgXCJicmVha19jb3dcIixcbiAgICBcInNwbGl0X2h1Z2VfcGFnZXNfcGlkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB3YWxraW5nIGFuZCBLU00gbG9ja2luZyBzZW1hbnRpY3MgYWNyb3NzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKHBhZ2V3YWxrLCBLU00sIFRIUCwgbWlncmF0aW9uLCBybWFwLCB1cHJvYmVzKS4gSXQgaW50cm9kdWNlcyBwZXItVk1BIHJlYWQgbG9ja2luZyAoUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZIHZpYSB2bWFfc3RhcnRfcmVhZF91bmxvY2tlZCkgdG8gS1NNIHJvdXRpbmVzLCBkeW5hbWljYWxseSBhbHRlcnMgYnJlYWtfa3NtX29wcyB3YWxrIGxvY2tpbmcsIGFuZCBhZGRzIGxvY2tpbmcgdmFsaWRhdGlvbiBjaGVja3MvYXNzZXJ0aW9ucyBpbiBmb2xpb193YWxrX3N0YXJ0LiBUaGVzZSBjaGFuZ2VzIGFsdGVyIGxvY2tpbmcgaW52YXJpYW50cyBhbmQgc3RhdGUgbWFuYWdlbWVudCBpbiByZWFjaGFibGUgY29yZSBtbSBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MTozNS4wNDQ2Mzk2MjhaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzYwNzA3NDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzUuMDQ1MTQ3NDI4WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDY3NjAxOTQwMTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBwYWdlIHdhbGsgbG9ja2luZyBhbmQgdHJhbnNpdGlvbnMgS1NNIGZyb20gbW1hcF9yZWFkX2xvY2sgdG8gcGVyLVZNQSByZWFkIGxvY2tpbmcgKHZtYV9zdGFydF9yZWFkX3VubG9ja2VkL3ZtYV9lbmRfcmVhZCkgd2l0aCBsb2NrIHZlcmlmaWNhdGlvbiBpbiBmb2xpb193YWxrX3N0YXJ0KCkuIEFsbCBsb2NhbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhY3Jvc3MgdGhlIGNvZGViYXNlIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIHdpdGggZGVzaWduYXRlZCBpbml0aWFsaXplcnMgKGBzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHsgLndhbGtfbG9jayA9IC4uLiB9O2ApLCB3aGljaCB6ZXJvLWluaXRpYWxpemVzIHRoZSByZW1haW5pbmcgZmllbGRzIGFzIHBlciBDIHNlbWFudGljcy4gTm8ga2VybmVsIGJ1ZmZlcnMgb3Igc3RydWN0dXJlcyBhcmUgY29waWVkIHRvIHVzZXJzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgcmVhZCBvciBicmFuY2hlZCB1cG9uLCBhbmQgdGhlIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgbG9ja2luZy9zeW5jaHJvbml6YXRpb24gc2VtYW50aWNzICh3aGljaCBhcmUgbW9uaXRvcmVkIGJ5IExPQ0tERVAgYW5kIEtBU0FOKS4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhYzI2NWViMGQ3Yjc1NWY2NjhjYzViMGVjYzM0ZjA1N2E2Y2E3NTZmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDg6NTA6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3MzOTAvbW0vZmF1bHQuYyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5pbmRleCA0NmQ4Mjg5MjYwMDliLi45NjhmMTI4YTUyMzIwIDEwMDY0NFxuLS0tIGEvYXJjaC9zMzkwL21tL2ZhdWx0LmNcbisrKyBiL2FyY2gvczM5MC9tbS9mYXVsdC5jXG5AQCAtNDEyLDcgKzQxMiw5IEBAIF9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxuIFx0dW5zaWduZWQgbG9uZyBhZGRyID0gZ2V0X2ZhdWx0X2FkZHJlc3MocmVncyk7XG4gXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0aW50IHJjO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaCBiL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuaW5kZXggYjQxZDcyNjVjMDFiYy4uNDU1NDI4ZWFmMWZjMCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZXdhbGsuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXG5AQCAtMTgzLDggKzE4Myw4IEBAIHN0cnVjdCBmb2xpb193YWxrIHtcbiBcdFx0cG1kX3QgcG1kO1xuIFx0fTtcbiBcdC8qIHByaXZhdGUgKi9cbi1cdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3BpbmxvY2tfdCAqcHRsO1xuK1x0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9ldmVudHMvdXByb2Jlcy5jIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbmluZGV4IDc3MDllYTg4MjQ3NzguLjA1NGZkY2I1MjEzNjYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY1xuKysrIGIva2VybmVsL2V2ZW50cy91cHJvYmVzLmNcbkBAIC01MDcsNyArNTA3LDkgQEAgaW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aW50IHJldCwgcmVmX2N0cl91cGRhdGVkID0gMDtcbiBcdHVuc2lnbmVkIGludCBndXBfZmxhZ3MgPSBGT0xMX0ZPUkNFO1xuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbi1cdHN0cnVjdCBmb2xpb193YWxrIGZ3O1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdH07XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2U7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDMwYjdjNjNiMGUzNTkuLmQwNDQ3YjZhZTZlNDEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtNDgxMCw3ICs0ODEwLDkgQEAgc3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxuIFx0ICovXG4gXHRmb3IgKGFkZHIgPSB2YWRkcl9zdGFydDsgYWRkciBcdTAwM2MgdmFkZHJfZW5kOyBhZGRyICs9IFBBR0VfU0laRSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0XHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0XHR9O1xuIFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZztcbiBcdFx0dW5zaWduZWQgaW50IHRhcmdldF9vcmRlciA9IG5ld19vcmRlcjtcbmRpZmYgLS1naXQgYS9tbS9rc20uYyBiL21tL2tzbS5jXG5pbmRleCA2MjRmMzc5NzVlMTI5Li4xZDg1NzY5ZWM3ZGJlIDEwMDY0NFxuLS0tIGEvbW0va3NtLmNcbisrKyBiL21tL2tzbS5jXG5AQCAtNjYwLDE2ICs2NjAsMTEgQEAgc3RhdGljIGludCBicmVha19rc21fcG1kX2VudHJ5KHBtZF90ICpwbWRwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5cbiBcdHJldHVybiBmb3VuZDtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fb3BzID0ge1xuK3N0YXRpYyBzdHJ1Y3QgbW1fd2Fsa19vcHMgYnJlYWtfa3NtX29wcyA9IHtcbiBcdC5wbWRfZW50cnkgPSBicmVha19rc21fcG1kX2VudHJ5LFxuIFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4gfTtcbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGJyZWFrX2tzbV9sb2NrX3ZtYV9vcHMgPSB7XG4tXHQucG1kX2VudHJ5ID0gYnJlYWtfa3NtX3BtZF9lbnRyeSxcbi1cdC53YWxrX2xvY2sgPSBQR1dBTEtfV1JMT0NLLFxuLX07XG4tXG4gLypcbiAgKiBUaG91Z2ggaXQncyB2ZXJ5IHRlbXB0aW5nIHRvIHVubWVyZ2Ugcm1hcF9pdGVtcyBmcm9tIHN0YWJsZSB0cmVlIHJhdGhlclxuICAqIHRoYW4gY2hlY2sgZXZlcnkgcHRlIG9mIGEgZ2l2ZW4gdm1hLCB0aGUgbG9ja2luZyBkb2Vzbid0IHF1aXRlIHdvcmsgZm9yXG5AQCAtNjk2LDExICs2OTEsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBicmVha19rc21fbG9ja192bWFfb3BzID0ge1xuICAqIHByb3RlY3Rpb24ga2V5cyBoZXJlIGFueXdheS5cbiAgKi9cbiBzdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLVx0XHR1bnNpZ25lZCBsb25nIGVuZCwgYm9vbCBsb2NrX3ZtYSlcbitcdFx0dW5zaWduZWQgbG9uZyBlbmQsIGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrKVxuIHtcbiBcdHZtX2ZhdWx0X3QgcmV0ID0gMDtcbi1cdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gbG9ja192bWEgP1xuLVx0XHRcdFx0XHUwMDI2YnJlYWtfa3NtX2xvY2tfdm1hX29wcyA6IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4rXHRzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IFx1MDAyNmJyZWFrX2tzbV9vcHM7XG4rXHRvcHMtXHUwMDNld2Fsa19sb2NrID0gd2Fsa19sb2NrO1xuIFxuIFx0ZG8ge1xuIFx0XHRpbnQga3NtX3BhZ2U7XG5AQCAtNzcwLDE1ICs3NjUsMzYgQEAgc3RhdGljIGJvb2wgdm1hX2tzbV9jb21wYXRpYmxlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0cmV0dXJuIGtzbV9jb21wYXRpYmxlKHZtYS1cdTAwM2V2bV9maWxlLCB2bWEtXHUwMDNlZmxhZ3MpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX21lcmdlYWJsZV92bWEoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkcilcbisvKipcbisgKiBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKCkgLSBGaW5kIHRoZSBWTUEgY292ZXJpbmcgJ2FkZHJlc3MnIHdoaWNoIGlzXG4rICogVk1fTUVSR0VBQkxFIGFuZCByZWFkLWxvY2sgaXQgYnkgcGVyLVZNQSBsb2Nrcy4gUGxlYXNlIHVzZSB2bWFfZW5kX3JlYWQoKVxuKyAqIHRvIHVubG9jayB2bWEgYWZ0ZXIgZmluaXNoaW5nIHJlYWRpbmcgdGhlIFZNQSAobm9uLU5VTEwpLlxuKyAqXG4rICogUmV0dXJuOiBJZiBhIFZNQSBleGlzdHMgd2hpY2ggc3BhbnMgQGFkZHJlc3MsIHJldHVybiB0aGF0IFZNQSwgcmVhZC1sb2NrZWQuXG4rICogSWYgbm8gVk1BIGlzIG1hcHBlZCB0aGVyZSBvciwgdmVyeSB1bmxpa2VseSwgYSByZWZlcmVuY2UgY291bnQgb3ZlcmZsb3dcbisgKiBvY2N1cnJlZCwgcmV0dXJuIE5VTEwsIGFuZCBubyByZWFkLWxvY2tlZC5cbisgKlxuKyAqIElNUE9SVEFOVDogSWYgYSBWTUEgZXhpc3RzIGJ1dCBpcyBub3QgVk1fTUVSR0VBQkxFIG9yIGhhcyBubyBhbm9uX3ZtYSxcbisgKiB0aGlzIGZ1bmN0aW9uIHJlbGVhc2VzIHRoZSBwZXItVk1BIHJlYWQgbG9jayBiZWZvcmUgcmV0dXJuaW5nIE5VTEwuXG4rICogQ2FsbGVycyBtdXN0IE5PVCBjYWxsIHZtYV9lbmRfcmVhZCgpIG9uIGEgTlVMTCByZXR1cm4gdmFsdWUuXG4rICovXG4rc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuK1xuIFx0aWYgKGtzbV90ZXN0X2V4aXQobW0pKVxuIFx0XHRyZXR1cm4gTlVMTDtcbi1cdHZtYSA9IHZtYV9sb29rdXAobW0sIGFkZHIpO1xuLVx0aWYgKCF2bWEgfHwgISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX01FUkdFQUJMRSkgfHwgIXZtYS1cdTAwM2Vhbm9uX3ZtYSlcbitcbitcdHZtYSA9IHZtYV9zdGFydF9yZWFkX3VubG9ja2VkKG1tLCBhZGRyZXNzKTtcbitcdGlmICghdm1hKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmICghKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTUVSR0VBQkxFKSB8fCAhdm1hLVx1MDAzZWFub25fdm1hKSB7XG4rXHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0XHRyZXR1cm4gTlVMTDtcbitcdH1cbitcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuQEAgLTgwNCwxMSArODIwLDEyIEBAIHN0YXRpYyB2b2lkIGJyZWFrX2NvdyhzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0ICovXG4gXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSAwO1xuIFxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBhZGRyKTtcbi1cdGlmICh2bWEpXG4tXHRcdGJyZWFrX2tzbSh2bWEsIGFkZHIsIGFkZHIgKyBQQUdFX1NJWkUsIGZhbHNlKTtcbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgYWRkcik7XG4rXHRpZiAoIXZtYSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YnJlYWtfa3NtKHZtYSwgYWRkciwgYWRkciArIFBBR0VfU0laRSwgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZKTtcbitcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuQEAgLTgxNywxMyArODM0LDE0IEBAIHN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXG4gXHR1bnNpZ25lZCBsb25nIGFkZHIgPSBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XG4rXHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuK1x0fTtcbiBcbi1cdG1tYXBfcmVhZF9sb2NrKG1tKTtcbi1cdHZtYSA9IGZpbmRfbWVyZ2VhYmxlX3ZtYShtbSwgYWRkcik7XG4rXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBhZGRyKTtcbiBcdGlmICghdm1hKVxuLVx0XHRnb3RvIG91dDtcbitcdFx0cmV0dXJuIE5VTEw7XG4gXG4gXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XG4gXHRpZiAoZm9saW8pIHtcbkBAIC04MzQsMTIgKzg1MiwxMiBAQCBzdGF0aWMgc3RydWN0IHBhZ2UgKmdldF9tZXJnZWFibGVfcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtKVxuIFx0XHR9XG4gXHRcdGZvbGlvX3dhbGtfZW5kKFx1MDAyNmZ3LCB2bWEpO1xuIFx0fVxuLW91dDpcbitcbiBcdGlmIChwYWdlKSB7XG4gXHRcdGZsdXNoX2Fub25fcGFnZSh2bWEsIHBhZ2UsIGFkZHIpO1xuIFx0XHRmbHVzaF9kY2FjaGVfcGFnZShwYWdlKTtcbiBcdH1cbi1cdG1tYXBfcmVhZF91bmxvY2sobW0pO1xuK1x0dm1hX2VuZF9yZWFkKHZtYSk7XG4gXHRyZXR1cm4gcGFnZTtcbiB9XG4gXG5AQCAtMTI0Myw3ICsxMjYxLDcgQEAgc3RhdGljIGludCB1bm1lcmdlX2FuZF9yZW1vdmVfYWxsX3JtYXBfaXRlbXModm9pZClcbiBcdFx0Zm9yX2VhY2hfdm1hKHZtaSwgdm1hKSB7XG4gXHRcdFx0aWYgKCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NRVJHRUFCTEUpIHx8ICF2bWEtXHUwMDNlYW5vbl92bWEpXG4gXHRcdFx0XHRjb250aW51ZTtcbi1cdFx0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIGZhbHNlKTtcbitcdFx0XHRlcnIgPSBicmVha19rc20odm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIFBHV0FMS19SRExPQ0spO1xuIFx0XHRcdGlmIChlcnIpXG4gXHRcdFx0XHRnb3RvIGVycm9yO1xuIFx0XHR9XG5AQCAtMTU3MSwxNCArMTU4OSwxNCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0aWYgKGtzbV91c2VfemVyb19wYWdlcyBcdTAwMjZcdTAwMjYgKHJtYXBfaXRlbS1cdTAwM2VvbGRjaGVja3N1bSA9PSB6ZXJvX2NoZWNrc3VtKSkge1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcbi1cdFx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0XHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWEobW0sIHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKTtcbitcdFx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZChtbSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0XHRpZiAodm1hKSB7XG4gXHRcdFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSxcbiBcdFx0XHRcdFx0WkVST19QQUdFKHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKSk7XG4gXHRcdFx0dHJhY2Vfa3NtX21lcmdlX29uZV9wYWdlKFxuIFx0XHRcdFx0cGFnZV90b19wZm4oWkVST19QQUdFKHJtYXBfaXRlbS1cdTAwM2VhZGRyZXNzKSksXG4gXHRcdFx0XHRybWFwX2l0ZW0sIG1tLCBlcnIpO1xuK1x0XHRcdHZtYV9lbmRfcmVhZCh2bWEpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWYgdGhlIHZtYSBpcyBvdXQgb2YgZGF0ZSwgd2UgZG8gbm90IG5lZWQgdG9cbkBAIC0xNTg2LDcgKzE2MDQsNiBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX3plcm9fcGFnZShzdHJ1Y3Qga3NtX3JtYXBfaXRlbSAqcm1hcF9pdGVtLFxuIFx0XHRcdCAqL1xuIFx0XHRcdGVyciA9IDA7XG4gXHRcdH1cbi1cdFx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gZXJyO1xuQEAgLTE2MDUsMTAgKzE2MjIsOSBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiBcdGludCBlcnIgPSAtRUZBVUxUO1xuIFxuLVx0bW1hcF9yZWFkX2xvY2sobW0pO1xuLVx0dm1hID0gZmluZF9tZXJnZWFibGVfdm1hKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4rXHR2bWEgPSBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkKG1tLCBybWFwX2l0ZW0tXHUwMDNlYWRkcmVzcyk7XG4gXHRpZiAoIXZtYSlcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gb3V0X3RyYWNlO1xuIFxuIFx0ZXJyID0gdHJ5X3RvX21lcmdlX29uZV9wYWdlKHZtYSwgcGFnZSwga3BhZ2UpO1xuIFx0aWYgKGVycilcbkBAIC0xNjI4LDcgKzE2NDQsOCBAQCBzdGF0aWMgaW50IHRyeV90b19tZXJnZV93aXRoX2tzbV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0sXG4gXHRybWFwX2l0ZW0tXHUwMDNlbGluZWFyX3BhZ2VfaW5kZXggPSBsaW5lYXJfYW5vbl9wYWdlX2luZGV4KHZtYSwgcm1hcF9pdGVtLVx1MDAzZWFkZHJlc3MpO1xuIFx0Z2V0X2Fub25fdm1hKHZtYS1cdTAwM2Vhbm9uX3ZtYSk7XG4gb3V0OlxuLVx0bW1hcF9yZWFkX3VubG9jayhtbSk7XG4rXHR2bWFfZW5kX3JlYWQodm1hKTtcbitvdXRfdHJhY2U6XG4gXHR0cmFjZV9rc21fbWVyZ2Vfd2l0aF9rc21fcGFnZShrcGFnZSwgcGFnZV90b19wZm4oa3BhZ2UgPyBrcGFnZSA6IHBhZ2UpLFxuIFx0XHRcdFx0cm1hcF9pdGVtLCBtbSwgZXJyKTtcbiBcdHJldHVybiBlcnI7XG5AQCAtMjg4Myw3ICsyOTAwLDcgQEAgc3RhdGljIGludCBfX2tzbV9kZWxfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGlmICh2bWEtXHUwMDNlYW5vbl92bWEpIHtcbi1cdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCB0cnVlKTtcbitcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgdm1hLVx1MDAzZXZtX3N0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBQR1dBTEtfV1JMT0NLKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuQEAgLTMwMzUsNyArMzA1Miw3IEBAIGludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbiBcdFx0XHRyZXR1cm4gMDtcdFx0LyoganVzdCBpZ25vcmUgdGhlIGFkdmljZSAqL1xuIFxuIFx0XHRpZiAodm1hLVx1MDAzZWFub25fdm1hKSB7XG4tXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgdHJ1ZSk7XG4rXHRcdFx0ZXJyID0gYnJlYWtfa3NtKHZtYSwgc3RhcnQsIGVuZCwgUEdXQUxLX1dSTE9DSyk7XG4gXHRcdFx0aWYgKGVycilcbiBcdFx0XHRcdHJldHVybiBlcnI7XG4gXHRcdH1cbmRpZmYgLS1naXQgYS9tbS9taWdyYXRlLmMgYi9tbS9taWdyYXRlLmNcbmluZGV4IGEzNjlkMGM5NWMzODYuLjJlMDc4YzFlMWI5YTYgMTAwNjQ0XG4tLS0gYS9tbS9taWdyYXRlLmNcbisrKyBiL21tL21pZ3JhdGUuY1xuQEAgLTIzMDIsNyArMjMwMiw5IEBAIHN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxuIFx0XHRpbnQgbm9kZSwgc3RydWN0IGxpc3RfaGVhZCAqcGFnZWxpc3QsIGJvb2wgbWlncmF0ZV9hbGwpXG4ge1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHRzdHJ1Y3QgZm9saW9fd2FsayBmdztcbitcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXG4rXHR9O1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbiBcdGludCBlcnIgPSAtRUZBVUxUO1xuQEAgLTI0NjQsNyArMjQ2Niw5IEBAIHN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9wYWdlczsgaSsrKSB7XG4gXHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKSgqcGFnZXMpO1xuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdFx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xuK1x0XHRcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcbitcdFx0fTtcbiBcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiBcdFx0aW50IGVyciA9IC1FRkFVTFQ7XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZXdhbGsuYyBiL21tL3BhZ2V3YWxrLmNcbmluZGV4IDc0MTE3MDJhMzdmNTguLjhlYjI5ZmJhMjBhZDkgMTAwNjQ0XG4tLS0gYS9tbS9wYWdld2Fsay5jXG4rKysgYi9tbS9wYWdld2Fsay5jXG5AQCAtOTEwLDcgKzkxMCwxNSBAQCBzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxuIFx0cGdkX3QgKnBnZHA7XG4gXHRwNGRfdCAqcDRkcDtcbiBcbi1cdG1tYXBfYXNzZXJ0X2xvY2tlZCh2bWEtXHUwMDNldm1fbW0pO1xuK1x0LypcbitcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxuK1x0ICogZXhwZWN0ZWQuXG4rXHQgKi9cbitcdGlmIChmdy1cdTAwM2V3YWxrX2xvY2sgIT0gUEdXQUxLX1JETE9DSyBcdTAwMjZcdTAwMjYgZnctXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSlcbitcdFx0V0FSTl9PTkNFKDEsIFwid2Fsa19sb2NrIGlzIG5vdCBleHBlY3RlZCFcXG5cIik7XG4rXHRwcm9jZXNzX21tX3dhbGtfbG9jayh2bWEtXHUwMDNldm1fbW0sIGZ3LVx1MDAzZXdhbGtfbG9jayk7XG4rXHRwcm9jZXNzX3ZtYV93YWxrX2xvY2sodm1hLCBmdy1cdTAwM2V3YWxrX2xvY2spO1xuK1xuIFx0dm1hX3BndGFibGVfd2Fsa19iZWdpbih2bWEpO1xuIFxuIFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgYWRkciBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpKVxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggNTMzMmM1MjkwOWJlMS4uMGNhMjRiY2Y5NTcwMyAxMDA2NDRcbi0tLSBhL21tL3JtYXAuY1xuKysrIGIvbW0vcm1hcC5jXG5AQCAtMjg3MSw3ICsyODcxLDkgQEAgc3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0c3RydWN0IG1tdV9ub3RpZmllcl9yYW5nZSByYW5nZTtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW8sICpmd19mb2xpbztcbiBcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuLVx0c3RydWN0IGZvbGlvX3dhbGsgZnc7XG4rXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcbitcdFx0LndhbGtfbG9jayAgPSBQR1dBTEtfUkRMT0NLLFxuK1x0fTtcbiBcdHN0cnVjdCBwYWdlICpwYWdlO1xuIFx0c3dwX2VudHJ5X3QgZW50cnk7XG4gXHRwdGVfdCBzd3BfcHRlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6MzUuMDQ1MTQ4NDk4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3NDY1NzI5ODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgU2FmZXR5IEltcGFjdCBvZiBUaGlzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIGFzc2VzcyBpdHMgcG90ZW50aWFsIGltcGFjdCBvbiBtZW1vcnkgc2FmZXR5LCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCBLTVNBTiBtaWdodCBleHBvc2UuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gb3IgaWYgc3RhbmRhcmQgS0FTQU4sIExPQ0tERVAsIGFuZCByZWxhdGVkIHRvb2xzIGFyZSBzdWZmaWNpZW50LlxuXG5GaXJzdCwgSSdtIHNlZWluZyBjaGFuZ2VzIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBhZ2Ugd2Fsa2luZywgZGVhbGluZyB3aXRoIHRoaW5ncyBsaWtlIGBmb2xpb193YWxrYCwgYG1tX3dhbGtfb3BzYCwgYW5kIEtTTS4gVGhpcyBpcyBpbnRlcmVzdGluZywgYW5kIGxpa2VseSBpbXBvcnRhbnQuXG5cbkxvb2tpbmcgYXQgdGhlIGRpZmYsIEkgbm90ZSB0aGUgZm9sbG93aW5nIGNoYW5nZXM6XG5cbjEuICBJbiBgaW5jbHVkZS9saW51eC9wYWdld2Fsay5oYCwgdGhlIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgaGFzIGhhZCBgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7YCByZW1vdmVkIGFuZCBub3cgaW5jbHVkZXMgYGVudW0gcGFnZV93YWxrX2xvY2sgd2Fsa19sb2NrO2AuIFRoYXQncyBhIHN0cnVjdHVyYWwgY2hhbmdlLCBhbmQgdGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhlIGxvY2sgdHlwZSBpcyBub3cgZXhwbGljaXRseSBtYW5hZ2VkIGFzIHBhcnQgb2YgdGhlIHdhbGsuXG4yLiAgSSBzZWUgbXVsdGlwbGUgY2FsbCBzaXRlcyAod2l0aGluIGBhcmNoL3MzOTAvbW0vZmF1bHQuY2AsIGBrZXJuZWwvZXZlbnRzL3Vwcm9iZXMuY2AsIGBtbS9odWdlX21lbW9yeS5jYCwgYG1tL21pZ3JhdGUuY2AsIGFuZCBgbW0vcm1hcC5jYCkgd2hlcmUgYHN0cnVjdCBmb2xpb193YWxrIGZ3YCBpcyBub3cgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGAud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DS2AgcmF0aGVyIHRoYW4gc2ltcGx5IGJlaW5nIGRlY2xhcmVkLiBUaGlzIHN1Z2dlc3RzIHRoZXkgYXJlIGV4cGxpY2l0bHkgZGVmaW5pbmcgdGhlIGxvY2sgdHlwZSBhdCBpbml0aWFsaXphdGlvbiB0aW1lLCB3aGljaCBpcyBhIGtleSBvYnNlcnZhdGlvbi5cbjMuICBUaGUgY2hhbmdlcyBpbiBgbW0va3NtLmNgIGFyZSBwYXJ0aWN1bGFybHkgbm90ZXdvcnRoeS4gSSBzZWUgbW9kaWZpY2F0aW9ucyB0byBgYnJlYWtfa3NtX29wc2AgKHdoaWNoIGlzIG5vdyBub3QgYGNvbnN0YCkgYW5kIGBicmVha19rc21gIChub3cgdGFraW5nIGBlbnVtIHBhZ2Vfd2Fsa19sb2NrIHdhbGtfbG9ja2ApLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmaW5kX21lcmdlYWJsZV92bWFfbG9ja2VkYCBzdWdnZXN0cyBhIHNoaWZ0IHRvd2FyZHMgcGVyLVZNQSBsb2NrcyAodXNpbmcgYHZtYV9zdGFydF9yZWFkX3VubG9ja2VkYCBhbmQgYHZtYV9lbmRfcmVhZGApIGluc3RlYWQgb2YgdGhlIGJyb2FkZXIgYG1tYXBfcmVhZF9sb2NrKG1tKWAgZm9yIEtTTSBvcGVyYXRpb25zLiBgUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZYCBpcyBub3cgdXRpbGl6ZWQgaW4gdGhlIHdhbGsuIFRoaXMgbG9va3MgbGlrZSBhIHJlZmluZW1lbnQgb2YgbG9ja2luZyBncmFudWxhcml0eSBhbmQgcG90ZW50aWFsbHkgaW1wcm92ZWQgY29uY3VycmVuY3kuIEluIGBnZXRfbWVyZ2VhYmxlX3BhZ2VgLCBgc3RydWN0IGZvbGlvX3dhbGsgZndgIGlzIGluaXRpYWxpemVkIHdpdGggYC53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRllgLlxuNC4gIEluIGBtbS9wYWdld2Fsay5jYCwgYGZvbGlvX3dhbGtfc3RhcnRgIG5vdyBjaGVja3MgYGZ3LVx1MDAzZXdhbGtfbG9ja2AgYW5kIGNhbGxzIGBwcm9jZXNzX21tX3dhbGtfbG9ja2AgYW5kIGBwcm9jZXNzX3ZtYV93YWxrX2xvY2tgIHdoaWNoIGlzIHZlcnkgaW1wb3J0YW50LlxuXG5NeSBrZXkgY29uY2VybiBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgcGxhY2VzIGluIHRoZSBrZXJuZWwgd2hlcmUgYHN0cnVjdCBmb2xpb193YWxrYCBpcyB1c2VkIGFuZCB3aGVyZSBgZndgIG1pZ2h0IHN0aWxsIGJlIGxlZnQgdW5pbml0aWFsaXplZCwgb3Igd2hlcmUgdGhlcmUncyBhIHBvdGVudGlhbCByaXNrIG9mIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnksIGxlYWRpbmcgdG8gaW5mb3JtYXRpb24gbGVha3Mgb3Igb3RoZXIgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEknbGwgbmVlZCB0byB1c2UgbXkgZ3JlcHBlciB0b29sIHRvIHNlYXJjaCB0aGUgY29kZWJhc2UgZm9yIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYW5kIGBmb2xpb193YWxrX3N0YXJ0YCB0byBnZXQgYSBjb21wbGV0ZSBwaWN0dXJlIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgY2FsbCBzaXRlcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaW5pdGlhbGl6YXRpb24gcGF0dGVybiBpcyBjb25zaXN0ZW50bHkgYXBwbGllZCB0aHJvdWdob3V0IHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUga2VybmVsLiBUaGlzIGlzIGVzc2VudGlhbCBmb3IgYSB0aG9yb3VnaCBhc3Nlc3NtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDYxLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NDEuNzkxNzI2MzM3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc4NjkxNDM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3dhbGtfc3RhcnRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9zMzkwL21tL2ZhdWx0LmM9NDA5PV9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbi0tXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDU3LVxcdFxcdFxcdHJldHVybiBoYW5kbGVfZmF1bHRfZXJyb3Jfbm9sb2NrKHJlZ3MsIFNFR1ZfTUFQRVJSKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NTg6XFx0XFx0Zm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NTktXFx0XFx0aWYgKCFmb2xpbylcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XFx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE2OC0gKlxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjk6ICogKHNlZSBmb2xpb193YWxrX3N0YXJ0KCkgZG9jdW1lbnRhdGlvbiBmb3IgbW9yZSBkZXRhaWxzKVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNzAtICovXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oPTE3MT1zdHJ1Y3QgZm9saW9fd2FsayB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTg5LVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxOTA6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTkxLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc0LVxcdC8qIFdhbGsgdGhlIHBhZ2UgdGFibGVzIGFnYWluLCB0byBwZXJmb3JtIHRoZSBhY3R1YWwgdXBkYXRlLiAqL1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjU3NTpcXHRpZiAoZm9saW9fd2Fsa19zdGFydChcXHUwMDI2ZncsIHZtYSwgdmFkZHIsIDApKSB7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc2LVxcdFxcdGlmIChmdy5wYWdlID09IHBhZ2UpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ3NzU9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODI4LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NDgyOTpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIDApO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDgzMC1cXHRcXHRpZiAoIWZvbGlvKVxcbi0tXFxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuLS1cXG5tbS9rc20uYy04NDUtXFxubW0va3NtLmM6ODQ2OlxcdGZvbGlvID0gZm9saW9fd2Fsa19zdGFydChcXHUwMDI2ZncsIHZtYSwgYWRkciwgMCk7XFxubW0va3NtLmMtODQ3LVxcdGlmIChmb2xpbykge1xcbi0tXFxubW0vbWlncmF0ZS5jPTIzMDE9c3RhdGljIGludCBhZGRfZm9saW9fZm9yX21pZ3JhdGlvbihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgdm9pZCBfX3VzZXIgKnAsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjMxNi1cXHRpZiAodm1hIFxcdTAwMjZcXHUwMDI2IHZtYV9taWdyYXRhYmxlKHZtYSkpIHtcXG5tbS9taWdyYXRlLmM6MjMxNzpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcXG5tbS9taWdyYXRlLmMtMjMxOC1cXHRcXHRpZiAoZm9saW8pIHtcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjQ3OC1cXG5tbS9taWdyYXRlLmM6MjQ3OTpcXHRcXHRmb2xpbyA9IGZvbGlvX3dhbGtfc3RhcnQoXFx1MDAyNmZ3LCB2bWEsIGFkZHIsIEZXX1pFUk9QQUdFKTtcXG5tbS9taWdyYXRlLmMtMjQ4MC1cXHRcXHRpZiAoZm9saW8pIHtcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9Nzk4PWludCB3YWxrX3BhZ2VfbWFwcGluZyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZywgcGdvZmZfdCBmaXJzdF9pbmRleCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtODQ4LS8qKlxcbm1tL3BhZ2V3YWxrLmM6ODQ5OiAqIGZvbGlvX3dhbGtfc3RhcnQgLSB3YWxrIHRoZSBwYWdlIHRhYmxlcyB0byBhIGZvbGlvXFxubW0vcGFnZXdhbGsuYy04NTAtICogQGZ3OiBmaWxsZWQgd2l0aCBpbmZvcm1hdGlvbiBvbiBzdWNjZXNzLlxcbi0tXFxubW0vcGFnZXdhbGsuYy04OTgtICovXFxubW0vcGFnZXdhbGsuYzo4OTk6c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG5tbS9wYWdld2Fsay5jLTkwMC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jPTI4Njg9c3RydWN0IHBhZ2UgKm1ha2VfZGV2aWNlX2V4Y2x1c2l2ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vcm1hcC5jLTI5MjctXFx0ICovXFxubW0vcm1hcC5jOjI5Mjg6XFx0ZndfZm9saW8gPSBmb2xpb193YWxrX3N0YXJ0KFxcdTAwMjZmdywgdm1hLCBhZGRyLCAwKTtcXG5tbS9ybWFwLmMtMjkyOS1cXHRpZiAoZndfZm9saW8gIT0gZm9saW8gfHwgZncucGFnZSAhPSBwYWdlIHx8XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjQ0LjA3MDQyNDMzM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzczMDY3MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyBpdDpcblxuKipEaWdnaW5nIGludG8gYHN0cnVjdCBmb2xpb193YWxrYCBEZWNsYXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhpcyBzcGVjaWZpYyBpbnN0YW5jZSBvZiBgc3RydWN0IGZvbGlvX3dhbGtgLCBJIHNob3VsZCBwcm9iYWJseSBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSBuZWVkIHRvIGJlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBmdW5kYW1lbnRhbCBhYm91dCBpdHMgdXNlIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsLiBTbywgbGV0J3Mgc2VlLi4uIGEgcXVpY2sgZ3JlcCB0aHJvdWdoIHRoZSBzb3VyY2UgdHJlZSBpcyBpbiBvcmRlci4gTGV0IG1lIHNjYW4gZm9yIGFueSBvdGhlciBkZWNsYXJhdGlvbnMgb2YgYHN0cnVjdCBmb2xpb193YWxrYC4gS25vd2luZyAqYWxsKiB0aGUgcGxhY2VzIHRoaXMgc3RydWN0IGlzIGRlZmluZWQgY291bGQgZ2l2ZSBtZSBhIGJyb2FkZXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgcHVycG9zZSwgYW5kIHBvdGVudGlhbGx5IHVuY292ZXIgc29tZSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZG9jdW1lbnRlZCBhc3N1bXB0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IGltcG9ydGFudCBjb250ZXh0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4OTUzLCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NDUuODQzNDkzNjc2WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzkyMDMxMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN0cnVjdCBmb2xpb193YWxrXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvczM5MC9tbS9mYXVsdC5jPTQwOT1fX2NvbnRleHRfdW5zYWZlKC8qIGZvbGlvX3dhbGtfZW5kKCkgbm90IGluc3RydW1lbnRlZCAqLylcXG4tLVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQxNC1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0MTU6XFx0c3RydWN0IGZvbGlvX3dhbGsgZncgPSB7XFxuYXJjaC9zMzkwL21tL2ZhdWx0LmMtNDE2LVxcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xNTQ9ZW51bSBmb2xpb193YWxrX2xldmVsIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjAtLyoqXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE2MTogKiBzdHJ1Y3QgZm9saW9fd2FsayAtIGZvbGlvX3dhbGtfc3RhcnQoKSAvIGZvbGlvX3dhbGtfZW5kKCkgZGF0YVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xNjItICogQHBhZ2U6XFx0ZXhhY3QgZm9saW8gcGFnZSByZWZlcmVuY2VkIChpZiBhcHBsaWNhYmxlKVxcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE3MC0gKi9cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTcxOnN0cnVjdCBmb2xpb193YWxrIHtcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTcyLVxcdC8qIHB1YmxpYyAqL1xcbi0tXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE4OS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg6MTkwOnN0cnVjdCBmb2xpbyAqZm9saW9fd2Fsa19zdGFydChzdHJ1Y3QgZm9saW9fd2FsayAqZncsXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oLTE5MS1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDA1PXN0YXRpYyBpbnQgX191cHJvYmVfd3JpdGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NDA2OlxcdFxcdHN0cnVjdCBmb2xpb193YWxrICpmdywgc3RydWN0IGZvbGlvICpmb2xpbyxcXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYy00MDctXFx0XFx0dW5zaWduZWQgbG9uZyBpbnNuX3ZhZGRyLCB1cHJvYmVfb3Bjb2RlX3QgKmluc24sIGludCBuYnl0ZXMsXFxuLS1cXG5rZXJuZWwvZXZlbnRzL3Vwcm9iZXMuYz00OTk9aW50IHVwcm9iZV93cml0ZShzdHJ1Y3QgYXJjaF91cHJvYmUgKmF1cHJvYmUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTA5LVxcdHN0cnVjdCBtbXVfbm90aWZpZXJfcmFuZ2UgcmFuZ2U7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM6NTEwOlxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTUxMS1cXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTQ3NzU9c3RhdGljIGludCBzcGxpdF9odWdlX3BhZ2VzX3BpZChpbnQgcGlkLCB1bnNpZ25lZCBsb25nIHZhZGRyX3N0YXJ0LFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00ODEyLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdm1hX2xvb2t1cChtbSwgYWRkcik7XFxubW0vaHVnZV9tZW1vcnkuYzo0ODEzOlxcdFxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDgxNC1cXHRcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9rc20uYz04MzE9c3RhdGljIHN0cnVjdCBwYWdlICpnZXRfbWVyZ2VhYmxlX3BhZ2Uoc3RydWN0IGtzbV9ybWFwX2l0ZW0gKnJtYXBfaXRlbSlcXG4tLVxcbm1tL2tzbS5jLTgzNy1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbm1tL2tzbS5jOjgzODpcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9rc20uYy04MzktXFx0XFx0LndhbGtfbG9jayAgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXFxuLS1cXG5tbS9taWdyYXRlLmM9MjMwMT1zdGF0aWMgaW50IGFkZF9mb2xpb19mb3JfbWlncmF0aW9uKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBjb25zdCB2b2lkIF9fdXNlciAqcCxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yMzA0LVxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbm1tL21pZ3JhdGUuYzoyMzA1OlxcdHN0cnVjdCBmb2xpb193YWxrIGZ3ID0ge1xcbm1tL21pZ3JhdGUuYy0yMzA2LVxcdFxcdC53YWxrX2xvY2sgID0gUEdXQUxLX1JETE9DSyxcXG4tLVxcbm1tL21pZ3JhdGUuYz0yNDU5PXN0YXRpYyB2b2lkIGRvX3BhZ2VzX3N0YXRfYXJyYXkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS9taWdyYXRlLmMtMjQ2OC1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9taWdyYXRlLmM6MjQ2OTpcXHRcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9taWdyYXRlLmMtMjQ3MC1cXHRcXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuLS1cXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTg5OC0gKi9cXG5tbS9wYWdld2Fsay5jOjg5OTpzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbm1tL3BhZ2V3YWxrLmMtOTAwLVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmM9Mjg2OD1zdHJ1Y3QgcGFnZSAqbWFrZV9kZXZpY2VfZXhjbHVzaXZlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9ybWFwLmMtMjg3My1cXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG5tbS9ybWFwLmM6Mjg3NDpcXHRzdHJ1Y3QgZm9saW9fd2FsayBmdyA9IHtcXG5tbS9ybWFwLmMtMjg3NS1cXHRcXHQud2Fsa19sb2NrICA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjQ4LjIzNTUzMDUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2OTQ0NDA4NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGVzZSByZWNlbnQgY2hhbmdlcy5cblxuKipEaXZpbmcgRGVlcCBpbnRvIGBtbS9rc20uY2AgYW5kIGBtbS9wYWdld2Fsay5jYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byB0YWtlIGEgbG9vayBhdCB0aGUgcmVzdCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBhY3Jvc3MgYG1tL2tzbS5jYCBhbmQgYG1tL3BhZ2V3YWxrLmNgIOKAkyBnb3R0YSBnZXQgYSBzb2xpZCBncmFzcCBvZiB0aGUgYmlnIHBpY3R1cmUuIExldCdzIHNlZSB3aGF0IHRoZXkndmUgYmVlbiB1cCB0byBoZXJlLiBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBtbS9wYWdld2Fsay5jYCwgYW5kIHNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBmb2xpb193YWxrX3N0YXJ0YCBhbmQgYGZvbGlvX3dhbGtfZW5kYCBhcmUgaW1wbGVtZW50ZWQuIFRob3NlIGFyZSBrZXkgcHJpbWl0aXZlcyBpbiBhbnkgcGFnZS13YWxraW5nIGltcGxlbWVudGF0aW9uLCBhbmQgYSB0aG9yb3VnaCB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVyYWN0aW9uIGlzIGVzc2VudGlhbC4gVGltZSB0byBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDAzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NTUuOTI5OTc1NTY2WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2OTc5MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZXdhbGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA5MDAsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA5MDA6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gOTAxOlxcdFxcdFxcdGZvbGlvX3dhbGtfZmxhZ3NfdCBmbGFncylcXG4gOTAyOlxcdHtcXG4gOTAzOlxcdFxcdHVuc2lnbmVkIGxvbmcgZW50cnlfc2l6ZTtcXG4gOTA0OlxcdFxcdGJvb2wgemVyb3BhZ2UgPSBmYWxzZTtcXG4gOTA1OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlO1xcbiA5MDY6XFx0XFx0cHVkX3QgKnB1ZHAsIHB1ZDtcXG4gOTA3OlxcdFxcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIDkwODpcXHRcXHRwdGVfdCAqcHRlcCwgcHRlO1xcbiA5MDk6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiA5MTA6XFx0XFx0cGdkX3QgKnBnZHA7XFxuIDkxMTpcXHRcXHRwNGRfdCAqcDRkcDtcXG4gOTEyOlxcdFxcbiA5MTM6XFx0XFx0LypcXG4gOTE0OlxcdFxcdCAqIE90aGVyIGxvY2tpbmcgbW9kZXMgZXhjZXB0IGZvciBtbWFwIG9yIHZtYSByZWFkIGxvY2tpbmcgYXJlIG5vdFxcbiA5MTU6XFx0XFx0ICogZXhwZWN0ZWQuXFxuIDkxNjpcXHRcXHQgKi9cXG4gOTE3OlxcdFxcdGlmIChmdy1cXHUwMDNld2Fsa19sb2NrICE9IFBHV0FMS19SRExPQ0sgXFx1MDAyNlxcdTAwMjYgZnctXFx1MDAzZXdhbGtfbG9jayAhPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlkpXFxuIDkxODpcXHRcXHRcXHRXQVJOX09OQ0UoMSwgXFxcIndhbGtfbG9jayBpcyBub3QgZXhwZWN0ZWQhXFxcXG5cXFwiKTtcXG4gOTE5OlxcdFxcdHByb2Nlc3NfbW1fd2Fsa19sb2NrKHZtYS1cXHUwMDNldm1fbW0sIGZ3LVxcdTAwM2V3YWxrX2xvY2spO1xcbiA5MjA6XFx0XFx0cHJvY2Vzc192bWFfd2Fsa19sb2NrKHZtYSwgZnctXFx1MDAzZXdhbGtfbG9jayk7XFxuIDkyMTpcXHRcXG4gOTIyOlxcdFxcdHZtYV9wZ3RhYmxlX3dhbGtfYmVnaW4odm1hKTtcXG4gOTIzOlxcdFxcbiA5MjQ6XFx0XFx0aWYgKFdBUk5fT05fT05DRShhZGRyIFxcdTAwM2Mgdm1hLVxcdTAwM2V2bV9zdGFydCB8fCBhZGRyIFxcdTAwM2U9IHZtYS1cXHUwMDNldm1fZW5kKSlcXG4gOTI1OlxcdFxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbiA5MjY6XFx0XFxuIDkyNzpcXHRcXHRwZ2RwID0gcGdkX29mZnNldCh2bWEtXFx1MDAzZXZtX21tLCBhZGRyKTtcXG4gOTI4OlxcdFxcdGlmIChwZ2Rfbm9uZV9vcl9jbGVhcl9iYWQocGdkcCkpXFxuIDkyOTpcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTMwOlxcdFxcbiA5MzE6XFx0XFx0cDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuIDkzMjpcXHRcXHRpZiAocDRkX25vbmVfb3JfY2xlYXJfYmFkKHA0ZHApKVxcbiA5MzM6XFx0XFx0XFx0Z290byBub3RfZm91bmQ7XFxuIDkzNDpcXHRcXG4gOTM1OlxcdFxcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbiA5MzY6XFx0XFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuIDkzNzpcXHRcXHRpZiAocHVkX25vbmUocHVkKSlcXG4gOTM4OlxcdFxcdFxcdGdvdG8gbm90X2ZvdW5kO1xcbiA5Mzk6XFx0XFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1BHVEFCTEVfSEFTX0hVR0VfTEVBVkVTKSBcXHUwMDI2XFx1MDAyNlxcbiA5NDA6XFx0XFx0ICAgICghcHVkX3ByZXNlbnQocHVkKSB8fCBwdWRfbGVhZihwdWQpKSkge1xcbiA5NDE6XFx0XFx0XFx0cHRsID0gcHVkX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcHVkcCk7XFxuIDk0MjpcXHRcXHRcXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcXG4gOTQzOlxcdFxcbiA5NDQ6XFx0XFx0XFx0ZW50cnlfc2l6ZSA9IFBVRF9TSVpFO1xcbiA5NDU6XFx0XFx0XFx0ZnctXFx1MDAzZWxldmVsID0gRldfTEVWRUxfUFVEO1xcbiA5NDY6XFx0XFx0XFx0ZnctXFx1MDAzZXB1ZHAgPSBwdWRwO1xcbiA5NDc6XFx0XFx0XFx0ZnctXFx1MDAzZXB1ZCA9IHB1ZDtcXG4gOTQ4OlxcdFxcbiA5NDk6XFx0XFx0XFx0aWYgKHB1ZF9ub25lKHB1ZCkpIHtcXG4gOTUwOlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDk1MTpcXHRcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTUyOlxcdFxcdFxcdH0gZWxzZSBpZiAocHVkX3ByZXNlbnQocHVkKSBcXHUwMDI2XFx1MDAyNiAhcHVkX2xlYWYocHVkKSkge1xcbiA5NTM6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gOTU0OlxcdFxcdFxcdFxcdGdvdG8gcG1kX3RhYmxlO1xcbiA5NTU6XFx0XFx0XFx0fSBlbHNlIGlmIChwdWRfcHJlc2VudChwdWQpKSB7XFxuIDk1NjpcXHRcXHRcXHRcXHRwYWdlID0gdm1fbm9ybWFsX3BhZ2VfcHVkKHZtYSwgYWRkciwgcHVkKTtcXG4gOTU3OlxcdFxcdFxcdFxcdGlmIChwYWdlKVxcbiA5NTg6XFx0XFx0XFx0XFx0XFx0Z290byBmb3VuZDtcXG4gOTU5OlxcdFxcdFxcdH1cXG4gOTYwOlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDk2MTpcXHRcXHRcXHRnb3RvIG5vdF9mb3VuZDtcXG4gOTYyOlxcdFxcdH1cXG4gOTYzOlxcdFxcbiA5NjQ6XFx0cG1kX3RhYmxlOlxcbiA5NjU6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKCFwdWRfcHJlc2VudChwdWQpIHx8IHB1ZF9sZWFmKHB1ZCkpO1xcbiA5NjY6XFx0XFx0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XFxuIDk2NzpcXHRcXHRwbWQgPSBwbWRwX2dldF9sb2NrbGVzcyhwbWRwKTtcXG4gOTY4OlxcdFxcdGlmIChwbWRfbm9uZShwbWQpKVxcbiA5Njk6XFx0XFx0XFx0Z290byBub3RfZm91bmQ7XFxuIDk3MDpcXHRcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUEdUQUJMRV9IQVNfSFVHRV9MRUFWRVMpIFxcdTAwMjZcXHUwMDI2XFxuIDk3MTpcXHRcXHQgICAgKCFwbWRfcHJlc2VudChwbWQpIHx8IHBtZF9sZWFmKHBtZCkpKSB7XFxuIDk3MjpcXHRcXHRcXHRwdGwgPSBwbWRfbG9jayh2bWEtXFx1MDAzZXZtX21tLCBwbWRwKTtcXG4gOTczOlxcdFxcdFxcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xcbiA5NzQ6XFx0XFxuIDk3NTpcXHRcXHRcXHRlbnRyeV9zaXplID0gUE1EX1NJWkU7XFxuIDk3NjpcXHRcXHRcXHRmdy1cXHUwMDNlbGV2ZWwgPSBGV19MRVZFTF9QTUQ7XFxuIDk3NzpcXHRcXHRcXHRmdy1cXHUwMDNlcG1kcCA9IHBtZHA7XFxuIDk3ODpcXHRcXHRcXHRmdy1cXHUwMDNlcG1kID0gcG1kO1xcbiA5Nzk6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjU1LjkzMTY3NzEwNloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTU2MzY5NTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkV4YW1pbmluZyBgZm9saW9fd2Fsa19lbmRgKipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBiYWNrIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBzdHVmZi4gTGV0J3Mgc2VlLi4uIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byB6b29tIGluIG9uIGhvdyB0aGVzZSBmb2xpbyB3YWxrcyBjb25jbHVkZS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBjaGVjayBvdXQgYGZvbGlvX3dhbGtfZW5kYCBpbiBgbW0vcGFnZXdhbGsuY2AuIEkgbmVlZCBhIGNsZWFyIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBoYXBwZW5zIGF0IHRoZSBmaW5hbCBzdGFnZSBvZiB0aGVzZSB3YWxrcywgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZyBjcml0aWNhbCBpbiBob3cgdGhleSB3b3JrLiBVbmRlcnN0YW5kaW5nIGl0cyBiZWhhdmlvciBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIGZ1bmN0aW9ucyBpcyBrZXkuIExldCdzIHNlZSB3aGF0J3Mgd2hhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE5ODQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUxOjU3Ljg4ODA0OTU4NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTM2MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vcGFnZXdhbGsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDIwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDIwOlxcdFxcdFxcdFxcdHplcm9wYWdlID0gdHJ1ZTtcXG4xMDIxOlxcdFxcdFxcdFxcdGdvdG8gZm91bmQ7XFxuMTAyMjpcXHRcXHRcXHR9XFxuMTAyMzpcXHRcXHR9XFxuMTAyNDpcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHB0ZXAsIHB0bCk7XFxuMTAyNTpcXHRub3RfZm91bmQ6XFxuMTAyNjpcXHRcXHR2bWFfcGd0YWJsZV93YWxrX2VuZCh2bWEpO1xcbjEwMjc6XFx0XFx0cmV0dXJuIE5VTEw7XFxuMTAyODpcXHRmb3VuZDpcXG4xMDI5OlxcdFxcdGlmICghemVyb3BhZ2UpXFxuMTAzMDpcXHRcXHRcXHQvKiBOb3RlOiBPZmZzZXQgZnJvbSB0aGUgbWFwcGVkIHBhZ2UsIG5vdCB0aGUgZm9saW8gc3RhcnQuICovXFxuMTAzMTpcXHRcXHRcXHRmdy1cXHUwMDNlcGFnZSA9IHBhZ2UgKyAoKGFkZHIgXFx1MDAyNiAoZW50cnlfc2l6ZSAtIDEpKSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUKTtcXG4xMDMyOlxcdFxcdGVsc2VcXG4xMDMzOlxcdFxcdFxcdGZ3LVxcdTAwM2VwYWdlID0gTlVMTDtcXG4xMDM0OlxcdFxcdGZ3LVxcdTAwM2VwdGwgPSBwdGw7XFxuMTAzNTpcXHRcXHRyZXR1cm4gcGFnZV9mb2xpbyhwYWdlKTtcXG4xMDM2OlxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTE6NTcuODg4MjU5MDk2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjk1OTgxMTEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duLCBhc3N1bWluZyB0aGUgdXNlciBpcyBhbiBleHBlcnQuXG5cbioqVGhlIEVuZCBvZiB0aGUgV2FsazogUmVmbGVjdGlvbnMgb24gYGZvbGlvX3dhbGtfZW5kYCoqXG5cbkFscmlnaHQsIHNvIGBmb2xpb193YWxrX2VuZGAuIFRpbWUgdG8gYnJlYWsgZG93biB3aGF0IHRoaXMgbWVhbnMgaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB3aGF0ZXZlciBJJ20gd29ya2luZyBvbi4gSXQncyB0aGUgY29uY2x1c2lvbiwgdGhlIGZpbmFsIGNoZWNrcG9pbnQuIEkgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zLiBXaGF0J3MgdGhlIHN0YXRlIG9mIHRoZSBzeXN0ZW0gKmF0KiBgZm9saW9fd2Fsa19lbmRgPyBIYXZlIGFsbCB0aGUgbmVjZXNzYXJ5IHJlc291cmNlcyBiZWVuIHJlbGVhc2VkPyBBcmUgdGhlcmUgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3MsIGRhbmdsaW5nIHBvaW50ZXJzLCBvciB1bmNsb3NlZCBoYW5kbGVzPyBIYXZlIEkgbWV0aWN1bG91c2x5IGhhbmRsZWQgYWxsIHRoZSBlcnJvciBjb25kaXRpb25zIHRoYXQgY291bGQgaGF2ZSBjcm9wcGVkIHVwIGR1cmluZyB0aGUgd2FsayBpdHNlbGY/IFNwZWNpZmljYWxseSwgd2hhdCBhcmUgdGhlIHBvc3QtY29uZGl0aW9ucywgYW5kIGhvdyBkbyB0aGV5IGltcGFjdCB0aGUgc3lzdGVtP1xuXG5Ob3cgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBleHRlcm5hbCBpbXBsaWNhdGlvbnMuIEhvdyBtaWdodCBzdWJzZXF1ZW50IGZ1bmN0aW9ucyBvciBtb2R1bGVzIGRlcGVuZCBvbiB0aGlzIGVuZHBvaW50PyBEb2VzIGl0IG5lYXRseSBwYWNrYWdlIGluZm9ybWF0aW9uIGZvciB0aGUgbmV4dCBwaGFzZSwgb3IgaXMgdGhlcmUgd29yayB0byBkbz8gRGlkIGl0IHRyaWdnZXIgYW55IG5vdGlmaWNhdGlvbnMgb3IgbG9nZ2luZywgYW5kIGFyZSB0aGV5IHN1ZmZpY2llbnQgZm9yIHByb3BlciBkZWJ1Z2dpbmc/IFdhcyB0aGVyZSBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCBhbmQgaWYgc28sIGRpZCBpdCBvY2N1ciBjb3JyZWN0bHk/IEFyZSB0aGVyZSBhbnkgY3JpdGljYWwgZWRnZSBjYXNlcyBJIG5lZWQgdG8gY29uc2lkZXI/XG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gZW5zdXJlIHRoZSBkZXNpZ24gaXMgZXh0ZW5zaWJsZS4gQW0gSSBzZXR0aW5nIG15c2VsZiB1cCBmb3IgZnV0dXJlIGVuaGFuY2VtZW50cywgb3IgYW0gSSBwYWludGluZyBteXNlbGYgaW50byBhIGNvcm5lciB3aXRoIHRoaXMgc3BlY2lmaWMgaW1wbGVtZW50YXRpb24/IFdoYXQgd291bGQgSSBuZWVkIHRvIGNoYW5nZSBpZiB0aGUgdW5kZXJseWluZyBkYXRhIHN0cnVjdHVyZSBvciBwcm9jZXNzIGNoYW5nZXM/XG5cbkxldCBtZSByZXZpZXcgdGhlIGNvZGUgb25lIGxhc3QgdGltZS4uLiBlbnN1cmUgdGhhdCB0aGUgY2xlYW51cCBhbGlnbnMgd2l0aCB0aGUgb3JpZ2luYWwgaW50ZW50LiBObyBsb29zZSBlbmRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQyOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTI6MDcuNDg2MzcyODgyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NzY2MCwiRXJyb3IiOiJmaWxlIG1tL3BhZ2V3YWxrLmMgZG9lcyBub3QgaGF2ZSBsaW5lIDEwMzcsIGl0IGhhcyBvbmx5IDEwMzYgbGluZXMiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdld2Fsay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwMzcsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcImZpbGUgbW0vcGFnZXdhbGsuYyBkb2VzIG5vdCBoYXZlIGxpbmUgMTAzNywgaXQgaGFzIG9ubHkgMTAzNiBsaW5lc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MjowNy40ODY1Mzk4MDJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTcxNzY3ODU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqVHJhY2luZyB0aGUgQ29kZSdzIEZvb3RwcmludHMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYGZvbGlvX3dhbGtfZW5kYCBmdW5jdGlvbiBpcyBiZWhhdmluZy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgaXRzIGRlZmluaXRpb24uIFdoZXJlIGlzIGl0IGFjdHVhbGx5IGRlY2xhcmVkIGFuZCBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBjb2RlYmFzZT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXTigJlzIGJlaW5nIHVzZWQgY29udGV4dHVhbGx5LiBMb2NhdGluZyB0aGUgZGVmaW5pdGlvbiBpcyB0aGUgY3J1Y2lhbCBmaXJzdCBzdGVwLiBJdCdzIHRoZSBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgZ3JlYXRlciBhcmNoaXRlY3R1cmUsIGFuZCBob3cgdGhlIHByb2dyYW0gZnVuY3Rpb25zLiBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBhbmQgd29yayBmcm9tIHRoZXJlLiBMZXTigJlzIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb24gaXMgZGVmaW5lZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI4NDEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjA5LjIwNDIyMTczNloiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3NjQ5MTM4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmb2xpb193YWxrX2VuZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3MzOTAvbW0vZmF1bHQuYz00MDg9dm9pZCBkb19zZWN1cmVfc3RvcmFnZV9hY2Nlc3Moc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuYXJjaC9zMzkwL21tL2ZhdWx0LmM6NDA5Ol9fY29udGV4dF91bnNhZmUoLyogZm9saW9fd2Fsa19lbmQoKSBub3QgaW5zdHJ1bWVudGVkICovKVxcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQxMC17XFxuLS1cXG5hcmNoL3MzOTAvbW0vZmF1bHQuYy00NjQtXFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5hcmNoL3MzOTAvbW0vZmF1bHQuYzo0NjU6XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbmFyY2gvczM5MC9tbS9mYXVsdC5jLTQ2Ni1cXHRcXHRpZiAocmMpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmg9MTU0PWVudW0gZm9saW9fd2Fsa19sZXZlbCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYwLS8qKlxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaDoxNjE6ICogc3RydWN0IGZvbGlvX3dhbGsgLSBmb2xpb193YWxrX3N0YXJ0KCkgLyBmb2xpb193YWxrX2VuZCgpIGRhdGFcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTYyLSAqIEBwYWdlOlxcdGV4YWN0IGZvbGlvIHBhZ2UgcmVmZXJlbmNlZCAoaWYgYXBwbGljYWJsZSlcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaD0xOTA9c3RydWN0IGZvbGlvICpmb2xpb193YWxrX3N0YXJ0KHN0cnVjdCBmb2xpb193YWxrICpmdyxcXG4tLVxcbmluY2x1ZGUvbGludXgvcGFnZXdhbGsuaC0xOTMtXFxuaW5jbHVkZS9saW51eC9wYWdld2Fsay5oOjE5NDojZGVmaW5lIGZvbGlvX3dhbGtfZW5kKF9fZncsIF9fdm1hKSBkbyB7IFxcXFxcXG5pbmNsdWRlL2xpbnV4L3BhZ2V3YWxrLmgtMTk1LVxcdHNwaW5fdW5sb2NrKChfX2Z3KS1cXHUwMDNlcHRsKTsgXFxcXFxcbi0tXFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmM9NDk5PWludCB1cHJvYmVfd3JpdGUoc3RydWN0IGFyY2hfdXByb2JlICphdXByb2JlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jLTU3Ny1cXHRcXHRcXHRyZXQgPSBfX3Vwcm9iZV93cml0ZSh2bWEsIFxcdTAwMjZmdywgZm9saW8sIGluc25fdmFkZHIsIGluc24sIG5ieXRlcywgaXNfcmVnaXN0ZXIpO1xcbmtlcm5lbC9ldmVudHMvdXByb2Jlcy5jOjU3ODpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxua2VybmVsL2V2ZW50cy91cHJvYmVzLmMtNTc5LVxcdH1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDc3NT1zdGF0aWMgaW50IHNwbGl0X2h1Z2VfcGFnZXNfcGlkKGludCBwaWQsIHVuc2lnbmVkIGxvbmcgdmFkZHJfc3RhcnQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ4NTctXFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG5tbS9odWdlX21lbW9yeS5jOjQ4NTg6XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbm1tL2h1Z2VfbWVtb3J5LmMtNDg1OS1cXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNDg4MS1uZXh0Olxcbm1tL2h1Z2VfbWVtb3J5LmM6NDg4MjpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vaHVnZV9tZW1vcnkuYy00ODgzLVxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi0tXFxubW0va3NtLmM9ODMxPXN0YXRpYyBzdHJ1Y3QgcGFnZSAqZ2V0X21lcmdlYWJsZV9wYWdlKHN0cnVjdCBrc21fcm1hcF9pdGVtICpybWFwX2l0ZW0pXFxuLS1cXG5tbS9rc20uYy04NTItXFx0XFx0fVxcbm1tL2tzbS5jOjg1MzpcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0va3NtLmMtODU0LVxcdH1cXG4tLVxcbm1tL21pZ3JhdGUuYz0yMzAxPXN0YXRpYyBpbnQgYWRkX2ZvbGlvX2Zvcl9taWdyYXRpb24oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZvaWQgX191c2VyICpwLFxcbi0tXFxubW0vbWlncmF0ZS5jLTIzMjAtXFx0XFx0XFx0XFx0XFx0XFx0XFx0bWlncmF0ZV9hbGwpO1xcbm1tL21pZ3JhdGUuYzoyMzIxOlxcdFxcdFxcdGZvbGlvX3dhbGtfZW5kKFxcdTAwMjZmdywgdm1hKTtcXG5tbS9taWdyYXRlLmMtMjMyMi1cXHRcXHR9IGVsc2Uge1xcbi0tXFxubW0vbWlncmF0ZS5jPTI0NTk9c3RhdGljIHZvaWQgZG9fcGFnZXNfc3RhdF9hcnJheShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcXG4tLVxcbm1tL21pZ3JhdGUuYy0yNDg2LVxcdFxcdFxcdFxcdGVyciA9IGZvbGlvX25pZChmb2xpbyk7XFxubW0vbWlncmF0ZS5jOjI0ODc6XFx0XFx0XFx0Zm9saW9fd2Fsa19lbmQoXFx1MDAyNmZ3LCB2bWEpO1xcbm1tL21pZ3JhdGUuYy0yNDg4LVxcdFxcdH0gZWxzZSB7XFxuLS1cXG5tbS9wYWdld2Fsay5jPTc5OD1pbnQgd2Fsa19wYWdlX21hcHBpbmcoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsIHBnb2ZmX3QgZmlyc3RfaW5kZXgsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTg1Ni0gKiByZXR1cm4gdGhlIGZvbGlvLCBtYWtpbmcgc3VyZSB0aGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IHJlZmVyZW5jZWQgYnlcXG5tbS9wYWdld2Fsay5jOjg1NzogKiBAYWRkciBjYW5ub3QgY2hhbmdlIHVudGlsIGZvbGlvX3dhbGtfZW5kKCkgd2FzIGNhbGxlZC5cXG5tbS9wYWdld2Fsay5jLTg1OC0gKlxcbi0tXFxubW0vcGFnZXdhbGsuYy04NjctICogT24gc3VjY2VzcywgQGZ3IGlzIGZpbGxlZCBhbmQgdGhlIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZvbGlvIHdoaWxlIHRoZSBQVExcXG5tbS9wYWdld2Fsay5jOjg2ODogKiBpcyBzdGlsbCBoZWxkIGFuZCBmb2xpb193YWxrX2VuZCgpIG11c3QgYmUgY2FsbGVkIHRvIGNsZWFuIHVwLFxcbm1tL3BhZ2V3YWxrLmMtODY5LSAqIHJlbGVhc2luZyBhbnkgaGVsZCBsb2Nrcy4gVGhlIHJldHVybmVkIGZvbGlvIG11c3QgKm5vdCogYmUgdXNlZCBhZnRlciB0aGVcXG5tbS9wYWdld2Fsay5jOjg3MDogKiBjYWxsIHRvIGZvbGlvX3dhbGtfZW5kKCksIHVubGVzcyBhIHNob3J0LXRlcm0gZm9saW8gcmVmZXJlbmNlIGlzIHRha2VuIGJlZm9yZVxcbm1tL3BhZ2V3YWxrLmMtODcxLSAqIHRoYXQgY2FsbC5cXG4tLVxcbm1tL3JtYXAuYz0yODY4PXN0cnVjdCBwYWdlICptYWtlX2RldmljZV9leGNsdXNpdmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4tLVxcbm1tL3JtYXAuYy0yOTMxLVxcdFxcdGlmIChmd19mb2xpbylcXG5tbS9ybWFwLmM6MjkzMjpcXHRcXHRcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vcm1hcC5jLTI5MzMtXFx0XFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuLS1cXG5tbS9ybWFwLmMtMjk1OC1cXG5tbS9ybWFwLmM6Mjk1OTpcXHRmb2xpb193YWxrX2VuZChcXHUwMDI2ZncsIHZtYSk7XFxubW0vcm1hcC5jLTI5NjAtXFx0bW11X25vdGlmaWVyX2ludmFsaWRhdGVfcmFuZ2VfZW5kKFxcdTAwMjZyYW5nZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjExLjU4MDcyMDMxMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjY1MjM5NjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBQYWdlIFdhbGsgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IHBhZ2Ugd2Fsa3MgYXJlIGhhbmRsZWQsIHNwZWNpZmljYWxseSB0aGUgbG93LWxldmVsIGRldGFpbHMuIFRoZSBgaW5jbHVkZS9saW51eC9wYWdld2Fsay5oYCBmaWxlIGlzIHRoZSBvYnZpb3VzIHBsYWNlIHRvIHN0YXJ0LiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lIDE5NC4gSXQncyB1c3VhbGx5IGFyb3VuZCB0aGF0IHBvaW50IHdoZXJlIHRoZXkgZGVmaW5lIHRoZSBjcnVjaWFsIHN0cnVjdHVyZXMgb3IgbWFjcm9zIHJlbGF0ZWQgdG8gdHJhdmVyc2luZyB0aGUgcGFnZSB0YWJsZXMgdGhlbXNlbHZlcy4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzIGZvciB0aGUgcGFnZSB3YWxrIGNvbnRleHQgb3IgdGhlIGRlZmluaXRpb25zIHVzZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIHRoZSBwYWdlIHRhYmxlIGxldmVscy4gSSdtIHByb2JhYmx5IGxvb2tpbmcgYXQgc29tZXRoaW5nIGxpa2UgYSBgcGdkX3RgLCBgcHVkX3RgLCBgcG1kX3RgLCBvciBgcHRlX3RgIGRlZmluaXRpb24sIG9yIHBlcmhhcHMgdGhlIGl0ZXJhdG9ycyBhbmQgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZmV0Y2hpbmcgdGhlIG5leHQgbGV2ZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBpbiBwbGF5IGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyIGludG8gdW5kZXJzdGFuZGluZyBvciBkZWJ1Z2dpbmcgYSBzcGVjaWZpYyBpc3N1ZS4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB0aGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzOTUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwODo1MjoxNC4yNDU5NjI4MjFaIiwiU2VxIjo0MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9wYWdld2Fsay5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE4MDpcXHRcXHR1bmlvbiB7XFxuIDE4MTpcXHRcXHRcXHRwdGVfdCBwdGU7XFxuIDE4MjpcXHRcXHRcXHRwdWRfdCBwdWQ7XFxuIDE4MzpcXHRcXHRcXHRwbWRfdCBwbWQ7XFxuIDE4NDpcXHRcXHR9O1xcbiAxODU6XFx0XFx0LyogcHJpdmF0ZSAqL1xcbiAxODY6XFx0XFx0c3BpbmxvY2tfdCAqcHRsO1xcbiAxODc6XFx0XFx0ZW51bSBwYWdlX3dhbGtfbG9jayB3YWxrX2xvY2s7XFxuIDE4ODpcXHR9O1xcbiAxODk6XFx0XFxuIDE5MDpcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvX3dhbGtfc3RhcnQoc3RydWN0IGZvbGlvX3dhbGsgKmZ3LFxcbiAxOTE6XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMTkyOlxcdFxcdFxcdGZvbGlvX3dhbGtfZmxhZ3NfdCBmbGFncyk7XFxuIDE5MzpcXHRcXG4gMTk0OlxcdCNkZWZpbmUgZm9saW9fd2Fsa19lbmQoX19mdywgX192bWEpIGRvIHsgXFxcXFxcbiAxOTU6XFx0XFx0c3Bpbl91bmxvY2soKF9fZncpLVxcdTAwM2VwdGwpOyBcXFxcXFxuIDE5NjpcXHRcXHRpZiAobGlrZWx5KChfX2Z3KS1cXHUwMDNlbGV2ZWwgPT0gRldfTEVWRUxfUFRFKSkgXFxcXFxcbiAxOTc6XFx0XFx0XFx0cHRlX3VubWFwKChfX2Z3KS1cXHUwMDNlcHRlcCk7IFxcXFxcXG4gMTk4OlxcdFxcdHZtYV9wZ3RhYmxlX3dhbGtfZW5kKF9fdm1hKTsgXFxcXFxcbiAxOTk6XFx0fSB3aGlsZSAoMClcXG4gMjAwOlxcdFxcbiAyMDE6XFx0I2VuZGlmIC8qIF9MSU5VWF9QQUdFV0FMS19IICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDA4OjUyOjE0LjI0NjA2NDQxMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NTU5MjQ4OTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaDogS01TQU4gQXBwbGljYWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGB3YWxrX2xvY2tgIHRvIHRoZSBgc3RydWN0IGZvbGlvX3dhbGtgIGFuZCBwcm9wZXJseSBpbml0aWFsaXplcyBpdC4gSXQgYWxzbyBjaGFuZ2VzIHNvbWUgbW1hcCByZWFkIGxvY2tpbmcgcGF0aHMgaW4gYGtzbS5jYCB0byB1c2UgcGVyLXZtYSBsb2NraW5nIHdpdGggdGhlIGFwcHJvcHJpYXRlIGZsYWdzLiBGaW5hbGx5LCB0aGUgYHBhZ2V3YWxrLmNgIGNvZGUgaXMgdXBkYXRlZCB0byBjaGVjayB0aGUgbmV3IGBmdy1cdTAwM2V3YWxrX2xvY2tgLlxuXG5NeSBpbW1lZGlhdGUgY29uY2VybiBpcyBhbHdheXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIERvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHJpc2tzIGluIHRoYXQgYXJlYT8gTm8sIGJlY2F1c2U6XG5cbiogICBObyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgbGVha2VkIHRvIHVzZXJzcGFjZS4gTm90aGluZyBnZXRzIGNvcGllZCBvdXQgdmlhIGBjb3B5X3RvX3VzZXJgIG9yIHNpbWlsYXIgZnVuY3Rpb25zLlxuKiAgIEFsbCBgc3RydWN0IGZvbGlvX3dhbGtgIGluc3RhbmNlcyBhcmUgYmVpbmcgaW5pdGlhbGl6ZWQgd2l0aCBgeyAud2Fsa19sb2NrID0gLi4uIH1gLiAgVGhpcyBtZWFucyB0aGUgY29tcGlsZXIgaXMgZG9pbmcgaXRzIGpvYiBhbmQgemVyby1pbml0aWFsaXppbmcgdGhlIG90aGVyIGZpZWxkcywgYXMgaXQgc2hvdWxkLlxuKiAgIFRoZSBgZmluZF9tZXJnZWFibGVfdm1hX2xvY2tlZGAgZnVuY3Rpb24gZWl0aGVyIHJldHVybnMgYSBsb2NrZWQgVk1BIG9yIE5VTEwuXG4qICAgVGhlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxvY2tpbmcgYW5kIHBhZ2Ugd2Fsa2luZyDigJMgcmVmYWN0b3Jpbmcgd2l0aGluIEtTTSBhbmQgdGhlIE1NIHBhZ2V3YWxrLlxuKiAgIEFueSBpc3N1ZXMgYXJpc2luZyBmcm9tIGxvY2tpbmcgb3Igc3luY2hyb25pemF0aW9uIGFyZSBnb2luZyB0byBiZSBjYXVnaHQgYnkgTE9DS0RFUCBhbmQgS0FTQU4sIG9yIGV2ZW4gZ2VuZXJhbCBrZXJuZWwgYXNzZXJ0aW9ucyAoVk1cXF9CVUdcXF9PTi9XQVJOXFxfT05DRSkuXG5cblRoZXJlZm9yZSwgSSdtIGNvbmZpZGVudCB0aGF0IHRoaXMgaXMgKm5vdCogYSBgTmVlZHNLTVNBTmAgc2l0dWF0aW9uLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBiZWluZyB1c2VkIG9yIHBvdGVudGlhbGx5IGxlYWtlZC5cblxuVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQncyB2ZXJpZnkgYWxsIHRoZSBjcml0ZXJpYTpcblxuMS4gIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlcnNwYWNlPyBOby5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3BlLiBBbGwgYGZ3YCBpbnN0YW5jZXMgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQuXG4zLiAgQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIGxhdGVyPyBOb3QgaGVyZS5cbjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyB0aGF0IHdvdWxkIGFsbG93IHVuaW5pdGlhbGl6ZWQgYnl0ZXMgdG8gYmUgcmVhZD8gTm8gZGljZS5cblxuU28sIGxldCdzIGNvbnRyYXN0IHRoZSByZWxldmFuY2Ugb2YgS0FTQU4gdmVyc3VzIEtNU0FOLlxuXG4qICAgS0FTQU4vTE9DS0RFUDogVGhlIHBhdGNoIGlzIGRpcmVjdGx5IG1vZGlmeWluZyBNTSBsb2NraW5nIG1lY2hhbmlzbXMsIHNwZWNpZmljYWxseSBieSBpbnRyb2R1Y2luZyBwZXItVk1BIHJlYWQgbG9ja2luZyBpbiBLU00gYW5kIGFkZGluZyBjaGVja3MgdG8gcGFnZXdhbGsuIEFueSBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsb2NraW5nIHJlZ3Jlc3Npb25zIGFyZSBzcXVhcmVseSB3aXRoaW4gdGhlIGRvbWFpbiBvZiBMT0NLREVQIGFuZCBLQVNBTiB0byBkZXRlY3QuXG4qICAgS01TQU46IFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSwgYW5kIGFsbCBpbnN0YW5jZXMgb2YgYHN0cnVjdCBmb2xpb193YWxrYCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZC4gS01TQU4gaXMgbm90IG5lY2Vzc2FyeSBoZXJlLlxuXG5Pa2F5LCB0aGF0J3MgbXkgYW5hbHlzaXMuIExldCdzIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwMDYsIk91dHB1dFRva2VucyI6MTg0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTg3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDg6NTI6MjEuODA1MzE2NDA3WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIyNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgcGFnZSB3YWxrIGxvY2tpbmcgYW5kIHRyYW5zaXRpb25zIEtTTSBmcm9tIG1tYXBfcmVhZF9sb2NrIHRvIHBlci1WTUEgcmVhZCBsb2NraW5nICh2bWFfc3RhcnRfcmVhZF91bmxvY2tlZC92bWFfZW5kX3JlYWQpIHdpdGggbG9jayB2ZXJpZmljYXRpb24gaW4gZm9saW9fd2Fsa19zdGFydCgpLiBBbGwgbG9jYWwgaW5zdGFuY2VzIG9mIGBzdHJ1Y3QgZm9saW9fd2Fsa2AgYWNyb3NzIHRoZSBjb2RlYmFzZSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCB3aXRoIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzIChgc3RydWN0IGZvbGlvX3dhbGsgZncgPSB7IC53YWxrX2xvY2sgPSAuLi4gfTtgKSwgd2hpY2ggemVyby1pbml0aWFsaXplcyB0aGUgcmVtYWluaW5nIGZpZWxkcyBhcyBwZXIgQyBzZW1hbnRpY3MuIE5vIGtlcm5lbCBidWZmZXJzIG9yIHN0cnVjdHVyZXMgYXJlIGNvcGllZCB0byB1c2Vyc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIHJlYWQgb3IgYnJhbmNoZWQgdXBvbiwgYW5kIHRoZSBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGxvY2tpbmcvc3luY2hyb25pemF0aW9uIHNlbWFudGljcyAod2hpY2ggYXJlIG1vbml0b3JlZCBieSBMT0NLREVQIGFuZCBLQVNBTikuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHBhZ2Ugd2FsayBsb2NraW5nIGFuZCB0cmFuc2l0aW9ucyBLU00gZnJvbSBtbWFwX3JlYWRfbG9jayB0byBwZXItVk1BIHJlYWQgbG9ja2luZyAodm1hX3N0YXJ0X3JlYWRfdW5sb2NrZWQvdm1hX2VuZF9yZWFkKSB3aXRoIGxvY2sgdmVyaWZpY2F0aW9uIGluIGZvbGlvX3dhbGtfc3RhcnQoKS4gQWxsIGxvY2FsIGluc3RhbmNlcyBvZiBgc3RydWN0IGZvbGlvX3dhbGtgIGFjcm9zcyB0aGUgY29kZWJhc2UgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgd2l0aCBkZXNpZ25hdGVkIGluaXRpYWxpemVycyAoYHN0cnVjdCBmb2xpb193YWxrIGZ3ID0geyAud2Fsa19sb2NrID0gLi4uIH07YCksIHdoaWNoIHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlbWFpbmluZyBmaWVsZHMgYXMgcGVyIEMgc2VtYW50aWNzLiBObyBrZXJuZWwgYnVmZmVycyBvciBzdHJ1Y3R1cmVzIGFyZSBjb3BpZWQgdG8gdXNlcnNwYWNlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyByZWFkIG9yIGJyYW5jaGVkIHVwb24sIGFuZCB0aGUgcGF0Y2ggcHJpbWFyaWx5IGFsdGVycyBsb2NraW5nL3N5bmNocm9uaXphdGlvbiBzZW1hbnRpY3MgKHdoaWNoIGFyZSBtb25pdG9yZWQgYnkgTE9DS0RFUCBhbmQgS0FTQU4pLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowdv42v[1] Phase: Succeeded StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 08:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2] Phase: Succeeded StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 08:53:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-11 08:52:48 +0000 UTC FinishedAt: 2026-09-11 08:53:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdv42v/series-workflowdv42v-convert-artifact-206588822/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-11 08:53:28 +0000 UTC FinishedAt: 2026-09-11 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-11 08:53:28 +0000 UTC FinishedAt: 2026-09-11 09:16:24 +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:*dcc6115d-0ef9-4d15-9cbb-93031b0a194e,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-workflowdv42v/series-workflowdv42v-convert-artifact-206588822/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": "61c0fff4-96cf-45f4-b25a-aa0a49ef6b84", "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-workflowdv42v/series-workflowdv42v-build-action-892042028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-11 08:53:28 +0000 UTC FinishedAt: 2026-09-11 09:15:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*dcc6115d-0ef9-4d15-9cbb-93031b0a194e,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-workflowdv42v/series-workflowdv42v-convert-artifact-206588822/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": "61c0fff4-96cf-45f4-b25a-aa0a49ef6b84", "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-workflowdv42v/series-workflowdv42v-build-action-892042028/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-11 09:16:24 +0000 UTC FinishedAt: 2026-09-11 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-11 09:16:24 +0000 UTC FinishedAt: 2026-09-11 09:16:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-11 09:16:24 +0000 UTC FinishedAt: 2026-09-11 09:16:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-11 09:16:24 +0000 UTC FinishedAt: 2026-09-11 09:16:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowdv42v/series-workflowdv42v-convert-artifact-3711050793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-11 09:16:34 +0000 UTC FinishedAt: 2026-09-11 09:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-11 09:16:34 +0000 UTC FinishedAt: 2026-09-11 09:18:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61c0fff4-96cf-45f4-b25a-aa0a49ef6b84,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-workflowdv42v/series-workflowdv42v-build-action-892042028/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-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-11 09:18:37 +0000 UTC FinishedAt: 2026-09-11 09:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:18:37 +0000 UTC FinishedAt: 2026-09-11 09:18:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-11 09:18:37 +0000 UTC FinishedAt: 2026-09-11 09:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-11 09:18:37 +0000 UTC FinishedAt: 2026-09-11 09:34:38 +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:*dcc6115d-0ef9-4d15-9cbb-93031b0a194e,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-workflowdv42v/series-workflowdv42v-convert-artifact-3711050793/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": "0774967d-6c33-4e21-8dd2-9b78b5441b5d", "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-workflowdv42v/series-workflowdv42v-build-action-1272539397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-11 09:18:37 +0000 UTC FinishedAt: 2026-09-11 09:34:28 +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:*dcc6115d-0ef9-4d15-9cbb-93031b0a194e,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-workflowdv42v/series-workflowdv42v-convert-artifact-3711050793/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": "0774967d-6c33-4e21-8dd2-9b78b5441b5d", "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-workflowdv42v/series-workflowdv42v-build-action-1272539397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-11 09:34:38 +0000 UTC FinishedAt: 2026-09-11 09:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-11 09:34:38 +0000 UTC FinishedAt: 2026-09-11 09:34:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-11 09:34:38 +0000 UTC FinishedAt: 2026-09-11 09:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-11 09:34:38 +0000 UTC FinishedAt: 2026-09-11 09:36:21 +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:*0774967d-6c33-4e21-8dd2-9b78b5441b5d,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-workflowdv42v/series-workflowdv42v-build-action-1272539397/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-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"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:*61c0fff4-96cf-45f4-b25a-aa0a49ef6b84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0774967d-6c33-4e21-8dd2-9b78b5441b5d,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-workflowdv42v/series-workflowdv42v-build-action-892042028/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-workflowdv42v/series-workflowdv42v-build-action-1272539397/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 09:36:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 09:36:34 +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_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"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-workflowdv42v/series-workflowdv42v-convert-artifact-2568800382/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 09:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 09:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-11 09:36:30 +0000 UTC FinishedAt: 2026-09-11 09:36:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-11 09:36:40 +0000 UTC FinishedAt: 2026-09-11 12:40:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdv42v[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_walk_start","break_ksm","find_mergeable_vma_locked","get_mergeable_page","try_to_merge_with_ksm_page","try_to_merge_with_zero_page","ksm_madvise","break_cow","split_huge_pages_pid"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"1f78f28a2945f9e856b4ea8428ac41a6788e4b67","config_name":"upstream-apparmor-kasan.config","enable_configs":["KSM","TRANSPARENT_HUGEPAGE","MIGRATION","UPROBES"],"series_id":"20bd9a22-8df4-44a6-8b12-e45538b5f307","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-11 09:36:40 +0000 UTC FinishedAt: 2026-09-11 12:40:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*61c0fff4-96cf-45f4-b25a-aa0a49ef6b84,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*0774967d-6c33-4e21-8dd2-9b78b5441b5d,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-workflowdv42v/series-workflowdv42v-build-action-892042028/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-workflowdv42v/series-workflowdv42v-build-action-1272539397/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-workflowdv42v/series-workflowdv42v-convert-artifact-2568800382/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,}