Name: series-workflowcgk6n Phase: Succeeded StartedAt: 2026-08-29 19:24:20 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[0] Phase: Succeeded StartedAt: 2026-08-29 19:24:20 +0000 UTC FinishedAt: 2026-08-29 19:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[0].run-triage Phase: Succeeded StartedAt: 2026-08-29 19:24:20 +0000 UTC FinishedAt: 2026-08-29 19:28:55 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "MEMCG", "BLK_CGROUP" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "MEMCG", "BLK_CGROUP" ], "series_id": "8cbcbd3f-1ef0-4260-9252-24a563cc0405" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeout", "__swap_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGFuIGludGVybmFsIE1NIHJlZmFjdG9yaW5nIHRoYXQgY29udmVydHMgbGVnYWN5IHN0cnVjdCBwYWdlIHJlZmVyZW5jZXMgYW5kIGhlbHBlcnMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtIHRvIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuIGNvbnZlcnRpbmcgUmVjbGFpbSBmbGFnIG1hY3JvcyB0byBGT0xJT19GTEFHLCB1c2luZyBidmVjX2ZvbGlvLCBmb2xpb19tYXJrX2RpcnR5LCBmb2xpb19jbGVhcl9yZWNsYWltLCBmb2xpb19lbmRfd3JpdGViYWNrLCBhbmQgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIHJlYWQ6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWsuXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cdTAwM2Vzd2FwYC5cbjMuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC5cblxuQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBvciBwb2ludGVyIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBWTSBhc3NlcnRpb25zIChWTV9CVUdfT05fRk9MSU8gLyBWTV9XQVJOX09OX09OQ0VfRk9MSU8pLCBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYWUyZWJhZWQ2ZDRkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICYjNDM7NTkzLDcgQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaW8uY1xuQEAgLTE2MCw3ICYjNDM7MTYwLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuLVx0c3dwX2VudHJ5X3QgZW50cnk7XG4mIzQzO1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2OCw4ICYjNDM7MTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuJiM0MztcdFx0ZW50cnkudmFsJiM0MzsmIzQzOztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Myw3ICYjNDM7MTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbiYjNDM7XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG5AQCAtMTkxLDggJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbiBcdFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuJiM0MztcdFx0ZW50cnkudmFsJiM0MzsmIzQzOztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIH1cbkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbiYjNDM7XHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW9cbiBcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxuIFx0ICovXG4gXHRyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7XG5AQCAtMjIwLDcgJiM0MzsyMjAsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdC8qXG4gXHQgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZFxuLVx0ICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXG4mIzQzO1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0X19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTtcbiYjNDM7XHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XG4gXHRyZXR1cm4gMDtcbiBvdXRfdW5sb2NrOlxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTgsNyAmIzQzOzI5OCw5IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXHRcdGRvIHsgfSB3aGlsZSAoMClcbiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHIFx1MDAyNlx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xuIFxuIHN0YXRpYyBtZW1wb29sX3QgKnNpb19wb29sO1xuQEAgLTM2Nyw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFxuQEAgLTQ5NywxMyAmIzQzOzQ5OSwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlX2VuZChzdHJ1Y3Qgc3dhcF9pb2NiICpzaW8sIGJvb2wgZmFpbGVkKVxuIFx0aW50IHA7XG4gXG4gXHRmb3IgKHAgPSAwOyBwIFx1MDAzYyBzaW8tXHUwMDNlbnJfYnZlY3M7IHAmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzW3BdLmJ2X3BhZ2U7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO1xuIFxuIFx0XHRpZiAoZmFpbGVkKSB7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4tXHRcdFx0Q2xlYXJQYWdlUmVjbGFpbShwYWdlKTtcbiYjNDM7XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFx0XHR9XG4tXHRcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pO1xuIFx0fVxuIFx0bWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpO1xuIH1cbkBAIC01MTQsMTYgJiM0Mzs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1swXSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcbiBcdFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcbi1cdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXG4mIzQzO1x0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkXG4gXHRcdCAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuXG4gXHRcdCAqL1xuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7V3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cJiMzNDssXG4tXHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcbiYjNDM7XHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3Bvcyhmb2xpby1cdTAwM2Vzd2FwKSk7XG4gXHR9XG4gXG4gXHRzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7XG5AQCAtNTk2LDcgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuJiM0MztcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbiBcbiBcdGlmIChjdHgtXHUwMDNlc2lzLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcbiBcdFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBmZGRiYTdhODc1MDBhLi4wYjVkNTA3NzM5YmNiIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0yNTgsNyAmIzQzOzI1OCw3IEBAIHZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTg5LDcgJiM0MzsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcbiAvKlxuICAqIEEgYHN3YXAgZXh0ZW50JiMzOTsgaXMgYSBzaW1wbGUgdGhpbmcgd2hpY2ggbWFwcyBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgcGFnZXNcbiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpc1xuLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvXG4mIzQzOyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyAmIzQzOzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4tXHRfX3N3YXBfd3JpdGVwYWdlKFx1MDAyNmN0eCwgZm9saW8pO1xuJiM0MztcdF9fc3dhcF93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDdhODYzNTcyYWRjZTcuLmFlMmViYWVkNmQ0ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01OTMsOCAmIzQzOzU5Myw3IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwotUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKLQlURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKQogCUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTE2MCw3ICYjNDM7MTYwLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE2OCw4ICYjNDM7MTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7CiYjNDM7CQllbnRyeS52YWwmIzQzOyYjNDM7OwogCX0KIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIApAQCAtMTgzLDcgJiM0MzsxODMsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE5MSw4ICYjNDM7MTkxLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiB9CkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlCiYjNDM7CSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpbwogCSAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLgogCSAqLwogCXJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTsKQEAgLTIyMCw3ICYjNDM7MjIwLDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAkvKgogCSAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkCi0JICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiYjNDM7CSAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXMKIAkgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuCiAJICovCiAJaWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkgewpAQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7CiAJcmV0dXJuIDA7CiBvdXRfdW5sb2NrOgogCWZvbGlvX3VubG9jayhmb2xpbyk7CkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIApAQCAtMjk4LDcgJiM0MzsyOTgsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJcmV0dXJuIHRydWU7CiB9Ci0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbykJCWRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgJmFtcDsmYW1wOyBDT05GSUdfQkxLX0NHUk9VUCAqLwogCiBzdGF0aWMgbWVtcG9vbF90ICpzaW9fcG9vbDsKQEAgLTM2Nyw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydykKIAl9CiB9CiAKLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCkBAIC00OTcsMTMgJiM0Mzs0OTksMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZCkKIAlpbnQgcDsKIAogCWZvciAocCA9IDA7IHAgJmx0OyBzaW8tJmd0O25yX2J2ZWNzOyBwJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1twXSk7CiAKIAkJaWYgKGZhaWxlZCkgewotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCQl9Ci0JCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKJiM0MzsJCWZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pOwogCX0KIAltZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7CiB9CkBAIC01MTQsMTYgJiM0Mzs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KQogCWJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby0mZ3Q7bGVuOwogCiAJaWYgKGZhaWxlZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbMF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1swXSk7CiAKIAkJLyoKIAkJICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZQogCQkgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdAotCQkgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWQKJiM0MzsJCSAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWQKIAkJICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy4KIAkJICovCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O1dyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXG4mIzM0OywKLQkJCQkgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTsKJiM0MzsJCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApKTsKIAl9CiAKIAlzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7CkBAIC01OTYsNyAmIzQzOzU5OCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpCiAJCQlSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgPSBzaW8tJmd0O2xlbjsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKLQliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKJiM0MzsJYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpOwogCiAJaWYgKGN0eC0mZ3Q7c2lzLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pIHsKIAkJc3VibWl0X2Jpb193YWl0KGJpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggZmRkYmE3YTg3NTAwYS4uMGI1ZDUwNzczOWJjYiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7CiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0yOTg5LDcgJiM0MzsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTsKIC8qCiAgKiBBIGBzd2FwIGV4dGVudCYjMzk7IGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzCiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpcwotICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW8KJiM0MzsgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvCiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLgogICoKICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjg4YTFhNzRmOTE4NTIgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCi0JX19zd2FwX3dyaXRlcGFnZSgmYW1wO2N0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3dyaXRlX3N1Ym1pdCgmYW1wO2N0eCk7CiAKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBjb252ZXJ0aW5nIGBwYWdlYCBzdHJ1Y3R1cmVzIHRvIGBmb2xpb2Agc3RydWN0dXJlcywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGUgY2hhbmdlcyBzcGFuIGFjcm9zcyBzZXZlcmFsIGtleSBmaWxlczogYG1tL3BhZ2VfaW8uY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0venN3YXAuY2AuIFRoaXMgc3VnZ2VzdHMgYSB3aWRlc3ByZWFkIGltcGFjdC4KClNwZWNpZmljYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgdGhlIGNoYW5nZSBmcm9tIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgaXMgYSBkaXJlY3QgaW5kaWNhdGlvbiBvZiB0aGlzLiBUaGUgY29udmVyc2lvbiBmcm9tIHBhZ2UgZXF1aXZhbGVudHMgdG8gZm9saW8gaXMgaGFwcGVuaW5nIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIHRoZSByZW5hbWUgb2YgYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBldGMuIFRoZSB1c2Ugb2YgYGZvbGlvLSZndDtzd2FwYCBpbiB0aGUgbG9vcGluZywgd2hpY2ggaXMgcmVwbGFjaW5nIGluZGl2aWR1YWwgb3BlcmF0aW9ucyBmb3IgZWFjaCBgZm9saW9fcGFnZShmb2xpbywgaSlgLiBUaGUgcmVwbGFjZW1lbnQgb2YgZnVuY3Rpb25zIGxpa2UgYGZvbGlvX21hcmtfZGlydHlgLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGV0Yy4KCk5vdywgdGhlIHJlbmFtaW5nIG9mIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCwgYG1tL3N3YXAuaGAsIGFuZCBgbW0venN3YXAuY2AgaXMgc29tZXRoaW5nIHRvIHRha2Ugbm90ZSBvZi4gSXQgaW1wbGllcyBhIGNoYW5nZSBpbiB0aGUgYWJzdHJhY3Rpb24gb3IgdGhlIHdheSB3cml0ZW91dCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCBzd2FwcGluZyBsb2dpYywgc3Bhbm5pbmcgYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBpbXBhY3RzIHN3YXAgSS9PIHdyaXRlb3V0IGlzIGEgcmVkIGZsYWcuIFdyaXRlb3V0IGlzIGNyaXRpY2FsIGFuZCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgY2hhbmdlIHRoZXJlLCBlc3BlY2lhbGx5IGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBvbmUsIG5lZWRzIGRlZXAgc2NydXRpbnkuIFdlIGFyZSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZWNoYW5pc21zLCBgc3dhcF93cml0ZW91dGAsIGFuZCBgX19zd2FwX3dyaXRlb3V0YC4KCk5leHQgc3RlcHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkIGhlcmUuIEkmIzM5O2xsIHNlYXJjaCBgbW0vcGFnZV9pby5jYCwgYG1tL0tjb25maWdgLCBhbmQgYG1tL01ha2VmaWxlYCB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIG9yIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyB0byBlbnN1cmUgdGhlIGZ1enplciBjb3ZlcnMgYWxsIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhpcyBmb2xpbyB0cmFuc2l0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfaW8ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc2PWVuZGlmXG5tbS9NYWtlZmlsZS03Ny1cbm1tL01ha2VmaWxlOjc4Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc2V0dXAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IHRoZSBvYmplY3QgZmlsZXMgYHBhZ2VfaW8ub2AsIGBzd2FwX3N0YXRlLm9gLCBhbmQgYHN3YXBmaWxlLm9gIGFyZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIGJ1dCBvbmx5IGlmIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBmb3IgaGFuZGxpbmcgc3dhcCBzcGFjZS4gQW5kIHRoZW4sIHRoZXJlJiMzOTtzIGB6c3dhcC5vYCDigJMgdGhhdCYjMzk7cyBvbmx5IGdldHRpbmcgY29tcGlsZWQgaWYgYENPTkZJR19aU1dBUGAgaXMgc2V0LiBOb3cgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgcHJlY2lzZWx5IHdoYXQgYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19aU1dBUGAgYWN0dWFsbHkgY29udHJvbC4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gS2NvbmZpZyBhbmQgdGhlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgc3dhcCBzeXN0ZW0gaXMgYmVpbmcgbWFuYWdlZC4gTWFraW5nIHN1cmUgdGhlc2UgZmxhZ3MgYXJlIHNldCBjb3JyZWN0bHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGZ1bmN0aW9uYWxpdHksIHNvIGEgcXVpY2sgcmV2aWV3IGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHN3YXBwaW5nLCBzcGVjaWZpY2FsbHkgYENPTkZJR19TV0FQYC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcyBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29udHJvbHMgZ292ZXJuaW5nIHN3YXAgYmVoYXZpb3IsIGl0cyBlbmFibGVtZW50LCBhbmQgcHJvYmFibHkgc29tZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgaWYgaXQmIzM5O3MgY29uZmlndXJhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgdGhlcmUsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IGl04oCZcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgYXR0YWNoZWQgdG8gaXQuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBzd2FwIHN1cHBvcnQgaXMgY3J1Y2lhbCBmb3IgYW55b25lIHdvcmtpbmcgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgbmV4dCBzdGVwIHdvdWxkIGJlIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MgbGlrZSB0aGUgcGFnZSBjYWNoZSwgTlVNQSwgYW5kIGFueSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqSW52ZXN0aWdhdGluZyBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgYW5kIHVzYWdlIG9mIHRoZXNlIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXJlJiMzOTtzIGEgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBwb3RlbnRpYWxseSBpbnRlcm5hbCwgb3BlcmF0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSBhbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBpZGVudGlmeSAqZXZlcnkqIGluc3RhbmNlIHdoZXJlIHRoZXkmIzM5O3JlIGludm9rZWQuIFRoaXMgaW5jbHVkZXMgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBmdW5jdGlvbnMsIGFuZCBjYWxscyBmcm9tIGRpZmZlcmVudCBjb21wb25lbnRzLCBiZWNhdXNlIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiB3aXRoICYjMzQ7c3dhcCYjMzQ7IGluIGl0cyBuYW1lLiBJdCBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVzIG1vdmluZyBkYXRhIHJlbGF0ZWQgdG8gc3dhcHBpbmcsIHdoaWNoIGRpcmVjdGx5IGNvbmNlcm5zIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEtub3dpbmcgdGhpcywgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBjYWxscyBwcmltYXJpbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcy4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSB0ZWxscyBtZSBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIGNhbGxzIHdpdGhpbiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gaW4gc2VjdGlvbnMgZGVhbGluZyB3aXRoIGRldmljZSBkcml2ZXJzIGlmIHRoZXJlJiMzOTtzIGFuIHVudXN1YWwgSS9PIHBhdHRlcm4uIFRoZSBjb250ZXh0IG9mIHRoZWlyIHVzZSBpcyBjcnVjaWFsLiBBcmUgdGhlc2UgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0cywgb3Igc29tZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBldmVudD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhpcyBmcm9tIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1lY2hhbmljcyBvZiB0aGUgc3dhcCBtZWNoYW5pc20sIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX3dyaXRlb3V0fHN3YXBfd3JpdGVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lvLmM9MTgzPXN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0yMDMtICovXG5tbS9wYWdlX2lvLmM6MjA0OmludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTIwNS17XG4tLVxubW0vcGFnZV9pby5jLTI1MC1cbm1tL3BhZ2VfaW8uYzoyNTE6XHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XG5tbS9wYWdlX2lvLmMtMjUyLVx0cmV0dXJuIDA7XG4tLVxubW0vcGFnZV9pby5jPTMzND1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy0zNzEtXG5tbS9wYWdlX2lvLmM6MzcyOnZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTM3My17XG4tLVxubW0vc2htZW0uYz0xNjA3PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE3MTgtXHRcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbm1tL3NobWVtLmM6MTcxOTpcdFx0ZXJyb3IgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xubW0vc2htZW0uYy0xNzIwLVx0XHRpZiAoZXJyb3IgIT0gQU9QX1dSSVRFUEFHRV9BQ1RJVkFURSkge1xuLS1cbm1tL3N3YXAuaD0yNTk9dm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG5tbS9zd2FwLmg6MjYwOmludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaDoyNjE6dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oLTI2Mi1cbi0tXG5tbS9zd2FwLmg9NDIwPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zd2FwLmgtNDI0LVxubW0vc3dhcC5oOjQyNTpzdGF0aWMgaW5saW5lIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcC5oLTQyNi17XG4tLVxubW0vc3dhcGZpbGUuYz0yOTg3PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7XG4tLVxubW0vc3dhcGZpbGUuYy0yOTkxLSAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG5tbS9zd2FwZmlsZS5jOjI5OTI6ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xubW0vc3dhcGZpbGUuYy0yOTkzLSAqIHRpbWUgZm9yIGxvY2F0aW5nIHdoZXJlIG9uIGRpc2sgYSBwYWdlIGJlbG9uZ3MuXG4tLVxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdm1zY2FuLmMtNjU5LVx0ZWxzZVxubW0vdm1zY2FuLmM6NjYwOlx0XHRyZXMgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xubW0vdm1zY2FuLmMtNjYxLVxuLS1cbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtODgwLVx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG5tbS96c3dhcC5jOjg4MTpcdCAqIG9ubHkgYWRkcyBtZXRhZGF0YSBvdmVyaGVhZC4gIHN3YXBfd3JpdGVvdXQoKSB3aWxsIHB1dCB0aGUgcGFnZSBiYWNrXG5tbS96c3dhcC5jLTg4Mi1cdCAqIHRvIHRoZSBhY3RpdmUgTFJVIGxpc3QgaW4gdGhlIGNhc2UuXG4tLVxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwNTItXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbm1tL3pzd2FwLmM6MTA1MzpcdF9fc3dhcF93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvKTtcbm1tL3pzd2FwLmMtMTA1NC1cdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFN3YXAgV3JpdGVvdXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBpZGVudGlmeSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGFuZCB0aGVpciBzY29wZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBzd2FwIHdyaXRlb3V0IGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjaGVja2luZyBpZiBgc3dhcF93cml0ZW91dGAsIGBfX3N3YXBfd3JpdGVvdXRgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBnbG9iYWwuICBMb29rcyBsaWtlIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAgaW4gYG1tL3BhZ2VfaW8uY2AgYXJlIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcy4gVGhlIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBgc3dhcF93cml0ZV9lbmRgLCBgc3dhcF9mc193cml0ZV9jb21wbGV0ZWAsIGV0Yy4sIGFyZSBzdGF0aWMsIHNvIEkgd2lsbCBsaWtlbHkgZXhjbHVkZSB0aGVzZS4gQW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBpbiBgbW0venN3YXAuY2AuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHJlbGF0ZWQgdG8gYHJlY2xhaW1gIGZsYWdzLCBhbmQgaW4gYG1tL3BhZ2VfaW8uY2AsIHdpdGggYHN3YXBfemVyb21hcF9mb2xpb19zZXRgLCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCwgYW5kIHRoZSBgc3dhcF93cml0ZW91dGAgY2FsbHMgdG8gYF9fc3dhcF93cml0ZW91dGAuICBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZWAgaXMgbm93IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AsIGFuZCBgX19zd2FwX3dyaXRlcGFnZWAgYmVjb21lcyBgX19zd2FwX3dyaXRlb3V0YC4gIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgdG8gYG1tL3N3YXAuaGAgd2l0aCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF93cml0ZW91dGAsIGBtbS9zd2FwZmlsZS5jYCB3aXRoIGEgY29tbWVudCBjaGFuZ2UsIGFuZCBmaW5hbGx5IGBtbS96c3dhcC5jYCBjYWxsaW5nIGBfX3N3YXBfd3JpdGVvdXRgIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YCwgYXJlIHRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2guCgpBcmUgdGhlc2UgaG90IHBhdGhzPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHN3YXAgYW5kIG1lbW9yeSByZWNsYWltLiBCdXQgdGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgb3V0IGFub255bW91cyBwYWdlcy9mb2xpb3Mgb3IgenN3YXAgd3JpdGViYWNrIGVudHJpZXMuIFRoZXkgYXJlIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHRyaXZpYWwgaW5saW5lIGhlbHBlcnMuICBUaGlzIG1ha2VzIHRoZW0gZ29vZCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0Oy4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGZvciB0aGUgWnN3YXAgcGF0aC4gQWxzbywgYENPTkZJR19CTEtfQ0dST1VQYCBhbmQgYENPTkZJR19NRU1DR2AgYXJlIHJlbGV2YW50LCBnaXZlbiB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCBjYWxsLgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuIFllcywgYWJzb2x1dGVseS4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHN3YXAgd3JpdGVvdXQgd29ya3Mgd2l0aCBmb2xpb3MgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhZ2VzLCBpbmNsdWRpbmcgdGhlIGBmb2xpby0mZ3Q7c3dhcGAgY2FsY3VsYXRpb24gYW5kIHRoZSBgZW50cnkudmFsJiM0MzsmIzQzO2AgbG9naWMuIEl0IHVzZXMgYGJ2ZWNfZm9saW9gLCBhbmQgbW9kaWZpZXMgZm9saW8gZGlydHkvcmVjbGFpbSBzdGF0ZXMgb24gZXJyb3IuIFRoaXMgaXMgY29yZSBzd2FwIGZ1bmN0aW9uYWxpdHksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKTGV0IG1lIHZlcmlmeSB0aG9zZSBjb25maWcgbmFtZXM6IFNXQVAsIFpTV0FQLCBNRU1DRywgYW5kIEJMS19DR1JPVVAuCgpTbywgSSYjMzk7bSBnb2luZyB3aXRoOgoKKiAgICoqRm9jdXMgU3ltYm9scyoqOiBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgCiogICAqKkVuYWJsZSBDb25maWdzKio6IFNXQVAsIFpTV0FQLCBNRU1DRywgQkxLXF9DR1JPVVAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHNjYW4gdGhlIGJlZ2lubmluZyBvZiBgbW0vcGFnZV9pby5jYCAobGluZXMgMS0xMDApIHRvIGRvdWJsZS1jaGVjayB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgdGhpbmsgdGhhdCYjMzk7cyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2lvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGxpbnV4L21tL3BhZ2VfaW8uY1xuICAgNDpcdCAqXG4gICA1Olx0ICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgIDY6XHQgKlxuICAgNzpcdCAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBcbiAgIDg6XHQgKiAgQXN5bmNocm9ub3VzIHN3YXBwaW5nIGFkZGVkIDMwLjEyLjk1LiBTdGVwaGVuIFR3ZWVkaWVcbiAgIDk6XHQgKiAgUmVtb3ZlZCByYWNlIGluIGFzeW5jIHN3YXBwaW5nLiAxNC40LjE5OTYuIEJydW5vIEhhaWJsZVxuICAxMDpcdCAqICBBZGQgc3dhcCBvZiBzaGFyZWQgcGFnZXMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4gMjAuMi4xOTk4LiBTdGVwaGVuIFR3ZWVkaWVcbiAgMTE6XHQgKiAgQWx3YXlzIHVzZSBicndfcGFnZSwgbGlmZSBiZWNvbWVzIHNpbXBsZXIuIDEyIE1heSAxOTk4IEVyaWMgQmllZGVybWFuXG4gIDEyOlx0ICovXG4gIDEzOlx0XG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheWFjY3QuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwX29wcy5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gIDMwOlx0I2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gIDMxOlx0XG4gIDMyOlx0aW50IGdlbmVyaWNfc3dhcGZpbGVfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiAgMzM6XHRcdFx0XHRcdHN0cnVjdCBmaWxlICpzd2FwX2ZpbGUsXG4gIDM0Olx0XHRcdFx0XHRzZWN0b3JfdCAqc3BhbilcbiAgMzU6XHR7XG4gIDM2Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN3YXBfZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gIDM3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuICAzODpcdFx0dW5zaWduZWQgYmxvY2tzX3Blcl9wYWdlO1xuICAzOTpcdFx0dW5zaWduZWQgbG9uZyBwYWdlX25vO1xuICA0MDpcdFx0dW5zaWduZWQgYmxrYml0cztcbiAgNDE6XHRcdHNlY3Rvcl90IHByb2JlX2Jsb2NrO1xuICA0MjpcdFx0c2VjdG9yX3QgbGFzdF9ibG9jaztcbiAgNDM6XHRcdHNlY3Rvcl90IGxvd2VzdF9ibG9jayA9IC0xO1xuICA0NDpcdFx0c2VjdG9yX3QgaGlnaGVzdF9ibG9jayA9IDA7XG4gIDQ1Olx0XHRpbnQgbnJfZXh0ZW50cyA9IDA7XG4gIDQ2Olx0XHRpbnQgcmV0O1xuICA0NzpcdFxuICA0ODpcdFx0YmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiAgNDk6XHRcdGJsb2Nrc19wZXJfcGFnZSA9IFBBR0VfU0laRSBcdTAwM2VcdTAwM2UgYmxrYml0cztcbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjcKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzLiBIZXJlIHdlIGdvOgoKKipUaGlua2luZyBUaHJvdWdoIGEgRnVuY3Rpb24gTmFtZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIG5hbWUgdGhpcyBwaWVjZSBvZiBjb2RlIOKAkyBsZXQmIzM5O3MgY2FsbCBpdCBhIGZ1bmN0aW9uIGZvciBub3cg4oCTIHRoYXQgd2lsbCBoYW5kbGXigKYgKnRoZSByZXN1bHRzKi4gSG1tLCBidXQgJiMzNDtyZXN1bHRzJiMzNDsgaXMgdG9vIGdlbmVyaWMsIGlzbiYjMzk7dCBpdD8gSXQgY291bGQgYmUgYW55dGhpbmcuIEkgbmVlZCBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgKmFjdGlvbiogb2YgaGFuZGxpbmcsIG5vdCBqdXN0IHRoZSBkYXRhIGl0c2VsZi4KCkkgY29uc2lkZXJlZCBhIGZldyBvcHRpb25zLCBsaWtlICYjMzQ7cHJvY2Vzc19yZXN1bHRzJiMzNDsgb3IgJiMzNDtoYW5kbGVfcmVzdWx0cywmIzM0OyBidXQgdGhvc2UgZmVlbCBhIGxpdHRsZS4uLmNsdW5reS4gVGhleSYjMzk7cmUgZmluZSwgYnV0IEkmIzM5O20gYWltaW5nIGZvciBzb21ldGhpbmcgbW9yZSBjb25jaXNlLCBtb3JlIGRpcmVjdC4gSSB3YW50IGl0IHRvIGJlIGltbWVkaWF0ZWx5IGNsZWFyIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuCgpUaGVuIGl0IGhpdCBtZTogSSYjMzk7bSBub3QganVzdCAqcHJvY2Vzc2luZyogb3IgKmhhbmRsaW5nKiB0aGUgcmVzdWx0cywgSSYjMzk7bSBlZmZlY3RpdmVseSAqc2V0dGluZyogdGhlbSwgcmlnaHQ/IEkmIzM5O20gZXN0YWJsaXNoaW5nIHRoZSBmaW5hbCBzdGF0ZSwgdGhlIG91dHB1dC4gVGhlcmVmb3JlLCBuYW1pbmcgaXQgYHNldC1yZXN1bHRzYCBmZWVscyBtb3JlIGFwcHJvcHJpYXRlLiBJdCYjMzk7cyBhIGNsZWFyLCBhY3RpdmUgdmVyYiwgZm9sbG93ZWQgYnkgdGhlIG5vdW4gaXQgYWZmZWN0cy4gSXQmIzM5O3Mgc2hvcnQsIG1lbW9yYWJsZSwgYW5kIGhvcGVmdWxseSwgaW5zdGFudGx5IHVuZGVyc3RhbmRhYmxlIHRvIGFueW9uZSByZWFkaW5nIHRoZSBjb2RlLiBJIHRoaW5rIEkmIzM5O2xsIGdvIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVx1MDAzZXN3YXBgLlxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxuXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjgxMWE4ZWM4MGRlYTUwZmYyYTBiNDM5YzA3NDNmN2JhMmZiODdhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE5OjI3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hZTJlYmFlZDZkNGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNTkzLDggJiM0Mzs1OTMsNyBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpCiBGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKQogCiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi8KLVBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCi0JVEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKQogRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIAlGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpCiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCA4ODk2MjU3MWNiOTMxLi4xZGE0ZmY0ODRmMDk3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jCkBAIC0xNjAsNyAmIzQzOzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CkBAIC0xNjgsOCAmIzQzOzE2OCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKLQkJZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpOwogCQlfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKQEAgLTE4Myw3ICYjNDM7MTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CkBAIC0xOTEsOCAmIzQzOzE5MSw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTsKJiM0MzsJCWVudHJ5LnZhbCYjNDM7JiM0Mzs7CiAJfQogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogfQpAQCAtMjA5LDcgJiM0MzsyMDksNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJLyoKLQkgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgcGFnZQomIzQzOwkgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW8KIAkgKiBjb250ZW50cywgZS5nLiBtZW1vcnkgdGFncy4KIAkgKi8KIAlyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7CkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJLyoKIAkgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZAotCSAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpcwomIzQzOwkgKiBmb2xpb3MuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiAJICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLgogCSAqLwogCWlmIChpc19mb2xpb196ZXJvX2ZpbGxlZChmb2xpbykpIHsKQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JX19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTsKJiM0MzsJX19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pOwogCXJldHVybiAwOwogb3V0X3VubG9jazoKIAlmb2xpb191bmxvY2soZm9saW8pOwpAQCAtMjc3LDcgJiM0MzsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiAJcmV0dXJuIGNhbl9tZXJnZTsKIH0KIAotc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKQEAgLTI5OCw3ICYjNDM7Mjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKQogewogCXJldHVybiB0cnVlOwogfQotI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pCQlkbyB7IH0gd2hpbGUgKDApCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICZhbXA7JmFtcDsgQ09ORklHX0JMS19DR1JPVVAgKi8KIAogc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7CkBAIC0zNjcsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpCiAJfQogfQogCi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIApAQCAtNDk3LDEzICYjNDM7NDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpCiAJaW50IHA7CiAKIAlmb3IgKHAgPSAwOyBwICZsdDsgc2lvLSZndDtucl9idmVjczsgcCYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzW3BdLmJ2X3BhZ2U7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbygmYW1wO3Npby0mZ3Q7YnZlY3NbcF0pOwogCiAJCWlmIChmYWlsZWQpIHsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJQ2xlYXJQYWdlUmVjbGFpbShwYWdlKTsKJiM0MzsJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTsKIAkJfQotCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiYjNDM7CQlmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTsKIAl9CiAJbWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpOwogfQpAQCAtNTE0LDE2ICYjNDM7NTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldCkKIAlib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tJmd0O2xlbjsKIAogCWlmIChmYWlsZWQpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzWzBdLmJ2X3BhZ2U7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbygmYW1wO3Npby0mZ3Q7YnZlY3NbMF0pOwogCiAJCS8qCiAJCSAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmUKIAkJICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXQKLQkJICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkCiYjNDM7CQkgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkCiAJCSAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuCiAJCSAqLwogCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDtXcml0ZSBlcnJvciAlbGQgb24gZGlvIHN3YXBmaWxlICglbGx1KVxuJiMzNDssCi0JCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MocGFnZV9zd2FwX2VudHJ5KHBhZ2UpKSk7CiYjNDM7CQkJCSAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLSZndDtzd2FwKSk7CiAJfQogCiAJc3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpOwpAQCAtNTk2LDcgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KQogCQkJUkVRX09QX1dSSVRFIHwgUkVRX1NXQVApOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gc2lvLSZndDtsZW47CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IHN3YXBfZm9saW9fc2VjdG9yKGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7Ci0JYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7CiYjNDM7CWJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKIAogCWlmIChjdHgtJmd0O3Npcy0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX1NZTkNIUk9OT1VTX0lPKSB7CiAJCXN1Ym1pdF9iaW9fd2FpdChiaW8pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTI1OCw3ICYjNDM7MjU4LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTsKIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMjk4OSw3ICYjNDM7Mjk4OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7CiAvKgogICogQSBgc3dhcCBleHRlbnQmIzM5OyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlcwogICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXMKLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvCiYjNDM7ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpbwogICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy4KICAqCiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwNTAsNyAmIzQzOzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCWZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwotCV9fc3dhcF93cml0ZXBhZ2UoJmFtcDtjdHgsIGZvbGlvKTsKJiM0MzsJX19zd2FwX3dyaXRlb3V0KCZhbXA7Y3R4LCBmb2xpbyk7CiAJc3dhcF93cml0ZV9zdWJtaXQoJmFtcDtjdHgpOwogCiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgU3dhcCBGb2xpbyBDb252ZXJzaW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSByZXF1ZXN0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0LCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqZG9pbmcqLiBCYXNlZCBvbiB0aGUgdGl0bGUgYW5kIGRpZmYsIGl0IGFwcGVhcnMgdG8gYmUgYSBmb2xpbyBjb252ZXJzaW9uIGFuZCBjbGVhbnVwIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKCiogICBSZXBsYWNpbmcgYFBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpYCBhbmQgcmVsYXRlZCBtYWNyb3Mgd2l0aCBgRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpYCB3aGljaCBpcyBhIGNvbW1vbiBjb252ZXJzaW9uIGZyb20gcGFnZSB0byBmb2xpbyBmbGFnIG1hbmFnZW1lbnQuCiogICBVcGRhdGluZyBgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldGAgYW5kIGBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXJgIHRvIHVzZSBgZm9saW8tJmd0O3N3YXBgIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBwYWdlJiMzOTtzIHN3YXAgZW50cnkuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjb252ZXJzaW9uL2NsZWFudXAuCiogICBSZW5hbWluZyBgX19zd2FwX3dyaXRlcGFnZWAgdG8gYF9fc3dhcF93cml0ZW91dGAgYW5kIHVwZGF0aW5nIHJlbGV2YW50IGNhbGxzIGFuZCBjb21tZW50cy4gQWxzbyByZW5hbWluZyBhIHJlbGF0ZWQgYGJpb19hc3NvY2lhdGVgIGZ1bmN0aW9uLgoqICAgQ29udmVydGluZyBzZXZlcmFsIHBhZ2UtYmFzZWQgZnVuY3Rpb25zIChlLmcuIGBzd2FwX3dyaXRlX2VuZGAsIGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYCkgdG8gdXNlIGZvbGlvLWJhc2VkIGFsdGVybmF0aXZlcyB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBidmVjX2ZvbGlvYCwgYGZvbGlvX21hcmtfZGlydHlgLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AuCgpFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZyB0byBtb2Rlcm5pemUgdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGhhcyBiZWVuIGRvbmUgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGFzdC4KCk5vdywgZm9yIHRoZSBLTVNBTiBhc3Nlc3NtZW50LiBLTVNBTiBmb2N1c2VzIG9uIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IG9mIHRoZXNlIGFyZWFzPyBJIG5lZWQgdG8gYW5hbHl6ZSBlYWNoIGNoYW5nZSBjYXJlZnVsbHk6CgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyAmYW1wOyBVc2VyIFNwYWNlOioqIERvZXMgaXQgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBNTS9zd2FwIHN0dWZmLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8uCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8uCjUuICAqKk1lbW9yeSBMZWFrczoqKiBEb2VzIGl0IGNyZWF0ZSBhbnkgbWVtb3J5IGluZm8gbGVha3MgdG8gdXNlciBzcGFjZT8gTm8uCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtLCBtYWlubHkgaW52b2x2aW5nIGNoYW5nZXMgZnJvbSBgc3RydWN0IHBhZ2VgIHRvIGBzdHJ1Y3QgZm9saW9gIGRhdGEgc3RydWN0dXJlcywgcmVuYW1lZCB2YXJpYWJsZXMsIGFuZCBtYWNybyBjaGFuZ2VzLiBUaGVyZSYjMzk7cyBubyBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IHRoZSB1c2VyIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZGlyZWN0bHkuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRob3NlIGBzd2FwX3plcm9tYXBgIGVudHJpZXM6IHRoZSBgc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDtgIHZhcmlhYmxlcyBhcmUgKmltbWVkaWF0ZWx5KiBpbml0aWFsaXplZCB3aXRoIHRoZSBgZm9saW8tJmd0O3N3YXBgIHZhbHVlIHVwb24gZGVjbGFyYXRpb24uIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYW4gdW5pbml0aWFsaXplZCBgZW50cnlgIGlzIGJlaW5nIHVzZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIFRoZSBwb3RlbnRpYWwgZm9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHByaW1hcmlseSBsaWVzIGluIGZvbGlvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBhbmQgdGhlIHN3YXAgc3Vic3lzdGVtJiMzOTtzIHN0YXRlIG1hY2hpbmUsIGJ1dCB0aGVzZSB3b3VsZCBiZSBpZGVudGlmaWVkIGJ5IHRoZSBleGlzdGluZyBLQVNBTiBjaGVja3MsIExPQ0tERVAsIGFuZCBWTSBhc3NlcnRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IG5lY2Vzc2l0YXRlIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgS0FTQU4gaXMgYWxyZWFkeSBhY3RpdmUgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVx1MDAzZXN3YXBgLlxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxuXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhbiBpbnRlcm5hbCBNTSByZWZhY3RvcmluZyB0aGF0IGNvbnZlcnRzIGxlZ2FjeSBzdHJ1Y3QgcGFnZSByZWZlcmVuY2VzIGFuZCBoZWxwZXJzIGluIHRoZSBzd2FwIHN1YnN5c3RlbSB0byBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiBjb252ZXJ0aW5nIFJlY2xhaW0gZmxhZyBtYWNyb3MgdG8gRk9MSU9fRkxBRywgdXNpbmcgYnZlY19mb2xpbywgZm9saW9fbWFya19kaXJ0eSwgZm9saW9fY2xlYXJfcmVjbGFpbSwgZm9saW9fZW5kX3dyaXRlYmFjaywgYW5kIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0KS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFrLlxuMi4gTG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBlbnRyeWAgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBgZm9saW8tXHUwMDNlc3dhcGAuXG4zLiBObyBidWZmZXIgYWxsb2NhdGlvbnMsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuXG5cbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1MS4yNjgzNzkxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI0MjE1MzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpcyBhbiBpbnRlcm5hbCBNTSByZWZhY3RvcmluZyB0aGF0IGNvbnZlcnRzIGxlZ2FjeSBzdHJ1Y3QgcGFnZSByZWZlcmVuY2VzIGFuZCBoZWxwZXJzIGluIHRoZSBzd2FwIHN1YnN5c3RlbSB0byBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiBjb252ZXJ0aW5nIFJlY2xhaW0gZmxhZyBtYWNyb3MgdG8gRk9MSU9fRkxBRywgdXNpbmcgYnZlY19mb2xpbywgZm9saW9fbWFya19kaXJ0eSwgZm9saW9fY2xlYXJfcmVjbGFpbSwgZm9saW9fZW5kX3dyaXRlYmFjaywgYW5kIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0KS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIHJlYWQ6XFxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFrLlxcbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVxcdTAwM2Vzd2FwYC5cXG4zLiBObyBidWZmZXIgYWxsb2NhdGlvbnMsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuXFxuXFxuQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBvciBwb2ludGVyIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBWTSBhc3NlcnRpb25zIChWTV9CVUdfT05fRk9MSU8gLyBWTV9XQVJOX09OX09OQ0VfRk9MSU8pLCBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc3dhcCB3cml0ZW91dCBwYXRocyBmcm9tIG9wZXJhdGluZyBvbiBzdHJ1Y3QgcGFnZSB0byBzdHJ1Y3QgZm9saW8sIGluY2x1ZGluZyBmb2xpby1sZXZlbCBzd2FwIGVudHJ5IGNhbGN1bGF0aW9uLCBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nLCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBpbiBwYWdlX2lvLmMgYW5kIHpzd2FwLmMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBsb2dpYywgd2hpY2ggaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjc6NTEuMjY4MzgzMTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM1MjA4Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjgxMWE4ZWM4MGRlYTUwZmYyYTBiNDM5YzA3NDNmN2JhMmZiODdhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxOToyNzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYWUyZWJhZWQ2ZDRkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTU5Myw4ICs1OTMsNyBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIFxcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcXG4tXFx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxcbitGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gXFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggODg5NjI1NzFjYjkzMS4uMWRhNGZmNDg0ZjA5NyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4tXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuK1xcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTY4LDggKzE2OCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xcbi1cXHRcXHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XFxuIFxcdFxcdF9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XFxuK1xcdFxcdGVudHJ5LnZhbCsrO1xcbiBcXHR9XFxuIFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiBcXG5AQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4tXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuK1xcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTkxLDggKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuLVxcdFxcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcXG4gXFx0XFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xcbitcXHRcXHRlbnRyeS52YWwrKztcXG4gXFx0fVxcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gfVxcbkBAIC0yMDksNyArMjA5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlXFxuK1xcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xcbiBcXHQgKiBjb250ZW50cywgZS5nLiBtZW1vcnkgdGFncy5cXG4gXFx0ICovXFxuIFxcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcXG5AQCAtMjIwLDcgKzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcXG4tXFx0ICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXFxuK1xcdCAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcXG4gXFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkge1xcbkBAIC0yNDgsNyArMjQ4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbi1cXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xcbitcXHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxuIFxcdHJldHVybiAwO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiBcXHRyZXR1cm4gY2FuX21lcmdlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuIFxcbkBAIC0yOTgsNyArMjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK31cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xcbiBcXG4gc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7XFxuQEAgLTM2Nyw3ICszNjksNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuQEAgLTQ5NywxMyArNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuIFxcdGludCBwO1xcbiBcXG4gXFx0Zm9yIChwID0gMDsgcCBcXHUwMDNjIHNpby1cXHUwMDNlbnJfYnZlY3M7IHArKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby1cXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXFx1MDAyNnNpby1cXHUwMDNlYnZlY3NbcF0pO1xcbiBcXG4gXFx0XFx0aWYgKGZhaWxlZCkge1xcbi1cXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4tXFx0XFx0XFx0Q2xlYXJQYWdlUmVjbGFpbShwYWdlKTtcXG4rXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcXG4rXFx0XFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0bWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpO1xcbiB9XFxuQEAgLTUxNCwxNiArNTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcXG4gXFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVxcdTAwM2VsZW47XFxuIFxcbiBcXHRpZiAoZmFpbGVkKSB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVxcdTAwM2VidmVjc1swXS5idl9wYWdlO1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1swXSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiB0aGUgY2FzZSBvZiBzd2FwLW92ZXItbmZzLCB0aGlzIGNhbiBiZSBhIHRlbXBvcmFyeSBmYWlsdXJlXFxuIFxcdFxcdCAqIGlmIHRoZSBzeXN0ZW0gaGFzIGxpbWl0ZWQgbWVtb3J5IGZvciBhbGxvY2F0aW5nIHRyYW5zbWl0XFxuLVxcdFxcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBwYWdlIGRpcnR5IGFuZCBhdm9pZFxcbitcXHRcXHQgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkXFxuIFxcdFxcdCAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXFxcIldyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcXG4rXFx0XFx0XFx0XFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXFx1MDAzZXN3YXApKTtcXG4gXFx0fVxcbiBcXG4gXFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xcbkBAIC01OTYsNyArNTk4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcXG4gXFx0XFx0XFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHNpby1cXHUwMDNlbGVuO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4tXFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XFxuK1xcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXNpcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcXG4gXFx0XFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XFxuIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqL1xcbiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5O1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMjk4OSw3ICsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcXG4gLypcXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXFxuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXFxuLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvXFxuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cXG4gICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy5cXG4gICpcXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjg4YTFhNzRmOTE4NTIgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTA1MCw3ICsxMDUwLDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xcbiBcXG4gXFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuLVxcdF9fc3dhcF93cml0ZXBhZ2UoXFx1MDAyNmN0eCwgZm9saW8pO1xcbitcXHRfX3N3YXBfd3JpdGVvdXQoXFx1MDAyNmN0eCwgZm9saW8pO1xcbiBcXHRzd2FwX3dyaXRlX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjc6NTIuNzA0MjE2NjAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTg1NDA3OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzd2FwIHdyaXRlb3V0IHBhdGhzIGZyb20gb3BlcmF0aW5nIG9uIHN0cnVjdCBwYWdlIHRvIHN0cnVjdCBmb2xpbywgaW5jbHVkaW5nIGZvbGlvLWxldmVsIHN3YXAgZW50cnkgY2FsY3VsYXRpb24sIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcsIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGluIHBhZ2VfaW8uYyBhbmQgenN3YXAuYy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGxvZ2ljLCB3aGljaCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3YTg2MzU3MmFkY2U3Li5hZTJlYmFlZDZkNGQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTkzLDggKzU5Myw3IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbiBGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuLVBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXG4tXHRURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXG4rRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbisrKyBiL21tL3BhZ2VfaW8uY1xuQEAgLTE2MCw3ICsxNjAsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xNjgsOCArMTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG4tXHRcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbiBcdFx0X19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xOTEsOCArMTkxLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4rXHRcdGVudHJ5LnZhbCsrO1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gfVxuQEAgLTIwOSw3ICsyMDksNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlXG4rXHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW9cbiBcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxuIFx0ICovXG4gXHRyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7XG5AQCAtMjIwLDcgKzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0LypcbiBcdCAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkXG4tXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbitcdCAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbiBcdCAqIGFjcXVpcmVkIGludGVybmFsbHkgYnkgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhci5cbiBcdCAqL1xuIFx0aWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkge1xuQEAgLTI0OCw3ICsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0X19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTtcbitcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbiBcdHJldHVybiAwO1xuIG91dF91bmxvY2s6XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4gXHRyZXR1cm4gY2FuX21lcmdlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTgsNyArMjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbylcdFx0ZG8geyB9IHdoaWxlICgwKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXHUwMDI2XHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXG4gXG4gc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7XG5AQCAtMzY3LDcgKzM2OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpXG4gXHR9XG4gfVxuIFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFxuQEAgLTQ5NywxMyArNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4gXHRpbnQgcDtcbiBcbiBcdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCsrKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzW3BdLmJ2X3BhZ2U7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG4gXG4gXHRcdGlmIChmYWlsZWQpIHtcbi1cdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbi1cdFx0XHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xuK1x0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFx0XHR9XG4tXHRcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcbitcdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4gXHR9XG4gXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XG4gfVxuQEAgLTUxNCwxNiArNTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbiBcdGJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby1cdTAwM2VsZW47XG4gXG4gXHRpZiAoZmFpbGVkKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzWzBdLmJ2X3BhZ2U7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1swXSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcbiBcdFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcbi1cdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXG4rXHRcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcbiBcdFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cbiBcdFx0ICovXG4gXHRcdHByX2Vycl9yYXRlbGltaXRlZChcIldyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXFxuXCIsXG4tXHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcbitcdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLVx1MDAzZXN3YXApKTtcbiBcdH1cbiBcbiBcdHN3YXBfd3JpdGVfZW5kKHNpbywgZmFpbGVkKTtcbkBAIC01OTYsNyArNTk4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbiBcdFx0XHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gc2lvLVx1MDAzZWxlbjtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHN3YXBfZm9saW9fc2VjdG9yKGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG4tXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbitcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbiBcbiBcdGlmIChjdHgtXHUwMDNlc2lzLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcbiBcdFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBmZGRiYTdhODc1MDBhLi4wYjVkNTA3NzM5YmNiIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwX3NwYWNlIF9fcmVhZF9tb3N0bHk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMjk4OSw3ICsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcbiAvKlxuICAqIEEgYHN3YXAgZXh0ZW50JyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlc1xuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cbisgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvXG4gICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy5cbiAgKlxuICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uODhhMWE3NGY5MTg1MiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4tXHRfX3N3YXBfd3JpdGVwYWdlKFx1MDAyNmN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8pO1xuIFx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1Mi43MDQyMTc4OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDgxMTM3NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGNvbnZlcnRpbmcgYHBhZ2VgIHN0cnVjdHVyZXMgdG8gYGZvbGlvYCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXM6IGBtbS9wYWdlX2lvLmNgLCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBgbW0vc3dhcC5oYCwgYG1tL3N3YXBmaWxlLmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgd2lkZXNwcmVhZCBpbXBhY3QuXG5cblNwZWNpZmljYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgdGhlIGNoYW5nZSBmcm9tIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgaXMgYSBkaXJlY3QgaW5kaWNhdGlvbiBvZiB0aGlzLiBUaGUgY29udmVyc2lvbiBmcm9tIHBhZ2UgZXF1aXZhbGVudHMgdG8gZm9saW8gaXMgaGFwcGVuaW5nIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIHRoZSByZW5hbWUgb2YgYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBldGMuIFRoZSB1c2Ugb2YgYGZvbGlvLVx1MDAzZXN3YXBgIGluIHRoZSBsb29waW5nLCB3aGljaCBpcyByZXBsYWNpbmcgaW5kaXZpZHVhbCBvcGVyYXRpb25zIGZvciBlYWNoIGBmb2xpb19wYWdlKGZvbGlvLCBpKWAuIFRoZSByZXBsYWNlbWVudCBvZiBmdW5jdGlvbnMgbGlrZSBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgZXRjLlxuXG5Ob3csIHRoZSByZW5hbWluZyBvZiBgX19zd2FwX3dyaXRlcGFnZWAgdG8gYF9fc3dhcF93cml0ZW91dGAgaW4gYG1tL3BhZ2VfaW8uY2AsIGBtbS9zd2FwLmhgLCBhbmQgYG1tL3pzd2FwLmNgIGlzIHNvbWV0aGluZyB0byB0YWtlIG5vdGUgb2YuIEl0IGltcGxpZXMgYSBjaGFuZ2UgaW4gdGhlIGFic3RyYWN0aW9uIG9yIHRoZSB3YXkgd3JpdGVvdXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCBzd2FwcGluZyBsb2dpYywgc3Bhbm5pbmcgYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBpbXBhY3RzIHN3YXAgSS9PIHdyaXRlb3V0IGlzIGEgcmVkIGZsYWcuIFdyaXRlb3V0IGlzIGNyaXRpY2FsIGFuZCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgY2hhbmdlIHRoZXJlLCBlc3BlY2lhbGx5IGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBvbmUsIG5lZWRzIGRlZXAgc2NydXRpbnkuIFdlIGFyZSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZWNoYW5pc21zLCBgc3dhcF93cml0ZW91dGAsIGFuZCBgX19zd2FwX3dyaXRlb3V0YC5cblxuTmV4dCBzdGVwcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQgaGVyZS4gSSdsbCBzZWFyY2ggYG1tL3BhZ2VfaW8uY2AsIGBtbS9LY29uZmlnYCwgYW5kIGBtbS9NYWtlZmlsZWAgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBvciBidWlsZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgY292ZXJzIGFsbCBjb2RlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgZm9saW8gdHJhbnNpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI3OjU5LjE4NTM1NzgwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU2NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2lvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1OS4yMzc5MjY0OTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTIxNDAwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBzZXR1cCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCB0aGUgb2JqZWN0IGZpbGVzIGBwYWdlX2lvLm9gLCBgc3dhcF9zdGF0ZS5vYCwgYW5kIGBzd2FwZmlsZS5vYCBhcmUgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCBidXQgb25seSBpZiBgQ09ORklHX1NXQVBgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgZm9yIGhhbmRsaW5nIHN3YXAgc3BhY2UuIEFuZCB0aGVuLCB0aGVyZSdzIGB6c3dhcC5vYCDigJMgdGhhdCdzIG9ubHkgZ2V0dGluZyBjb21waWxlZCBpZiBgQ09ORklHX1pTV0FQYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBwcmVjaXNlbHkgd2hhdCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBhY3R1YWxseSBjb250cm9sLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIEtjb25maWcgYW5kIHRoZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIHN3YXAgc3lzdGVtIGlzIGJlaW5nIG1hbmFnZWQuIE1ha2luZyBzdXJlIHRoZXNlIGZsYWdzIGFyZSBzZXQgY29ycmVjdGx5IGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsaXR5LCBzbyBhIHF1aWNrIHJldmlldyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjA1Ljc1OTMyOTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODE0MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjA1LjgxMjE0Nzg0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTI5MjA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHN3YXBwaW5nLCBzcGVjaWZpY2FsbHkgYENPTkZJR19TV0FQYC4gVGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGlzIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29udHJvbHMgZ292ZXJuaW5nIHN3YXAgYmVoYXZpb3IsIGl0cyBlbmFibGVtZW50LCBhbmQgcHJvYmFibHkgc29tZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgaWYgaXQncyBjb25maWd1cmFibGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgdGhlcmUsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IGl04oCZcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgYXR0YWNoZWQgdG8gaXQuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBzd2FwIHN1cHBvcnQgaXMgY3J1Y2lhbCBmb3IgYW55b25lIHdvcmtpbmcgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgbmV4dCBzdGVwIHdvdWxkIGJlIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoaW5ncyBsaWtlIHRoZSBwYWdlIGNhY2hlLCBOVU1BLCBhbmQgYW55IHBvdGVudGlhbCB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjEzLjk2NTA3MTg4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdGJvb2xcXG4gIDExOlxcdFxcbiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjEzLjk2NTIxNzA3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5OTUxMzk1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczpcblxuKipJbnZlc3RpZ2F0aW5nIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCB1c2FnZSBvZiB0aGVzZSBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGVyZSdzIGEgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBwb3RlbnRpYWxseSBpbnRlcm5hbCwgb3BlcmF0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSBhbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBpZGVudGlmeSAqZXZlcnkqIGluc3RhbmNlIHdoZXJlIHRoZXkncmUgaW52b2tlZC4gVGhpcyBpbmNsdWRlcyBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIG90aGVyIGZ1bmN0aW9ucywgYW5kIGNhbGxzIGZyb20gZGlmZmVyZW50IGNvbXBvbmVudHMsIGJlY2F1c2UgSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiB3aXRoIFwic3dhcFwiIGluIGl0cyBuYW1lLiBJdCBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVzIG1vdmluZyBkYXRhIHJlbGF0ZWQgdG8gc3dhcHBpbmcsIHdoaWNoIGRpcmVjdGx5IGNvbmNlcm5zIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEtub3dpbmcgdGhpcywgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBjYWxscyBwcmltYXJpbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcy4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSB0ZWxscyBtZSBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIGNhbGxzIHdpdGhpbiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gaW4gc2VjdGlvbnMgZGVhbGluZyB3aXRoIGRldmljZSBkcml2ZXJzIGlmIHRoZXJlJ3MgYW4gdW51c3VhbCBJL08gcGF0dGVybi4gVGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIGlzIGNydWNpYWwuIEFyZSB0aGVzZSBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzLCBvciBzb21lIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGV2ZW50PyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoaXMgZnJvbSB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIHN3YXAgbWVjaGFuaXNtLCBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjE3Ljk2MDM1OTE3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NjIxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX3dyaXRlb3V0fHN3YXBfd3JpdGVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pby5jPTE4Mz1zdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yMDMtICovXFxubW0vcGFnZV9pby5jOjIwNDppbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMjA1LXtcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yNTAtXFxubW0vcGFnZV9pby5jOjI1MTpcXHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxubW0vcGFnZV9pby5jLTI1Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3BhZ2VfaW8uYz0zMzQ9c3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zNzEtXFxubW0vcGFnZV9pby5jOjM3Mjp2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMzczLXtcXG4tLVxcbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE3MTgtXFx0XFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xcbm1tL3NobWVtLmM6MTcxOTpcXHRcXHRlcnJvciA9IHN3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxubW0vc2htZW0uYy0xNzIwLVxcdFxcdGlmIChlcnJvciAhPSBBT1BfV1JJVEVQQUdFX0FDVElWQVRFKSB7XFxuLS1cXG5tbS9zd2FwLmg9MjU5PXZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbm1tL3N3YXAuaDoyNjA6aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaDoyNjE6dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaC0yNjItXFxuLS1cXG5tbS9zd2FwLmg9NDIwPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXAuaC00MjQtXFxubW0vc3dhcC5oOjQyNTpzdGF0aWMgaW5saW5lIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXAuaC00MjYte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yOTg3PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI5OTEtICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcXG5tbS9zd2FwZmlsZS5jOjI5OTI6ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xcbm1tL3N3YXBmaWxlLmMtMjk5My0gKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxcbi0tXFxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS92bXNjYW4uYy02NTktXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjY2MDpcXHRcXHRyZXMgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTY2MS1cXG4tLVxcbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy04ODAtXFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxubW0venN3YXAuYzo4ODE6XFx0ICogb25seSBhZGRzIG1ldGFkYXRhIG92ZXJoZWFkLiAgc3dhcF93cml0ZW91dCgpIHdpbGwgcHV0IHRoZSBwYWdlIGJhY2tcXG5tbS96c3dhcC5jLTg4Mi1cXHQgKiB0byB0aGUgYWN0aXZlIExSVSBsaXN0IGluIHRoZSBjYXNlLlxcbi0tXFxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA1Mi1cXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cXG5tbS96c3dhcC5jOjEwNTM6XFx0X19zd2FwX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvKTtcXG5tbS96c3dhcC5jLTEwNTQtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjE4LjAxNjgyNTY2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzM0MTc4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFN3YXAgV3JpdGVvdXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgdGhlaXIgc2NvcGUuIEknbSBmb2N1c2luZyBvbiBzd2FwIHdyaXRlb3V0IGZ1bmN0aW9ucywgc28gSSdtIGNoZWNraW5nIGlmIGBzd2FwX3dyaXRlb3V0YCwgYF9fc3dhcF93cml0ZW91dGAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGdsb2JhbC4gIExvb2tzIGxpa2UgYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzd2FwX3dyaXRlX2VuZGAsIGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYCwgZXRjLiwgYXJlIHN0YXRpYywgc28gSSB3aWxsIGxpa2VseSBleGNsdWRlIHRoZXNlLiBBbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIGluIGBtbS96c3dhcC5jYC5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCByZWxhdGVkIHRvIGByZWNsYWltYCBmbGFncywgYW5kIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCwgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAsIGFuZCB0aGUgYHN3YXBfd3JpdGVvdXRgIGNhbGxzIHRvIGBfX3N3YXBfd3JpdGVvdXRgLiAgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2VgIGlzIG5vdyBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgYF9fc3dhcF93cml0ZXBhZ2VgIGJlY29tZXMgYF9fc3dhcF93cml0ZW91dGAuICBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIGBtbS9zd2FwLmhgIHdpdGggdGhlIGRlY2xhcmF0aW9uIG9mIGBfX3N3YXBfd3JpdGVvdXRgLCBgbW0vc3dhcGZpbGUuY2Agd2l0aCBhIGNvbW1lbnQgY2hhbmdlLCBhbmQgZmluYWxseSBgbW0venN3YXAuY2AgY2FsbGluZyBgX19zd2FwX3dyaXRlb3V0YCBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAsIGFyZSB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHBhdGNoLlxuXG5BcmUgdGhlc2UgaG90IHBhdGhzPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHN3YXAgYW5kIG1lbW9yeSByZWNsYWltLiBCdXQgdGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgdGhleSdyZSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBvdXQgYW5vbnltb3VzIHBhZ2VzL2ZvbGlvcyBvciB6c3dhcCB3cml0ZWJhY2sgZW50cmllcy4gVGhleSBhcmUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCB0cml2aWFsIGlubGluZSBoZWxwZXJzLiAgVGhpcyBtYWtlcyB0aGVtIGdvb2QgXCJmb2N1cyBzeW1ib2xzXCIuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBmb3IgdGhlIFpzd2FwIHBhdGguIEFsc28sIGBDT05GSUdfQkxLX0NHUk9VUGAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSByZWxldmFudCwgZ2l2ZW4gdGhlIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AgY2FsbC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgc3dhcCB3cml0ZW91dCB3b3JrcyB3aXRoIGZvbGlvcyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgcGFnZXMsIGluY2x1ZGluZyB0aGUgYGZvbGlvLVx1MDAzZXN3YXBgIGNhbGN1bGF0aW9uIGFuZCB0aGUgYGVudHJ5LnZhbCsrYCBsb2dpYy4gSXQgdXNlcyBgYnZlY19mb2xpb2AsIGFuZCBtb2RpZmllcyBmb2xpbyBkaXJ0eS9yZWNsYWltIHN0YXRlcyBvbiBlcnJvci4gVGhpcyBpcyBjb3JlIHN3YXAgZnVuY3Rpb25hbGl0eSwgc28gZnV6emluZyBpcyBqdXN0aWZpZWQuXG5cbkxldCBtZSB2ZXJpZnkgdGhvc2UgY29uZmlnIG5hbWVzOiBTV0FQLCBaU1dBUCwgTUVNQ0csIGFuZCBCTEtfQ0dST1VQLlxuXG5TbywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICAqKkZvY3VzIFN5bWJvbHMqKjogYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YFxuKiAgICoqRW5hYmxlIENvbmZpZ3MqKjogU1dBUCwgWlNXQVAsIE1FTUNHLCBCTEtcXF9DR1JPVVBcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBzY2FuIHRoZSBiZWdpbm5pbmcgb2YgYG1tL3BhZ2VfaW8uY2AgKGxpbmVzIDEtMTAwKSB0byBkb3VibGUtY2hlY2sgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgdGhpbmsgdGhhdCdzIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODoyNi43NTEwMDcyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBsaW51eC9tbS9wYWdlX2lvLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0ICBMaW51cyBUb3J2YWxkc1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBcXG4gICA4OlxcdCAqICBBc3luY2hyb25vdXMgc3dhcHBpbmcgYWRkZWQgMzAuMTIuOTUuIFN0ZXBoZW4gVHdlZWRpZVxcbiAgIDk6XFx0ICogIFJlbW92ZWQgcmFjZSBpbiBhc3luYyBzd2FwcGluZy4gMTQuNC4xOTk2LiBCcnVubyBIYWlibGVcXG4gIDEwOlxcdCAqICBBZGQgc3dhcCBvZiBzaGFyZWQgcGFnZXMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4gMjAuMi4xOTk4LiBTdGVwaGVuIFR3ZWVkaWVcXG4gIDExOlxcdCAqICBBbHdheXMgdXNlIGJyd19wYWdlLCBsaWZlIGJlY29tZXMgc2ltcGxlci4gMTIgTWF5IDE5OTggRXJpYyBCaWVkZXJtYW5cXG4gIDEyOlxcdCAqL1xcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheWFjY3QuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuICAyOTpcXHQjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiAgMzA6XFx0I2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gIDMxOlxcdFxcbiAgMzI6XFx0aW50IGdlbmVyaWNfc3dhcGZpbGVfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gIDMzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpzd2FwX2ZpbGUsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHRzZWN0b3JfdCAqc3BhbilcXG4gIDM1OlxcdHtcXG4gIDM2OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3dhcF9maWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4gIDM4OlxcdFxcdHVuc2lnbmVkIGJsb2Nrc19wZXJfcGFnZTtcXG4gIDM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9ubztcXG4gIDQwOlxcdFxcdHVuc2lnbmVkIGJsa2JpdHM7XFxuICA0MTpcXHRcXHRzZWN0b3JfdCBwcm9iZV9ibG9jaztcXG4gIDQyOlxcdFxcdHNlY3Rvcl90IGxhc3RfYmxvY2s7XFxuICA0MzpcXHRcXHRzZWN0b3JfdCBsb3dlc3RfYmxvY2sgPSAtMTtcXG4gIDQ0OlxcdFxcdHNlY3Rvcl90IGhpZ2hlc3RfYmxvY2sgPSAwO1xcbiAgNDU6XFx0XFx0aW50IG5yX2V4dGVudHMgPSAwO1xcbiAgNDY6XFx0XFx0aW50IHJldDtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0YmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuICA0OTpcXHRcXHRibG9ja3NfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODoyNi43NTExMDc4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzI5ODQ3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IHRob3VnaHQgcHJvY2Vzcy4gSGVyZSB3ZSBnbzpcblxuKipUaGlua2luZyBUaHJvdWdoIGEgRnVuY3Rpb24gTmFtZSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gbmFtZSB0aGlzIHBpZWNlIG9mIGNvZGUg4oCTIGxldCdzIGNhbGwgaXQgYSBmdW5jdGlvbiBmb3Igbm93IOKAkyB0aGF0IHdpbGwgaGFuZGxl4oCmICp0aGUgcmVzdWx0cyouIEhtbSwgYnV0IFwicmVzdWx0c1wiIGlzIHRvbyBnZW5lcmljLCBpc24ndCBpdD8gSXQgY291bGQgYmUgYW55dGhpbmcuIEkgbmVlZCBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgKmFjdGlvbiogb2YgaGFuZGxpbmcsIG5vdCBqdXN0IHRoZSBkYXRhIGl0c2VsZi5cblxuSSBjb25zaWRlcmVkIGEgZmV3IG9wdGlvbnMsIGxpa2UgXCJwcm9jZXNzX3Jlc3VsdHNcIiBvciBcImhhbmRsZV9yZXN1bHRzLFwiIGJ1dCB0aG9zZSBmZWVsIGEgbGl0dGxlLi4uY2x1bmt5LiBUaGV5J3JlIGZpbmUsIGJ1dCBJJ20gYWltaW5nIGZvciBzb21ldGhpbmcgbW9yZSBjb25jaXNlLCBtb3JlIGRpcmVjdC4gSSB3YW50IGl0IHRvIGJlIGltbWVkaWF0ZWx5IGNsZWFyIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuXG5cblRoZW4gaXQgaGl0IG1lOiBJJ20gbm90IGp1c3QgKnByb2Nlc3NpbmcqIG9yICpoYW5kbGluZyogdGhlIHJlc3VsdHMsIEknbSBlZmZlY3RpdmVseSAqc2V0dGluZyogdGhlbSwgcmlnaHQ/IEknbSBlc3RhYmxpc2hpbmcgdGhlIGZpbmFsIHN0YXRlLCB0aGUgb3V0cHV0LiBUaGVyZWZvcmUsIG5hbWluZyBpdCBgc2V0LXJlc3VsdHNgIGZlZWxzIG1vcmUgYXBwcm9wcmlhdGUuIEl0J3MgYSBjbGVhciwgYWN0aXZlIHZlcmIsIGZvbGxvd2VkIGJ5IHRoZSBub3VuIGl0IGFmZmVjdHMuIEl0J3Mgc2hvcnQsIG1lbW9yYWJsZSwgYW5kIGhvcGVmdWxseSwgaW5zdGFudGx5IHVuZGVyc3RhbmRhYmxlIHRvIGFueW9uZSByZWFkaW5nIHRoZSBjb2RlLiBJIHRoaW5rIEknbGwgZ28gd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNywiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjg6MzQuNDgwOTU3MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzMzNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZW91dFwiLFxuICAgIFwiX19zd2FwX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc3dhcCB3cml0ZW91dCBwYXRocyBmcm9tIG9wZXJhdGluZyBvbiBzdHJ1Y3QgcGFnZSB0byBzdHJ1Y3QgZm9saW8sIGluY2x1ZGluZyBmb2xpby1sZXZlbCBzd2FwIGVudHJ5IGNhbGN1bGF0aW9uLCBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nLCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBpbiBwYWdlX2lvLmMgYW5kIHpzd2FwLmMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBsb2dpYywgd2hpY2ggaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzd2FwIHdyaXRlb3V0IHBhdGhzIGZyb20gb3BlcmF0aW5nIG9uIHN0cnVjdCBwYWdlIHRvIHN0cnVjdCBmb2xpbywgaW5jbHVkaW5nIGZvbGlvLWxldmVsIHN3YXAgZW50cnkgY2FsY3VsYXRpb24sIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcsIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGluIHBhZ2VfaW8uYyBhbmQgenN3YXAuYy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGxvZ2ljLCB3aGljaCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODozNC41NTgzMDAxNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIyMjE1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODozNC41NTg3NzMzNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTUxNzQ0MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cXHUwMDNlc3dhcGAuXFxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxcblxcbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4MTFhOGVjODBkZWE1MGZmMmEwYjQzOWMwNzQzZjdiYTJmYjg3YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxOToyNzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTcuLmFlMmViYWVkNmQ0ZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC01OTMsOCArNTkzLDcgQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbitGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggODg5NjI1NzFjYjkzMS4uMWRhNGZmNDg0ZjA5NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2OCw4ICsxNjgsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE5MSw4ICsxOTEsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiB9XG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbitcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMjAsNyArMjIwLDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHQvKlxuIFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcbi1cdCAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuK1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ4LDcgKzI0OCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xuIFx0cmV0dXJuIDA7XG4gb3V0X3VubG9jazpcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5AQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5OCw3ICsyOTgsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbiBcbiBzdGF0aWMgbWVtcG9vbF90ICpzaW9fcG9vbDtcbkBAIC0zNjcsNyArMzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk3LDEzICs0OTksMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcbiBcdGludCBwO1xuIFxuIFx0Zm9yIChwID0gMDsgcCBcdTAwM2Mgc2lvLVx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3BdKTtcbiBcbiBcdFx0aWYgKGZhaWxlZCkge1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdENsZWFyUGFnZVJlY2xhaW0ocGFnZSk7XG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuK1x0XHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdH1cbiBcdG1lbXBvb2xfZnJlZShzaW8sIHNpb19wb29sKTtcbiB9XG5AQCAtNTE0LDE2ICs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbitcdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIGZvbGlvIGRpcnR5IGFuZCBhdm9pZFxuIFx0XHQgKiBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUgYnV0IHJhdGUtbGltaXQgdGhlIG1lc3NhZ2VzLlxuIFx0XHQgKi9cbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cIixcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuK1x0XHRcdFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcCkpO1xuIFx0fVxuIFxuIFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xuQEAgLTU5Niw3ICs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuK1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB2b2lkIHN3YXBfd3JpdGVfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTg5LDcgKzI5ODksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcbi0gKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVwYWdlL3N3YXBfcmVhZF9mb2xpb1xuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyArMTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4rXHRfX3N3YXBfd3JpdGVvdXQoXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3dyaXRlX3N1Ym1pdChcdTAwMjZjdHgpO1xuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjM0LjU1ODc3NDc3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTUxNzIyMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIFN3YXAgRm9saW8gQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHJlcXVlc3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgZG9lc24ndCwgYnV0IGxldCdzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5ICpkb2luZyouIEJhc2VkIG9uIHRoZSB0aXRsZSBhbmQgZGlmZiwgaXQgYXBwZWFycyB0byBiZSBhIGZvbGlvIGNvbnZlcnNpb24gYW5kIGNsZWFudXAgd2l0aGluIHRoZSBzd2FwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgZm9sbG93aW5nOlxuXG4qICAgUmVwbGFjaW5nIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgYW5kIHJlbGF0ZWQgbWFjcm9zIHdpdGggYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgd2hpY2ggaXMgYSBjb21tb24gY29udmVyc2lvbiBmcm9tIHBhZ2UgdG8gZm9saW8gZmxhZyBtYW5hZ2VtZW50LlxuKiAgIFVwZGF0aW5nIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAgdG8gdXNlIGBmb2xpby1cdTAwM2Vzd2FwYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgcGFnZSdzIHN3YXAgZW50cnkuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjb252ZXJzaW9uL2NsZWFudXAuXG4qICAgUmVuYW1pbmcgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIGFuZCB1cGRhdGluZyByZWxldmFudCBjYWxscyBhbmQgY29tbWVudHMuIEFsc28gcmVuYW1pbmcgYSByZWxhdGVkIGBiaW9fYXNzb2NpYXRlYCBmdW5jdGlvbi5cbiogICBDb252ZXJ0aW5nIHNldmVyYWwgcGFnZS1iYXNlZCBmdW5jdGlvbnMgKGUuZy4gYHN3YXBfd3JpdGVfZW5kYCwgYHN3YXBfZnNfd3JpdGVfY29tcGxldGVgKSB0byB1c2UgZm9saW8tYmFzZWQgYWx0ZXJuYXRpdmVzIHdpdGggZnVuY3Rpb25zIGxpa2UgYGJ2ZWNfZm9saW9gLCBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC5cblxuRXNzZW50aWFsbHksIGl0J3MgYSByZWZhY3RvcmluZyB0byBtb2Rlcm5pemUgdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGhhcyBiZWVuIGRvbmUgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGFzdC5cblxuTm93LCBmb3IgdGhlIEtNU0FOIGFzc2Vzc21lbnQuIEtNU0FOIGZvY3VzZXMgb24gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgb2YgdGhlc2UgYXJlYXM/IEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIGNhcmVmdWxseTpcblxuMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgXHUwMDI2IFVzZXIgU3BhY2U6KiogRG9lcyBpdCBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGludGVybmFsIE1NL3N3YXAgc3R1ZmYuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLlxuNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogRG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBOby5cbjUuICAqKk1lbW9yeSBMZWFrczoqKiBEb2VzIGl0IGNyZWF0ZSBhbnkgbWVtb3J5IGluZm8gbGVha3MgdG8gdXNlciBzcGFjZT8gTm8uXG5cblRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW0sIG1haW5seSBpbnZvbHZpbmcgY2hhbmdlcyBmcm9tIGBzdHJ1Y3QgcGFnZWAgdG8gYHN0cnVjdCBmb2xpb2AgZGF0YSBzdHJ1Y3R1cmVzLCByZW5hbWVkIHZhcmlhYmxlcywgYW5kIG1hY3JvIGNoYW5nZXMuIFRoZXJlJ3Mgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgdXNlciB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LlxuXG5MZXQncyBkb3VibGUgY2hlY2sgdGhvc2UgYHN3YXBfemVyb21hcGAgZW50cmllczogdGhlIGBzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7YCB2YXJpYWJsZXMgYXJlICppbW1lZGlhdGVseSogaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGZvbGlvLVx1MDAzZXN3YXBgIHZhbHVlIHVwb24gZGVjbGFyYXRpb24uIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYW4gdW5pbml0aWFsaXplZCBgZW50cnlgIGlzIGJlaW5nIHVzZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGxpZXMgaW4gZm9saW8gcmVmY291bnRpbmcsIGxvY2tpbmcsIGFuZCB0aGUgc3dhcCBzdWJzeXN0ZW0ncyBzdGF0ZSBtYWNoaW5lLCBidXQgdGhlc2Ugd291bGQgYmUgaWRlbnRpZmllZCBieSB0aGUgZXhpc3RpbmcgS0FTQU4gY2hlY2tzLCBMT0NLREVQLCBhbmQgVk0gYXNzZXJ0aW9ucy4gVGhpcyBkb2Vzbid0IG5lY2Vzc2l0YXRlIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBLQVNBTiBpcyBhbHJlYWR5IGFjdGl2ZSBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjUsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjQzLjUxMDUwMDE1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGFuIGludGVybmFsIE1NIHJlZmFjdG9yaW5nIHRoYXQgY29udmVydHMgbGVnYWN5IHN0cnVjdCBwYWdlIHJlZmVyZW5jZXMgYW5kIGhlbHBlcnMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtIHRvIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuIGNvbnZlcnRpbmcgUmVjbGFpbSBmbGFnIG1hY3JvcyB0byBGT0xJT19GTEFHLCB1c2luZyBidmVjX2ZvbGlvLCBmb2xpb19tYXJrX2RpcnR5LCBmb2xpb19jbGVhcl9yZWNsYWltLCBmb2xpb19lbmRfd3JpdGViYWNrLCBhbmQgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQpLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWsuXFxuMi4gTG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBlbnRyeWAgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBgZm9saW8tXFx1MDAzZXN3YXBgLlxcbjMuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC5cXG5cXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cXHUwMDNlc3dhcGAuXFxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxcblxcbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcgk6n[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-29 19:24:20 +0000 UTC FinishedAt: 2026-08-29 19:28:45 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "MEMCG", "BLK_CGROUP" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP", "ZSWAP", "MEMCG", "BLK_CGROUP" ], "series_id": "8cbcbd3f-1ef0-4260-9252-24a563cc0405" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "swap_writeout", "__swap_writeout" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGlzIGFuIGludGVybmFsIE1NIHJlZmFjdG9yaW5nIHRoYXQgY29udmVydHMgbGVnYWN5IHN0cnVjdCBwYWdlIHJlZmVyZW5jZXMgYW5kIGhlbHBlcnMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtIHRvIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuIGNvbnZlcnRpbmcgUmVjbGFpbSBmbGFnIG1hY3JvcyB0byBGT0xJT19GTEFHLCB1c2luZyBidmVjX2ZvbGlvLCBmb2xpb19tYXJrX2RpcnR5LCBmb2xpb19jbGVhcl9yZWNsYWltLCBmb2xpb19lbmRfd3JpdGViYWNrLCBhbmQgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQpLlxuXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIHJlYWQ6XG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWsuXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cdTAwM2Vzd2FwYC5cbjMuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC5cblxuQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBvciBwb2ludGVyIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBWTSBhc3NlcnRpb25zIChWTV9CVUdfT05fRk9MSU8gLyBWTV9XQVJOX09OX09OQ0VfRk9MSU8pLCBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYWUyZWJhZWQ2ZDRkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuQEAgLTU5Myw4ICYjNDM7NTkzLDcgQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3BhZ2VfaW8uY1xuQEAgLTE2MCw3ICYjNDM7MTYwLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XG4gXHRpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuLVx0c3dwX2VudHJ5X3QgZW50cnk7XG4mIzQzO1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2OCw4ICYjNDM7MTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuJiM0MztcdFx0ZW50cnkudmFsJiM0MzsmIzQzOztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Myw3ICYjNDM7MTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbiYjNDM7XHRzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7XG4gXHR1bnNpZ25lZCBpbnQgaTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG5AQCAtMTkxLDggJiM0MzsxOTEsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbiBcdFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuJiM0MztcdFx0ZW50cnkudmFsJiM0MzsmIzQzOztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIH1cbkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbiYjNDM7XHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW9cbiBcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxuIFx0ICovXG4gXHRyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7XG5AQCAtMjIwLDcgJiM0MzsyMjAsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdC8qXG4gXHQgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZFxuLVx0ICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXG4mIzQzO1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0X19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTtcbiYjNDM7XHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XG4gXHRyZXR1cm4gMDtcbiBvdXRfdW5sb2NrOlxuIFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTgsNyAmIzQzOzI5OCw5IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiB7XG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4tI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pXHRcdGRvIHsgfSB3aGlsZSAoMClcbiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX01FTUNHIFx1MDAyNlx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xuIFxuIHN0YXRpYyBtZW1wb29sX3QgKnNpb19wb29sO1xuQEAgLTM2Nyw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFxuQEAgLTQ5NywxMyAmIzQzOzQ5OSwxMyBAQCBzdGF0aWMgdm9pZCBzd2FwX3dyaXRlX2VuZChzdHJ1Y3Qgc3dhcF9pb2NiICpzaW8sIGJvb2wgZmFpbGVkKVxuIFx0aW50IHA7XG4gXG4gXHRmb3IgKHAgPSAwOyBwIFx1MDAzYyBzaW8tXHUwMDNlbnJfYnZlY3M7IHAmIzQzOyYjNDM7KSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzW3BdLmJ2X3BhZ2U7XG4mIzQzO1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcdTAwMjZzaW8tXHUwMDNlYnZlY3NbcF0pO1xuIFxuIFx0XHRpZiAoZmFpbGVkKSB7XG4tXHRcdFx0c2V0X3BhZ2VfZGlydHkocGFnZSk7XG4tXHRcdFx0Q2xlYXJQYWdlUmVjbGFpbShwYWdlKTtcbiYjNDM7XHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4mIzQzO1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFx0XHR9XG4tXHRcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcbiYjNDM7XHRcdGZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pO1xuIFx0fVxuIFx0bWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpO1xuIH1cbkBAIC01MTQsMTYgJiM0Mzs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbiYjNDM7XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1swXSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcbiBcdFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcbi1cdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXG4mIzQzO1x0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkXG4gXHRcdCAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuXG4gXHRcdCAqL1xuIFx0XHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXCYjMzQ7V3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cJiMzNDssXG4tXHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcbiYjNDM7XHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3Bvcyhmb2xpby1cdTAwM2Vzd2FwKSk7XG4gXHR9XG4gXG4gXHRzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7XG5AQCAtNTk2LDcgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuJiM0MztcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbiBcbiBcdGlmIChjdHgtXHUwMDNlc2lzLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcbiBcdFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBmZGRiYTdhODc1MDBhLi4wYjVkNTA3NzM5YmNiIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmhcbkBAIC0yNTgsNyAmIzQzOzI1OCw3IEBAIHZvaWQgc3dhcF9yZWFkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xuIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTg5LDcgJiM0MzsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcbiAvKlxuICAqIEEgYHN3YXAgZXh0ZW50JiMzOTsgaXMgYSBzaW1wbGUgdGhpbmcgd2hpY2ggbWFwcyBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgcGFnZXNcbiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpc1xuLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvXG4mIzQzOyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyAmIzQzOzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4tXHRfX3N3YXBfd3JpdGVwYWdlKFx1MDAyNmN0eCwgZm9saW8pO1xuJiM0MztcdF9fc3dhcF93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvKTtcbiBcdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4gXG4gb3V0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCmluZGV4IDdhODYzNTcyYWRjZTcuLmFlMmViYWVkNmQ0ZDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oCkBAIC01OTMsOCAmIzQzOzU5Myw3IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTCkKIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpCiAKIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqLwotUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTCkKLQlURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCiYjNDM7Rk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpCiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKQogCUZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jCmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9wYWdlX2lvLmMKQEAgLTE2MCw3ICYjNDM7MTYwLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pOwogCWludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE2OCw4ICYjNDM7MTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7CiYjNDM7CQllbnRyeS52YWwmIzQzOyYjNDM7OwogCX0KIAlzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTsKIApAQCAtMTgzLDcgJiM0MzsxODMsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pCiBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwotCXN3cF9lbnRyeV90IGVudHJ5OwomIzQzOwlzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLSZndDtzd2FwOwogCXVuc2lnbmVkIGludCBpOwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKQEAgLTE5MSw4ICYjNDM7MTkxLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAljaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pOwogCWZvciAoaSA9IDA7IGkgJmx0OyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkmIzQzOyYjNDM7KSB7Ci0JCWVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTsKIAkJX19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiB9CkBAIC0yMDksNyAmIzQzOzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCQlnb3RvIG91dF91bmxvY2s7CiAKIAkvKgotCSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlCiYjNDM7CSAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpbwogCSAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLgogCSAqLwogCXJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTsKQEAgLTIyMCw3ICYjNDM7MjIwLDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAKIAkvKgogCSAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkCi0JICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiYjNDM7CSAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXMKIAkgKiBhY3F1aXJlZCBpbnRlcm5hbGx5IGJ5IHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIuCiAJICovCiAJaWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkgewpAQCAtMjQ4LDcgJiM0MzsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAl9CiAJcmN1X3JlYWRfdW5sb2NrKCk7CiAKLQlfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7CiAJcmV0dXJuIDA7CiBvdXRfdW5sb2NrOgogCWZvbGlvX3VubG9jayhmb2xpbyk7CkBAIC0yNzcsNyAmIzQzOzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbykKIAlyZXR1cm4gY2FuX21lcmdlOwogfQogCi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzczsKIApAQCAtMjk4LDcgJiM0MzsyOTgsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiB7CiAJcmV0dXJuIHRydWU7CiB9Ci0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbykJCWRvIHsgfSB3aGlsZSAoMCkKJiM0MztzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzO30KICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgJmFtcDsmYW1wOyBDT05GSUdfQkxLX0NHUk9VUCAqLwogCiBzdGF0aWMgbWVtcG9vbF90ICpzaW9fcG9vbDsKQEAgLTM2Nyw3ICYjNDM7MzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydykKIAl9CiB9CiAKLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIHsKIAlWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pOwogCkBAIC00OTcsMTMgJiM0Mzs0OTksMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZCkKIAlpbnQgcDsKIAogCWZvciAocCA9IDA7IHAgJmx0OyBzaW8tJmd0O25yX2J2ZWNzOyBwJiM0MzsmIzQzOykgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbcF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1twXSk7CiAKIAkJaWYgKGZhaWxlZCkgewotCQkJc2V0X3BhZ2VfZGlydHkocGFnZSk7Ci0JCQlDbGVhclBhZ2VSZWNsYWltKHBhZ2UpOwomIzQzOwkJCWZvbGlvX21hcmtfZGlydHkoZm9saW8pOwomIzQzOwkJCWZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pOwogCQl9Ci0JCWVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTsKJiM0MzsJCWZvbGlvX2VuZF93cml0ZWJhY2soZm9saW8pOwogCX0KIAltZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7CiB9CkBAIC01MTQsMTYgJiM0Mzs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KQogCWJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby0mZ3Q7bGVuOwogCiAJaWYgKGZhaWxlZCkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby0mZ3Q7YnZlY3NbMF0uYnZfcGFnZTsKJiM0MzsJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKCZhbXA7c2lvLSZndDtidmVjc1swXSk7CiAKIAkJLyoKIAkJICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZQogCQkgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdAotCQkgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWQKJiM0MzsJCSAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWQKIAkJICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy4KIAkJICovCiAJCXByX2Vycl9yYXRlbGltaXRlZCgmIzM0O1dyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXG4mIzM0OywKLQkJCQkgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTsKJiM0MzsJCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tJmd0O3N3YXApKTsKIAl9CiAKIAlzd2FwX3dyaXRlX2VuZChzaW8sIGZhaWxlZCk7CkBAIC01OTYsNyAmIzQzOzU5OCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYmRldl9zdWJtaXRfd3JpdGUoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpCiAJCQlSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgPSBzaW8tJmd0O2xlbjsKIAliaW8tJmd0O2JpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKLQliaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKJiM0MzsJYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpOwogCiAJaWYgKGN0eC0mZ3Q7c2lzLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pIHsKIAkJc3VibWl0X2Jpb193YWl0KGJpbyk7CmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKaW5kZXggZmRkYmE3YTg3NTAwYS4uMGI1ZDUwNzczOWJjYiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMjU4LDcgJiM0MzsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiB2b2lkIHN3YXBfcmVhZF9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7CiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7Ci12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwomIzQzO3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIAogLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovCiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5OwpkaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmMKaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDQKLS0tIGEvbW0vc3dhcGZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jCkBAIC0yOTg5LDcgJiM0MzsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTsKIC8qCiAgKiBBIGBzd2FwIGV4dGVudCYjMzk7IGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzCiAgKiBvbnRvIGEgY29udGlndW91cyByYW5nZSBvZiBkaXNrIGJsb2Nrcy4gIEEgcmJ0cmVlIG9mIHN3YXAgZXh0ZW50cyBpcwotICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW8KJiM0MzsgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvCiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLgogICoKICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC4KZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jCmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjg4YTFhNzRmOTE4NTIgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMTA1MCw3ICYjNDM7MTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwogCiAJLyogc3RhcnQgd3JpdGViYWNrICovCi0JX19zd2FwX3dyaXRlcGFnZSgmYW1wO2N0eCwgZm9saW8pOwomIzQzOwlfX3N3YXBfd3JpdGVvdXQoJmFtcDtjdHgsIGZvbGlvKTsKIAlzd2FwX3dyaXRlX3N1Ym1pdCgmYW1wO2N0eCk7CiAKIG91dDoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2OAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEZvbGlvIENvbnZlcnNpb24gUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBjb252ZXJ0aW5nIGBwYWdlYCBzdHJ1Y3R1cmVzIHRvIGBmb2xpb2Agc3RydWN0dXJlcywgd2hpY2ggaXMgYSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LiBJIHNlZSB0aGUgY2hhbmdlcyBzcGFuIGFjcm9zcyBzZXZlcmFsIGtleSBmaWxlczogYG1tL3BhZ2VfaW8uY2AsIGBpbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaGAsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcGZpbGUuY2AsIGFuZCBgbW0venN3YXAuY2AuIFRoaXMgc3VnZ2VzdHMgYSB3aWRlc3ByZWFkIGltcGFjdC4KClNwZWNpZmljYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgdGhlIGNoYW5nZSBmcm9tIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgaXMgYSBkaXJlY3QgaW5kaWNhdGlvbiBvZiB0aGlzLiBUaGUgY29udmVyc2lvbiBmcm9tIHBhZ2UgZXF1aXZhbGVudHMgdG8gZm9saW8gaXMgaGFwcGVuaW5nIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIHRoZSByZW5hbWUgb2YgYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBldGMuIFRoZSB1c2Ugb2YgYGZvbGlvLSZndDtzd2FwYCBpbiB0aGUgbG9vcGluZywgd2hpY2ggaXMgcmVwbGFjaW5nIGluZGl2aWR1YWwgb3BlcmF0aW9ucyBmb3IgZWFjaCBgZm9saW9fcGFnZShmb2xpbywgaSlgLiBUaGUgcmVwbGFjZW1lbnQgb2YgZnVuY3Rpb25zIGxpa2UgYGZvbGlvX21hcmtfZGlydHlgLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGV0Yy4KCk5vdywgdGhlIHJlbmFtaW5nIG9mIGBfX3N3YXBfd3JpdGVwYWdlYCB0byBgX19zd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCwgYG1tL3N3YXAuaGAsIGFuZCBgbW0venN3YXAuY2AgaXMgc29tZXRoaW5nIHRvIHRha2Ugbm90ZSBvZi4gSXQgaW1wbGllcyBhIGNoYW5nZSBpbiB0aGUgYWJzdHJhY3Rpb24gb3IgdGhlIHdheSB3cml0ZW91dCBvcGVyYXRpb25zIGFyZSBoYW5kbGVkLgoKSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCBzd2FwcGluZyBsb2dpYywgc3Bhbm5pbmcgYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBpbXBhY3RzIHN3YXAgSS9PIHdyaXRlb3V0IGlzIGEgcmVkIGZsYWcuIFdyaXRlb3V0IGlzIGNyaXRpY2FsIGFuZCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgY2hhbmdlIHRoZXJlLCBlc3BlY2lhbGx5IGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBvbmUsIG5lZWRzIGRlZXAgc2NydXRpbnkuIFdlIGFyZSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZWNoYW5pc21zLCBgc3dhcF93cml0ZW91dGAsIGFuZCBgX19zd2FwX3dyaXRlb3V0YC4KCk5leHQgc3RlcHM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgYXJlIGludm9sdmVkIGhlcmUuIEkmIzM5O2xsIHNlYXJjaCBgbW0vcGFnZV9pby5jYCwgYG1tL0tjb25maWdgLCBhbmQgYG1tL01ha2VmaWxlYCB0byBpZGVudGlmeSBhbnkgcmVsZXZhbnQgS2NvbmZpZyBvcHRpb25zIG9yIGJ1aWxkIGRlcGVuZGVuY2llcy4gVGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYW5kIGhvdyB0byBlbnN1cmUgdGhlIGZ1enplciBjb3ZlcnMgYWxsIGNvZGUgcGF0aHMgYWZmZWN0ZWQgYnkgdGhpcyBmb2xpbyB0cmFuc2l0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfaW8ubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTc2PWVuZGlmXG5tbS9NYWtlZmlsZS03Ny1cbm1tL01ha2VmaWxlOjc4Om9iai0kKENPTkZJR19TV0FQKVx0JiM0Mzs9IHBhZ2VfaW8ubyBzd2FwX3N0YXRlLm8gc3dhcGZpbGUub1xubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVx0JiM0Mzs9IHpzd2FwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1OTE0CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogNjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXhhbWluaW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYnVpbGQgc2V0dXAsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBJIHNlZSB0aGF0IHRoZSBvYmplY3QgZmlsZXMgYHBhZ2VfaW8ub2AsIGBzd2FwX3N0YXRlLm9gLCBhbmQgYHN3YXBmaWxlLm9gIGFyZSBiZWluZyBpbmNsdWRlZCBpbiB0aGUgYnVpbGQsIGJ1dCBvbmx5IGlmIGBDT05GSUdfU1dBUGAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlOyB0aG9zZSBhcmUgdGhlIGNvcmUgY29tcG9uZW50cyBmb3IgaGFuZGxpbmcgc3dhcCBzcGFjZS4gQW5kIHRoZW4sIHRoZXJlJiMzOTtzIGB6c3dhcC5vYCDigJMgdGhhdCYjMzk7cyBvbmx5IGdldHRpbmcgY29tcGlsZWQgaWYgYENPTkZJR19aU1dBUGAgaXMgc2V0LiBOb3cgSSBuZWVkIHRvIHJlbWluZCBteXNlbGYgcHJlY2lzZWx5IHdoYXQgYENPTkZJR19TV0FQYCBhbmQgYENPTkZJR19aU1dBUGAgYWN0dWFsbHkgY29udHJvbC4gSXQmIzM5O3MgdGltZSB0byBkaXZlIGludG8gS2NvbmZpZyBhbmQgdGhlIG90aGVyIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0byBlbnN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb21wbGV0ZSBwaWN0dXJlIG9mIGhvdyB0aGUgc3dhcCBzeXN0ZW0gaXMgYmVpbmcgbWFuYWdlZC4gTWFraW5nIHN1cmUgdGhlc2UgZmxhZ3MgYXJlIHNldCBjb3JyZWN0bHkgaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGZ1bmN0aW9uYWxpdHksIHNvIGEgcXVpY2sgcmV2aWV3IGlzIGRlZmluaXRlbHkgd2FycmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYyNjgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIFN3YXAgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHN3YXBwaW5nLCBzcGVjaWZpY2FsbHkgYENPTkZJR19TV0FQYC4gVGhlIGZpcnN0IHBsYWNlIEkmIzM5O2QgbG9vayBpcyBpbiBgbW0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29udHJvbHMgZ292ZXJuaW5nIHN3YXAgYmVoYXZpb3IsIGl0cyBlbmFibGVtZW50LCBhbmQgcHJvYmFibHkgc29tZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgaWYgaXQmIzM5O3MgY29uZmlndXJhYmxlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gaWYgaXQmIzM5O3MgdGhlcmUsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IGl04oCZcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgYXR0YWNoZWQgdG8gaXQuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBzd2FwIHN1cHBvcnQgaXMgY3J1Y2lhbCBmb3IgYW55b25lIHdvcmtpbmcgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgbmV4dCBzdGVwIHdvdWxkIGJlIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGluZ3MgbGlrZSB0aGUgcGFnZSBjYWNoZSwgTlVNQSwgYW5kIGFueSBwb3RlbnRpYWwgdHJhZGUtb2ZmcyBiZXR3ZWVuIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAxMDpcdFx0Ym9vbFxuICAxMTpcdFxuICAxMjpcdG1lbnVjb25maWcgU1dBUFxuICAxMzpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcJiMzNDtcbiAgMTQ6XHRcdGRlcGVuZHMgb24gTU1VIFx1MDAyNlx1MDAyNiBCTE9DSyBcdTAwMjZcdTAwMjYgIUFSQ0hfTk9fU1dBUFxuICAxNTpcdFx0ZGVmYXVsdCB5XG4gIDE2Olx0XHRoZWxwXG4gIDE3Olx0XHQgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gY2hvb3NlIHdoZXRoZXIgeW91IHdhbnQgdG8gaGF2ZSBzdXBwb3J0XG4gIDE4Olx0XHQgIGZvciBzbyBjYWxsZWQgc3dhcCBkZXZpY2VzIG9yIHN3YXAgZmlsZXMgaW4geW91ciBrZXJuZWwgdGhhdCBhcmVcbiAgMTk6XHRcdCAgdXNlZCB0byBwcm92aWRlIG1vcmUgdmlydHVhbCBtZW1vcnkgdGhhbiB0aGUgYWN0dWFsIFJBTSBwcmVzZW50XG4gIDIwOlx0XHQgIGluIHlvdXIgY29tcHV0ZXIuICBJZiB1bnN1cmUgc2F5IFkuXG4gIDIxOlx0XG4gIDIyOlx0Y29uZmlnIFpTV0FQXG4gIDIzOlx0XHRib29sIFwmIzM0O0NvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXNcJiMzNDtcbiAgMjQ6XHRcdGRlcGVuZHMgb24gU1dBUFxuICAyNTpcdFx0c2VsZWN0IENSWVBUT1xuICAyNjpcdFx0c2VsZWN0IFpTTUFMTE9DXG4gIDI3Olx0XHRoZWxwXG4gIDI4Olx0XHQgIEEgbGlnaHR3ZWlnaHQgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcy4gIEl0IHRha2VzXG4gIDI5Olx0XHQgIHBhZ2VzIHRoYXQgYXJlIGluIHRoZSBwcm9jZXNzIG9mIGJlaW5nIHN3YXBwZWQgb3V0IGFuZCBhdHRlbXB0cyB0b1xuICAzMDpcdFx0ICBjb21wcmVzcyB0aGVtIGludG8gYSBkeW5hbWljYWxseSBhbGxvY2F0ZWQgUkFNLWJhc2VkIG1lbW9yeSBwb29sLlxuICAzMTpcdFx0ICBUaGlzIGNhbiByZXN1bHQgaW4gYSBzaWduaWZpY2FudCBJL08gcmVkdWN0aW9uIG9uIHN3YXAgZGV2aWNlIGFuZCxcbiAgMzI6XHRcdCAgaW4gdGhlIGNhc2Ugd2hlcmUgZGVjb21wcmVzc2luZyBmcm9tIFJBTSBpcyBmYXN0ZXIgdGhhbiBzd2FwIGRldmljZVxuICAzMzpcdFx0ICByZWFkcywgY2FuIGFsc28gaW1wcm92ZSB3b3JrbG9hZCBwZXJmb3JtYW5jZS5cbiAgMzQ6XHRcbiAgMzU6XHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxuICAzNjpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgYnkgZGVmYXVsdFwmIzM0O1xuICAzNzpcdFx0ZGVwZW5kcyBvbiBaU1dBUFxuICAzODpcdFx0aGVscFxuICAzOTpcdFx0ICBJZiBzZWxlY3RlZCwgdGhlIGNvbXByZXNzZWQgY2FjaGUgZm9yIHN3YXAgcGFnZXMgd2lsbCBiZSBlbmFibGVkXG4gIDQwOlx0XHQgIGF0IGJvb3QsIG90aGVyd2lzZSBpdCB3aWxsIGJlIGRpc2FibGVkLlxuICA0MTpcdFxuICA0MjpcdFx0ICBUaGUgc2VsZWN0aW9uIG1hZGUgaGVyZSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB1c2luZyB0aGUga2VybmVsXG4gIDQzOlx0XHQgIGNvbW1hbmQgbGluZSAmIzM5O3pzd2FwLmVuYWJsZWQ9JiMzOTsgb3B0aW9uLlxuICA0NDpcdFxuICA0NTpcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXG4gIDQ2Olx0XHRib29sIFwmIzM0O1NocmluayB0aGUgenN3YXAgcG9vbCBvbiBtZW1vcnkgcHJlc3N1cmVcJiMzNDtcbiAgNDc6XHRcdGRlcGVuZHMgb24gWlNXQVBcbiAgNDg6XHRcdGRlZmF1bHQgblxuICA0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwODIKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczoKCioqSW52ZXN0aWdhdGluZyBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgYW5kIHVzYWdlIG9mIHRoZXNlIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAgZnVuY3Rpb25zLiBUaGUgZmFjdCB0aGF0IHRoZXJlJiMzOTtzIGEgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBwb3RlbnRpYWxseSBpbnRlcm5hbCwgb3BlcmF0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSBhbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBpZGVudGlmeSAqZXZlcnkqIGluc3RhbmNlIHdoZXJlIHRoZXkmIzM5O3JlIGludm9rZWQuIFRoaXMgaW5jbHVkZXMgaW5kaXJlY3QgY2FsbHMgdGhyb3VnaCBvdGhlciBmdW5jdGlvbnMsIGFuZCBjYWxscyBmcm9tIGRpZmZlcmVudCBjb21wb25lbnRzLCBiZWNhdXNlIEkgbmVlZCB0aGUgY29tcGxldGUgcGljdHVyZS4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiB3aXRoICYjMzQ7c3dhcCYjMzQ7IGluIGl0cyBuYW1lLiBJdCBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVzIG1vdmluZyBkYXRhIHJlbGF0ZWQgdG8gc3dhcHBpbmcsIHdoaWNoIGRpcmVjdGx5IGNvbmNlcm5zIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEtub3dpbmcgdGhpcywgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBjYWxscyBwcmltYXJpbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcy4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSB0ZWxscyBtZSBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIGNhbGxzIHdpdGhpbiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gaW4gc2VjdGlvbnMgZGVhbGluZyB3aXRoIGRldmljZSBkcml2ZXJzIGlmIHRoZXJlJiMzOTtzIGFuIHVudXN1YWwgSS9PIHBhdHRlcm4uIFRoZSBjb250ZXh0IG9mIHRoZWlyIHVzZSBpcyBjcnVjaWFsLiBBcmUgdGhlc2UgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0cywgb3Igc29tZSBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBldmVudD8gSSYjMzk7bGwgcHJvYmFibHkgYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhpcyBmcm9tIHRoZSBjYWxsIHNpdGVzIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZS4gVGhpcyB3aWxsIHNoZWQgbGlnaHQgb24gdGhlIG1lY2hhbmljcyBvZiB0aGUgc3dhcCBtZWNoYW5pc20sIGFuZCBpdHMgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19zd2FwX3dyaXRlb3V0fHN3YXBfd3JpdGVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdlX2lvLmM9MTgzPXN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbm1tL3BhZ2VfaW8uYy0yMDMtICovXG5tbS9wYWdlX2lvLmM6MjA0OmludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTIwNS17XG4tLVxubW0vcGFnZV9pby5jLTI1MC1cbm1tL3BhZ2VfaW8uYzoyNTE6XHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XG5tbS9wYWdlX2lvLmMtMjUyLVx0cmV0dXJuIDA7XG4tLVxubW0vcGFnZV9pby5jPTMzND1zdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxuLS1cbm1tL3BhZ2VfaW8uYy0zNzEtXG5tbS9wYWdlX2lvLmM6MzcyOnZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vcGFnZV9pby5jLTM3My17XG4tLVxubW0vc2htZW0uYz0xNjA3PWludCBzaG1lbV93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zaG1lbS5jLTE3MTgtXHRcdEJVR19PTihmb2xpb19tYXBwZWQoZm9saW8pKTtcbm1tL3NobWVtLmM6MTcxOTpcdFx0ZXJyb3IgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xubW0vc2htZW0uYy0xNzIwLVx0XHRpZiAoZXJyb3IgIT0gQU9QX1dSSVRFUEFHRV9BQ1RJVkFURSkge1xuLS1cbm1tL3N3YXAuaD0yNTk9dm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG5tbS9zd2FwLmg6MjYwOmludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbm1tL3N3YXAuaDoyNjE6dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xubW0vc3dhcC5oLTI2Mi1cbi0tXG5tbS9zd2FwLmg9NDIwPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9zd2FwLmgtNDI0LVxubW0vc3dhcC5oOjQyNTpzdGF0aWMgaW5saW5lIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxubW0vc3dhcC5oLTQyNi17XG4tLVxubW0vc3dhcGZpbGUuYz0yOTg3PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7XG4tLVxubW0vc3dhcGZpbGUuYy0yOTkxLSAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG5tbS9zd2FwZmlsZS5jOjI5OTI6ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xubW0vc3dhcGZpbGUuYy0yOTkzLSAqIHRpbWUgZm9yIGxvY2F0aW5nIHdoZXJlIG9uIGRpc2sgYSBwYWdlIGJlbG9uZ3MuXG4tLVxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vdm1zY2FuLmMtNjU5LVx0ZWxzZVxubW0vdm1zY2FuLmM6NjYwOlx0XHRyZXMgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xubW0vdm1zY2FuLmMtNjYxLVxuLS1cbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuLS1cbm1tL3pzd2FwLmMtODgwLVx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XG5tbS96c3dhcC5jOjg4MTpcdCAqIG9ubHkgYWRkcyBtZXRhZGF0YSBvdmVyaGVhZC4gIHN3YXBfd3JpdGVvdXQoKSB3aWxsIHB1dCB0aGUgcGFnZSBiYWNrXG5tbS96c3dhcC5jLTg4Mi1cdCAqIHRvIHRoZSBhY3RpdmUgTFJVIGxpc3QgaW4gdGhlIGNhc2UuXG4tLVxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbi0tXG5tbS96c3dhcC5jLTEwNTItXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbm1tL3pzd2FwLmM6MTA1MzpcdF9fc3dhcF93cml0ZW91dChcdTAwMjZjdHgsIGZvbGlvKTtcbm1tL3pzd2FwLmMtMTA1NC1cdHN3YXBfd3JpdGVfc3VibWl0KFx1MDAyNmN0eCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MjEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIFN3YXAgV3JpdGVvdXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIGFuZCBpZGVudGlmeSBnb29kIGNhbmRpZGF0ZXMgZm9yIGZ1enppbmcuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGljaCBmdW5jdGlvbnMgYXJlIGludm9sdmVkIGFuZCB0aGVpciBzY29wZS4gSSYjMzk7bSBmb2N1c2luZyBvbiBzd2FwIHdyaXRlb3V0IGZ1bmN0aW9ucywgc28gSSYjMzk7bSBjaGVja2luZyBpZiBgc3dhcF93cml0ZW91dGAsIGBfX3N3YXBfd3JpdGVvdXRgLCBhbmQgcmVsYXRlZCBmdW5jdGlvbnMgYXJlIHN0YXRpYyBvciBnbG9iYWwuICBMb29rcyBsaWtlIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAgaW4gYG1tL3BhZ2VfaW8uY2AgYXJlIG5vbi1zdGF0aWMsIHdoaWNoIG1ha2VzIHRoZW0gcHJpbWUgY2FuZGlkYXRlcy4gVGhlIG90aGVyIGZ1bmN0aW9ucywgc3VjaCBhcyBgc3dhcF93cml0ZV9lbmRgLCBgc3dhcF9mc193cml0ZV9jb21wbGV0ZWAsIGV0Yy4sIGFyZSBzdGF0aWMsIHNvIEkgd2lsbCBsaWtlbHkgZXhjbHVkZSB0aGVzZS4gQW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgIGlzIHN0YXRpYyBpbiBgbW0venN3YXAuY2AuCgpOb3csIGxldCYjMzk7cyBnbyBvdmVyIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhhdCBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyBpbiBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgIHJlbGF0ZWQgdG8gYHJlY2xhaW1gIGZsYWdzLCBhbmQgaW4gYG1tL3BhZ2VfaW8uY2AsIHdpdGggYHN3YXBfemVyb21hcF9mb2xpb19zZXRgLCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCwgYW5kIHRoZSBgc3dhcF93cml0ZW91dGAgY2FsbHMgdG8gYF9fc3dhcF93cml0ZW91dGAuICBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZWAgaXMgbm93IGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AsIGFuZCBgX19zd2FwX3dyaXRlcGFnZWAgYmVjb21lcyBgX19zd2FwX3dyaXRlb3V0YC4gIFRoZXJlIGFyZSBhbHNvIGNoYW5nZXMgdG8gYG1tL3N3YXAuaGAgd2l0aCB0aGUgZGVjbGFyYXRpb24gb2YgYF9fc3dhcF93cml0ZW91dGAsIGBtbS9zd2FwZmlsZS5jYCB3aXRoIGEgY29tbWVudCBjaGFuZ2UsIGFuZCBmaW5hbGx5IGBtbS96c3dhcC5jYCBjYWxsaW5nIGBfX3N3YXBfd3JpdGVvdXRgIGluIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlc2UgdHdvIGZ1bmN0aW9ucywgYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YCwgYXJlIHRoZSBtYWluIGZvY3VzIG9mIHRoaXMgcGF0Y2guCgpBcmUgdGhlc2UgaG90IHBhdGhzPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHN3YXAgYW5kIG1lbW9yeSByZWNsYWltLiBCdXQgdGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7cmUgcmVzcG9uc2libGUgZm9yIHdyaXRpbmcgb3V0IGFub255bW91cyBwYWdlcy9mb2xpb3Mgb3IgenN3YXAgd3JpdGViYWNrIGVudHJpZXMuIFRoZXkgYXJlIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IHRyaXZpYWwgaW5saW5lIGhlbHBlcnMuICBUaGlzIG1ha2VzIHRoZW0gZ29vZCAmIzM0O2ZvY3VzIHN5bWJvbHMmIzM0Oy4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBuZWVkIGBDT05GSUdfU1dBUGAgYW5kIGBDT05GSUdfWlNXQVBgIGZvciB0aGUgWnN3YXAgcGF0aC4gQWxzbywgYENPTkZJR19CTEtfQ0dST1VQYCBhbmQgYENPTkZJR19NRU1DR2AgYXJlIHJlbGV2YW50LCBnaXZlbiB0aGUgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvYCBjYWxsLgoKT2theSwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIHBhdGNoIGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgaW1wYWN0IHdvcnRoIGZ1enppbmcuIFllcywgYWJzb2x1dGVseS4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IHN3YXAgd3JpdGVvdXQgd29ya3Mgd2l0aCBmb2xpb3MgaW5zdGVhZCBvZiBpbmRpdmlkdWFsIHBhZ2VzLCBpbmNsdWRpbmcgdGhlIGBmb2xpby0mZ3Q7c3dhcGAgY2FsY3VsYXRpb24gYW5kIHRoZSBgZW50cnkudmFsJiM0MzsmIzQzO2AgbG9naWMuIEl0IHVzZXMgYGJ2ZWNfZm9saW9gLCBhbmQgbW9kaWZpZXMgZm9saW8gZGlydHkvcmVjbGFpbSBzdGF0ZXMgb24gZXJyb3IuIFRoaXMgaXMgY29yZSBzd2FwIGZ1bmN0aW9uYWxpdHksIHNvIGZ1enppbmcgaXMganVzdGlmaWVkLgoKTGV0IG1lIHZlcmlmeSB0aG9zZSBjb25maWcgbmFtZXM6IFNXQVAsIFpTV0FQLCBNRU1DRywgYW5kIEJMS19DR1JPVVAuCgpTbywgSSYjMzk7bSBnb2luZyB3aXRoOgoKKiAgICoqRm9jdXMgU3ltYm9scyoqOiBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgCiogICAqKkVuYWJsZSBDb25maWdzKio6IFNXQVAsIFpTV0FQLCBNRU1DRywgQkxLXF9DR1JPVVAKCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IHNjYW4gdGhlIGJlZ2lubmluZyBvZiBgbW0vcGFnZV9pby5jYCAobGluZXMgMS0xMDApIHRvIGRvdWJsZS1jaGVjayB0aGF0IEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgdGhpbmsgdGhhdCYjMzk7cyBpdCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9wYWdlX2lvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdC8qXG4gICAzOlx0ICogIGxpbnV4L21tL3BhZ2VfaW8uY1xuICAgNDpcdCAqXG4gICA1Olx0ICogIENvcHlyaWdodCAoQykgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAgTGludXMgVG9ydmFsZHNcbiAgIDY6XHQgKlxuICAgNzpcdCAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBcbiAgIDg6XHQgKiAgQXN5bmNocm9ub3VzIHN3YXBwaW5nIGFkZGVkIDMwLjEyLjk1LiBTdGVwaGVuIFR3ZWVkaWVcbiAgIDk6XHQgKiAgUmVtb3ZlZCByYWNlIGluIGFzeW5jIHN3YXBwaW5nLiAxNC40LjE5OTYuIEJydW5vIEhhaWJsZVxuICAxMDpcdCAqICBBZGQgc3dhcCBvZiBzaGFyZWQgcGFnZXMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4gMjAuMi4xOTk4LiBTdGVwaGVuIFR3ZWVkaWVcbiAgMTE6XHQgKiAgQWx3YXlzIHVzZSBicndfcGFnZSwgbGlmZSBiZWNvbWVzIHNpbXBsZXIuIDEyIE1heSAxOTk4IEVyaWMgQmllZGVybWFuXG4gIDEyOlx0ICovXG4gIDEzOlx0XG4gIDE0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbF9zdGF0LmhcdTAwM2VcbiAgMTY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9nZnAuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICAxODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Jpby5oXHUwMDNlXG4gIDIwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAgMjI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ibGtkZXYuaFx1MDAzZVxuICAyMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BzaS5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvdWlvLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheWFjY3QuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3pzd2FwLmhcdTAwM2VcbiAgMjg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zd2FwX29wcy5oXHUwMDNlXG4gIDI5Olx0I2luY2x1ZGUgXCYjMzQ7c3dhcC5oXCYjMzQ7XG4gIDMwOlx0I2luY2x1ZGUgXCYjMzQ7c3dhcF90YWJsZS5oXCYjMzQ7XG4gIDMxOlx0XG4gIDMyOlx0aW50IGdlbmVyaWNfc3dhcGZpbGVfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcbiAgMzM6XHRcdFx0XHRcdHN0cnVjdCBmaWxlICpzd2FwX2ZpbGUsXG4gIDM0Olx0XHRcdFx0XHRzZWN0b3JfdCAqc3BhbilcbiAgMzU6XHR7XG4gIDM2Olx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IHN3YXBfZmlsZS1cdTAwM2VmX21hcHBpbmc7XG4gIDM3Olx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cdTAwM2Vob3N0O1xuICAzODpcdFx0dW5zaWduZWQgYmxvY2tzX3Blcl9wYWdlO1xuICAzOTpcdFx0dW5zaWduZWQgbG9uZyBwYWdlX25vO1xuICA0MDpcdFx0dW5zaWduZWQgYmxrYml0cztcbiAgNDE6XHRcdHNlY3Rvcl90IHByb2JlX2Jsb2NrO1xuICA0MjpcdFx0c2VjdG9yX3QgbGFzdF9ibG9jaztcbiAgNDM6XHRcdHNlY3Rvcl90IGxvd2VzdF9ibG9jayA9IC0xO1xuICA0NDpcdFx0c2VjdG9yX3QgaGlnaGVzdF9ibG9jayA9IDA7XG4gIDQ1Olx0XHRpbnQgbnJfZXh0ZW50cyA9IDA7XG4gIDQ2Olx0XHRpbnQgcmV0O1xuICA0NzpcdFxuICA0ODpcdFx0YmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiAgNDk6XHRcdGJsb2Nrc19wZXJfcGFnZSA9IFBBR0VfU0laRSBcdTAwM2VcdTAwM2UgYmxrYml0cztcbiAgNTA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMjcKCQkJCQkJCW91dHB1dDogMTI5CgkJCQkJCQl0aG91Z2h0czogOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBzdW1tYXJpemUgbXkgdGhvdWdodCBwcm9jZXNzLiBIZXJlIHdlIGdvOgoKKipUaGlua2luZyBUaHJvdWdoIGEgRnVuY3Rpb24gTmFtZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIG5hbWUgdGhpcyBwaWVjZSBvZiBjb2RlIOKAkyBsZXQmIzM5O3MgY2FsbCBpdCBhIGZ1bmN0aW9uIGZvciBub3cg4oCTIHRoYXQgd2lsbCBoYW5kbGXigKYgKnRoZSByZXN1bHRzKi4gSG1tLCBidXQgJiMzNDtyZXN1bHRzJiMzNDsgaXMgdG9vIGdlbmVyaWMsIGlzbiYjMzk7dCBpdD8gSXQgY291bGQgYmUgYW55dGhpbmcuIEkgbmVlZCBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgKmFjdGlvbiogb2YgaGFuZGxpbmcsIG5vdCBqdXN0IHRoZSBkYXRhIGl0c2VsZi4KCkkgY29uc2lkZXJlZCBhIGZldyBvcHRpb25zLCBsaWtlICYjMzQ7cHJvY2Vzc19yZXN1bHRzJiMzNDsgb3IgJiMzNDtoYW5kbGVfcmVzdWx0cywmIzM0OyBidXQgdGhvc2UgZmVlbCBhIGxpdHRsZS4uLmNsdW5reS4gVGhleSYjMzk7cmUgZmluZSwgYnV0IEkmIzM5O20gYWltaW5nIGZvciBzb21ldGhpbmcgbW9yZSBjb25jaXNlLCBtb3JlIGRpcmVjdC4gSSB3YW50IGl0IHRvIGJlIGltbWVkaWF0ZWx5IGNsZWFyIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuCgpUaGVuIGl0IGhpdCBtZTogSSYjMzk7bSBub3QganVzdCAqcHJvY2Vzc2luZyogb3IgKmhhbmRsaW5nKiB0aGUgcmVzdWx0cywgSSYjMzk7bSBlZmZlY3RpdmVseSAqc2V0dGluZyogdGhlbSwgcmlnaHQ/IEkmIzM5O20gZXN0YWJsaXNoaW5nIHRoZSBmaW5hbCBzdGF0ZSwgdGhlIG91dHB1dC4gVGhlcmVmb3JlLCBuYW1pbmcgaXQgYHNldC1yZXN1bHRzYCBmZWVscyBtb3JlIGFwcHJvcHJpYXRlLiBJdCYjMzk7cyBhIGNsZWFyLCBhY3RpdmUgdmVyYiwgZm9sbG93ZWQgYnkgdGhlIG5vdW4gaXQgYWZmZWN0cy4gSXQmIzM5O3Mgc2hvcnQsIG1lbW9yYWJsZSwgYW5kIGhvcGVmdWxseSwgaW5zdGFudGx5IHVuZGVyc3RhbmRhYmxlIHRvIGFueW9uZSByZWFkaW5nIHRoZSBjb2RlLiBJIHRoaW5rIEkmIzM5O2xsIGdvIHdpdGggYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OywKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7QkxLX0NHUk9VUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N3YXBfd3JpdGVvdXQmIzM0OywKICAgICYjMzQ7X19zd2FwX3dyaXRlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHN3YXAgd3JpdGVvdXQgcGF0aHMgZnJvbSBvcGVyYXRpbmcgb24gc3RydWN0IHBhZ2UgdG8gc3RydWN0IGZvbGlvLCBpbmNsdWRpbmcgZm9saW8tbGV2ZWwgc3dhcCBlbnRyeSBjYWxjdWxhdGlvbiwgY29tcGxldGlvbiBlcnJvciBoYW5kbGluZywgYW5kIGhlbHBlciBmdW5jdGlvbnMgaW4gcGFnZV9pby5jIGFuZCB6c3dhcC5jLiBUaGlzIG1vZGlmaWVzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgbG9naWMsIHdoaWNoIGlzIGZ1bmN0aW9uYWwgYW5kIHJlYWNoYWJsZSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI5IDE5OjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjkgMTk6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVx1MDAzZXN3YXBgLlxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxuXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjgxMWE4ZWM4MGRlYTUwZmYyYTBiNDM5YzA3NDNmN2JhMmZiODdhZgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgQXVnIDI5IDE5OjI3OjQ5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmggYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAppbmRleCA3YTg2MzU3MmFkY2U3Li5hZTJlYmFlZDZkNGQ5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaApAQCAtNTkzLDggJiM0Mzs1OTMsNyBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpCiBGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKQogCiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi8KLVBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpCi0JVEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKQomIzQzO0ZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKQogRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSkKIAlGT0xJT19URVNUX0NMRUFSX0ZMQUcocmVhZGFoZWFkLCBGT0xJT19IRUFEX1BBR0UpCiAKZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uYwppbmRleCA4ODk2MjU3MWNiOTMxLi4xZGE0ZmY0ODRmMDk3IDEwMDY0NAotLS0gYS9tbS9wYWdlX2lvLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcGFnZV9pby5jCkBAIC0xNjAsNyAmIzQzOzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAlzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTsKIAlpbnQgbnJfcGFnZXMgPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CkBAIC0xNjgsOCAmIzQzOzE2OCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbykKIAogCWNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSYjNDM7JiM0MzspIHsKLQkJZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpOwogCQlfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpOwomIzQzOwkJZW50cnkudmFsJiM0MzsmIzQzOzsKIAl9CiAJc3dhcF9jbHVzdGVyX3VubG9jayhjaSk7CiAKQEAgLTE4Myw3ICYjNDM7MTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKQogc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKLQlzd3BfZW50cnlfdCBlbnRyeTsKJiM0MzsJc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCVZNX1dBUk5fT05fT05DRV9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7CkBAIC0xOTEsOCAmIzQzOzE5MSw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJY2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTsKIAlmb3IgKGkgPSAwOyBpICZsdDsgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpJiM0MzsmIzQzOykgewotCQllbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7CiAJCV9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTsKJiM0MzsJCWVudHJ5LnZhbCYjNDM7JiM0Mzs7CiAJfQogCXN3YXBfY2x1c3Rlcl91bmxvY2soY2kpOwogfQpAQCAtMjA5LDcgJiM0MzsyMDksNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbykKIAkJZ290byBvdXRfdW5sb2NrOwogCiAJLyoKLQkgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgcGFnZQomIzQzOwkgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW8KIAkgKiBjb250ZW50cywgZS5nLiBtZW1vcnkgdGFncy4KIAkgKi8KIAlyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7CkBAIC0yMjAsNyAmIzQzOzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCiAJLyoKIAkgKiBVc2UgdGhlIHN3YXAgdGFibGUgemVybyBtYXJrIHRvIGF2b2lkIGRvaW5nIElPIGZvciB6ZXJvLWZpbGxlZAotCSAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpcwomIzQzOwkgKiBmb2xpb3MuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzCiAJICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLgogCSAqLwogCWlmIChpc19mb2xpb196ZXJvX2ZpbGxlZChmb2xpbykpIHsKQEAgLTI0OCw3ICYjNDM7MjQ4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAJfQogCXJjdV9yZWFkX3VubG9jaygpOwogCi0JX19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTsKJiM0MzsJX19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pOwogCXJldHVybiAwOwogb3V0X3VubG9jazoKIAlmb2xpb191bmxvY2soZm9saW8pOwpAQCAtMjc3LDcgJiM0MzsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pCiAJcmV0dXJuIGNhbl9tZXJnZTsKIH0KIAotc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQogewogCXN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7CiAKQEAgLTI5OCw3ICYjNDM7Mjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKQogewogCXJldHVybiB0cnVlOwogfQotI2RlZmluZSBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgZm9saW8pCQlkbyB7IH0gd2hpbGUgKDApCiYjNDM7c3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKQomIzQzO3sKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX01FTUNHICZhbXA7JmFtcDsgQ09ORklHX0JMS19DR1JPVVAgKi8KIAogc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7CkBAIC0zNjcsNyAmIzQzOzM2OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpCiAJfQogfQogCi12b2lkIF9fc3dhcF93cml0ZXBhZ2Uoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pCiB7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTsKIApAQCAtNDk3LDEzICYjNDM7NDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpCiAJaW50IHA7CiAKIAlmb3IgKHAgPSAwOyBwICZsdDsgc2lvLSZndDtucl9idmVjczsgcCYjNDM7JiM0MzspIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzW3BdLmJ2X3BhZ2U7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbygmYW1wO3Npby0mZ3Q7YnZlY3NbcF0pOwogCiAJCWlmIChmYWlsZWQpIHsKLQkJCXNldF9wYWdlX2RpcnR5KHBhZ2UpOwotCQkJQ2xlYXJQYWdlUmVjbGFpbShwYWdlKTsKJiM0MzsJCQlmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTsKJiM0MzsJCQlmb2xpb19jbGVhcl9yZWNsYWltKGZvbGlvKTsKIAkJfQotCQllbmRfcGFnZV93cml0ZWJhY2socGFnZSk7CiYjNDM7CQlmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTsKIAl9CiAJbWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpOwogfQpAQCAtNTE0LDE2ICYjNDM7NTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldCkKIAlib29sIGZhaWxlZCA9IHJldCAhPSBzaW8tJmd0O2xlbjsKIAogCWlmIChmYWlsZWQpIHsKLQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tJmd0O2J2ZWNzWzBdLmJ2X3BhZ2U7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbygmYW1wO3Npby0mZ3Q7YnZlY3NbMF0pOwogCiAJCS8qCiAJCSAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmUKIAkJICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXQKLQkJICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkCiYjNDM7CQkgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkCiAJCSAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuCiAJCSAqLwogCQlwcl9lcnJfcmF0ZWxpbWl0ZWQoJiMzNDtXcml0ZSBlcnJvciAlbGQgb24gZGlvIHN3YXBmaWxlICglbGx1KVxuJiMzNDssCi0JCQkJICAgcmV0LCBzd2FwX2Rldl9wb3MocGFnZV9zd2FwX2VudHJ5KHBhZ2UpKSk7CiYjNDM7CQkJCSAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLSZndDtzd2FwKSk7CiAJfQogCiAJc3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpOwpAQCAtNTk2LDcgJiM0Mzs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KQogCQkJUkVRX09QX1dSSVRFIHwgUkVRX1NXQVApOwogCWJpby0mZ3Q7YmlfaXRlci5iaV9zaXplID0gc2lvLSZndDtsZW47CiAJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IHN3YXBfZm9saW9fc2VjdG9yKGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7Ci0JYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7CiYjNDM7CWJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTsKIAogCWlmIChjdHgtJmd0O3Npcy0mZ3Q7ZmxhZ3MgJmFtcDsgU1dQX1NZTkNIUk9OT1VTX0lPKSB7CiAJCXN1Ym1pdF9iaW9fd2FpdChiaW8pOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0Ci0tLSBhL21tL3N3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwLmgKQEAgLTI1OCw3ICYjNDM7MjU4LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwogdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTsKIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpOwogaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pOwotdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKJiM0Mzt2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7CiAKIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqLwogZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTsKZGlmZiAtLWdpdCBhL21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0Ci0tLSBhL21tL3N3YXBmaWxlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcGZpbGUuYwpAQCAtMjk4OSw3ICYjNDM7Mjk4OSw3IEBAIEVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7CiAvKgogICogQSBgc3dhcCBleHRlbnQmIzM5OyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlcwogICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXMKLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvCiYjNDM7ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpbwogICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy4KICAqCiAgKiBJZiB0aGUgc3dhcGZpbGUgaXMgYW4gU19JU0JMSyBibG9jayBkZXZpY2UsIGEgc2luZ2xlIGV4dGVudCBpcyBpbnN0YWxsZWQuCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NAotLS0gYS9tbS96c3dhcC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3pzd2FwLmMKQEAgLTEwNTAsNyAmIzQzOzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCWZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwotCV9fc3dhcF93cml0ZXBhZ2UoJmFtcDtjdHgsIGZvbGlvKTsKJiM0MzsJX19zd2FwX3dyaXRlb3V0KCZhbXA7Y3R4LCBmb2xpbyk7CiAJc3dhcF93cml0ZV9zdWJtaXQoJmFtcDtjdHgpOwogCiBvdXQ6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzY1CgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEyNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQW5hbHlzaXMgb2YgU3dhcCBGb2xpbyBDb252ZXJzaW9uIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZSByZXF1ZXN0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IGl0IGRvZXNuJiMzOTt0LCBidXQgbGV0JiMzOTtzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBhY3R1YWxseSAqZG9pbmcqLiBCYXNlZCBvbiB0aGUgdGl0bGUgYW5kIGRpZmYsIGl0IGFwcGVhcnMgdG8gYmUgYSBmb2xpbyBjb252ZXJzaW9uIGFuZCBjbGVhbnVwIHdpdGhpbiB0aGUgc3dhcCBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgaXQgaW52b2x2ZXMgdGhlIGZvbGxvd2luZzoKCiogICBSZXBsYWNpbmcgYFBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpYCBhbmQgcmVsYXRlZCBtYWNyb3Mgd2l0aCBgRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpYCB3aGljaCBpcyBhIGNvbW1vbiBjb252ZXJzaW9uIGZyb20gcGFnZSB0byBmb2xpbyBmbGFnIG1hbmFnZW1lbnQuCiogICBVcGRhdGluZyBgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldGAgYW5kIGBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXJgIHRvIHVzZSBgZm9saW8tJmd0O3N3YXBgIGluc3RlYWQgb2YgZGlyZWN0bHkgYWNjZXNzaW5nIHRoZSBwYWdlJiMzOTtzIHN3YXAgZW50cnkuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjb252ZXJzaW9uL2NsZWFudXAuCiogICBSZW5hbWluZyBgX19zd2FwX3dyaXRlcGFnZWAgdG8gYF9fc3dhcF93cml0ZW91dGAgYW5kIHVwZGF0aW5nIHJlbGV2YW50IGNhbGxzIGFuZCBjb21tZW50cy4gQWxzbyByZW5hbWluZyBhIHJlbGF0ZWQgYGJpb19hc3NvY2lhdGVgIGZ1bmN0aW9uLgoqICAgQ29udmVydGluZyBzZXZlcmFsIHBhZ2UtYmFzZWQgZnVuY3Rpb25zIChlLmcuIGBzd2FwX3dyaXRlX2VuZGAsIGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYCkgdG8gdXNlIGZvbGlvLWJhc2VkIGFsdGVybmF0aXZlcyB3aXRoIGZ1bmN0aW9ucyBsaWtlIGBidmVjX2ZvbGlvYCwgYGZvbGlvX21hcmtfZGlydHlgLCBgZm9saW9fY2xlYXJfcmVjbGFpbWAsIGFuZCBgZm9saW9fZW5kX3dyaXRlYmFja2AuCgpFc3NlbnRpYWxseSwgaXQmIzM5O3MgYSByZWZhY3RvcmluZyB0byBtb2Rlcm5pemUgdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGhhcyBiZWVuIGRvbmUgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGFzdC4KCk5vdywgZm9yIHRoZSBLTVNBTiBhc3Nlc3NtZW50LiBLTVNBTiBmb2N1c2VzIG9uIGRldGVjdGluZyByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlciBzcGFjZS4gRG9lcyB0aGlzIHBhdGNoIGludHJvZHVjZSBvciBtb2RpZnkgYW55IG9mIHRoZXNlIGFyZWFzPyBJIG5lZWQgdG8gYW5hbHl6ZSBlYWNoIGNoYW5nZSBjYXJlZnVsbHk6CgoxLiAgKipLZXJuZWwgU3RydWN0dXJlcyAmYW1wOyBVc2VyIFNwYWNlOioqIERvZXMgaXQgbW9kaWZ5IGFueSBrZXJuZWwgc3RydWN0dXJlcyB0aGF0IGFyZSBzZW50IHRvIHVzZXIgc3BhY2U/IE5vLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBNTS9zd2FwIHN0dWZmLgoyLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby4KMy4gICoqQ29tcGxleCBEYXRhIFN0cnVjdHVyZSBJbml0aWFsaXphdGlvbjoqKiBEb2VzIGl0IGFsbG9jYXRlIG9yIGluaXRpYWxpemUgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZD8gTm8uCjQuICAqKkJvdW5kcy9MZW5ndGggQ2hlY2tzOioqIERvZXMgaXQgbW9kaWZ5IGJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycz8gTm8uCjUuICAqKk1lbW9yeSBMZWFrczoqKiBEb2VzIGl0IGNyZWF0ZSBhbnkgbWVtb3J5IGluZm8gbGVha3MgdG8gdXNlciBzcGFjZT8gTm8uCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIGFyZSBzdHJpY3RseSBpbnRlcm5hbCB0byB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtLCBtYWlubHkgaW52b2x2aW5nIGNoYW5nZXMgZnJvbSBgc3RydWN0IHBhZ2VgIHRvIGBzdHJ1Y3QgZm9saW9gIGRhdGEgc3RydWN0dXJlcywgcmVuYW1lZCB2YXJpYWJsZXMsIGFuZCBtYWNybyBjaGFuZ2VzLiBUaGVyZSYjMzk7cyBubyBkYXRhIGNvcHlpbmcgdG8gdXNlciBzcGFjZSBhbmQgbm8gY2hhbmdlcyB0aGF0IHdvdWxkIGFsbG93IHRoZSB1c2VyIHRvIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnkgZGlyZWN0bHkuCgpMZXQmIzM5O3MgZG91YmxlIGNoZWNrIHRob3NlIGBzd2FwX3plcm9tYXBgIGVudHJpZXM6IHRoZSBgc3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby0mZ3Q7c3dhcDtgIHZhcmlhYmxlcyBhcmUgKmltbWVkaWF0ZWx5KiBpbml0aWFsaXplZCB3aXRoIHRoZSBgZm9saW8tJmd0O3N3YXBgIHZhbHVlIHVwb24gZGVjbGFyYXRpb24uIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYW4gdW5pbml0aWFsaXplZCBgZW50cnlgIGlzIGJlaW5nIHVzZWQuCgpUaGVyZWZvcmUsIGBOZWVkc0tNU0FOYCBpcyB1bmVxdWl2b2NhbGx5IGBmYWxzZWAuIFRoZSBwb3RlbnRpYWwgZm9yIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHByaW1hcmlseSBsaWVzIGluIGZvbGlvIHJlZmNvdW50aW5nLCBsb2NraW5nLCBhbmQgdGhlIHN3YXAgc3Vic3lzdGVtJiMzOTtzIHN0YXRlIG1hY2hpbmUsIGJ1dCB0aGVzZSB3b3VsZCBiZSBpZGVudGlmaWVkIGJ5IHRoZSBleGlzdGluZyBLQVNBTiBjaGVja3MsIExPQ0tERVAsIGFuZCBWTSBhc3NlcnRpb25zLiBUaGlzIGRvZXNuJiMzOTt0IG5lY2Vzc2l0YXRlIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIHRoZXJlJiMzOTtzIGEgZ29vZCBjaGFuY2UgS0FTQU4gaXMgYWxyZWFkeSBhY3RpdmUgaW4gdGhhdCBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOSAxOToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXG5cbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVx1MDAzZXN3YXBgLlxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxuXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpcyBhbiBpbnRlcm5hbCBNTSByZWZhY3RvcmluZyB0aGF0IGNvbnZlcnRzIGxlZ2FjeSBzdHJ1Y3QgcGFnZSByZWZlcmVuY2VzIGFuZCBoZWxwZXJzIGluIHRoZSBzd2FwIHN1YnN5c3RlbSB0byBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiBjb252ZXJ0aW5nIFJlY2xhaW0gZmxhZyBtYWNyb3MgdG8gRk9MSU9fRkxBRywgdXNpbmcgYnZlY19mb2xpbywgZm9saW9fbWFya19kaXJ0eSwgZm9saW9fY2xlYXJfcmVjbGFpbSwgZm9saW9fZW5kX3dyaXRlYmFjaywgYW5kIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0KS5cblxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFrLlxuMi4gTG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBlbnRyeWAgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBgZm9saW8tXHUwMDNlc3dhcGAuXG4zLiBObyBidWZmZXIgYWxsb2NhdGlvbnMsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuXG5cbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1MS4yNjgzNzkxMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjI0MjE1MzMxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpcyBhbiBpbnRlcm5hbCBNTSByZWZhY3RvcmluZyB0aGF0IGNvbnZlcnRzIGxlZ2FjeSBzdHJ1Y3QgcGFnZSByZWZlcmVuY2VzIGFuZCBoZWxwZXJzIGluIHRoZSBzd2FwIHN1YnN5c3RlbSB0byBmb2xpby1iYXNlZCBlcXVpdmFsZW50cyAoZS5nLiBjb252ZXJ0aW5nIFJlY2xhaW0gZmxhZyBtYWNyb3MgdG8gRk9MSU9fRkxBRywgdXNpbmcgYnZlY19mb2xpbywgZm9saW9fbWFya19kaXJ0eSwgZm9saW9fY2xlYXJfcmVjbGFpbSwgZm9saW9fZW5kX3dyaXRlYmFjaywgYW5kIHJlbmFtaW5nIF9fc3dhcF93cml0ZXBhZ2UgdG8gX19zd2FwX3dyaXRlb3V0KS5cXG5cXG5ObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpcyBpbnRyb2R1Y2VkIG9yIHJlYWQ6XFxuMS4gTm8ga2VybmVsIHN0cnVjdHVyZXMgb3IgYnVmZmVycyBhcmUgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgcGFkZGluZyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBsZWFrLlxcbjIuIExvY2FsIHZhcmlhYmxlcyAoc3VjaCBhcyBgZW50cnlgIGluIHN3YXBfemVyb21hcF9mb2xpb19zZXQvY2xlYXIpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGZyb20gYGZvbGlvLVxcdTAwM2Vzd2FwYC5cXG4zLiBObyBidWZmZXIgYWxsb2NhdGlvbnMsIGJvdW5kcyBjYWxjdWxhdGlvbnMsIG9yIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEgYXJlIGludHJvZHVjZWQuXFxuXFxuQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiBmb2xpbyBzdGF0ZSBtYW5hZ2VtZW50LCBsb2NraW5nLCBvciBwb2ludGVyIGhhbmRsaW5nIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOLCBWTSBhc3NlcnRpb25zIChWTV9CVUdfT05fRk9MSU8gLyBWTV9XQVJOX09OX09OQ0VfRk9MSU8pLCBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc3dhcCB3cml0ZW91dCBwYXRocyBmcm9tIG9wZXJhdGluZyBvbiBzdHJ1Y3QgcGFnZSB0byBzdHJ1Y3QgZm9saW8sIGluY2x1ZGluZyBmb2xpby1sZXZlbCBzd2FwIGVudHJ5IGNhbGN1bGF0aW9uLCBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nLCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBpbiBwYWdlX2lvLmMgYW5kIHpzd2FwLmMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBsb2dpYywgd2hpY2ggaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjc6NTEuMjY4MzgzMTE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM1MjA4Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjgxMWE4ZWM4MGRlYTUwZmYyYTBiNDM5YzA3NDNmN2JhMmZiODdhZlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxOToyNzo0OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuaW5kZXggN2E4NjM1NzJhZGNlNy4uYWUyZWJhZWQ2ZDRkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXFxuQEAgLTU5Myw4ICs1OTMsNyBAQCBURVNUUEFHRUZMQUcoV3JpdGViYWNrLCB3cml0ZWJhY2ssIFBGX05PX1RBSUwpXFxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXFxuIFxcbiAvKiBQR19yZWFkYWhlYWQgaXMgb25seSB1c2VkIGZvciByZWFkczsgUEdfcmVjbGFpbSBpcyBvbmx5IGZvciB3cml0ZXMgKi9cXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcXG4tXFx0VEVTVENMRUFSRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKVxcbitGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcXG4gXFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcGFnZV9pby5jIGIvbW0vcGFnZV9pby5jXFxuaW5kZXggODg5NjI1NzFjYjkzMS4uMWRhNGZmNDg0ZjA5NyAxMDA2NDRcXG4tLS0gYS9tbS9wYWdlX2lvLmNcXG4rKysgYi9tbS9wYWdlX2lvLmNcXG5AQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnID0gZ2V0X29ial9jZ3JvdXBfZnJvbV9mb2xpbyhmb2xpbyk7XFxuIFxcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4tXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuK1xcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTY4LDggKzE2OCw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFxuIFxcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xcbi1cXHRcXHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XFxuIFxcdFxcdF9fc3dhcF90YWJsZV9zZXRfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XFxuK1xcdFxcdGVudHJ5LnZhbCsrO1xcbiBcXHR9XFxuIFxcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xcbiBcXG5AQCAtMTgzLDcgKzE4Myw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcXG4tXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuK1xcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXFx1MDAzZXN3YXA7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbiBcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG5AQCAtMTkxLDggKzE5MSw4IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XFxuLVxcdFxcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcXG4gXFx0XFx0X19zd2FwX3RhYmxlX2NsZWFyX3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xcbitcXHRcXHRlbnRyeS52YWwrKztcXG4gXFx0fVxcbiBcXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcXG4gfVxcbkBAIC0yMDksNyArMjA5LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdFxcdGdvdG8gb3V0X3VubG9jaztcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlXFxuK1xcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xcbiBcXHQgKiBjb250ZW50cywgZS5nLiBtZW1vcnkgdGFncy5cXG4gXFx0ICovXFxuIFxcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcXG5AQCAtMjIwLDcgKzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiBcXG4gXFx0LypcXG4gXFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcXG4tXFx0ICogcGFnZXMuIFRoZSB6ZXJvIG1hcmsgaXMgcHJvdGVjdGVkIGJ5IHRoZSBjbHVzdGVyIGxvY2ssIHdoaWNoIGlzXFxuK1xcdCAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcXG4gXFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxcbiBcXHQgKi9cXG4gXFx0aWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkge1xcbkBAIC0yNDgsNyArMjQ4LDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdH1cXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcbi1cXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xcbitcXHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxuIFxcdHJldHVybiAwO1xcbiBvdXRfdW5sb2NrOlxcbiBcXHRmb2xpb191bmxvY2soZm9saW8pO1xcbkBAIC0yNzcsNyArMjc3LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiBcXHRyZXR1cm4gY2FuX21lcmdlO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuIFxcdHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3M7XFxuIFxcbkBAIC0yOTgsNyArMjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxcbiB7XFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK31cXG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcXHUwMDI2XFx1MDAyNiBDT05GSUdfQkxLX0NHUk9VUCAqL1xcbiBcXG4gc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7XFxuQEAgLTM2Nyw3ICszNjksNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHJ3KVxcbiBcXHR9XFxuIH1cXG4gXFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIHtcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcXG4gXFxuQEAgLTQ5NywxMyArNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXFxuIFxcdGludCBwO1xcbiBcXG4gXFx0Zm9yIChwID0gMDsgcCBcXHUwMDNjIHNpby1cXHUwMDNlbnJfYnZlY3M7IHArKykge1xcbi1cXHRcXHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IHNpby1cXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcXG4rXFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXFx1MDAyNnNpby1cXHUwMDNlYnZlY3NbcF0pO1xcbiBcXG4gXFx0XFx0aWYgKGZhaWxlZCkge1xcbi1cXHRcXHRcXHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcXG4tXFx0XFx0XFx0Q2xlYXJQYWdlUmVjbGFpbShwYWdlKTtcXG4rXFx0XFx0XFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XFxuK1xcdFxcdFxcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcXG4rXFx0XFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XFxuIFxcdH1cXG4gXFx0bWVtcG9vbF9mcmVlKHNpbywgc2lvX3Bvb2wpO1xcbiB9XFxuQEAgLTUxNCwxNiArNTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcXG4gXFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVxcdTAwM2VsZW47XFxuIFxcbiBcXHRpZiAoZmFpbGVkKSB7XFxuLVxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVxcdTAwM2VidmVjc1swXS5idl9wYWdlO1xcbitcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gYnZlY19mb2xpbyhcXHUwMDI2c2lvLVxcdTAwM2VidmVjc1swXSk7XFxuIFxcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBJbiB0aGUgY2FzZSBvZiBzd2FwLW92ZXItbmZzLCB0aGlzIGNhbiBiZSBhIHRlbXBvcmFyeSBmYWlsdXJlXFxuIFxcdFxcdCAqIGlmIHRoZSBzeXN0ZW0gaGFzIGxpbWl0ZWQgbWVtb3J5IGZvciBhbGxvY2F0aW5nIHRyYW5zbWl0XFxuLVxcdFxcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBwYWdlIGRpcnR5IGFuZCBhdm9pZFxcbitcXHRcXHQgKiBidWZmZXJzLiAgTWFyayB0aGUgZm9saW8gZGlydHkgYW5kIGF2b2lkXFxuIFxcdFxcdCAqIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSBidXQgcmF0ZS1saW1pdCB0aGUgbWVzc2FnZXMuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRwcl9lcnJfcmF0ZWxpbWl0ZWQoXFxcIldyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRcXHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcXG4rXFx0XFx0XFx0XFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXFx1MDAzZXN3YXApKTtcXG4gXFx0fVxcbiBcXG4gXFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xcbkBAIC01OTYsNyArNTk4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcXG4gXFx0XFx0XFx0UkVRX09QX1dSSVRFIHwgUkVRX1NXQVApO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSA9IHNpby1cXHUwMDNlbGVuO1xcbiBcXHRiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4tXFx0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XFxuK1xcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcXG4gXFxuIFxcdGlmIChjdHgtXFx1MDAzZXNpcy1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcXG4gXFx0XFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3N3YXAuaCBiL21tL3N3YXAuaFxcbmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcC5oXFxuKysrIGIvbW0vc3dhcC5oXFxuQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XFxuIHZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gXFxuIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqL1xcbiBleHRlcm4gc3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcF9zcGFjZSBfX3JlYWRfbW9zdGx5O1xcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0XFxuLS0tIGEvbW0vc3dhcGZpbGUuY1xcbisrKyBiL21tL3N3YXBmaWxlLmNcXG5AQCAtMjk4OSw3ICsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcXG4gLypcXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXFxuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXFxuLSAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZXBhZ2Uvc3dhcF9yZWFkX2ZvbGlvXFxuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cXG4gICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy5cXG4gICpcXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxcbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xcbmluZGV4IDM3ZjM0ZTQwNmM4ZTMuLjg4YTFhNzRmOTE4NTIgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMTA1MCw3ICsxMDUwLDcgQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xcbiBcXG4gXFx0Lyogc3RhcnQgd3JpdGViYWNrICovXFxuLVxcdF9fc3dhcF93cml0ZXBhZ2UoXFx1MDAyNmN0eCwgZm9saW8pO1xcbitcXHRfX3N3YXBfd3JpdGVvdXQoXFx1MDAyNmN0eCwgZm9saW8pO1xcbiBcXHRzd2FwX3dyaXRlX3N1Ym1pdChcXHUwMDI2Y3R4KTtcXG4gXFxuIG91dDpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjc6NTIuNzA0MjE2NjAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MTg1NDA3OTY5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzd2FwIHdyaXRlb3V0IHBhdGhzIGZyb20gb3BlcmF0aW5nIG9uIHN0cnVjdCBwYWdlIHRvIHN0cnVjdCBmb2xpbywgaW5jbHVkaW5nIGZvbGlvLWxldmVsIHN3YXAgZW50cnkgY2FsY3VsYXRpb24sIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcsIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGluIHBhZ2VfaW8uYyBhbmQgenN3YXAuYy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGxvZ2ljLCB3aGljaCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyODExYThlYzgwZGVhNTBmZjJhMGI0MzljMDc0M2Y3YmEyZmI4N2FmXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjkgMTk6Mjc6NDkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaCBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5pbmRleCA3YTg2MzU3MmFkY2U3Li5hZTJlYmFlZDZkNGQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oXG5AQCAtNTkzLDggKzU5Myw3IEBAIFRFU1RQQUdFRkxBRyhXcml0ZWJhY2ssIHdyaXRlYmFjaywgUEZfTk9fVEFJTClcbiBGT0xJT19GTEFHKG1hcHBlZHRvZGlzaywgRk9MSU9fSEVBRF9QQUdFKVxuIFxuIC8qIFBHX3JlYWRhaGVhZCBpcyBvbmx5IHVzZWQgZm9yIHJlYWRzOyBQR19yZWNsYWltIGlzIG9ubHkgZm9yIHdyaXRlcyAqL1xuLVBBR0VGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXG4tXHRURVNUQ0xFQVJGTEFHKFJlY2xhaW0sIHJlY2xhaW0sIFBGX05PX1RBSUwpXG4rRk9MSU9fRkxBRyhyZWNsYWltLCBGT0xJT19IRUFEX1BBR0UpXG4gRk9MSU9fRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcdEZPTElPX1RFU1RfQ0xFQVJfRkxBRyhyZWFkYWhlYWQsIEZPTElPX0hFQURfUEFHRSlcbiBcbmRpZmYgLS1naXQgYS9tbS9wYWdlX2lvLmMgYi9tbS9wYWdlX2lvLmNcbmluZGV4IDg4OTYyNTcxY2I5MzEuLjFkYTRmZjQ4NGYwOTcgMTAwNjQ0XG4tLS0gYS9tbS9wYWdlX2lvLmNcbisrKyBiL21tL3BhZ2VfaW8uY1xuQEAgLTE2MCw3ICsxNjAsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXHRzdHJ1Y3Qgb2JqX2Nncm91cCAqb2JqY2cgPSBnZXRfb2JqX2Nncm91cF9mcm9tX2ZvbGlvKGZvbGlvKTtcbiBcdGludCBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xNjgsOCArMTY4LDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0Y2kgPSBzd2FwX2NsdXN0ZXJfZ2V0X2FuZF9sb2NrKGZvbGlvKTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGZvbGlvX25yX3BhZ2VzKGZvbGlvKTsgaSsrKSB7XG4tXHRcdGVudHJ5ID0gcGFnZV9zd2FwX2VudHJ5KGZvbGlvX3BhZ2UoZm9saW8sIGkpKTtcbiBcdFx0X19zd2FwX3RhYmxlX3NldF96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiBcbkBAIC0xODMsNyArMTgzLDcgQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19jbGVhcihzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2k7XG4tXHRzd3BfZW50cnlfdCBlbnRyeTtcbitcdHN3cF9lbnRyeV90IGVudHJ5ID0gZm9saW8tXHUwMDNlc3dhcDtcbiBcdHVuc2lnbmVkIGludCBpO1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKCFmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbyksIGZvbGlvKTtcbkBAIC0xOTEsOCArMTkxLDggQEAgc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfY2xlYXJfemVybyhjaSwgc3dwX2NsdXN0ZXJfb2Zmc2V0KGVudHJ5KSk7XG4rXHRcdGVudHJ5LnZhbCsrO1xuIFx0fVxuIFx0c3dhcF9jbHVzdGVyX3VubG9jayhjaSk7XG4gfVxuQEAgLTIwOSw3ICsyMDksNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdFx0Z290byBvdXRfdW5sb2NrO1xuIFxuIFx0Lypcbi1cdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBwYWdlXG4rXHQgKiBBcmNoIGNvZGUgbWF5IGhhdmUgdG8gcHJlc2VydmUgbW9yZSBkYXRhIHRoYW4ganVzdCB0aGUgZm9saW9cbiBcdCAqIGNvbnRlbnRzLCBlLmcuIG1lbW9yeSB0YWdzLlxuIFx0ICovXG4gXHRyZXQgPSBhcmNoX3ByZXBhcmVfdG9fc3dhcChmb2xpbyk7XG5AQCAtMjIwLDcgKzIyMCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFxuIFx0LypcbiBcdCAqIFVzZSB0aGUgc3dhcCB0YWJsZSB6ZXJvIG1hcmsgdG8gYXZvaWQgZG9pbmcgSU8gZm9yIHplcm8tZmlsbGVkXG4tXHQgKiBwYWdlcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbitcdCAqIGZvbGlvcy4gVGhlIHplcm8gbWFyayBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNsdXN0ZXIgbG9jaywgd2hpY2ggaXNcbiBcdCAqIGFjcXVpcmVkIGludGVybmFsbHkgYnkgc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhci5cbiBcdCAqL1xuIFx0aWYgKGlzX2ZvbGlvX3plcm9fZmlsbGVkKGZvbGlvKSkge1xuQEAgLTI0OCw3ICsyNDgsNyBAQCBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdH1cbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuLVx0X19zd2FwX3dyaXRlcGFnZShjdHgsIGZvbGlvKTtcbitcdF9fc3dhcF93cml0ZW91dChjdHgsIGZvbGlvKTtcbiBcdHJldHVybiAwO1xuIG91dF91bmxvY2s6XG4gXHRmb2xpb191bmxvY2soZm9saW8pO1xuQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4gXHRyZXR1cm4gY2FuX21lcmdlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgdm9pZCBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpbyhzdHJ1Y3QgYmlvICpiaW8sIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcztcbiBcbkBAIC0yOTgsNyArMjk4LDkgQEAgc3RhdGljIGJvb2wgZm9saW9fYmxrZ19jYW5fbWVyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IGZvbGlvICpwcmV2X2ZvbGlvKVxuIHtcbiBcdHJldHVybiB0cnVlO1xuIH1cbi0jZGVmaW5lIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBmb2xpbylcdFx0ZG8geyB9IHdoaWxlICgwKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbit7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfTUVNQ0cgXHUwMDI2XHUwMDI2IENPTkZJR19CTEtfQ0dST1VQICovXG4gXG4gc3RhdGljIG1lbXBvb2xfdCAqc2lvX3Bvb2w7XG5AQCAtMzY3LDcgKzM2OSw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgcncpXG4gXHR9XG4gfVxuIFxuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuIFxuQEAgLTQ5NywxMyArNDk5LDEzIEBAIHN0YXRpYyB2b2lkIHN3YXBfd3JpdGVfZW5kKHN0cnVjdCBzd2FwX2lvY2IgKnNpbywgYm9vbCBmYWlsZWQpXG4gXHRpbnQgcDtcbiBcbiBcdGZvciAocCA9IDA7IHAgXHUwMDNjIHNpby1cdTAwM2Vucl9idmVjczsgcCsrKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzW3BdLmJ2X3BhZ2U7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1twXSk7XG4gXG4gXHRcdGlmIChmYWlsZWQpIHtcbi1cdFx0XHRzZXRfcGFnZV9kaXJ0eShwYWdlKTtcbi1cdFx0XHRDbGVhclBhZ2VSZWNsYWltKHBhZ2UpO1xuK1x0XHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuK1x0XHRcdGZvbGlvX2NsZWFyX3JlY2xhaW0oZm9saW8pO1xuIFx0XHR9XG4tXHRcdGVuZF9wYWdlX3dyaXRlYmFjayhwYWdlKTtcbitcdFx0Zm9saW9fZW5kX3dyaXRlYmFjayhmb2xpbyk7XG4gXHR9XG4gXHRtZW1wb29sX2ZyZWUoc2lvLCBzaW9fcG9vbCk7XG4gfVxuQEAgLTUxNCwxNiArNTE2LDE2IEBAIHN0YXRpYyB2b2lkIHN3YXBfZnNfd3JpdGVfY29tcGxldGUoc3RydWN0IGtpb2NiICppb2NiLCBsb25nIHJldClcbiBcdGJvb2wgZmFpbGVkID0gcmV0ICE9IHNpby1cdTAwM2VsZW47XG4gXG4gXHRpZiAoZmFpbGVkKSB7XG4tXHRcdHN0cnVjdCBwYWdlICpwYWdlID0gc2lvLVx1MDAzZWJ2ZWNzWzBdLmJ2X3BhZ2U7XG4rXHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBidmVjX2ZvbGlvKFx1MDAyNnNpby1cdTAwM2VidmVjc1swXSk7XG4gXG4gXHRcdC8qXG4gXHRcdCAqIEluIHRoZSBjYXNlIG9mIHN3YXAtb3Zlci1uZnMsIHRoaXMgY2FuIGJlIGEgdGVtcG9yYXJ5IGZhaWx1cmVcbiBcdFx0ICogaWYgdGhlIHN5c3RlbSBoYXMgbGltaXRlZCBtZW1vcnkgZm9yIGFsbG9jYXRpbmcgdHJhbnNtaXRcbi1cdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIHBhZ2UgZGlydHkgYW5kIGF2b2lkXG4rXHRcdCAqIGJ1ZmZlcnMuICBNYXJrIHRoZSBmb2xpbyBkaXJ0eSBhbmQgYXZvaWRcbiBcdFx0ICogZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlIGJ1dCByYXRlLWxpbWl0IHRoZSBtZXNzYWdlcy5cbiBcdFx0ICovXG4gXHRcdHByX2Vycl9yYXRlbGltaXRlZChcIldyaXRlIGVycm9yICVsZCBvbiBkaW8gc3dhcGZpbGUgKCVsbHUpXFxuXCIsXG4tXHRcdFx0XHQgICByZXQsIHN3YXBfZGV2X3BvcyhwYWdlX3N3YXBfZW50cnkocGFnZSkpKTtcbitcdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKGZvbGlvLVx1MDAzZXN3YXApKTtcbiBcdH1cbiBcbiBcdHN3YXBfd3JpdGVfZW5kKHNpbywgZmFpbGVkKTtcbkBAIC01OTYsNyArNTk4LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9iZGV2X3N1Ym1pdF93cml0ZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eClcbiBcdFx0XHRSRVFfT1BfV1JJVEUgfCBSRVFfU1dBUCk7XG4gXHRiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplID0gc2lvLVx1MDAzZWxlbjtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NlY3RvciA9IHN3YXBfZm9saW9fc2VjdG9yKGJpb19maXJzdF9mb2xpb19hbGwoYmlvKSk7XG4tXHRiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9wYWdlKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbitcdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKGJpbywgYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbiBcbiBcdGlmIChjdHgtXHUwMDNlc2lzLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pIHtcbiBcdFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCBmZGRiYTdhODc1MDBhLi4wYjVkNTA3NzM5YmNiIDEwMDY0NFxuLS0tIGEvbW0vc3dhcC5oXG4rKysgYi9tbS9zd2FwLmhcbkBAIC0yNTgsNyArMjU4LDcgQEAgdm9pZCBzd2FwX3JlYWRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIHZvaWQgc3dhcF9yZWFkX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gdm9pZCBzd2FwX3dyaXRlX3N1Ym1pdChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCk7XG4gaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuLXZvaWQgX19zd2FwX3dyaXRlcGFnZShzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4rdm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuIFxuIC8qIGxpbnV4L21tL3N3YXBfc3RhdGUuYyAqL1xuIGV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZSBzd2FwX3NwYWNlIF9fcmVhZF9tb3N0bHk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IDUxZjVhNTI1YmI2MWMuLmFiOWQ0NWRiYmVmOGUgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMjk4OSw3ICsyOTg5LDcgQEAgRVhQT1JUX1NZTUJPTF9HUEwoYWRkX3N3YXBfZXh0ZW50KTtcbiAvKlxuICAqIEEgYHN3YXAgZXh0ZW50JyBpcyBhIHNpbXBsZSB0aGluZyB3aGljaCBtYXBzIGEgY29udGlndW91cyByYW5nZSBvZiBwYWdlc1xuICAqIG9udG8gYSBjb250aWd1b3VzIHJhbmdlIG9mIGRpc2sgYmxvY2tzLiAgQSByYnRyZWUgb2Ygc3dhcCBleHRlbnRzIGlzXG4tICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlcGFnZS9zd2FwX3JlYWRfZm9saW9cbisgKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVvdXQvc3dhcF9yZWFkX2ZvbGlvXG4gICogdGltZSBmb3IgbG9jYXRpbmcgd2hlcmUgb24gZGlzayBhIHBhZ2UgYmVsb25ncy5cbiAgKlxuICAqIElmIHRoZSBzd2FwZmlsZSBpcyBhbiBTX0lTQkxLIGJsb2NrIGRldmljZSwgYSBzaW5nbGUgZXh0ZW50IGlzIGluc3RhbGxlZC5cbmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuY1xuaW5kZXggMzdmMzRlNDA2YzhlMy4uODhhMWE3NGY5MTg1MiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0xMDUwLDcgKzEwNTAsNyBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0Zm9saW9fc2V0X3JlY2xhaW0oZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4tXHRfX3N3YXBfd3JpdGVwYWdlKFx1MDAyNmN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KFx1MDAyNmN0eCwgZm9saW8pO1xuIFx0c3dhcF93cml0ZV9zdWJtaXQoXHUwMDI2Y3R4KTtcbiBcbiBvdXQ6XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1Mi43MDQyMTc4OTNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NDgxMTM3NzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgRm9saW8gQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGNvbnZlcnRpbmcgYHBhZ2VgIHN0cnVjdHVyZXMgdG8gYGZvbGlvYCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQgd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudC4gSSBzZWUgdGhlIGNoYW5nZXMgc3BhbiBhY3Jvc3Mgc2V2ZXJhbCBrZXkgZmlsZXM6IGBtbS9wYWdlX2lvLmNgLCBgaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhgLCBgbW0vc3dhcC5oYCwgYG1tL3N3YXBmaWxlLmNgLCBhbmQgYG1tL3pzd2FwLmNgLiBUaGlzIHN1Z2dlc3RzIGEgd2lkZXNwcmVhZCBpbXBhY3QuXG5cblNwZWNpZmljYWxseSwgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCwgdGhlIGNoYW5nZSBmcm9tIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgdG8gYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgaXMgYSBkaXJlY3QgaW5kaWNhdGlvbiBvZiB0aGlzLiBUaGUgY29udmVyc2lvbiBmcm9tIHBhZ2UgZXF1aXZhbGVudHMgdG8gZm9saW8gaXMgaGFwcGVuaW5nIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIHRoZSByZW5hbWUgb2YgYHN3YXBfemVyb21hcF9mb2xpb19zZXRgIGFuZCBgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyYCB0byBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBldGMuIFRoZSB1c2Ugb2YgYGZvbGlvLVx1MDAzZXN3YXBgIGluIHRoZSBsb29waW5nLCB3aGljaCBpcyByZXBsYWNpbmcgaW5kaXZpZHVhbCBvcGVyYXRpb25zIGZvciBlYWNoIGBmb2xpb19wYWdlKGZvbGlvLCBpKWAuIFRoZSByZXBsYWNlbWVudCBvZiBmdW5jdGlvbnMgbGlrZSBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgZXRjLlxuXG5Ob3csIHRoZSByZW5hbWluZyBvZiBgX19zd2FwX3dyaXRlcGFnZWAgdG8gYF9fc3dhcF93cml0ZW91dGAgaW4gYG1tL3BhZ2VfaW8uY2AsIGBtbS9zd2FwLmhgLCBhbmQgYG1tL3pzd2FwLmNgIGlzIHNvbWV0aGluZyB0byB0YWtlIG5vdGUgb2YuIEl0IGltcGxpZXMgYSBjaGFuZ2UgaW4gdGhlIGFic3RyYWN0aW9uIG9yIHRoZSB3YXkgd3JpdGVvdXQgb3BlcmF0aW9ucyBhcmUgaGFuZGxlZC5cblxuSXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQsIGltcG9ydGFudGx5LCBzd2FwcGluZyBsb2dpYywgc3Bhbm5pbmcgYG1tL3BhZ2VfaW8uY2AgYW5kIGBtbS96c3dhcC5jYC4gVGhlIGZhY3QgdGhhdCBpdCBpbXBhY3RzIHN3YXAgSS9PIHdyaXRlb3V0IGlzIGEgcmVkIGZsYWcuIFdyaXRlb3V0IGlzIGNyaXRpY2FsIGFuZCBkaXJlY3RseSBhY2Nlc3NpYmxlIHZpYSBtZW1vcnkgcmVjbGFpbSBhbmQgc3dhcHBpbmcgdW5kZXIgbWVtb3J5IHByZXNzdXJlLCBzbyBhbnkgY2hhbmdlIHRoZXJlLCBlc3BlY2lhbGx5IGEgZnVuZGFtZW50YWwgYXJjaGl0ZWN0dXJhbCBvbmUsIG5lZWRzIGRlZXAgc2NydXRpbnkuIFdlIGFyZSBzZWVpbmcgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBtZWNoYW5pc21zLCBgc3dhcF93cml0ZW91dGAsIGFuZCBgX19zd2FwX3dyaXRlb3V0YC5cblxuTmV4dCBzdGVwcz8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyBhcmUgaW52b2x2ZWQgaGVyZS4gSSdsbCBzZWFyY2ggYG1tL3BhZ2VfaW8uY2AsIGBtbS9LY29uZmlnYCwgYW5kIGBtbS9NYWtlZmlsZWAgdG8gaWRlbnRpZnkgYW55IHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBvciBidWlsZCBkZXBlbmRlbmNpZXMuIFRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBob3cgdG8gZW5zdXJlIHRoZSBmdXp6ZXIgY292ZXJzIGFsbCBjb2RlIHBhdGhzIGFmZmVjdGVkIGJ5IHRoaXMgZm9saW8gdHJhbnNpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI3OjU5LjE4NTM1NzgwMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjU2NTY0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwYWdlX2lvLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NzY9ZW5kaWZcXG5tbS9NYWtlZmlsZS03Ny1cXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZS03OS1vYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyNzo1OS4yMzc5MjY0OTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2NTIxNDAwMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgU3dhcCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBidWlsZCBzZXR1cCwgYW5kIGl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gSSBzZWUgdGhhdCB0aGUgb2JqZWN0IGZpbGVzIGBwYWdlX2lvLm9gLCBgc3dhcF9zdGF0ZS5vYCwgYW5kIGBzd2FwZmlsZS5vYCBhcmUgYmVpbmcgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLCBidXQgb25seSBpZiBgQ09ORklHX1NXQVBgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZTsgdGhvc2UgYXJlIHRoZSBjb3JlIGNvbXBvbmVudHMgZm9yIGhhbmRsaW5nIHN3YXAgc3BhY2UuIEFuZCB0aGVuLCB0aGVyZSdzIGB6c3dhcC5vYCDigJMgdGhhdCdzIG9ubHkgZ2V0dGluZyBjb21waWxlZCBpZiBgQ09ORklHX1pTV0FQYCBpcyBzZXQuIE5vdyBJIG5lZWQgdG8gcmVtaW5kIG15c2VsZiBwcmVjaXNlbHkgd2hhdCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBhY3R1YWxseSBjb250cm9sLiBJdCdzIHRpbWUgdG8gZGl2ZSBpbnRvIEtjb25maWcgYW5kIHRoZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29tcGxldGUgcGljdHVyZSBvZiBob3cgdGhlIHN3YXAgc3lzdGVtIGlzIGJlaW5nIG1hbmFnZWQuIE1ha2luZyBzdXJlIHRoZXNlIGZsYWdzIGFyZSBzZXQgY29ycmVjdGx5IGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBmdW5jdGlvbmFsaXR5LCBzbyBhIHF1aWNrIHJldmlldyBpcyBkZWZpbml0ZWx5IHdhcnJhbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTkxNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjA1Ljc1OTMyOTY5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODE0MTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9OT1jb25maWcgQVJDSF9OT19TV0FQXFxuLS1cXG5tbS9LY29uZmlnLTExLVxcbm1tL0tjb25maWc6MTI6bWVudWNvbmZpZyBTV0FQXFxubW0vS2NvbmZpZy0xMy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjA1LjgxMjE0Nzg0OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjgxNTI5MjA5MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgU3dhcCBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiByZWxhdGVkIHRvIHN3YXBwaW5nLCBzcGVjaWZpY2FsbHkgYENPTkZJR19TV0FQYC4gVGhlIGZpcnN0IHBsYWNlIEknZCBsb29rIGlzIGluIGBtbS9LY29uZmlnYC4gVGhhdCdzIHdoZXJlIEknZCBleHBlY3QgdG8gZmluZCB0aGUgY29udHJvbHMgZ292ZXJuaW5nIHN3YXAgYmVoYXZpb3IsIGl0cyBlbmFibGVtZW50LCBhbmQgcHJvYmFibHkgc29tZSBhc3NvY2lhdGVkIHBhcmFtZXRlcnMgaWYgaXQncyBjb25maWd1cmFibGUuIEknbGwgbmVlZCB0byBjb25maXJtIGlmIGl0J3MgdGhlcmUsIGFuZCB0aGVuIHVuZGVyc3RhbmQgaG93IGl04oCZcyBkZWZpbmVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBkZWZhdWx0cyBhcmUgYXR0YWNoZWQgdG8gaXQuIEEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUga2VybmVsIGJ1aWxkcyBzd2FwIHN1cHBvcnQgaXMgY3J1Y2lhbCBmb3IgYW55b25lIHdvcmtpbmcgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBmaW5kLCB0aGUgbmV4dCBzdGVwIHdvdWxkIGJlIGRpZ2dpbmcgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgdGhpcyBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyB1c2VkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBkaWZmZXJlbnQgc2V0dGluZ3MgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gaG93IGl0IGludGVyYWN0cyB3aXRoIHRoaW5ncyBsaWtlIHRoZSBwYWdlIGNhY2hlLCBOVU1BLCBhbmQgYW55IHBvdGVudGlhbCB0cmFkZS1vZmZzIGJldHdlZW4gcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSB1dGlsaXphdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjI2OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjEzLjk2NTA3MTg4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0Mzc5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDEwOlxcdFxcdGJvb2xcXG4gIDExOlxcdFxcbiAgMTI6XFx0bWVudWNvbmZpZyBTV0FQXFxuICAxMzpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBwYWdpbmcgb2YgYW5vbnltb3VzIG1lbW9yeSAoc3dhcClcXFwiXFxuICAxNDpcXHRcXHRkZXBlbmRzIG9uIE1NVSBcXHUwMDI2XFx1MDAyNiBCTE9DSyBcXHUwMDI2XFx1MDAyNiAhQVJDSF9OT19TV0FQXFxuICAxNTpcXHRcXHRkZWZhdWx0IHlcXG4gIDE2OlxcdFxcdGhlbHBcXG4gIDE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBjaG9vc2Ugd2hldGhlciB5b3Ugd2FudCB0byBoYXZlIHN1cHBvcnRcXG4gIDE4OlxcdFxcdCAgZm9yIHNvIGNhbGxlZCBzd2FwIGRldmljZXMgb3Igc3dhcCBmaWxlcyBpbiB5b3VyIGtlcm5lbCB0aGF0IGFyZVxcbiAgMTk6XFx0XFx0ICB1c2VkIHRvIHByb3ZpZGUgbW9yZSB2aXJ0dWFsIG1lbW9yeSB0aGFuIHRoZSBhY3R1YWwgUkFNIHByZXNlbnRcXG4gIDIwOlxcdFxcdCAgaW4geW91ciBjb21wdXRlci4gIElmIHVuc3VyZSBzYXkgWS5cXG4gIDIxOlxcdFxcbiAgMjI6XFx0Y29uZmlnIFpTV0FQXFxuICAyMzpcXHRcXHRib29sIFxcXCJDb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzXFxcIlxcbiAgMjQ6XFx0XFx0ZGVwZW5kcyBvbiBTV0FQXFxuICAyNTpcXHRcXHRzZWxlY3QgQ1JZUFRPXFxuICAyNjpcXHRcXHRzZWxlY3QgWlNNQUxMT0NcXG4gIDI3OlxcdFxcdGhlbHBcXG4gIDI4OlxcdFxcdCAgQSBsaWdodHdlaWdodCBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzLiAgSXQgdGFrZXNcXG4gIDI5OlxcdFxcdCAgcGFnZXMgdGhhdCBhcmUgaW4gdGhlIHByb2Nlc3Mgb2YgYmVpbmcgc3dhcHBlZCBvdXQgYW5kIGF0dGVtcHRzIHRvXFxuICAzMDpcXHRcXHQgIGNvbXByZXNzIHRoZW0gaW50byBhIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBSQU0tYmFzZWQgbWVtb3J5IHBvb2wuXFxuICAzMTpcXHRcXHQgIFRoaXMgY2FuIHJlc3VsdCBpbiBhIHNpZ25pZmljYW50IEkvTyByZWR1Y3Rpb24gb24gc3dhcCBkZXZpY2UgYW5kLFxcbiAgMzI6XFx0XFx0ICBpbiB0aGUgY2FzZSB3aGVyZSBkZWNvbXByZXNzaW5nIGZyb20gUkFNIGlzIGZhc3RlciB0aGFuIHN3YXAgZGV2aWNlXFxuICAzMzpcXHRcXHQgIHJlYWRzLCBjYW4gYWxzbyBpbXByb3ZlIHdvcmtsb2FkIHBlcmZvcm1hbmNlLlxcbiAgMzQ6XFx0XFxuICAzNTpcXHRjb25maWcgWlNXQVBfREVGQVVMVF9PTlxcbiAgMzY6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIHRoZSBjb21wcmVzc2VkIGNhY2hlIGZvciBzd2FwIHBhZ2VzIGJ5IGRlZmF1bHRcXFwiXFxuICAzNzpcXHRcXHRkZXBlbmRzIG9uIFpTV0FQXFxuICAzODpcXHRcXHRoZWxwXFxuICAzOTpcXHRcXHQgIElmIHNlbGVjdGVkLCB0aGUgY29tcHJlc3NlZCBjYWNoZSBmb3Igc3dhcCBwYWdlcyB3aWxsIGJlIGVuYWJsZWRcXG4gIDQwOlxcdFxcdCAgYXQgYm9vdCwgb3RoZXJ3aXNlIGl0IHdpbGwgYmUgZGlzYWJsZWQuXFxuICA0MTpcXHRcXG4gIDQyOlxcdFxcdCAgVGhlIHNlbGVjdGlvbiBtYWRlIGhlcmUgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdXNpbmcgdGhlIGtlcm5lbFxcbiAgNDM6XFx0XFx0ICBjb21tYW5kIGxpbmUgJ3pzd2FwLmVuYWJsZWQ9JyBvcHRpb24uXFxuICA0NDpcXHRcXG4gIDQ1OlxcdGNvbmZpZyBaU1dBUF9TSFJJTktFUl9ERUZBVUxUX09OXFxuICA0NjpcXHRcXHRib29sIFxcXCJTaHJpbmsgdGhlIHpzd2FwIHBvb2wgb24gbWVtb3J5IHByZXNzdXJlXFxcIlxcbiAgNDc6XFx0XFx0ZGVwZW5kcyBvbiBaU1dBUFxcbiAgNDg6XFx0XFx0ZGVmYXVsdCBuXFxuICA0OTpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjEzLjk2NTIxNzA3NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM5OTUxMzk1NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZ1bmN0aW9uczpcblxuKipJbnZlc3RpZ2F0aW5nIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIGFuZCB1c2FnZSBvZiB0aGVzZSBgc3dhcF93cml0ZW91dGAgYW5kIGBfX3N3YXBfd3JpdGVvdXRgIGZ1bmN0aW9ucy4gVGhlIGZhY3QgdGhhdCB0aGVyZSdzIGEgZG91YmxlIHVuZGVyc2NvcmUgc3VnZ2VzdHMgYSBtb3JlIGZ1bmRhbWVudGFsLCBwb3RlbnRpYWxseSBpbnRlcm5hbCwgb3BlcmF0aW9uLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB0cmFjZSBhbGwgY2FsbHMgdG8gdGhlc2UgZnVuY3Rpb25zIHdpdGhpbiB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byBpZGVudGlmeSAqZXZlcnkqIGluc3RhbmNlIHdoZXJlIHRoZXkncmUgaW52b2tlZC4gVGhpcyBpbmNsdWRlcyBpbmRpcmVjdCBjYWxscyB0aHJvdWdoIG90aGVyIGZ1bmN0aW9ucywgYW5kIGNhbGxzIGZyb20gZGlmZmVyZW50IGNvbXBvbmVudHMsIGJlY2F1c2UgSSBuZWVkIHRoZSBjb21wbGV0ZSBwaWN0dXJlLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgYSBmdW5jdGlvbiB3aXRoIFwic3dhcFwiIGluIGl0cyBuYW1lLiBJdCBhbG1vc3QgY2VydGFpbmx5IGludm9sdmVzIG1vdmluZyBkYXRhIHJlbGF0ZWQgdG8gc3dhcHBpbmcsIHdoaWNoIGRpcmVjdGx5IGNvbmNlcm5zIHZpcnR1YWwgbWVtb3J5IG1hbmFnZW1lbnQuIEtub3dpbmcgdGhpcywgSSBleHBlY3QgdG8gZmluZCB0aGVzZSBjYWxscyBwcmltYXJpbHkgd2l0aGluIHRoZSBrZXJuZWwgb3IgcmVsYXRlZCBsb3ctbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQgbW9kdWxlcy4gTXkgZXhwZXJ0aXNlIGluIHRoaXMgYXJlYSB0ZWxscyBtZSBJIHNob3VsZCBhbHNvIGxvb2sgZm9yIGNhbGxzIHdpdGhpbiBhbnkgaW50ZXJydXB0IGhhbmRsaW5nIHJvdXRpbmVzLCBvciBwZXJoYXBzIGV2ZW4gaW4gc2VjdGlvbnMgZGVhbGluZyB3aXRoIGRldmljZSBkcml2ZXJzIGlmIHRoZXJlJ3MgYW4gdW51c3VhbCBJL08gcGF0dGVybi4gVGhlIGNvbnRleHQgb2YgdGhlaXIgdXNlIGlzIGNydWNpYWwuIEFyZSB0aGVzZSBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHRzLCBvciBzb21lIG90aGVyIG1lbW9yeSBtYW5hZ2VtZW50IGV2ZW50PyBJJ2xsIHByb2JhYmx5IGJlIGFibGUgdG8gZGV0ZXJtaW5lIHRoaXMgZnJvbSB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoaXMgd2lsbCBzaGVkIGxpZ2h0IG9uIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIHN3YXAgbWVjaGFuaXNtLCBhbmQgaXRzIGludGVyYWN0aW9ucyB3aXRoIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwODIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjE3Ljk2MDM1OTE3MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTY0NjIxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19zd2FwX3dyaXRlb3V0fHN3YXBfd3JpdGVvdXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZV9pby5jPTE4Mz1zdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yMDMtICovXFxubW0vcGFnZV9pby5jOjIwNDppbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMjA1LXtcXG4tLVxcbm1tL3BhZ2VfaW8uYy0yNTAtXFxubW0vcGFnZV9pby5jOjI1MTpcXHRfX3N3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxubW0vcGFnZV9pby5jLTI1Mi1cXHRyZXR1cm4gMDtcXG4tLVxcbm1tL3BhZ2VfaW8uYz0zMzQ9c3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcXG4tLVxcbm1tL3BhZ2VfaW8uYy0zNzEtXFxubW0vcGFnZV9pby5jOjM3Mjp2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9wYWdlX2lvLmMtMzczLXtcXG4tLVxcbm1tL3NobWVtLmM9MTYwNz1pbnQgc2htZW1fd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS9zaG1lbS5jLTE3MTgtXFx0XFx0QlVHX09OKGZvbGlvX21hcHBlZChmb2xpbykpO1xcbm1tL3NobWVtLmM6MTcxOTpcXHRcXHRlcnJvciA9IHN3YXBfd3JpdGVvdXQoY3R4LCBmb2xpbyk7XFxubW0vc2htZW0uYy0xNzIwLVxcdFxcdGlmIChlcnJvciAhPSBBT1BfV1JJVEVQQUdFX0FDVElWQVRFKSB7XFxuLS1cXG5tbS9zd2FwLmg9MjU5PXZvaWQgc3dhcF93cml0ZV9zdWJtaXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgpO1xcbm1tL3N3YXAuaDoyNjA6aW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaDoyNjE6dm9pZCBfX3N3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pO1xcbm1tL3N3YXAuaC0yNjItXFxuLS1cXG5tbS9zd2FwLmg9NDIwPXN0YXRpYyBpbmxpbmUgdm9pZCBzd2FwX3VwZGF0ZV9yZWFkYWhlYWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3N3YXAuaC00MjQtXFxubW0vc3dhcC5oOjQyNTpzdGF0aWMgaW5saW5lIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbm1tL3N3YXAuaC00MjYte1xcbi0tXFxubW0vc3dhcGZpbGUuYz0yOTg3PUVYUE9SVF9TWU1CT0xfR1BMKGFkZF9zd2FwX2V4dGVudCk7XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI5OTEtICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcXG5tbS9zd2FwZmlsZS5jOjI5OTI6ICogYnVpbHQgYXQgc3dhcG9uIHRpbWUgYW5kIGlzIHRoZW4gdXNlZCBhdCBzd2FwX3dyaXRlb3V0L3N3YXBfcmVhZF9mb2xpb1xcbm1tL3N3YXBmaWxlLmMtMjk5My0gKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxcbi0tXFxubW0vdm1zY2FuLmM9NjIxPXN0YXRpYyBwYWdlb3V0X3QgcGFnZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS92bXNjYW4uYy02NTktXFx0ZWxzZVxcbm1tL3Ztc2Nhbi5jOjY2MDpcXHRcXHRyZXMgPSBzd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTY2MS1cXG4tLVxcbm1tL3pzd2FwLmM9ODQwPXN0YXRpYyBib29sIHpzd2FwX2NvbXByZXNzKHN0cnVjdCBwYWdlICpwYWdlLCBzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbi0tXFxubW0venN3YXAuYy04ODAtXFx0ICogb2Ygd3JpdGViYWNrcy4gIElmIHdyaXRlYmFjayBpcyBkaXNhYmxlZCwgcmVqZWN0IHRoZSBwYWdlIHNpbmNlIGl0XFxubW0venN3YXAuYzo4ODE6XFx0ICogb25seSBhZGRzIG1ldGFkYXRhIG92ZXJoZWFkLiAgc3dhcF93cml0ZW91dCgpIHdpbGwgcHV0IHRoZSBwYWdlIGJhY2tcXG5tbS96c3dhcC5jLTg4Mi1cXHQgKiB0byB0aGUgYWN0aXZlIExSVSBsaXN0IGluIHRoZSBjYXNlLlxcbi0tXFxubW0venN3YXAuYz05ODc9c3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4tLVxcbm1tL3pzd2FwLmMtMTA1Mi1cXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cXG5tbS96c3dhcC5jOjEwNTM6XFx0X19zd2FwX3dyaXRlb3V0KFxcdTAwMjZjdHgsIGZvbGlvKTtcXG5tbS96c3dhcC5jLTEwNTQtXFx0c3dhcF93cml0ZV9zdWJtaXQoXFx1MDAyNmN0eCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjE4LjAxNjgyNTY2MVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4NzM0MTc4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIFN3YXAgV3JpdGVvdXQgRnVuY3Rpb25zIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBhbmQgaWRlbnRpZnkgZ29vZCBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hpY2ggZnVuY3Rpb25zIGFyZSBpbnZvbHZlZCBhbmQgdGhlaXIgc2NvcGUuIEknbSBmb2N1c2luZyBvbiBzd2FwIHdyaXRlb3V0IGZ1bmN0aW9ucywgc28gSSdtIGNoZWNraW5nIGlmIGBzd2FwX3dyaXRlb3V0YCwgYF9fc3dhcF93cml0ZW91dGAsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyBhcmUgc3RhdGljIG9yIGdsb2JhbC4gIExvb2tzIGxpa2UgYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YCBpbiBgbW0vcGFnZV9pby5jYCBhcmUgbm9uLXN0YXRpYywgd2hpY2ggbWFrZXMgdGhlbSBwcmltZSBjYW5kaWRhdGVzLiBUaGUgb3RoZXIgZnVuY3Rpb25zLCBzdWNoIGFzIGBzd2FwX3dyaXRlX2VuZGAsIGBzd2FwX2ZzX3dyaXRlX2NvbXBsZXRlYCwgZXRjLiwgYXJlIHN0YXRpYywgc28gSSB3aWxsIGxpa2VseSBleGNsdWRlIHRoZXNlLiBBbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAgaXMgc3RhdGljIGluIGBtbS96c3dhcC5jYC5cblxuTm93LCBsZXQncyBnbyBvdmVyIHRoZSBkaWZmIHRvIGNvbmZpcm0gdGhhdCBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBJJ20gc2VlaW5nIGNoYW5nZXMgaW4gYGluY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oYCByZWxhdGVkIHRvIGByZWNsYWltYCBmbGFncywgYW5kIGluIGBtbS9wYWdlX2lvLmNgLCB3aXRoIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCwgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAsIGFuZCB0aGUgYHN3YXBfd3JpdGVvdXRgIGNhbGxzIHRvIGBfX3N3YXBfd3JpdGVvdXRgLiAgYGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2VgIGlzIG5vdyBgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW9gLCBhbmQgYF9fc3dhcF93cml0ZXBhZ2VgIGJlY29tZXMgYF9fc3dhcF93cml0ZW91dGAuICBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIGBtbS9zd2FwLmhgIHdpdGggdGhlIGRlY2xhcmF0aW9uIG9mIGBfX3N3YXBfd3JpdGVvdXRgLCBgbW0vc3dhcGZpbGUuY2Agd2l0aCBhIGNvbW1lbnQgY2hhbmdlLCBhbmQgZmluYWxseSBgbW0venN3YXAuY2AgY2FsbGluZyBgX19zd2FwX3dyaXRlb3V0YCBpbiBgenN3YXBfd3JpdGViYWNrX2VudHJ5YC4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZXNlIHR3byBmdW5jdGlvbnMsIGBzd2FwX3dyaXRlb3V0YCBhbmQgYF9fc3dhcF93cml0ZW91dGAsIGFyZSB0aGUgbWFpbiBmb2N1cyBvZiB0aGlzIHBhdGNoLlxuXG5BcmUgdGhlc2UgaG90IHBhdGhzPyBQcm9iYWJseSBub3QsIHNpbmNlIHRoZXkgYXJlIGludm9rZWQgZHVyaW5nIHN3YXAgYW5kIG1lbW9yeSByZWNsYWltLiBCdXQgdGhleSBzZWVtIGxpa2UgZ29vZCBlbnRyeSBwb2ludHMuIFNwZWNpZmljYWxseSwgdGhleSdyZSByZXNwb25zaWJsZSBmb3Igd3JpdGluZyBvdXQgYW5vbnltb3VzIHBhZ2VzL2ZvbGlvcyBvciB6c3dhcCB3cml0ZWJhY2sgZW50cmllcy4gVGhleSBhcmUgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IGFyZW4ndCB0cml2aWFsIGlubGluZSBoZWxwZXJzLiAgVGhpcyBtYWtlcyB0aGVtIGdvb2QgXCJmb2N1cyBzeW1ib2xzXCIuXG5cbkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHJlcXVpcmVkIGtlcm5lbCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIEknbGwgbmVlZCBgQ09ORklHX1NXQVBgIGFuZCBgQ09ORklHX1pTV0FQYCBmb3IgdGhlIFpzd2FwIHBhdGguIEFsc28sIGBDT05GSUdfQkxLX0NHUk9VUGAgYW5kIGBDT05GSUdfTUVNQ0dgIGFyZSByZWxldmFudCwgZ2l2ZW4gdGhlIGBiaW9fYXNzb2NpYXRlX2Jsa2dfZnJvbV9mb2xpb2AgY2FsbC5cblxuT2theSwgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBpbXBhY3Qgd29ydGggZnV6emluZy4gWWVzLCBhYnNvbHV0ZWx5LiBUaGUgcGF0Y2ggY2hhbmdlcyBob3cgc3dhcCB3cml0ZW91dCB3b3JrcyB3aXRoIGZvbGlvcyBpbnN0ZWFkIG9mIGluZGl2aWR1YWwgcGFnZXMsIGluY2x1ZGluZyB0aGUgYGZvbGlvLVx1MDAzZXN3YXBgIGNhbGN1bGF0aW9uIGFuZCB0aGUgYGVudHJ5LnZhbCsrYCBsb2dpYy4gSXQgdXNlcyBgYnZlY19mb2xpb2AsIGFuZCBtb2RpZmllcyBmb2xpbyBkaXJ0eS9yZWNsYWltIHN0YXRlcyBvbiBlcnJvci4gVGhpcyBpcyBjb3JlIHN3YXAgZnVuY3Rpb25hbGl0eSwgc28gZnV6emluZyBpcyBqdXN0aWZpZWQuXG5cbkxldCBtZSB2ZXJpZnkgdGhvc2UgY29uZmlnIG5hbWVzOiBTV0FQLCBaU1dBUCwgTUVNQ0csIGFuZCBCTEtfQ0dST1VQLlxuXG5TbywgSSdtIGdvaW5nIHdpdGg6XG5cbiogICAqKkZvY3VzIFN5bWJvbHMqKjogYHN3YXBfd3JpdGVvdXRgIGFuZCBgX19zd2FwX3dyaXRlb3V0YFxuKiAgICoqRW5hYmxlIENvbmZpZ3MqKjogU1dBUCwgWlNXQVAsIE1FTUNHLCBCTEtcXF9DR1JPVVBcblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBzY2FuIHRoZSBiZWdpbm5pbmcgb2YgYG1tL3BhZ2VfaW8uY2AgKGxpbmVzIDEtMTAwKSB0byBkb3VibGUtY2hlY2sgdGhhdCBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgdGhpbmsgdGhhdCdzIGl0IVxuXG5cbiIsIklucHV0VG9rZW5zIjo4NDIxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODoyNi43NTEwMDcyMVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9wYWdlX2lvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0LypcXG4gICAzOlxcdCAqICBsaW51eC9tbS9wYWdlX2lvLmNcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiAgQ29weXJpZ2h0IChDKSAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0ICBMaW51cyBUb3J2YWxkc1xcbiAgIDY6XFx0ICpcXG4gICA3OlxcdCAqICBTd2FwIHJlb3JnYW5pc2VkIDI5LjEyLjk1LCBcXG4gICA4OlxcdCAqICBBc3luY2hyb25vdXMgc3dhcHBpbmcgYWRkZWQgMzAuMTIuOTUuIFN0ZXBoZW4gVHdlZWRpZVxcbiAgIDk6XFx0ICogIFJlbW92ZWQgcmFjZSBpbiBhc3luYyBzd2FwcGluZy4gMTQuNC4xOTk2LiBCcnVubyBIYWlibGVcXG4gIDEwOlxcdCAqICBBZGQgc3dhcCBvZiBzaGFyZWQgcGFnZXMgdGhyb3VnaCB0aGUgcGFnZSBjYWNoZS4gMjAuMi4xOTk4LiBTdGVwaGVuIFR3ZWVkaWVcXG4gIDExOlxcdCAqICBBbHdheXMgdXNlIGJyd19wYWdlLCBsaWZlIGJlY29tZXMgc2ltcGxlci4gMTIgTWF5IDE5OTggRXJpYyBCaWVkZXJtYW5cXG4gIDEyOlxcdCAqL1xcbiAgMTM6XFx0XFxuICAxNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbW0uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWxfc3RhdC5oXFx1MDAzZVxcbiAgMTY6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2dmcC5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4gIDE4OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvYmlvLmhcXHUwMDNlXFxuICAyMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dyaXRlYmFjay5oXFx1MDAzZVxcbiAgMjI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2Jsa2Rldi5oXFx1MDAzZVxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BzaS5oXFx1MDAzZVxcbiAgMjQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Vpby5oXFx1MDAzZVxcbiAgMjU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFxcdTAwM2VcXG4gIDI2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheWFjY3QuaFxcdTAwM2VcXG4gIDI3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N3YXBfb3BzLmhcXHUwMDNlXFxuICAyOTpcXHQjaW5jbHVkZSBcXFwic3dhcC5oXFxcIlxcbiAgMzA6XFx0I2luY2x1ZGUgXFxcInN3YXBfdGFibGUuaFxcXCJcXG4gIDMxOlxcdFxcbiAgMzI6XFx0aW50IGdlbmVyaWNfc3dhcGZpbGVfYWN0aXZhdGUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpcyxcXG4gIDMzOlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBmaWxlICpzd2FwX2ZpbGUsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHRzZWN0b3JfdCAqc3BhbilcXG4gIDM1OlxcdHtcXG4gIDM2OlxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nID0gc3dhcF9maWxlLVxcdTAwM2VmX21hcHBpbmc7XFxuICAzNzpcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gbWFwcGluZy1cXHUwMDNlaG9zdDtcXG4gIDM4OlxcdFxcdHVuc2lnbmVkIGJsb2Nrc19wZXJfcGFnZTtcXG4gIDM5OlxcdFxcdHVuc2lnbmVkIGxvbmcgcGFnZV9ubztcXG4gIDQwOlxcdFxcdHVuc2lnbmVkIGJsa2JpdHM7XFxuICA0MTpcXHRcXHRzZWN0b3JfdCBwcm9iZV9ibG9jaztcXG4gIDQyOlxcdFxcdHNlY3Rvcl90IGxhc3RfYmxvY2s7XFxuICA0MzpcXHRcXHRzZWN0b3JfdCBsb3dlc3RfYmxvY2sgPSAtMTtcXG4gIDQ0OlxcdFxcdHNlY3Rvcl90IGhpZ2hlc3RfYmxvY2sgPSAwO1xcbiAgNDU6XFx0XFx0aW50IG5yX2V4dGVudHMgPSAwO1xcbiAgNDY6XFx0XFx0aW50IHJldDtcXG4gIDQ3OlxcdFxcbiAgNDg6XFx0XFx0YmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuICA0OTpcXHRcXHRibG9ja3NfcGVyX3BhZ2UgPSBQQUdFX1NJWkUgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG4gIDUwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODoyNi43NTExMDc4NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzI5ODQ3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gc3VtbWFyaXplIG15IHRob3VnaHQgcHJvY2Vzcy4gSGVyZSB3ZSBnbzpcblxuKipUaGlua2luZyBUaHJvdWdoIGEgRnVuY3Rpb24gTmFtZSoqXG5cblJpZ2h0LCBzbyBJIG5lZWQgdG8gbmFtZSB0aGlzIHBpZWNlIG9mIGNvZGUg4oCTIGxldCdzIGNhbGwgaXQgYSBmdW5jdGlvbiBmb3Igbm93IOKAkyB0aGF0IHdpbGwgaGFuZGxl4oCmICp0aGUgcmVzdWx0cyouIEhtbSwgYnV0IFwicmVzdWx0c1wiIGlzIHRvbyBnZW5lcmljLCBpc24ndCBpdD8gSXQgY291bGQgYmUgYW55dGhpbmcuIEkgbmVlZCBzb21ldGhpbmcgdGhhdCBoaW50cyBhdCB0aGUgKmFjdGlvbiogb2YgaGFuZGxpbmcsIG5vdCBqdXN0IHRoZSBkYXRhIGl0c2VsZi5cblxuSSBjb25zaWRlcmVkIGEgZmV3IG9wdGlvbnMsIGxpa2UgXCJwcm9jZXNzX3Jlc3VsdHNcIiBvciBcImhhbmRsZV9yZXN1bHRzLFwiIGJ1dCB0aG9zZSBmZWVsIGEgbGl0dGxlLi4uY2x1bmt5LiBUaGV5J3JlIGZpbmUsIGJ1dCBJJ20gYWltaW5nIGZvciBzb21ldGhpbmcgbW9yZSBjb25jaXNlLCBtb3JlIGRpcmVjdC4gSSB3YW50IGl0IHRvIGJlIGltbWVkaWF0ZWx5IGNsZWFyIHdoYXQgdGhlIGZ1bmN0aW9uIGRvZXMuXG5cblRoZW4gaXQgaGl0IG1lOiBJJ20gbm90IGp1c3QgKnByb2Nlc3NpbmcqIG9yICpoYW5kbGluZyogdGhlIHJlc3VsdHMsIEknbSBlZmZlY3RpdmVseSAqc2V0dGluZyogdGhlbSwgcmlnaHQ/IEknbSBlc3RhYmxpc2hpbmcgdGhlIGZpbmFsIHN0YXRlLCB0aGUgb3V0cHV0LiBUaGVyZWZvcmUsIG5hbWluZyBpdCBgc2V0LXJlc3VsdHNgIGZlZWxzIG1vcmUgYXBwcm9wcmlhdGUuIEl0J3MgYSBjbGVhciwgYWN0aXZlIHZlcmIsIGZvbGxvd2VkIGJ5IHRoZSBub3VuIGl0IGFmZmVjdHMuIEl0J3Mgc2hvcnQsIG1lbW9yYWJsZSwgYW5kIGhvcGVmdWxseSwgaW5zdGFudGx5IHVuZGVyc3RhbmRhYmxlIHRvIGFueW9uZSByZWFkaW5nIHRoZSBjb2RlLiBJIHRoaW5rIEknbGwgZ28gd2l0aCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTAyNywiT3V0cHV0VG9rZW5zIjoxMjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjlUMTk6Mjg6MzQuNDgwOTU3MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzMzNjU2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiLFxuICAgIFwiWlNXQVBcIixcbiAgICBcIk1FTUNHXCIsXG4gICAgXCJCTEtfQ0dST1VQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic3dhcF93cml0ZW91dFwiLFxuICAgIFwiX19zd2FwX3dyaXRlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgc3dhcCB3cml0ZW91dCBwYXRocyBmcm9tIG9wZXJhdGluZyBvbiBzdHJ1Y3QgcGFnZSB0byBzdHJ1Y3QgZm9saW8sIGluY2x1ZGluZyBmb2xpby1sZXZlbCBzd2FwIGVudHJ5IGNhbGN1bGF0aW9uLCBjb21wbGV0aW9uIGVycm9yIGhhbmRsaW5nLCBhbmQgaGVscGVyIGZ1bmN0aW9ucyBpbiBwYWdlX2lvLmMgYW5kIHpzd2FwLmMuIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBsb2dpYywgd2hpY2ggaXMgZnVuY3Rpb25hbCBhbmQgcmVhY2hhYmxlIGR1cmluZyBtZW1vcnkgcmVjbGFpbS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJTV0FQXCIsXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiTUVNQ0dcIixcbiAgICBcIkJMS19DR1JPVVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzd2FwX3dyaXRlb3V0XCIsXG4gICAgXCJfX3N3YXBfd3JpdGVvdXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyBzd2FwIHdyaXRlb3V0IHBhdGhzIGZyb20gb3BlcmF0aW5nIG9uIHN0cnVjdCBwYWdlIHRvIHN0cnVjdCBmb2xpbywgaW5jbHVkaW5nIGZvbGlvLWxldmVsIHN3YXAgZW50cnkgY2FsY3VsYXRpb24sIGNvbXBsZXRpb24gZXJyb3IgaGFuZGxpbmcsIGFuZCBoZWxwZXIgZnVuY3Rpb25zIGluIHBhZ2VfaW8uYyBhbmQgenN3YXAuYy4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIGxvZ2ljLCB3aGljaCBpcyBmdW5jdGlvbmFsIGFuZCByZWFjaGFibGUgZHVyaW5nIG1lbW9yeSByZWNsYWltLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODozNC41NTgzMDAxNjlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTIyMjE1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOVQxOToyODozNC41NTg3NzMzNzlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo4OTUxNzQ0MzQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cXHUwMDNlc3dhcGAuXFxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxcblxcbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI4MTFhOGVjODBkZWE1MGZmMmEwYjQzOWMwNzQzZjdiYTJmYjg3YWZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyOSAxOToyNzo0OSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGFnZS1mbGFncy5oIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbmluZGV4IDdhODYzNTcyYWRjZTcuLmFlMmViYWVkNmQ0ZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BhZ2UtZmxhZ3MuaFxuKysrIGIvaW5jbHVkZS9saW51eC9wYWdlLWZsYWdzLmhcbkBAIC01OTMsOCArNTkzLDcgQEAgVEVTVFBBR0VGTEFHKFdyaXRlYmFjaywgd3JpdGViYWNrLCBQRl9OT19UQUlMKVxuIEZPTElPX0ZMQUcobWFwcGVkdG9kaXNrLCBGT0xJT19IRUFEX1BBR0UpXG4gXG4gLyogUEdfcmVhZGFoZWFkIGlzIG9ubHkgdXNlZCBmb3IgcmVhZHM7IFBHX3JlY2xhaW0gaXMgb25seSBmb3Igd3JpdGVzICovXG4tUEFHRUZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbi1cdFRFU1RDTEVBUkZMQUcoUmVjbGFpbSwgcmVjbGFpbSwgUEZfTk9fVEFJTClcbitGT0xJT19GTEFHKHJlY2xhaW0sIEZPTElPX0hFQURfUEFHRSlcbiBGT0xJT19GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFx0Rk9MSU9fVEVTVF9DTEVBUl9GTEFHKHJlYWRhaGVhZCwgRk9MSU9fSEVBRF9QQUdFKVxuIFxuZGlmZiAtLWdpdCBhL21tL3BhZ2VfaW8uYyBiL21tL3BhZ2VfaW8uY1xuaW5kZXggODg5NjI1NzFjYjkzMS4uMWRhNGZmNDg0ZjA5NyAxMDA2NDRcbi0tLSBhL21tL3BhZ2VfaW8uY1xuKysrIGIvbW0vcGFnZV9pby5jXG5AQCAtMTYwLDcgKzE2MCw3IEBAIHN0YXRpYyB2b2lkIHN3YXBfemVyb21hcF9mb2xpb19zZXQoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZyA9IGdldF9vYmpfY2dyb3VwX2Zyb21fZm9saW8oZm9saW8pO1xuIFx0aW50IG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE2OCw4ICsxNjgsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHRjaSA9IHN3YXBfY2x1c3Rlcl9nZXRfYW5kX2xvY2soZm9saW8pO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZm9saW9fbnJfcGFnZXMoZm9saW8pOyBpKyspIHtcbi1cdFx0ZW50cnkgPSBwYWdlX3N3YXBfZW50cnkoZm9saW9fcGFnZShmb2xpbywgaSkpO1xuIFx0XHRfX3N3YXBfdGFibGVfc2V0X3plcm8oY2ksIHN3cF9jbHVzdGVyX29mZnNldChlbnRyeSkpO1xuK1x0XHRlbnRyeS52YWwrKztcbiBcdH1cbiBcdHN3YXBfY2x1c3Rlcl91bmxvY2soY2kpO1xuIFxuQEAgLTE4Myw3ICsxODMsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fc2V0KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gc3RhdGljIHZvaWQgc3dhcF96ZXJvbWFwX2ZvbGlvX2NsZWFyKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4ge1xuIFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTtcbi1cdHN3cF9lbnRyeV90IGVudHJ5O1xuK1x0c3dwX2VudHJ5X3QgZW50cnkgPSBmb2xpby1cdTAwM2Vzd2FwO1xuIFx0dW5zaWduZWQgaW50IGk7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oIWZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSwgZm9saW8pO1xuQEAgLTE5MSw4ICsxOTEsOCBAQCBzdGF0aWMgdm9pZCBzd2FwX3plcm9tYXBfZm9saW9fY2xlYXIoc3RydWN0IGZvbGlvICpmb2xpbylcbiBcbiBcdGNpID0gc3dhcF9jbHVzdGVyX2dldF9hbmRfbG9jayhmb2xpbyk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBmb2xpb19ucl9wYWdlcyhmb2xpbyk7IGkrKykge1xuLVx0XHRlbnRyeSA9IHBhZ2Vfc3dhcF9lbnRyeShmb2xpb19wYWdlKGZvbGlvLCBpKSk7XG4gXHRcdF9fc3dhcF90YWJsZV9jbGVhcl96ZXJvKGNpLCBzd3BfY2x1c3Rlcl9vZmZzZXQoZW50cnkpKTtcbitcdFx0ZW50cnkudmFsKys7XG4gXHR9XG4gXHRzd2FwX2NsdXN0ZXJfdW5sb2NrKGNpKTtcbiB9XG5AQCAtMjA5LDcgKzIwOSw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0XHRnb3RvIG91dF91bmxvY2s7XG4gXG4gXHQvKlxuLVx0ICogQXJjaCBjb2RlIG1heSBoYXZlIHRvIHByZXNlcnZlIG1vcmUgZGF0YSB0aGFuIGp1c3QgdGhlIHBhZ2VcbitcdCAqIEFyY2ggY29kZSBtYXkgaGF2ZSB0byBwcmVzZXJ2ZSBtb3JlIGRhdGEgdGhhbiBqdXN0IHRoZSBmb2xpb1xuIFx0ICogY29udGVudHMsIGUuZy4gbWVtb3J5IHRhZ3MuXG4gXHQgKi9cbiBcdHJldCA9IGFyY2hfcHJlcGFyZV90b19zd2FwKGZvbGlvKTtcbkBAIC0yMjAsNyArMjIwLDcgQEAgaW50IHN3YXBfd3JpdGVvdXQoc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG4gXG4gXHQvKlxuIFx0ICogVXNlIHRoZSBzd2FwIHRhYmxlIHplcm8gbWFyayB0byBhdm9pZCBkb2luZyBJTyBmb3IgemVyby1maWxsZWRcbi1cdCAqIHBhZ2VzLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuK1x0ICogZm9saW9zLiBUaGUgemVybyBtYXJrIGlzIHByb3RlY3RlZCBieSB0aGUgY2x1c3RlciBsb2NrLCB3aGljaCBpc1xuIFx0ICogYWNxdWlyZWQgaW50ZXJuYWxseSBieSBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyLlxuIFx0ICovXG4gXHRpZiAoaXNfZm9saW9femVyb19maWxsZWQoZm9saW8pKSB7XG5AQCAtMjQ4LDcgKzI0OCw3IEBAIGludCBzd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0fVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4tXHRfX3N3YXBfd3JpdGVwYWdlKGN0eCwgZm9saW8pO1xuK1x0X19zd2FwX3dyaXRlb3V0KGN0eCwgZm9saW8pO1xuIFx0cmV0dXJuIDA7XG4gb3V0X3VubG9jazpcbiBcdGZvbGlvX3VubG9jayhmb2xpbyk7XG5AQCAtMjc3LDcgKzI3Nyw3IEBAIHN0YXRpYyBib29sIGZvbGlvX2Jsa2dfY2FuX21lcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBmb2xpbyAqcHJldl9mb2xpbylcbiBcdHJldHVybiBjYW5fbWVyZ2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2Uoc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyB2b2lkIGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX2ZvbGlvKHN0cnVjdCBiaW8gKmJpbywgc3RydWN0IGZvbGlvICpmb2xpbylcbiB7XG4gXHRzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzO1xuIFxuQEAgLTI5OCw3ICsyOTgsOSBAQCBzdGF0aWMgYm9vbCBmb2xpb19ibGtnX2Nhbl9tZXJnZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzdHJ1Y3QgZm9saW8gKnByZXZfZm9saW8pXG4ge1xuIFx0cmV0dXJuIHRydWU7XG4gfVxuLSNkZWZpbmUgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fcGFnZShiaW8sIGZvbGlvKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4rc3RhdGljIHZvaWQgYmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oc3RydWN0IGJpbyAqYmlvLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbit9XG4gI2VuZGlmIC8qIENPTkZJR19NRU1DRyBcdTAwMjZcdTAwMjYgQ09ORklHX0JMS19DR1JPVVAgKi9cbiBcbiBzdGF0aWMgbWVtcG9vbF90ICpzaW9fcG9vbDtcbkBAIC0zNjcsNyArMzY5LDcgQEAgc3RhdGljIHZvaWQgc3dhcF9hZGRfZm9saW8oc3RydWN0IHN3YXBfaW9fY3R4ICpjdHgsIHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBydylcbiBcdH1cbiB9XG4gXG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3ZvaWQgX19zd2FwX3dyaXRlb3V0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiBcdFZNX0JVR19PTl9GT0xJTyghZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pLCBmb2xpbyk7XG4gXG5AQCAtNDk3LDEzICs0OTksMTMgQEAgc3RhdGljIHZvaWQgc3dhcF93cml0ZV9lbmQoc3RydWN0IHN3YXBfaW9jYiAqc2lvLCBib29sIGZhaWxlZClcbiBcdGludCBwO1xuIFxuIFx0Zm9yIChwID0gMDsgcCBcdTAwM2Mgc2lvLVx1MDAzZW5yX2J2ZWNzOyBwKyspIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbcF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzW3BdKTtcbiBcbiBcdFx0aWYgKGZhaWxlZCkge1xuLVx0XHRcdHNldF9wYWdlX2RpcnR5KHBhZ2UpO1xuLVx0XHRcdENsZWFyUGFnZVJlY2xhaW0ocGFnZSk7XG4rXHRcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4rXHRcdFx0Zm9saW9fY2xlYXJfcmVjbGFpbShmb2xpbyk7XG4gXHRcdH1cbi1cdFx0ZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpO1xuK1x0XHRmb2xpb19lbmRfd3JpdGViYWNrKGZvbGlvKTtcbiBcdH1cbiBcdG1lbXBvb2xfZnJlZShzaW8sIHNpb19wb29sKTtcbiB9XG5AQCAtNTE0LDE2ICs1MTYsMTYgQEAgc3RhdGljIHZvaWQgc3dhcF9mc193cml0ZV9jb21wbGV0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIGxvbmcgcmV0KVxuIFx0Ym9vbCBmYWlsZWQgPSByZXQgIT0gc2lvLVx1MDAzZWxlbjtcbiBcbiBcdGlmIChmYWlsZWQpIHtcbi1cdFx0c3RydWN0IHBhZ2UgKnBhZ2UgPSBzaW8tXHUwMDNlYnZlY3NbMF0uYnZfcGFnZTtcbitcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGJ2ZWNfZm9saW8oXHUwMDI2c2lvLVx1MDAzZWJ2ZWNzWzBdKTtcbiBcbiBcdFx0LypcbiBcdFx0ICogSW4gdGhlIGNhc2Ugb2Ygc3dhcC1vdmVyLW5mcywgdGhpcyBjYW4gYmUgYSB0ZW1wb3JhcnkgZmFpbHVyZVxuIFx0XHQgKiBpZiB0aGUgc3lzdGVtIGhhcyBsaW1pdGVkIG1lbW9yeSBmb3IgYWxsb2NhdGluZyB0cmFuc21pdFxuLVx0XHQgKiBidWZmZXJzLiAgTWFyayB0aGUgcGFnZSBkaXJ0eSBhbmQgYXZvaWRcbitcdFx0ICogYnVmZmVycy4gIE1hcmsgdGhlIGZvbGlvIGRpcnR5IGFuZCBhdm9pZFxuIFx0XHQgKiBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUgYnV0IHJhdGUtbGltaXQgdGhlIG1lc3NhZ2VzLlxuIFx0XHQgKi9cbiBcdFx0cHJfZXJyX3JhdGVsaW1pdGVkKFwiV3JpdGUgZXJyb3IgJWxkIG9uIGRpbyBzd2FwZmlsZSAoJWxsdSlcXG5cIixcbi1cdFx0XHRcdCAgIHJldCwgc3dhcF9kZXZfcG9zKHBhZ2Vfc3dhcF9lbnRyeShwYWdlKSkpO1xuK1x0XHRcdFx0ICAgcmV0LCBzd2FwX2Rldl9wb3MoZm9saW8tXHUwMDNlc3dhcCkpO1xuIFx0fVxuIFxuIFx0c3dhcF93cml0ZV9lbmQoc2lvLCBmYWlsZWQpO1xuQEAgLTU5Niw3ICs1OTgsNyBAQCBzdGF0aWMgdm9pZCBzd2FwX2JkZXZfc3VibWl0X3dyaXRlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KVxuIFx0XHRcdFJFUV9PUF9XUklURSB8IFJFUV9TV0FQKTtcbiBcdGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgPSBzaW8tXHUwMDNlbGVuO1xuIFx0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gc3dhcF9mb2xpb19zZWN0b3IoYmlvX2ZpcnN0X2ZvbGlvX2FsbChiaW8pKTtcbi1cdGJpb19hc3NvY2lhdGVfYmxrZ19mcm9tX3BhZ2UoYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuK1x0YmlvX2Fzc29jaWF0ZV9ibGtnX2Zyb21fZm9saW8oYmlvLCBiaW9fZmlyc3RfZm9saW9fYWxsKGJpbykpO1xuIFxuIFx0aWYgKGN0eC1cdTAwM2VzaXMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTykge1xuIFx0XHRzdWJtaXRfYmlvX3dhaXQoYmlvKTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IGZkZGJhN2E4NzUwMGEuLjBiNWQ1MDc3MzliY2IgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTI1OCw3ICsyNTgsNyBAQCB2b2lkIHN3YXBfcmVhZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gdm9pZCBzd2FwX3JlYWRfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiB2b2lkIHN3YXBfd3JpdGVfc3VibWl0KHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4KTtcbiBpbnQgc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4tdm9pZCBfX3N3YXBfd3JpdGVwYWdlKHN0cnVjdCBzd2FwX2lvX2N0eCAqY3R4LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbit2b2lkIF9fc3dhcF93cml0ZW91dChzdHJ1Y3Qgc3dhcF9pb19jdHggKmN0eCwgc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gXG4gLyogbGludXgvbW0vc3dhcF9zdGF0ZS5jICovXG4gZXh0ZXJuIHN0cnVjdCBhZGRyZXNzX3NwYWNlIHN3YXBfc3BhY2UgX19yZWFkX21vc3RseTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuY1xuaW5kZXggNTFmNWE1MjViYjYxYy4uYWI5ZDQ1ZGJiZWY4ZSAxMDA2NDRcbi0tLSBhL21tL3N3YXBmaWxlLmNcbisrKyBiL21tL3N3YXBmaWxlLmNcbkBAIC0yOTg5LDcgKzI5ODksNyBAQCBFWFBPUlRfU1lNQk9MX0dQTChhZGRfc3dhcF9leHRlbnQpO1xuIC8qXG4gICogQSBgc3dhcCBleHRlbnQnIGlzIGEgc2ltcGxlIHRoaW5nIHdoaWNoIG1hcHMgYSBjb250aWd1b3VzIHJhbmdlIG9mIHBhZ2VzXG4gICogb250byBhIGNvbnRpZ3VvdXMgcmFuZ2Ugb2YgZGlzayBibG9ja3MuICBBIHJidHJlZSBvZiBzd2FwIGV4dGVudHMgaXNcbi0gKiBidWlsdCBhdCBzd2Fwb24gdGltZSBhbmQgaXMgdGhlbiB1c2VkIGF0IHN3YXBfd3JpdGVwYWdlL3N3YXBfcmVhZF9mb2xpb1xuKyAqIGJ1aWx0IGF0IHN3YXBvbiB0aW1lIGFuZCBpcyB0aGVuIHVzZWQgYXQgc3dhcF93cml0ZW91dC9zd2FwX3JlYWRfZm9saW9cbiAgKiB0aW1lIGZvciBsb2NhdGluZyB3aGVyZSBvbiBkaXNrIGEgcGFnZSBiZWxvbmdzLlxuICAqXG4gICogSWYgdGhlIHN3YXBmaWxlIGlzIGFuIFNfSVNCTEsgYmxvY2sgZGV2aWNlLCBhIHNpbmdsZSBleHRlbnQgaXMgaW5zdGFsbGVkLlxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCAzN2YzNGU0MDZjOGUzLi44OGExYTc0ZjkxODUyIDEwMDY0NFxuLS0tIGEvbW0venN3YXAuY1xuKysrIGIvbW0venN3YXAuY1xuQEAgLTEwNTAsNyArMTA1MCw3IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksXG4gXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4gXG4gXHQvKiBzdGFydCB3cml0ZWJhY2sgKi9cbi1cdF9fc3dhcF93cml0ZXBhZ2UoXHUwMDI2Y3R4LCBmb2xpbyk7XG4rXHRfX3N3YXBfd3JpdGVvdXQoXHUwMDI2Y3R4LCBmb2xpbyk7XG4gXHRzd2FwX3dyaXRlX3N1Ym1pdChcdTAwMjZjdHgpO1xuIFxuIG91dDpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjM0LjU1ODc3NDc3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo4OTUxNzIyMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEFuYWx5c2lzIG9mIFN3YXAgRm9saW8gQ29udmVyc2lvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhlIHJlcXVlc3QgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQgZG9lc24ndCwgYnV0IGxldCdzIGNvbmZpcm0gdGhpcyByaWdvcm91c2x5LlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGFjdHVhbGx5ICpkb2luZyouIEJhc2VkIG9uIHRoZSB0aXRsZSBhbmQgZGlmZiwgaXQgYXBwZWFycyB0byBiZSBhIGZvbGlvIGNvbnZlcnNpb24gYW5kIGNsZWFudXAgd2l0aGluIHRoZSBzd2FwIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBpdCBpbnZvbHZlcyB0aGUgZm9sbG93aW5nOlxuXG4qICAgUmVwbGFjaW5nIGBQQUdFRkxBRyhSZWNsYWltLCByZWNsYWltLCBQRl9OT19UQUlMKWAgYW5kIHJlbGF0ZWQgbWFjcm9zIHdpdGggYEZPTElPX0ZMQUcocmVjbGFpbSwgRk9MSU9fSEVBRF9QQUdFKWAgd2hpY2ggaXMgYSBjb21tb24gY29udmVyc2lvbiBmcm9tIHBhZ2UgdG8gZm9saW8gZmxhZyBtYW5hZ2VtZW50LlxuKiAgIFVwZGF0aW5nIGBzd2FwX3plcm9tYXBfZm9saW9fc2V0YCBhbmQgYHN3YXBfemVyb21hcF9mb2xpb19jbGVhcmAgdG8gdXNlIGBmb2xpby1cdTAwM2Vzd2FwYCBpbnN0ZWFkIG9mIGRpcmVjdGx5IGFjY2Vzc2luZyB0aGUgcGFnZSdzIHN3YXAgZW50cnkuIFRoaXMgc2VlbXMgdG8gYmUgYSBzdHJhaWdodGZvcndhcmQgdHlwZSBjb252ZXJzaW9uL2NsZWFudXAuXG4qICAgUmVuYW1pbmcgYF9fc3dhcF93cml0ZXBhZ2VgIHRvIGBfX3N3YXBfd3JpdGVvdXRgIGFuZCB1cGRhdGluZyByZWxldmFudCBjYWxscyBhbmQgY29tbWVudHMuIEFsc28gcmVuYW1pbmcgYSByZWxhdGVkIGBiaW9fYXNzb2NpYXRlYCBmdW5jdGlvbi5cbiogICBDb252ZXJ0aW5nIHNldmVyYWwgcGFnZS1iYXNlZCBmdW5jdGlvbnMgKGUuZy4gYHN3YXBfd3JpdGVfZW5kYCwgYHN3YXBfZnNfd3JpdGVfY29tcGxldGVgKSB0byB1c2UgZm9saW8tYmFzZWQgYWx0ZXJuYXRpdmVzIHdpdGggZnVuY3Rpb25zIGxpa2UgYGJ2ZWNfZm9saW9gLCBgZm9saW9fbWFya19kaXJ0eWAsIGBmb2xpb19jbGVhcl9yZWNsYWltYCwgYW5kIGBmb2xpb19lbmRfd3JpdGViYWNrYC5cblxuRXNzZW50aWFsbHksIGl0J3MgYSByZWZhY3RvcmluZyB0byBtb2Rlcm5pemUgdGhlIHN3YXAgaW1wbGVtZW50YXRpb24gd2l0aCBgZm9saW9gIHN0cnVjdHVyZXMsIHdoaWNoIGhhcyBiZWVuIGRvbmUgc2V2ZXJhbCB0aW1lcyBpbiB0aGUgcGFzdC5cblxuTm93LCBmb3IgdGhlIEtNU0FOIGFzc2Vzc21lbnQuIEtNU0FOIGZvY3VzZXMgb24gZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2VyIHNwYWNlLiBEb2VzIHRoaXMgcGF0Y2ggaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgb2YgdGhlc2UgYXJlYXM/IEkgbmVlZCB0byBhbmFseXplIGVhY2ggY2hhbmdlIGNhcmVmdWxseTpcblxuMS4gICoqS2VybmVsIFN0cnVjdHVyZXMgXHUwMDI2IFVzZXIgU3BhY2U6KiogRG9lcyBpdCBtb2RpZnkgYW55IGtlcm5lbCBzdHJ1Y3R1cmVzIHRoYXQgYXJlIHNlbnQgdG8gdXNlciBzcGFjZT8gTm8uIFRoaXMgaXMgYWxsIGludGVybmFsIE1NL3N3YXAgc3R1ZmYuXG4yLiAgKipDb25kaXRpb25hbCBMb2dpYy9CcmFuY2hpbmc6KiogRG9lcyBpdCBpbnRyb2R1Y2UgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIGJhc2VkIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOby5cbjMuICAqKkNvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb246KiogRG9lcyBpdCBhbGxvY2F0ZSBvciBpbml0aWFsaXplIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQ/IE5vLlxuNC4gICoqQm91bmRzL0xlbmd0aCBDaGVja3M6KiogRG9lcyBpdCBtb2RpZnkgYm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgdGhhdCBjb3VsZCBhbGxvdyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzPyBOby5cbjUuICAqKk1lbW9yeSBMZWFrczoqKiBEb2VzIGl0IGNyZWF0ZSBhbnkgbWVtb3J5IGluZm8gbGVha3MgdG8gdXNlciBzcGFjZT8gTm8uXG5cblRoZSBjb2RlIG1vZGlmaWNhdGlvbnMgYXJlIHN0cmljdGx5IGludGVybmFsIHRvIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW0sIG1haW5seSBpbnZvbHZpbmcgY2hhbmdlcyBmcm9tIGBzdHJ1Y3QgcGFnZWAgdG8gYHN0cnVjdCBmb2xpb2AgZGF0YSBzdHJ1Y3R1cmVzLCByZW5hbWVkIHZhcmlhYmxlcywgYW5kIG1hY3JvIGNoYW5nZXMuIFRoZXJlJ3Mgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXIgc3BhY2UgYW5kIG5vIGNoYW5nZXMgdGhhdCB3b3VsZCBhbGxvdyB0aGUgdXNlciB0byByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGRpcmVjdGx5LlxuXG5MZXQncyBkb3VibGUgY2hlY2sgdGhvc2UgYHN3YXBfemVyb21hcGAgZW50cmllczogdGhlIGBzd3BfZW50cnlfdCBlbnRyeSA9IGZvbGlvLVx1MDAzZXN3YXA7YCB2YXJpYWJsZXMgYXJlICppbW1lZGlhdGVseSogaW5pdGlhbGl6ZWQgd2l0aCB0aGUgYGZvbGlvLVx1MDAzZXN3YXBgIHZhbHVlIHVwb24gZGVjbGFyYXRpb24uIFRoZXJlZm9yZSwgdGhlcmUgaXMgbm8gY2hhbmNlIHRoYXQgYW4gdW5pbml0aWFsaXplZCBgZW50cnlgIGlzIGJlaW5nIHVzZWQuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIHVuZXF1aXZvY2FsbHkgYGZhbHNlYC4gVGhlIHBvdGVudGlhbCBmb3IgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggcHJpbWFyaWx5IGxpZXMgaW4gZm9saW8gcmVmY291bnRpbmcsIGxvY2tpbmcsIGFuZCB0aGUgc3dhcCBzdWJzeXN0ZW0ncyBzdGF0ZSBtYWNoaW5lLCBidXQgdGhlc2Ugd291bGQgYmUgaWRlbnRpZmllZCBieSB0aGUgZXhpc3RpbmcgS0FTQU4gY2hlY2tzLCBMT0NLREVQLCBhbmQgVk0gYXNzZXJ0aW9ucy4gVGhpcyBkb2Vzbid0IG5lY2Vzc2l0YXRlIGEgc3BlY2lhbGl6ZWQgS01TQU4gc2Vzc2lvbi4gU3RhbmRhcmQgS0FTQU4gc2hvdWxkIGJlIHN1ZmZpY2llbnQsIHBhcnRpY3VsYXJseSBiZWNhdXNlIHRoZXJlJ3MgYSBnb29kIGNoYW5jZSBLQVNBTiBpcyBhbHJlYWR5IGFjdGl2ZSBpbiB0aGF0IGFyZWEuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ3NjUsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI3NCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI5VDE5OjI4OjQzLjUxMDUwMDE1OFoiLCJTZXEiOjE4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGlzIGFuIGludGVybmFsIE1NIHJlZmFjdG9yaW5nIHRoYXQgY29udmVydHMgbGVnYWN5IHN0cnVjdCBwYWdlIHJlZmVyZW5jZXMgYW5kIGhlbHBlcnMgaW4gdGhlIHN3YXAgc3Vic3lzdGVtIHRvIGZvbGlvLWJhc2VkIGVxdWl2YWxlbnRzIChlLmcuIGNvbnZlcnRpbmcgUmVjbGFpbSBmbGFnIG1hY3JvcyB0byBGT0xJT19GTEFHLCB1c2luZyBidmVjX2ZvbGlvLCBmb2xpb19tYXJrX2RpcnR5LCBmb2xpb19jbGVhcl9yZWNsYWltLCBmb2xpb19lbmRfd3JpdGViYWNrLCBhbmQgcmVuYW1pbmcgX19zd2FwX3dyaXRlcGFnZSB0byBfX3N3YXBfd3JpdGVvdXQpLlxcblxcbk5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGludHJvZHVjZWQgb3IgcmVhZDpcXG4xLiBObyBrZXJuZWwgc3RydWN0dXJlcyBvciBidWZmZXJzIGFyZSBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSBwYWRkaW5nIG9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGxlYWsuXFxuMi4gTG9jYWwgdmFyaWFibGVzIChzdWNoIGFzIGBlbnRyeWAgaW4gc3dhcF96ZXJvbWFwX2ZvbGlvX3NldC9jbGVhcikgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZnJvbSBgZm9saW8tXFx1MDAzZXN3YXBgLlxcbjMuIE5vIGJ1ZmZlciBhbGxvY2F0aW9ucywgYm91bmRzIGNhbGN1bGF0aW9ucywgb3IgYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YSBhcmUgaW50cm9kdWNlZC5cXG5cXG5BbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIGZvbGlvIHN0YXRlIG1hbmFnZW1lbnQsIGxvY2tpbmcsIG9yIHBvaW50ZXIgaGFuZGxpbmcgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4sIFZNIGFzc2VydGlvbnMgKFZNX0JVR19PTl9GT0xJTyAvIFZNX1dBUk5fT05fT05DRV9GT0xJTyksIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaXMgYW4gaW50ZXJuYWwgTU0gcmVmYWN0b3JpbmcgdGhhdCBjb252ZXJ0cyBsZWdhY3kgc3RydWN0IHBhZ2UgcmVmZXJlbmNlcyBhbmQgaGVscGVycyBpbiB0aGUgc3dhcCBzdWJzeXN0ZW0gdG8gZm9saW8tYmFzZWQgZXF1aXZhbGVudHMgKGUuZy4gY29udmVydGluZyBSZWNsYWltIGZsYWcgbWFjcm9zIHRvIEZPTElPX0ZMQUcsIHVzaW5nIGJ2ZWNfZm9saW8sIGZvbGlvX21hcmtfZGlydHksIGZvbGlvX2NsZWFyX3JlY2xhaW0sIGZvbGlvX2VuZF93cml0ZWJhY2ssIGFuZCByZW5hbWluZyBfX3N3YXBfd3JpdGVwYWdlIHRvIF9fc3dhcF93cml0ZW91dCkuXFxuXFxuTm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaXMgaW50cm9kdWNlZCBvciByZWFkOlxcbjEuIE5vIGtlcm5lbCBzdHJ1Y3R1cmVzIG9yIGJ1ZmZlcnMgYXJlIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHBhZGRpbmcgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgbGVhay5cXG4yLiBMb2NhbCB2YXJpYWJsZXMgKHN1Y2ggYXMgYGVudHJ5YCBpbiBzd2FwX3plcm9tYXBfZm9saW9fc2V0L2NsZWFyKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBmcm9tIGBmb2xpby1cXHUwMDNlc3dhcGAuXFxuMy4gTm8gYnVmZmVyIGFsbG9jYXRpb25zLCBib3VuZHMgY2FsY3VsYXRpb25zLCBvciBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhIGFyZSBpbnRyb2R1Y2VkLlxcblxcbkFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gZm9saW8gc3RhdGUgbWFuYWdlbWVudCwgbG9ja2luZywgb3IgcG9pbnRlciBoYW5kbGluZyBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiwgVk0gYXNzZXJ0aW9ucyAoVk1fQlVHX09OX0ZPTElPIC8gVk1fV0FSTl9PTl9PTkNFX0ZPTElPKSwgYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowcgk6n[1] Phase: Succeeded StartedAt: 2026-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 19:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 19:28:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2] Phase: Succeeded StartedAt: 2026-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 19:29:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:28:55 +0000 UTC FinishedAt: 2026-08-29 19:28:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1215181219/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:29:05 +0000 UTC FinishedAt: 2026-08-29 19:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:29:05 +0000 UTC FinishedAt: 2026-08-29 19:45:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7d4549f5-f481-48dd-aba3-d65bfb557c10,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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1215181219/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": "2ee5820c-e641-4c5a-b6fa-bfdcc57a1bc6", "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-workflowcgk6n/series-workflowcgk6n-build-action-3894978065/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:29:05 +0000 UTC FinishedAt: 2026-08-29 19:45:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*7d4549f5-f481-48dd-aba3-d65bfb557c10,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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1215181219/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": "2ee5820c-e641-4c5a-b6fa-bfdcc57a1bc6", "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-workflowcgk6n/series-workflowcgk6n-build-action-3894978065/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:25 +0000 UTC FinishedAt: 2026-08-29 19:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:25 +0000 UTC FinishedAt: 2026-08-29 19:45:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:25 +0000 UTC FinishedAt: 2026-08-29 19:45:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:25 +0000 UTC FinishedAt: 2026-08-29 19:45:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1712512730/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:35 +0000 UTC FinishedAt: 2026-08-29 19:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:45:35 +0000 UTC FinishedAt: 2026-08-29 19:47:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ee5820c-e641-4c5a-b6fa-bfdcc57a1bc6,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-workflowcgk6n/series-workflowcgk6n-build-action-3894978065/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-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:47:28 +0000 UTC FinishedAt: 2026-08-29 19:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:47:28 +0000 UTC FinishedAt: 2026-08-29 19:47:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:47:28 +0000 UTC FinishedAt: 2026-08-29 20:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:47:28 +0000 UTC FinishedAt: 2026-08-29 20:03:48 +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:*7d4549f5-f481-48dd-aba3-d65bfb557c10,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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1712512730/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": "458985b3-b169-43b0-93c1-b5ecdde317a9", "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-workflowcgk6n/series-workflowcgk6n-build-action-3680906174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 19:47:28 +0000 UTC FinishedAt: 2026-08-29 20:03: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:*7d4549f5-f481-48dd-aba3-d65bfb557c10,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-workflowcgk6n/series-workflowcgk6n-convert-artifact-1712512730/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": "458985b3-b169-43b0-93c1-b5ecdde317a9", "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-workflowcgk6n/series-workflowcgk6n-build-action-3680906174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:03:48 +0000 UTC FinishedAt: 2026-08-29 20:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:03:48 +0000 UTC FinishedAt: 2026-08-29 20:03:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:03:48 +0000 UTC FinishedAt: 2026-08-29 20:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:03:48 +0000 UTC FinishedAt: 2026-08-29 20:05:28 +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:*458985b3-b169-43b0-93c1-b5ecdde317a9,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-workflowcgk6n/series-workflowcgk6n-build-action-3680906174/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-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +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":["swap_writeout","__swap_writeout"],"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:*2ee5820c-e641-4c5a-b6fa-bfdcc57a1bc6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*458985b3-b169-43b0-93c1-b5ecdde317a9,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-workflowcgk6n/series-workflowcgk6n-build-action-3894978065/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-workflowcgk6n/series-workflowcgk6n-build-action-3680906174/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 20:05:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 20:05:42 +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":["swap_writeout","__swap_writeout"],"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-workflowcgk6n/series-workflowcgk6n-convert-artifact-2493821583/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 20:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 20:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:38 +0000 UTC FinishedAt: 2026-08-29 20:05:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:48 +0000 UTC FinishedAt: 2026-08-29 23:08:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcgk6n[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"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":["swap_writeout","__swap_writeout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP","ZSWAP","MEMCG","BLK_CGROUP"],"series_id":"8cbcbd3f-1ef0-4260-9252-24a563cc0405","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-08-29 20:05:48 +0000 UTC FinishedAt: 2026-08-29 23:08:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2ee5820c-e641-4c5a-b6fa-bfdcc57a1bc6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*458985b3-b169-43b0-93c1-b5ecdde317a9,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-workflowcgk6n/series-workflowcgk6n-build-action-3894978065/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-workflowcgk6n/series-workflowcgk6n-build-action-3680906174/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-workflowcgk6n/series-workflowcgk6n-convert-artifact-2493821583/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,}