Name: series-workflowxd8d2 Phase: Succeeded StartedAt: 2026-07-20 15:20:11 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[0] Phase: Succeeded StartedAt: 2026-07-20 15:20:11 +0000 UTC FinishedAt: 2026-07-20 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[0].run-triage Phase: Succeeded StartedAt: 2026-07-20 15:20:11 +0000 UTC FinishedAt: 2026-07-20 15:36:10 +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": "70a23b27c3d8e0ac4bd40845d4f50db701f4555e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "70a23b27c3d8e0ac4bd40845d4f50db701f4555e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_referenced", "folio_check_references", "shrink_active_list", "folio_update_gen", "walk_update_folio", "lru_gen_look_around", "lru_gen_set_refs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICAgJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb191cGRhdGVfZ2VuJiMzNDssCiAgICAmIzM0O3dhbGtfdXBkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXRfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmQzOTI0OTg4MWRmNzI0ZjdiYjg2ZTVjZGUyOTVjN2M1NWZiY2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTU6MzQ6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5AQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKVx0KDApXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4mIzQzO1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG4gXHRpbnQgbWFwY291bnQ7XG4gXHRpbnQgcmVmZXJlbmNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XG4gXHRcdFx0cHRlcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cbiBcdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG4gXHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbi1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XG4gXHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuJiM0MzsgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZWZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuICAqXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXG4gICpcbkBAIC0xMDYyLDcgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICYjNDM7MTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9O1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pO1xuLVx0KnZtX2ZsYWdzID0gMDtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7XG4gXG4gXHRpZiAod2VfbG9ja2VkKVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI3ZWYwMzJlNzhhMGJkLi5iMWVjNjVmYjg5NDdjZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTI2OCw2ICYjNDM7MjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcbiB7XG5AQCAtODM1LDEwICYjNDM7ODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4gICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlc1xuICAqIGZvbGlvX3VwZGF0ZV9nZW4oKS5cbiAgKi9cbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTg1MSw3ICYjNDM7ODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC04NjEsMTYgJiM0Mzs4NzMsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgc3VwcG9zZWRseSByZWNsYWltYWJsZSBmb2xpbyB3YXMgZm91bmQgdG8gYmUgaW4gYSBWTV9MT0NLRUQgdm1hLlxuIFx0ICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC5cbiBcdCAqL1xuLVx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG4gXG4gXHQvKlxuQEAgLTg4Niw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4mIzQzO1x0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbiBcdH1cbiBcbiBcdHJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTkxNCw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdC8qXG4gXHRcdCAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSlcbiYjNDM7XHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDYzLDcgJiM0MzsyMDc1LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbiBcdExJU1RfSEVBRChsX2luYWN0aXZlKTtcbkBAIC0yMTA3LDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNnZtYV9mbGFncykgIT0gMCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIGZvbGlvcyBhbmRcbiBcdFx0XHQgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTb1xuQEAgLTIxMTcsNyAmIzQzOzIxMjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0XHRcdCAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcyxcbiBcdFx0XHQgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHtcbiYjNDM7XHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCAmIzQzOz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZsX2FjdGl2ZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMTg2LDE0ICYjNDM7MzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuIFxuLVx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuJiM0MztcdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbiYjNDM7XHQgKiB0aHJhc2hpbmcgZnJvbSByZWNsYWltaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbiBcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtMzQyNiw4ICYjNDM7MzQ0Myw4IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gXHRyZXR1cm4geW91bmcgKiBuIFx1MDAzZT0gdG90YWw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4ge1xuIFx0aW50IG9sZF9nZW47XG4gXG5AQCAtMzQ0MCwxMCAmIzQzOzM0NTcsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7XG4mIzQzO1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuJiM0MztcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuIFx0XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbkBAIC0zNTE2LDcgJiM0MzszNTMzLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTI5LDcgJiM0MzszNTQ2LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwNyw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MjEsNyAmIzQzOzM2MzgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI1Niw3ICYjNDM7NDI3Myw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MjY4LDcgJiM0Mzs0Mjg1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICAgJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb191cGRhdGVfZ2VuJiMzNDssCiAgICAmIzM0O3dhbGtfdXBkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXRfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmZDM5MjQ5ODgxZGY3MjRmN2JiODZlNWNkZTI5NWM3YzU1ZmJjYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNTozNDo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApAQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXQKICAqLwogaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsCi0JCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKTsKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyk7CiAKIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpOwogdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTsKQEAgLTk3NSwxMCAmIzQzOzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKQkoMCkKIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAotCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpCiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JKnZtX2ZsYWdzID0gMDsKJiM0MzsJdm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHsKIAlpbnQgbWFwY291bnQ7CiAJaW50IHJlZmVyZW5jZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIH07CiAKQEAgLTkyNiw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJYWRkcmVzcyA9IHB2bXcuYWRkcmVzczsKIAkJbnIgPSAxOwogCi0JCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgewomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7CiAJCQlwdGVzJiM0MzsmIzQzOzsKIAkJCXByYS0mZ3Q7bWFwY291bnQtLTsKIApAQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJLyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqLwogCQkJbWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpOwogCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwotCQkJcHJhLSZndDt2bV9mbGFncyB8PSBWTV9MT0NLRUQ7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ByYS0mZ3Q7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAJCQlyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovCiAJCX0KIApAQCAtMTAxNSw4ICYjNDM7MTAxNSwxMSBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZWZlcmVuY2VkJiM0MzsmIzQzOzsKIAogCWlmIChyZWZlcmVuY2VkKSB7CiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwomIzQzOwogCQlwcmEtJmd0O3JlZmVyZW5jZWQmIzQzOyYjNDM7OwotCQlwcmEtJmd0O3ZtX2ZsYWdzIHw9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRDsKJiM0MzsJCXZtYV9mbGFnc19jbGVhcigmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpOwomIzQzOwkJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7cHJhLSZndDt2bWFfZmxhZ3MsIHZtYV9mbGFncyk7CiAJfQogCiAJaWYgKCFwcmEtJmd0O21hcGNvdW50KQpAQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCiAgKiBAaXNfbG9ja2VkOiBDYWxsZXIgaG9sZHMgbG9jayBvbiB0aGUgZm9saW8uCiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwCi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtJmd0O3ZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLgomIzQzOyAqIEB2bWFfZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtJmd0O2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLgogICoKICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLAogICoKQEAgLTEwNjIsNyAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpCiAgKiB0aGUgZnVuY3Rpb24gYmFpbGVkIG91dCBkdWUgdG8gcm1hcCBsb2NrIGNvbnRlbnRpb24uCiAgKi8KIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCi0JCSAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAlib29sIHdlX2xvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7CkBAIC0xMDc4LDcgJiM0MzsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCwKIAl9OwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pOwotCSp2bV9mbGFncyA9IDA7CiYjNDM7CXZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzKTsKIAlpZiAoIXByYS5tYXBjb3VudCkKIAkJcmV0dXJuIDA7CiAKQEAgLTEwOTIsNyAmIzQzOzEwOTUsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCX0KIAogCXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwotCSp2bV9mbGFncyA9IHByYS52bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7CiAKIAlpZiAod2VfbG9ja2VkKQogCQlmb2xpb191bmxvY2soZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0yNjgsNiAmIzQzOzI2OCwxMiBAQCBzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKQogewpAQCAtODM1LDEwICYjNDM7ODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7CiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzCiAgKiBmb2xpb191cGRhdGVfZ2VuKCkuCiAgKi8KLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKJiM0MzsJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwomIzQzOwkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewomIzQzOwkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CiAJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTg1MSw3ICYjNDM7ODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtODYxLDE2ICYjNDM7ODczLDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvOwotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFnczsKIAogCXJlZmVyZW5jZWRfcHRlcyA9IGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDEsIHNjLSZndDt0YXJnZXRfbWVtX2Nncm91cCwKLQkJCQkJICAgJmFtcDt2bV9mbGFncyk7CiYjNDM7CQkJCQkgICAmYW1wO3ZtYV9mbGFncyk7CiAKIAkvKgogCSAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuCiAJICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC4KIAkgKi8KLQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKQomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDt2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKIAkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwogCiAJLyoKQEAgLTg4Niw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWlmICghcmVmZXJlbmNlZF9wdGVzKQogCQkJcmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07CiAKLQkJcmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8pID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQOwomIzQzOwkJcmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDsKIAl9CiAKIAlyZWZlcmVuY2VkX2ZvbGlvID0gZm9saW9fdGVzdF9jbGVhcl9yZWZlcmVuY2VkKGZvbGlvKTsKQEAgLTkxNCw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCS8qCiAJCSAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLgogCQkgKi8KLQkJaWYgKCh2bV9mbGFncyAmYW1wOyBWTV9FWEVDKSAmYW1wOyZhbXA7IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSkKJiM0MzsJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sICZhbXA7dm1hX2ZsYWdzKSkKIAkJCXJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTsKIAogCQlyZXR1cm4gRk9MSU9SRUZfS0VFUDsKQEAgLTIwNjMsNyAmIzQzOzIwNzUsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47CiAJdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFnczsKIAlMSVNUX0hFQUQobF9ob2xkKTsJLyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovCiAJTElTVF9IRUFEKGxfYWN0aXZlKTsKIAlMSVNUX0hFQUQobF9pbmFjdGl2ZSk7CkBAIC0yMTA3LDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCQkvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi8KIAkJaWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLSZndDt0YXJnZXRfbWVtX2Nncm91cCwKLQkJCQkgICAgICZhbXA7dm1fZmxhZ3MpICE9IDApIHsKJiM0MzsJCQkJICAgICAmYW1wO3ZtYV9mbGFncykgIT0gMCkgewogCQkJLyoKIAkJCSAqIElkZW50aWZ5IHJlZmVyZW5jZWQsIGZpbGUtYmFja2VkIGFjdGl2ZSBmb2xpb3MgYW5kCiAJCQkgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTbwpAQCAtMjExNyw3ICYjNDM7MjEyOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQkgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsCiAJCQkgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLgogCQkJICovCi0JCQlpZiAoKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7CiYjNDM7CQkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgJmFtcDt2bWFfZmxhZ3MpKSB7CiAJCQkJbnJfcm90YXRlZCAmIzQzOz0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCQkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtsX2FjdGl2ZSk7CiAJCQkJY29udGludWU7CkBAIC0zMTg2LDE0ICYjNDM7MzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbikKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKIAogCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwogCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKJiM0MzsJLyoKJiM0MzsJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKJiM0MzsJICogZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UgdG8gYXZvaWQgdHlwaWNhbCBJTwomIzQzOwkgKiB0aHJhc2hpbmcgZnJvbSByZWNsYWltaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewogCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zNDI2LDggJiM0MzszNDQzLDggQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIAlyZXR1cm4geW91bmcgKiBuICZndDs9IHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKIHsKIAlpbnQgb2xkX2dlbjsKIApAQCAtMzQ0MCwxMCAmIzQzOzM0NTcsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKIAkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKLQl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8pKSB7CiYjNDM7CX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0zNTE2LDcgJiM0MzszNTMzLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM1MjksNyAmIzQzOzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYwNyw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjIxLDcgJiM0MzszNjM4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjU2LDcgJiM0Mzs0MjczLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MjY4LDcgJiM0Mzs0Mjg1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFZNIEZsYWcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgZm9saW9fcmVmZXJlbmNlZGAgYW5kIExSVSBnZW5lcmF0aW9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaG93IHdlIHJlcHJlc2VudCBhbmQgbWFuaXB1bGF0ZSB0aGVzZSBmbGFncy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGp1c3QgYSBzaW1wbGUgdHlwZSByZW5hbWUg4oCTIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgIG9yIHBlcmhhcHMgZXZlbiBqdXN0IGFuIHVuZGVybHlpbmcgdHlwZSBjaGFuZ2UgbGlrZSBgdW5zaWduZWQgbG9uZ2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFzc3VtcHRpb24uCgpCdXQgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGNoYW5naW5nIGhvdyB3ZSB3b3JrIHdpdGggcG9pbnRlcnM6IGB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzYCBpbnN0ZWFkIG9mIGB2bV9mbGFnc190ICp2bV9mbGFnc2AuIE9rYXksIHRoYXQmIzM5O3MgbW9yZSBzaWduaWZpY2FudC4gVGhpcyBpcyBub3QganVzdCBhIHR5cGUgcmVuYW1lLCB3ZSBhcmUgY2hhbmdpbmcgaG93IHRoZSBmbGFncyBhcmUgcGFzc2VkLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zOiBgdm1hX2ZsYWdzX2NsZWFyX2FsbGAsIGB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKWAsIGB2bWFfZmxhZ3Nfc2V0YCwgYHZtYV9mbGFnc19jbGVhcmAsIGFuZCBgdm1hX2ZsYWdzX3NldF9tYXNrYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbjsgbWF5YmUgdGhpcyBpcyBhIGNsZWFuZXIgQVBJLCBhbmQgdGhleSBhcmUgdXNpbmcgaGVscGVycyB0byBtYWtlIHRoaW5ncyBtb3JlIHJvYnVzdC4KCkhhbmcgb24gYSBzZWNvbmQuIElmIHRoZXkmIzM5O3JlIHVzaW5nIHRob3NlIGhlbHBlciBmdW5jdGlvbnMsIEkgaGF2ZSBhIGZlZWxpbmcgYHZtYV9mbGFnc190YCBpcyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhIHNpbXBsZSBpbnRlZ2VyIHR5cGUuIE15IGd1dCBzYXlzIGl0JiMzOTtzIGxpa2VseSBhIGBzdHJ1Y3RgIG9yIHNvbWUgc29ydCBvZiBjdXN0b20gdHlwZSB0aGF0IHByb3ZpZGVzIG1vcmUgc3RydWN0dXJlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBpdCBtYWtlcyBzZW5zZTsgd2l0aCBzbyBtYW55IGZsYWdzIGluIHRoZSBzeXN0ZW0sIHlvdSBuZWVkIGEgd2F5IHRvIGVuY2Fwc3VsYXRlIHRoZW0uCgpUaW1lIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBjaGVjayBgaW5jbHVkZS9saW51eC9ybWFwLmhgIG9yIG1heWJlIGBtbS9ybWFwLmNgIGZpcnN0LiBUaG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB0byBmaW5kIGEgZGVmaW5pdGlvbiBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gVk1BcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpSaWdodCwgbmVlZCB0byBiZSBzdXJlOyBpcyB0aGlzIGEgbmV3IHR5cGU/IExldCBtZSBkbyBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlYmFzZSBmb3IgYHZtYV9mbGFnc190YCBqdXN0IHRvIGNvbmZpcm0gaXQmIzM5O3Mgbm90IGEgcHJlLWV4aXN0aW5nIHR5cGUgdGhhdCB0aGV5IGFyZSBtZXJlbHkgdXNpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTY3OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0PTU4PUV4YW1pbmluZyB0aGUgc3RydWN0IHZtX2FyZWFfZGVzYyB0eXBlOlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbW1hcF9wcmVwYXJlLnJzdC03MS0gICAgICAgIHN0cnVjdCBmaWxlICp2bV9maWxlO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0OjcyOiAgICAgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0LTczLSAgICAgICAgcGdwcm90X3QgcGFnZV9wcm90O1xuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTE1LVxuZHJpdmVycy9kYXgvZGV2aWNlLmM6MTY6c3RhdGljIGludCBfX2NoZWNrX3ZtYShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgdm1hX2ZsYWdzX3QgZmxhZ3MsXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0xNy1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yNi1cdC8qIHByZXZlbnQgcHJpdmF0ZSBtYXBwaW5ncyBmcm9tIGJlaW5nIGVzdGFibGlzaGVkICovXG5kcml2ZXJzL2RheC9kZXZpY2UuYzoyNzpcdGlmICghdm1hX2ZsYWdzX3Rlc3RfYW55KFx1MDAyNmZsYWdzLCBWTUFfTUFZU0hBUkVfQklUKSkge1xuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjgtXHRcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGRldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTE4ND1pbnQgZHJtX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE4OC1cdHN0cnVjdCBmaWxlICpmaWxwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYzoxODk6XHRjb25zdCB2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTk9SRVNFUlZFX0JJVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE5MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYz01MDM9c3RhdGljIGludCBfX2NyZWF0ZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYy01MDcte1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NTA4Olx0Y29uc3Qgdm1hX2ZsYWdzX3Qgc2htZW1fZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX05PUkVTRVJWRV9CSVQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTA5LVx0c3RydWN0IHZmc21vdW50ICpodWdlX21udDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz05OT1zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNC1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTpcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDk4PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk5Olx0XHRcdFx0dm1hX2ZsYWdzX3QgYWNjdGZsYWcsIGludCBjcmVhdF9mbGFncyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtXHRcdFx0XHRpbnQgcGFnZV9zaXplX2xvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTQ9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM5NS1cdFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozOTY6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zOTctXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjIwPXRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyMjpcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNTE9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBmcm9tLCBsb25nIHRvLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUyOlx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTUzLWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MjA6c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUyMS1cdFx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTUzNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjUzNjpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3RmbGFnLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTM3LVx0XHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC04LVxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oOjk6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xMC17XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmg6MTE6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9IVUdFVExCX0JJVCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTItfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xNS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaDoxNjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1hX2h1Z2V0bGJfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTE3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2tzbS5oPTE4PWludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgva3NtLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYWR2aWNlLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2tzbS5oOjIwOnZtYV9mbGFnc190IGtzbV92bWFfZmxhZ3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuaW5jbHVkZS9saW51eC9rc20uaDoyMTpcdFx0XHQgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2tzbS5oLTIyLWludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9rc20uaD0xMDI9Ym9vbCBrc21fcHJvY2Vzc19tZXJnZWFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuLS1cbmluY2x1ZGUvbGludXgva3NtLmgtMTA1LVxuaW5jbHVkZS9saW51eC9rc20uaDoxMDY6c3RhdGljIGlubGluZSB2bWFfZmxhZ3NfdCBrc21fdm1hX2ZsYWdzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9rc20uaDoxMDc6XHRcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L2tzbS5oLTEwOC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1mZC5oPTExPXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTE4LSAqL1xuaW5jbHVkZS9saW51eC9tZW1mZC5oOjE5OmludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cik7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjAtc3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg9MzI9c3RhdGljIGlubGluZSBpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvbWVtZmQuaDozMzpcdFx0XHRcdFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTM0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjk0PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01MTMtLypcbmluY2x1ZGUvbGludXgvbW0uaDo1MTQ6ICogdm1hX2ZsYWdzX3QgbWFza3MgZm9yIHRoZSB1c2VyZmF1bHRmZCBWTUEgZmxhZ3MuIFRoZSB0d28gaGlnaC1iaXQgbW9kZXMgYXJlXG5pbmNsdWRlL2xpbnV4L21tLmgtNTE1LSAqIGdhdGVkIG9uIHRoZSBzYW1lIGNvbmZpZ3MgYXMgdGhlaXIgVk1fKiBmbGFncyBhYm92ZSAtLSBib3RoIG9mIHdoaWNoIGltcGx5XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTU3Ni0vKiBUZW1wb3JhcnkgdW50aWwgVk1BIGZsYWdzIGNvbnZlcnNpb24gY29tcGxldGUuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6NTc3OiNkZWZpbmUgVk1fU1RBQ0tfRkxBR1Mgdm1hX2ZsYWdzX3RvX2xlZ2FjeShWTUFfU1RBQ0tfRkxBR1MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNTc4LVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01OTQtXHRcdFx0XHQgICAgICAgVk1BX1BGTk1BUF9CSVQsIFZNQV9NSVhFRE1BUF9CSVQpXG5pbmNsdWRlL2xpbnV4L21tLmg6NTk1OiNkZWZpbmUgVk1fU1BFQ0lBTCB2bWFfZmxhZ3NfdG9fbGVnYWN5KFZNQV9TUEVDSUFMX0ZMQUdTKVxuaW5jbHVkZS9saW51eC9tbS5oLTU5Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTAyMj1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3Jlc2V0X29uY2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTAyMzpcdFx0XHRcdFx0dm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTEwMjQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xMTA3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hdG9taWNfZmxhZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTExNi0vKiBTZXQgYW4gaW5kaXZpZHVhbCBWTUEgZmxhZyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTExNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9mbGFnKHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTE4LVx0XHR2bWFfZmxhZ190IGJpdClcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTEyNC1cbmluY2x1ZGUvbGludXgvbW0uaDoxMTI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgX19ta192bWFfZmxhZ3Modm1hX2ZsYWdzX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTEyNi1cdFx0c2l6ZV90IGNvdW50LCBjb25zdCB2bWFfZmxhZ190ICpiaXRzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMTM2LSAqIEhlbHBlciBtYWNybyB3aGljaCBiaXR3aXNlLW9yIGNvbWJpbmVzIHRoZSBzcGVjaWZpZWQgaW5wdXQgZmxhZ3MgaW50byBhXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzNzogKiB2bWFfZmxhZ3NfdCBiaXRtYXAgdmFsdWUuIEUuZy46XG5pbmNsdWRlL2xpbnV4L21tLmgtMTEzOC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExMzk6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0lPX0JJVCwgVk1BX1BGTk1BUF9CSVQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE0MC0gKiAgICAgICAgICAgICAgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfRE9OVERVTVBfQklUKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE1MS0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExNTI6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBhcHBlbmRfdm1hX2ZsYWdzKFZNQV9TVEFDS19ERUZBVUxUX0ZMQUdTLCBWTUFfU1RBQ0tfQklULFxuaW5jbHVkZS9saW51eC9tbS5oLTExNTMtICogICAgICAgICAgICAgIFZNQV9BQ0NPVU5UX0JJVCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTExNTgtLyogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIHRoZSBzcGVjaWZpZWQgVk1BIGZsYWdzLiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjExNTk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdm1hX2ZsYWdzX2NvdW50KGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xMTYwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE2OC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExNjk6ICogaWYgKHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfUkVBRF9CSVQpKSB7IC4uLiB9XG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3MC0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMTcxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdChjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3Mi1cdFx0dm1hX2ZsYWdfdCBiaXQpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTExODItICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IHZtYV9mbGFnc19hbmRfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4NDpcdFx0XHRcdFx0XHQgICAgICB2bWFfZmxhZ3NfdCB0b19hbmQpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE4NS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4NjpcdHZtYV9mbGFnc190IGRzdDtcbmluY2x1ZGUvbGludXgvbW0uaC0xMTg3LVx0dW5zaWduZWQgbG9uZyAqYml0bWFwX2RzdCA9IGRzdC5fX3ZtYV9mbGFncztcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE5OC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExOTk6ICogdm1hX2ZsYWdzX3QgcmVhZF9mbGFncyA9IHZtYV9mbGFnc19hbmQoXHUwMDI2ZmxhZ3MsIFZNQV9SRUFEX0JJVCxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjAwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNQV9NQVlfUkVBRF9CSVQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjA1LS8qICBUZXN0IGVhY2ggb2YgdG9fdGVzdCBmbGFncyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMDc6XHRcdHZtYV9mbGFnc190IHRvX3Rlc3QpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIwOC17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTctICpcbmluY2x1ZGUvbGludXgvbW0uaDoxMjE4OiAqIGlmICh2bWFfZmxhZ3NfdGVzdF9hbnkoZmxhZ3MsIFZNQV9SRUFEX0JJVCwgVk1BX01BWVJFQURfQklUKSkgeyAuLi4gfVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTktICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyMDojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FueShmbGFncywgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMjE6XHR2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhmbGFncywgbWtfdm1hX2ZsYWdzKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbW0uaC0xMjIyLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjMtLyogVGVzdCB0aGF0IEFMTCBvZiB0aGUgdG9fdGVzdCBmbGFncyBhcmUgc2V0LCBub24tYXRvbWljYWxseS4gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjI0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdF9hbGxfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyNTpcdFx0dm1hX2ZsYWdzX3QgdG9fdGVzdClcbmluY2x1ZGUvbGludXgvbW0uaC0xMjI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNS0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyMzY6ICogaWYgKHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgVk1BX1JFQURfQklULCBWTUFfTUFZUkVBRF9CSVQpKSB7IC4uLiB9XG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNy0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjM4OiNkZWZpbmUgdm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzOTpcdHZtYV9mbGFnc190ZXN0X2FsbF9tYXNrKGZsYWdzLCBta192bWFfZmxhZ3MoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDAtXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0MS0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDI6ICogSGVscGVyIHRvIHRlc3QgdGhhdCBhIGZsYWcgbWFzayBvZiB0eXBlIHZtYV9mbGFnc190IGhhcyBhIFNJTkdMRSBmbGFnIHNldFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDMtICogKHJldHVybmluZyBmYWxzZSBpZiBmbGFnbWFzayBoYXMgbm8gZmxhZ3Mgc2V0KS5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0Ny0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDg6ICogaWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfRFJPUFBBQkxFKSkgeyAuLi4gfVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDktICpcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1Mi0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjUzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1NDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ21hc2spXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1NS17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNTctXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1ODpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhmbGFncywgZmxhZ21hc2spO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyNTktfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjYxLS8qIFNldCBlYWNoIG9mIHRoZSB0b19zZXQgZmxhZ3MgaW4gZmxhZ3MsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEyNjI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MzpcdFx0dm1hX2ZsYWdzX3QgdG9fc2V0KVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNjQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjc4LVxuaW5jbHVkZS9saW51eC9tbS5oOjEyNzk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCBfX21rX3ZtYV9mbGFnc19mcm9tX21hc2tzKHNpemVfdCBjb3VudCxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjgwOlx0XHRjb25zdCB2bWFfZmxhZ3NfdCAqbWFza3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI4MS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTI4MjpcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyODMtXHRzaXplX3QgaTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5MC0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyOTE6ICogQ29tYmluZSBwcmUtY29tcHV0ZWQgdm1hX2ZsYWdzX3QgbWFza3MgaW50byBvbmUgdmFsdWUsIGUuZy46XG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5Mi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyOTM6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3NfZnJvbV9tYXNrcyhWTUFfVUZGRF9XUCwgVk1BX1VGRkRfTUlOT1IpO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyOTQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwMC1cdF9fbWtfdm1hX2ZsYWdzX2Zyb21fbWFza3MoQ09VTlRfQVJHUyhfX1ZBX0FSR1NfXyksXHRcdFxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMwMTpcdFx0KGNvbnN0IHZtYV9mbGFnc190IFtdKXtfX1ZBX0FSR1NfX30pXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwMi1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzAzLS8qIENsZWFyIGFsbCBvZiB0aGUgdG8tY2xlYXIgZmxhZ3MgaW4gZmxhZ3MsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzA1Olx0XHR2bWFfZmxhZ3NfdCB0b19jbGVhcilcbmluY2x1ZGUvbGludXgvbW0uaC0xMzA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNC0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMzI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzX2RpZmZfcGFpcihjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMyNjpcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzMjcte1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMjg6XHR2bWFfZmxhZ3NfdCBkc3Q7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyOS1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9vdGhlciA9IGZsYWdzX290aGVyLVx1MDAzZV9fdm1hX2ZsYWdzO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzM3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMzg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc19zYW1lX3BhaXIoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMzk6XHRcdFx0XHRcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDAte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzQ3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAgKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ5Olx0XHRcdFx0XHRcdHZtYV9mbGFnc190IGZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNTAte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xMzcwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3Mi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTM3MzpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIGJpdCk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3NC19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTEzNzc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjEzNzg6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNzkte1xuaW5jbHVkZS9saW51eC9tbS5oOjEzODA6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTM4MS19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTEzOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjE0MDA6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE0MDEte1xuaW5jbHVkZS9saW51eC9tbS5oOjE0MDI6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTQwMy19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE0MTMtLypcbmluY2x1ZGUvbGludXgvbW0uaDoxNDE0OiAqIEhlbHBlciB0byB0ZXN0IHRoYXQgYSBmbGFnIG1hc2sgb2YgdHlwZSB2bWFfZmxhZ3NfdCBoYXMgYSBTSU5HTEUgZmxhZyBzZXRcbmluY2x1ZGUvbGludXgvbW0uaC0xNDE1LSAqIChyZXR1cm5pbmcgZmFsc2UgaWYgZmxhZ21hc2sgaGFzIG5vIGZsYWdzIHNldCkuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTE0MjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyNjp2bWFfdGVzdF9zaW5nbGVfbWFzayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1hX2ZsYWdzX3QgZmxhZ21hc2spXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQyNy17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyODpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIGZsYWdtYXNrKTtcbmluY2x1ZGUvbGludXgvbW0uaC0xNDI5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQzNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX3NldF9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjE0Mzg6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE0Mzkte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNDU2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDU3Olx0XHR2bWFfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xNDU4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQ3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2Rlc2NfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xNDc4LXtcbmluY2x1ZGUvbGludXgvbW0uaDoxNDc5Olx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KFx1MDAyNmRlc2MtXHUwMDNldm1hX2ZsYWdzLCBiaXQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE0ODAtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNDgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ4NDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQ4NS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ4NjpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncywgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE0ODctfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTAwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMTpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwMi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMzpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbGxfbWFzayhcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncywgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE1MDQtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuaW5jbHVkZS9saW51eC9tbS5oOjE1MTc6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE1MTgte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTMzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZGVzY19jbGVhcl9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUzNDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUzNS17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTE1Nzg9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19pbml0aWFsX3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xNTg4LVxuaW5jbHVkZS9saW51eC9tbS5oOjE1ODk6c3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5MC17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MTpcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhmbGFncywgVk1BX0dST1dTVVApKVxuaW5jbHVkZS9saW51eC9tbS5oLTE1OTItXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9tbS5oOjE1OTM6XHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcbmluY2x1ZGUvbGludXgvbW0uaC0xNTk0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTYyNz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2FjY2Vzc2libGUoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE2MzEtXG5pbmNsdWRlL2xpbnV4L21tLmg6MTYzMjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2hhcmVkX21heXdyaXRlKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMzLXtcbmluY2x1ZGUvbGludXgvbW0uaDoxNjM0Olx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE2MzUtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjc5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZGVzY19pc19jb3dfbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODAte1xuaW5jbHVkZS9saW51eC9tbS5oOjIyODE6XHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MgPSBcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncztcbmluY2x1ZGUvbGludXgvbW0uaC0yMjgyLVxuaW5jbHVkZS9saW51eC9tbS5oOjIyODM6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9NQVlXUklURV9CSVQpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbS5oOjIyODQ6XHRcdCF2bWFfZmxhZ3NfdGVzdChmbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIyODUtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub21tdV9zaGFyZWRfbWFwcGluZyh2bV9mbGFnc190IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzAwLVxuaW5jbHVkZS9saW51eC9tbS5oOjIzMDE6c3RhdGljIGlubGluZSBib29sIGlzX25vbW11X3NoYXJlZF92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDIte1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDM6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfTUFZU0hBUkVfQklULCBWTUFfTUFZT1ZFUkxBWV9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMDQtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00MTk3PV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG5pbmNsdWRlL2xpbnV4L21tLmgtNDE5OC1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6NDE5OTpcdFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDIwMC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDIwOT11bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC00MjEwLVx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDo0MjExOlx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbmluY2x1ZGUvbGludXgvbW0uaC00MjEyLVx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00NjA4PXBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDYwOS1cbmluY2x1ZGUvbGludXgvbW0uaDo0NjEwOnN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxMS17XG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMjpcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDYxNz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC9tbS5oLTQ2MTgte1xuaW5jbHVkZS9saW51eC9tbS5oOjQ2MTk6XHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTQ2MjAtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00NjI0PXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC00NjI3LX1cbmluY2x1ZGUvbGludXgvbW0uaDo0NjI4OnN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyOS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTg2OT10eXBlZGVmIHN0cnVjdCB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODcwLVx0REVDTEFSRV9CSVRNQVAoX192bWFfZmxhZ3MsIE5VTV9WTUFfRkxBR19CSVRTKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4NzE6fSB2bWFfZmxhZ3NfdDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzItXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODczOiNkZWZpbmUgRU1QVFlfVk1BX0ZMQUdTICgodm1hX2ZsYWdzX3QpeyB9KVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTg3NC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzUtLyogQXJlIG5vIGZsYWdzIHNldCBpbiB0aGUgc3BlY2lmaWVkIFZNQSBmbGFncz8gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4NzY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc19lbXB0eShjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODkwPXN0cnVjdCB2bV9hcmVhX2Rlc2Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04OTktXHRzdHJ1Y3QgZmlsZSAqdm1fZmlsZTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo5MDA6XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTAxLVx0cGdwcm90X3QgcGFnZV9wcm90O1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD05MjM9c3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTQ5LVx0XHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjk1MDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTUxLVx0fTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA2OC0vKiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIFZNQSBmbGFncyBiaXRtYXAsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEwNjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEwNzAte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDc0LS8qXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTA3NTogKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgYSB2bWFfZmxhZ3NfdCB2YWx1ZSB0byBhIGxlZ2FjeSB2bV9mbGFnc190XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3Ni0gKiB2YWx1ZS4gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSBpbnB1dCBmbGFncyB2YWx1ZSBjYW4gYmUgZXhwcmVzc2VkIGluIGFcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA4MC0gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDgxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1fZmxhZ3NfdCB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEwODIte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkxLSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEwOTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19vdmVyd3JpdGVfd29yZCh2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA5My1cdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMC0vKlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjExMDE6ICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIGEgbGVnYWN5IHZtX2ZsYWdzX3QgdmFsdWUgdG8gYSB2bWFfZmxhZ3NfdFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDItICogdmFsdWUuXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDUtICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA3LXtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTA4Olx0dm1hX2ZsYWdzX3QgcmV0ID0gRU1QVFlfVk1BX0ZMQUdTO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDktXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMTktICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX292ZXJ3cml0ZV93b3JkX29uY2Uodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMjEtXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMjgtLyogVXBkYXRlIHRoZSBmaXJzdCBzeXN0ZW0gd29yZCBvZiBWTUEgZmxhZ3Mgc2V0dGluZyBiaXRzLCBub24tYXRvbWljYWxseS4gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfc2V0X3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzAtXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzctLyogVXBkYXRlIHRoZSBmaXJzdCBzeXN0ZW0gd29yZCBvZiBWTUEgZmxhZ3MgY2xlYXJpbmcgYml0cywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEzODpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX2NsZWFyX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzktXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNjM9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyNzktXHRcdFx0dm1fZmxhZ3NfdCBkZWZfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTI4MDpcdFx0XHR2bWFfZmxhZ3NfdCBkZWZfdm1hX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyODEtXHRcdH07XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9ODQ1PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODQ2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODQ3LVxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTk3Nz1zdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5Nzg6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTk3OS17XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTE5Nj11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE5Ny1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxOTg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTk5LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMDE9Z2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwMi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwMzpcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA0LXVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMDU9Z2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyMDc6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEwMz1leHRlcm4gaW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEwNDpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEwNTpzdHJ1Y3QgZmlsZSAqc2htZW1fa2VybmVsX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cF93aXRoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMDc6XHRcdGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB2bWFfZmxhZ3NfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA4LWludCBzaG1lbV96ZXJvX3NldHVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pcGMvc2htLmM9NzA0PXN0YXRpYyBpbnQgbmV3c2VnKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcylcbi0tXG5pcGMvc2htLmMtNzEyLVx0Y29uc3QgYm9vbCBoYXNfbm9fcmVzZXJ2ZSA9IHNobWZsZyBcdTAwMjYgU0hNX05PUkVTRVJWRTtcbmlwYy9zaG0uYzo3MTM6XHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZyA9IEVNUFRZX1ZNQV9GTEFHUztcbmlwYy9zaG0uYy03MTQtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTk2LVx0XHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXG5tbS9odWdlX21lbW9yeS5jOjExOTc6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2h1Z2VfbWVtb3J5LmMtMTE5OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjQwPXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9odWdlX21lbW9yeS5jLTEyNDEtXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxubW0vaHVnZV9tZW1vcnkuYzoxMjQyOlx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5tbS9odWdlX21lbW9yeS5jLTEyNDMte1xuLS1cbm1tL2h1Z2V0bGIuYz02NjcyPWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY2NzQtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jOjY2NzU6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2h1Z2V0bGIuYy02Njc2LXtcbi0tXG5tbS9odWdldGxiLmMtNjcwMS1cdCAqL1xubW0vaHVnZXRsYi5jOjY3MDI6XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCkpXG5tbS9odWdldGxiLmMtNjcwMy1cdFx0cmV0dXJuIDA7XG4tLVxubW0vaW50ZXJuYWwuaD0xNTczPXN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTU3Ny1cbm1tL2ludGVybmFsLmg6MTU3ODpib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG5tbS9pbnRlcm5hbC5oLTE1NzktXHRcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbi0tXG5tbS9rc20uYz02OTg9c3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9rc20uYy03NDMtXG5tbS9rc20uYzo3NDQ6c3RhdGljIGJvb2wga3NtX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2tzbS5jLTc0NS17XG5tbS9rc20uYy03NDYtXHQvKiBKdXN0IGlnbm9yZSB0aGUgYWR2aWNlLiAqL1xubW0va3NtLmM6NzQ3Olx0aWYgKHZtYV9mbGFnc190ZXN0X2FueShcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklULFxubW0va3NtLmMtNzQ4LVx0XHRcdCAgICAgICBWTUFfSFVHRVRMQl9CSVQpKVxubW0va3NtLmMtNzQ5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9rc20uYzo3NTA6XHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRFJPUFBBQkxFKSlcbm1tL2tzbS5jLTc1MS1cdFx0cmV0dXJuIGZhbHNlO1xubW0va3NtLmM6NzUyOlx0aWYgKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX1NQRUNJQUxfRkxBR1MpKVxubW0va3NtLmMtNzUzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0va3NtLmMtNzU2LSNpZmRlZiBWTV9TQU9cbm1tL2tzbS5jOjc1NzpcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TQU9fQklUKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdm1hX2ZsYWdzX3RgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGEgc3RydWN0dXJlLCBlc3NlbnRpYWxseSBhIGJpdG1hcCwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYHZtX2ZsYWdzX3RgIHdpdGggaXQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3JtYXAuY2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBpdCYjMzk7cyBub3QganVzdCBhIHN0cmFpZ2h0IHN3YXAuIFRoZSBwYXRjaCBpcyBhbHNvIGludHJvZHVjaW5nIGBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzYCBhcyBhIHBhcmFtZXRlciB0byBgbHJ1X2dlbl9zZXRfcmVmc2AgYW5kIGBmb2xpb191cGRhdGVfZ2VuYC4gIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBpc19leGVjX2ZpbGVfZm9saW9gLCB3aGljaCBjaGVja3MgaWYgYSBmb2xpbyBpcyBib3RoIGZpbGUtYmFja2VkIGFuZCBleGVjdXRhYmxlLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGlzOgpgYGBjCnN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKCQljb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQp7CglyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwp9CmBgYAoKVGhlIGNydWNpYWwgcGFydCBpcyBob3cgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIGBscnVfZ2VuX3NldF9yZWZzYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gLiBMb29raW5nIGF0IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgdGhlIHByZXZpb3VzIGxvZ2ljIHdhcyBhIHNpbXBsZSBgKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pYC4gTm93LCBpdCYjMzk7cyBjYWxsaW5nIGBpc19leGVjX2ZpbGVfZm9saW9gLCBhbmQgaW1wb3J0YW50bHksIGl0IGFjdGl2YXRlcyB0aGVzZSBmb2xpb3MsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgZWFybGllcjoKYGBgYwoJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sICZhbXA7dm1hX2ZsYWdzKSkKCQkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwpgYGAKCkluIGBscnVfZ2VuX3NldF9yZWZzYCwgd2Ugc2VlIHRoZSBzYW1lIHByaW5jaXBsZSAtIGFjdGl2YXRlIGZpbGUtYmFja2VkLCBleGVjdXRhYmxlIGZvbGlvczoKYGBgYwpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCnsKCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwoJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KCQlpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7CgkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwoJCXJldHVybiBmYWxzZTsKCX0KYGBgCgpTbywgdGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyAoYWZ0ZXIgZmlyc3QgdXNhZ2UpIGluIHJlY2xhaW0gcGF0aHMuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyB0aGlzIGlzIGEgcGF0Y2ggYmVpbmcgYXBwbGllZCBmcm9tIGEgZnV6emluZyBjbHVzdGVyLCB3aGljaCBzdWdnZXN0cyBpdCB0YXJnZXRzIGEgc3RhYmlsaXR5IGlzc3VlLCBwcm9iYWJseSBpbnZvbHZpbmcgdGhlIExSVSBhbGdvcml0aG0uICBNZW1vcnkgcmVjbGFpbSBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIHRoaXMgdG91Y2hlcyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTUdMUlUgbG9naWMsIGFzIHNob3duIGZyb20gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuICBTaW5jZSBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgZm9yIGV4YW1wbGUsIGlzIHRoZXJlLCB0aGlzIHRvdWNoZXMgYm90aCBNR0xSVSBhbmQgYWN0aXZlL2luYWN0aXZlIGxpc3QgcmVjbGFpbS4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZXJlIGJ5IHJ1bm5pbmcgbWVtb3J5IHByZXNzdXJlLCBzbyB5ZXMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lbnRpb25zICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBtZWFucyB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIHJlYWwgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIE1HTFJVIChgQ09ORklHX0xSVV9HRU5gKSBpcyBlbmFibGVkIG9yIG5lZWRzIGEgY29uZmlnLCBidXQgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhbiBhY3RpdmUgcGFydCBvZiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OT1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk5LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDA6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOC1cbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE0LVxubW0vS2NvbmZpZzoxNDE1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTYtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMy1cbm1tL0tjb25maWc6MTQyNDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYExSVV9HRU5gLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIHVzdWFsbHkgcmVzaWRlLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGEgZmVhdHVyZSBsaWtlIGBMUlVfR0VOYCB3aWxsIGhhdmUgaXRzIGRlZmluaW5nIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSB0byBnZXQgdGhlIGRlZmluaXRpdmUgaW5mb3JtYXRpb24gb24gdGhpcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5OTpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDAwOlx0Y29uZmlnIExSVV9HRU5cbjE0MDE6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMjpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDM6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwNDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA1Olx0XHRoZWxwXG4xNDA2Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNzpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA4Olx0XG4xNDA5Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxMTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDEyOlx0XHRoZWxwXG4xNDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTQ6XHRcbjE0MTU6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNjpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTc6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxODpcdFx0aGVscFxuMTQxOTpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MjA6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjE6XHRcbjE0MjI6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIzOlx0XG4xNDI0Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI1Olx0XHRkZWZfYm9vbCB5XG4xNDI2Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNzpcdCMgfVxuMTQyODpcdFxuMTQyOTpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuMTQzMDpcdCAgICAgICBkZWZfYm9vbCBuXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIFBFUl9WTUFfTE9DS1xuMTQzMzpcdFx0ZGVmX2Jvb2wgeVxuMTQzNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbjE0MzU6XHRcdGhlbHBcbjE0MzY6XHRcdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxuMTQzNzpcdFxuMTQzODpcdFx0ICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlblxuMTQzOTpcdFx0ICBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbnN0ZWFkIG9mIHRha2luZyBtbWFwX2xvY2suXG4xNDQwOlx0XG4xNDQxOlx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDQyOlx0XHRib29sXG4xNDQzOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDQ0Olx0XG4xNDQ1Olx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0NDY6XHRcdGJvb2xcbjE0NDc6XHRcbjE0NDg6XHRjb25maWcgRVhFQ01FTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTFJVX0dFTiBmb3IgUHJvcGVyIFRlc3RpbmcqKgoKT2theSwgc28gdG8gcmVhbGx5IHB1dCB0aGlzIG5ldyBgTFJVX0dFTmAgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIGl0cyBwYWNlcywgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoYXQgc2VlbXMgb2J2aW91cy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGFsc28gZnVuZGFtZW50YWwgY29tcG9uZW50cyBvZiB0aGUgc3RhbmRhcmQgTFJVIHJlY2xhaW0gcHJvY2Vzcy4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHNlZWluZyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBUaGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IGBMUlVfR0VOYCBtZWNoYW5pc20gYmxlZWRzIGludG8gdGhlIHN0YW5kYXJkIExSVS4gV2FpdCwgbm8sIGhhbmcgb24sIHRoZSBkZWZpbml0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIHNldHRpbmcsIHNvIGl0ICpzaG91bGRuJiMzOTt0KiBpbnRlcmZlcmUgd2hlbiBgTFJVX0dFTmAgaXNuJiMzOTt0IGFjdGl2ZS4gSnVzdCB3YW50IHRvIGNvbmZpcm0gdGhhdCBpbiBteSBoZWFkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uIHBvaW50IGluIGBtbS92bXNjYW4uY2AgYXJvdW5kIGxpbmUgODQxLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuIDgzMjpcdFx0Rk9MSU9SRUZfUkVDTEFJTSxcbiA4MzM6XHRcdEZPTElPUkVGX0tFRVAsXG4gODM0Olx0XHRGT0xJT1JFRl9BQ1RJVkFURSxcbiA4MzU6XHR9O1xuIDgzNjpcdFxuIDgzNzpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuIDgzODpcdC8qXG4gODM5Olx0ICogT25seSB1c2VkIG9uIGEgbWFwcGVkIGZvbGlvIGluIHRoZSBldmljdGlvbiAocm1hcCB3YWxrKSBwYXRoLCB3aGVyZSBwcm9tb3Rpb25cbiA4NDA6XHQgKiBuZWVkcyB0byBiZSBkb25lIGJ5IHRha2luZyB0aGUgZm9saW8gb2ZmIHRoZSBMUlUgbGlzdCBhbmQgdGhlbiBhZGRpbmcgaXQgYmFja1xuIDg0MTpcdCAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbiA4NDI6XHQgKiBmb2xpb191cGRhdGVfZ2VuKCkuXG4gODQzOlx0ICovXG4gODQ0Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIDg0NTpcdHtcbiA4NDY6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIDg0NzpcdFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIDg0ODpcdFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiA4NDk6XHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuIDg1MDpcdFx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4gODUxOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gODUyOlx0XHRcdH1cbiA4NTM6XHRcbiA4NTQ6XHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIDg1NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODU2Olx0XHR9XG4gODU3Olx0XG4gODU4Olx0XHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbiA4NTk6XHRcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4gODYwOlx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4gODYxOlx0XHRlbHNlXG4gODYyOlx0XHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuIDg2MzpcdFx0cmV0dXJuIHRydWU7XG4gODY0Olx0fVxuIDg2NTpcdCNlbHNlXG4gODY2Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHJldHVybiBmYWxzZTtcbiA4Njk6XHR9XG4gODcwOlx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gODcxOlx0XG4gODcyOlx0c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gODczOlx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiA4NzQ6XHR7XG4gODc1Olx0XHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xuIDg3NjpcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIDg3NzpcdFxuIDg3ODpcdFx0cmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXG4gODc5Olx0XHRcdFx0XHRcdCAgIFx1MDAyNnZtYV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYGxydV9nZW5fc2V0X3JlZnNgIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgQ09ORklHX0xSVV9HRU5gLCB3aGljaCBpcyBNR0xSVSwgYnV0IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBhbHNvIHVzZWQgaW4gc3RhbmRhcmQgTFJVIHJlY2xhaW0uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoZW4gSSBzZWUgdGhhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgZGlyZWN0bHkgY2FsbHMgYGlzX2V4ZWNfZmlsZV9mb2xpb2AsIGFuZCB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgICphbHNvKiB1dGlsaXplcyBgaXNfZXhlY19maWxlX2ZvbGlvYC4gU28sIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGp1c3QgdG91Y2hpbmcgTUdMUlU7IGl0JiMzOTtzIGdvdCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdGFuZGFyZCBMUlUgcmVjbGFpbSBwYXRoIGFzIHdlbGwuIEhtbSwgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEkmIzM5O3ZlIGdvdDogYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgZm9saW9fcmVmZXJlbmNlZGAsIGFuZCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLgoKV2FpdCwgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QuIGBmb2xpb19yZWZlcmVuY2VkYCBhbmQgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCBhcmUgaW4gYG1tL3JtYXAuY2AsIHdoaWxlIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIGluIGBtbS92bXNjYW4uY2AuIFRoZW4gdGhlIE1HTFJVIGNvZGU6IGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhcmUgYWxzbyBpbiBgbW0vdm1zY2FuLmNgLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGZ1bmN0aW9uIHZpc2liaWxpdHkuIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIHN0YXRpYy4gYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGV4cG9ydGVkL2dsb2JhbC4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYy4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBzdGF0aWMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwuCgpTbywgZm9yIGZ1enppbmcsIEkmIzM5O20gdGhpbmtpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuIFNpbmNlIGBGb2N1c1N5bWJvbHNgIGlzIGFib3V0IGZ1bmN0aW9ucyB0byB0YXJnZXQsIEkgY2FuIGZ1enogdGhlIHN0YXRpYyBvbmVzIGlmIHRoZSBjb2RlIHBhdGggaXMgaGl0LgoKKiAgIGBmb2xpb19yZWZlcmVuY2VkYAoqICAgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgCiogICBgc2hyaW5rX2FjdGl2ZV9saXN0YAoqICAgYGZvbGlvX3VwZGF0ZV9nZW5gCiogICBgd2Fsa191cGRhdGVfZm9saW9gCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKKiAgIGB3YWxrX3B0ZV9yYW5nZWAKKiAgIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgCgpBcmUgdGhlc2UgaG90IHBhdGhzPyBNZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBuZWNlc3NhcmlseSAqaG90KiwgdW5sZXNzIHRoZXJlJiMzOTtzIG1lbW9yeSBwcmVzc3VyZS4gQnV0IGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgZHVyaW5nIHJlY2xhaW0uIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHQgKGZyb20gYGRvX3NldF9wdGVgIG9yIHNpbWlsYXIpLCBzbyBkZWZpbml0ZWx5IGNvdWxkIGJlIGZyZXF1ZW50bHkgaGl0LiBMZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE4OC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoyMDE6SW4gdGhlIGV2aWN0aW9uIHBhdGgsIHNwZWNpZmljYWxseSwgaW4gYGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCwgaWYgYVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4MS1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODI6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4My1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MjA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzQ5LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1MDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzUxLSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMj1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIxLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIyOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjMtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQxPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ny0gKi9cbm1tL3Ztc2Nhbi5jOjQxODg6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBpcyBpbiBgbW0vcm1hcC5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHVwZGF0aW5nIGBmb2xpb19yZWZlcmVuY2VkYCB0byB1c2UgYHZtYV9mbGFnc190YCBhbmQgcGFzcyBpdCBkb3duIHRvIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEludGVyZXN0aW5nLiBBbmQgSSBzZWUgYSBjaGFuZ2UgaW4gYGxydV9nZW5fc2V0X3JlZnNgIHRvbywgd2hpY2ggbm93IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBpbml0aWFsIHVzZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgcmVsYXRlZCB0byB0aGUgTUdMUlUgY29tcG9uZW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCBidXQgd2hhdCBhYm91dCB0aGUgc3RhbmRhcmQgTFJVIGZ1bmN0aW9uYWxpdHk/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBhbHdheXMgb247IGl0IGRvZXNuJiMzOTt0IG5lZWQgYW55IHNwZWNpYWwgY29uZmlnLiBTbywgaW5jbHVkaW5nIHRob3NlIE1HTFJVLXNwZWNpZmljIG9wdGlvbnMsIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIHdpbGwgZW5zdXJlIHRoYXQgYm90aCBwYXRocyBhcmUgcHJvcGVybHkgdGVzdGVkLiBTbWFydCBtb3ZlLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGB2bWFfZmxhZ3NfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gWWVwLCBpdCYjMzk7cyB0aGVyZSwgYXMgZXhwZWN0ZWQuIFRoaXMgcGF0Y2ggbG9va3MgZnVuY3Rpb25hbGx5IHNvdW5kLiBJdCYjMzk7cyBjbGVhcmx5IG1vZGlmeWluZyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMsIGFmZmVjdGluZyB0aGluZ3MgYXQgdGhlIGZvbGlvIGxldmVsLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZDogYGZvbGlvX3JlZmVyZW5jZWRgLCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGBscnVfZ2VuX3NldF9yZWZzYC4KCldhaXQsIGp1c3QgYSBzZWNvbmQuLi4gaXMgYGxydV9nZW5fc2V0X3JlZnNgIGlubGluZSBvciBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggZXhwbGFpbnMgd2h5IGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbW0vdm1zY2FuLmNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoYXQgc3RhdGljIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3NldF9yZWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NDIyPWVudW0gbHJ1dmVjX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwOS0gKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTA6ICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBQR19yZWZlcmVuY2VkIGFmdGVyIHRoZSBhY2Nlc3NlZCBiaXQgaXMgY2xlYXJlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4tLVxubW0vdm1zY2FuLmM9ODMxPWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODQzLSAqL1xubW0vdm1zY2FuLmM6ODQ0OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg0NS17XG4tLVxubW0vdm1zY2FuLmMtODY1LSNlbHNlXG5tbS92bXNjYW4uYzo4NjY6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODY3LXtcbi0tXG5tbS92bXNjYW4uYz04NzI9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTAwLVxubW0vdm1zY2FuLmM6OTAxOlx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbm1tL3Ztc2Nhbi5jLTkwMi1cdH1cbi0tXG5tbS92bXNjYW4uYz0zNDQ2PXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3Ztc2Nhbi5jLTM0NjItXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmM6MzQ2MzpcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xubW0vdm1zY2FuLmMtMzQ2NC1cdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxNAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBTaWduaWZpY2FuY2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgc28gSSBjYW4gc2VlIHdoYXQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb246IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgb2YgY291cnNlLCBgbHJ1X2dlbl9zZXRfcmVmc2AgaXRzZWxmLgoKSG9sZCBvbiwgSSBzZWUgYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGFsc28gbW9kaWZpZWQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGxpc3QgYXMgd2VsbC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vcm1hcC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgZGVlcGx5IGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBNZW1vcnkgcmVjbGFpbSBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIGdpdmVuLiBNR0xSVSwgaG93ZXZlciwgaXMgZ2F0ZWQgYnkgYENPTkZJR19MUlVfR0VOYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcyB0aGUgY3JpdGljYWwgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuCgpMZXQgbWUgZG91YmxlLWNoZWNrIG15IGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGNoZWNrZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgc3RhbmRhcmQgTFJVIGFuZCBNR0xSVS4gVGhlIG1haW4gcG9pbnQgaXMgdG8gdHJpZ2dlciBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2UgdG8gcHJldmVudCBJTyB0aHJhc2hpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggbWFrZXMgaXQgaGlnaGx5IHJlYWNoYWJsZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KClRpbWUgdG8gZmVlZCB0aGlzIGludG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fY2hlY2tfcmVmZXJlbmNlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDt3YWxrX3VwZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fY2hlY2tfcmVmZXJlbmNlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDt3YWxrX3VwZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzQ6NTUuNDQxOTQyMjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0OTUyMzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fcmVmZXJlbmNlZFwiLFxuICAgIFwiZm9saW9fY2hlY2tfcmVmZXJlbmNlc1wiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJmb2xpb191cGRhdGVfZ2VuXCIsXG4gICAgXCJ3YWxrX3VwZGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwibHJ1X2dlbl9zZXRfcmVmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIChib3RoIHN0YW5kYXJkIExSVSBhbmQgTUdMUlUpIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIHRoZWlyIGZpcnN0IHVzYWdlLCBwcmV2ZW50aW5nIElPIHRocmFzaGluZy4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBWTUEgZmxhZ3MgYXJlIHBhc3NlZCBhbmQgZXZhbHVhdGVkIGR1cmluZyByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgaGlnaGx5IHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzQ6NTUuNDQxOTQ4ODY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc2Nzc2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZmQzOTI0OTg4MWRmNzI0ZjdiYjg2ZTVjZGUyOTVjN2M1NWZiY2E0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjM0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5pbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXRcXG4gICovXFxuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKTtcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTtcXG4gXFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbkBAIC05NzUsMTAgKzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpXFx0KDApXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0KnZtX2ZsYWdzID0gMDtcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC05MDcsNyArOTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XFxuIFxcdGludCBtYXBjb3VudDtcXG4gXFx0aW50IHJlZmVyZW5jZWQ7XFxuLVxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncztcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiB9O1xcbiBcXG5AQCAtOTI2LDcgKzkyNiw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuIFxcdFxcdG5yID0gMTtcXG4gXFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSB7XFxuK1xcdFxcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xcbiBcXHRcXHRcXHRwdGVzKys7XFxuIFxcdFxcdFxcdHByYS1cXHUwMDNlbWFwY291bnQtLTtcXG4gXFxuQEAgLTk0Nyw3ICs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovXFxuIFxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG4gXFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxuLVxcdFxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZwcmEtXFx1MDAzZXZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXFxuIFxcdFxcdH1cXG4gXFxuQEAgLTEwMTUsOCArMTAxNSwxMSBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRyZWZlcmVuY2VkKys7XFxuIFxcbiBcXHRpZiAocmVmZXJlbmNlZCkge1xcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXFx1MDAzZWZsYWdzO1xcbitcXG4gXFx0XFx0cHJhLVxcdTAwM2VyZWZlcmVuY2VkKys7XFxuLVxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRUQ7XFxuK1xcdFxcdHZtYV9mbGFnc19jbGVhcihcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2cHJhLVxcdTAwM2V2bWFfZmxhZ3MsIHZtYV9mbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcHJhLVxcdTAwM2VtYXBjb3VudClcXG5AQCAtMTA1NCw3ICsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxcbiAgKiBAaXNfbG9ja2VkOiBDYWxsZXIgaG9sZHMgbG9jayBvbiB0aGUgZm9saW8uXFxuICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVxcdTAwM2V2bV9mbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cXG4rICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS1cXHUwMDNlZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXFxuICAqXFxuICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLFxcbiAgKlxcbkBAIC0xMDYyLDcgKzEwNjUsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cXG4gICovXFxuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdCAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncylcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdGJvb2wgd2VfbG9ja2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XFxuQEAgLTEwNzgsNyArMTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuIFxcdH07XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7XFxuLVxcdCp2bV9mbGFncyA9IDA7XFxuK1xcdHZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzKTtcXG4gXFx0aWYgKCFwcmEubWFwY291bnQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTA5Miw3ICsxMDk1LDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4gXFx0fVxcbiBcXG4gXFx0cm1hcF93YWxrKGZvbGlvLCBcXHUwMDI2cndjKTtcXG4tXFx0KnZtX2ZsYWdzID0gcHJhLnZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTtcXG4gXFxuIFxcdGlmICh3ZV9sb2NrZWQpXFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0yNjgsNiArMjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxcbiB7XFxuQEAgLTgzNSwxMCArODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbitcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4rXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbitcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuQEAgLTg1MSw3ICs4NjMsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC04NjEsMTYgKzg3MywxNiBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuIFxcbiBcXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2bV9mbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIHN1cHBvc2VkbHkgcmVjbGFpbWFibGUgZm9saW8gd2FzIGZvdW5kIHRvIGJlIGluIGEgVk1fTE9DS0VEIHZtYS5cXG4gXFx0ICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC5cXG4gXFx0ICovXFxuLVxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xcbiBcXG4gXFx0LypcXG5AQCAtODg2LDcgKzg5OCw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4gXFx0XFx0XFx0cmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07XFxuIFxcbi1cXHRcXHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XFxuK1xcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG4gXFx0fVxcbiBcXG4gXFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuQEAgLTkxNCw3ICs5MjYsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQykgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKVxcbitcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSlcXG4gXFx0XFx0XFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xcbiBcXG4gXFx0XFx0cmV0dXJuIEZPTElPUkVGX0tFRVA7XFxuQEAgLTIwNjMsNyArMjA3NSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuIFxcdExJU1RfSEVBRChsX2hvbGQpO1xcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xcbiBcXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xcbiBcXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XFxuQEAgLTIxMDcsNyArMjExOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcbiBcXHRcXHQvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi9cXG4gXFx0XFx0aWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcXG4tXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElkZW50aWZ5IHJlZmVyZW5jZWQsIGZpbGUtYmFja2VkIGFjdGl2ZSBmb2xpb3MgYW5kXFxuIFxcdFxcdFxcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXFxuQEAgLTIxMTcsNyArMjEyOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdFxcdCAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcyxcXG4gXFx0XFx0XFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICgodm1fZmxhZ3MgXFx1MDAyNiBWTV9FWEVDKSBcXHUwMDI2XFx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXFx1MDAyNnZtYV9mbGFncykpIHtcXG4gXFx0XFx0XFx0XFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bF9hY3RpdmUpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzE4NiwxNCArMzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbiBcXG4tXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuLVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbitcXHQvKlxcbitcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbitcXHQgKiBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZSB0byBhdm9pZCB0eXBpY2FsIElPXFxuK1xcdCAqIHRocmFzaGluZyBmcm9tIHJlY2xhaW1pbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4gXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbkBAIC0zNDI2LDggKzM0NDMsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiBcXHRyZXR1cm4geW91bmcgKiBuIFxcdTAwM2U9IHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRcXHQgICAgICBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxcbiB7XFxuIFxcdGludCBvbGRfZ2VuO1xcbiBcXG5AQCAtMzQ0MCwxMCArMzQ1NywxMCBAQCBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4gXFxuIFxcdGlmICh3YWxrKSB7XFxuLVxcdFxcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuIFxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4tXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xcbitcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbiBcXHRcXHRcXHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XFxuQEAgLTM1MTYsNyArMzUzMyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNTI5LDcgKzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXHRsYXN0ID0gTlVMTDtcXG4gXFxuIFxcdGlmIChpIFxcdTAwM2MgUFRSU19QRVJfUFRFIFxcdTAwMjZcXHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpKVxcbkBAIC0zNjA3LDcgKzM2MjQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG4gXFx0XFx0XFx0ZGlydHkgPSBmYWxzZTtcXG5AQCAtMzYyMSw3ICszNjM4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0XFx0aSA9IGkgXFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XFxuIFxcdH0gd2hpbGUgKGkgXFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XFxuIFxcbi1cXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjU2LDcgKzQyNzMsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcXG4tXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQyNjgsNyArNDI4NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNDo1Ni4wNTAyNDMzODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Mjg4NjkyNTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gICAgXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcIndhbGtfdXBkYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJscnVfZ2VuX3NldF9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmZDM5MjQ5ODgxZGY3MjRmN2JiODZlNWNkZTI5NWM3YzU1ZmJjYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNTozNDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDExLi5lMDkwYWEwOTgyNWQ1MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyk7XG4gXG4gdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG4gdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbkBAIC05NzUsMTAgKzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gI2RlZmluZSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSlcdCgwKVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi1cdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICB2bV9mbGFnc190ICp2bV9mbGFncylcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBhZDgyMGZlODZmN2Q4Yy4uNzNjMmZlMmQxOTQ2MjUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTkwNyw3ICs5MDcsNyBAQCBwbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiBzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcge1xuIFx0aW50IG1hcGNvdW50O1xuIFx0aW50IHJlZmVyZW5jZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgKzkyNiw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4gXHRcdG5yID0gMTtcbiBcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB7XG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdHB0ZXMrKztcbiBcdFx0XHRwcmEtXHUwMDNlbWFwY291bnQtLTtcbiBcbkBAIC05NDcsNyArOTQ3LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovXG4gXHRcdFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xuIFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4tXHRcdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggKzEwMTUsMTEgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0cmVmZXJlbmNlZCsrO1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuK1xuIFx0XHRwcmEtXHUwMDNlcmVmZXJlbmNlZCsrO1xuLVx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiB+Vk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4rXHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG4gICogQGlzX2xvY2tlZDogQ2FsbGVyIGhvbGRzIGxvY2sgb24gdGhlIGZvbGlvLlxuICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcbi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXHUwMDNldm1fZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXG4rICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS1cdTAwM2VmbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cbiAgKlxuICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLFxuICAqXG5AQCAtMTA2Miw3ICsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRib29sIHdlX2xvY2tlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcbkBAIC0xMDc4LDcgKzEwODEsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuIFx0fTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc196b25lX2RldmljZShmb2xpbyksIGZvbGlvKTtcbi1cdCp2bV9mbGFncyA9IDA7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICsxMDk1LDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdH1cbiBcbiBcdHJtYXBfd2Fsayhmb2xpbywgXHUwMDI2cndjKTtcbi1cdCp2bV9mbGFncyA9IHByYS52bV9mbGFncztcbitcdHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3MsIHByYS52bWFfZmxhZ3MpO1xuIFxuIFx0aWYgKHdlX2xvY2tlZClcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0yNjgsNiArMjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcbiB7XG5AQCAtODM1LDEwICs4NDEsMTYgQEAgZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxuICAqL1xuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4rXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuK1x0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4rXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC04NTEsNyArODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiArODczLDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0LypcbkBAIC04ODYsNyArODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4rXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgKzkyNiw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQvKlxuIFx0XHQgKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS5cbiBcdFx0ICovXG4tXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpXG4rXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDYzLDcgKzIwNzUsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0TElTVF9IRUFEKGxfaG9sZCk7XHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cbiBcdExJU1RfSEVBRChsX2FjdGl2ZSk7XG4gXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XG5AQCAtMjEwNyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbitcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExNyw3ICsyMTI5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXG4gXHRcdFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XG4rXHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODYsMTQgKzMxOTgsMTkgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuIFxuLVx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4rXHQvKlxuK1x0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbitcdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbitcdCAqIHRocmFzaGluZyBmcm9tIHJlY2xhaW1pbmcuXG4rXHQgKi9cbitcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC0zNDI2LDggKzM0NDMsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiB7XG4gXHRpbnQgb2xkX2dlbjtcbiBcbkBAIC0zNDQwLDEwICszNDU3LDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuK1x0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuQEAgLTM1MTYsNyArMzUzMyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTI5LDcgKzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwNyw3ICszNjI0LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIxLDcgKzM2MzgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTYsNyArNDI3Myw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQyNjgsNyArNDI4NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjM0OjU2LjA1MDI0NDcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkzMTc1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgVk0gRmxhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGhvdyB3ZSBoYW5kbGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoVk1BKSBmbGFncywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBmb2xpb19yZWZlcmVuY2VkYCBhbmQgTFJVIGdlbmVyYXRpb24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBob3cgd2UgcmVwcmVzZW50IGFuZCBtYW5pcHVsYXRlIHRoZXNlIGZsYWdzLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMganVzdCBhIHNpbXBsZSB0eXBlIHJlbmFtZSDigJMgYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAgb3IgcGVyaGFwcyBldmVuIGp1c3QgYW4gdW5kZXJseWluZyB0eXBlIGNoYW5nZSBsaWtlIGB1bnNpZ25lZCBsb25nYC4gVGhhdCdzIHRoZSBmaXJzdCBhc3N1bXB0aW9uLlxuXG5CdXQgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGl0J3MgYWN0dWFsbHkgY2hhbmdpbmcgaG93IHdlIHdvcmsgd2l0aCBwb2ludGVyczogYHZtYV9mbGFnc190ICp2bWFfZmxhZ3NgIGluc3RlYWQgb2YgYHZtX2ZsYWdzX3QgKnZtX2ZsYWdzYC4gT2theSwgdGhhdCdzIG1vcmUgc2lnbmlmaWNhbnQuIFRoaXMgaXMgbm90IGp1c3QgYSB0eXBlIHJlbmFtZSwgd2UgYXJlIGNoYW5naW5nIGhvdyB0aGUgZmxhZ3MgYXJlIHBhc3NlZC5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zOiBgdm1hX2ZsYWdzX2NsZWFyX2FsbGAsIGB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKWAsIGB2bWFfZmxhZ3Nfc2V0YCwgYHZtYV9mbGFnc19jbGVhcmAsIGFuZCBgdm1hX2ZsYWdzX3NldF9tYXNrYC4gVGhhdCdzIGEgZ29vZCBzaWduOyBtYXliZSB0aGlzIGlzIGEgY2xlYW5lciBBUEksIGFuZCB0aGV5IGFyZSB1c2luZyBoZWxwZXJzIHRvIG1ha2UgdGhpbmdzIG1vcmUgcm9idXN0LlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJZiB0aGV5J3JlIHVzaW5nIHRob3NlIGhlbHBlciBmdW5jdGlvbnMsIEkgaGF2ZSBhIGZlZWxpbmcgYHZtYV9mbGFnc190YCBpcyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhIHNpbXBsZSBpbnRlZ2VyIHR5cGUuIE15IGd1dCBzYXlzIGl0J3MgbGlrZWx5IGEgYHN0cnVjdGAgb3Igc29tZSBzb3J0IG9mIGN1c3RvbSB0eXBlIHRoYXQgcHJvdmlkZXMgbW9yZSBzdHJ1Y3R1cmUuIElmIHRoaXMgaXMgdGhlIGNhc2UsIGl0IG1ha2VzIHNlbnNlOyB3aXRoIHNvIG1hbnkgZmxhZ3MgaW4gdGhlIHN5c3RlbSwgeW91IG5lZWQgYSB3YXkgdG8gZW5jYXBzdWxhdGUgdGhlbS5cblxuVGltZSB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbi4gSSdsbCBjaGVjayBgaW5jbHVkZS9saW51eC9ybWFwLmhgIG9yIG1heWJlIGBtbS9ybWFwLmNgIGZpcnN0LiBUaG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB0byBmaW5kIGEgZGVmaW5pdGlvbiBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gVk1BcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblJpZ2h0LCBuZWVkIHRvIGJlIHN1cmU7IGlzIHRoaXMgYSBuZXcgdHlwZT8gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBgdm1hX2ZsYWdzX3RgIGp1c3QgdG8gY29uZmlybSBpdCdzIG5vdCBhIHByZS1leGlzdGluZyB0eXBlIHRoYXQgdGhleSBhcmUgbWVyZWx5IHVzaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNTowMi41Mzk1NjM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY4MjYyNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTY3OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0PTU4PUV4YW1pbmluZyB0aGUgc3RydWN0IHZtX2FyZWFfZGVzYyB0eXBlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0LTcxLSAgICAgICAgc3RydWN0IGZpbGUgKnZtX2ZpbGU7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0OjcyOiAgICAgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbW1hcF9wcmVwYXJlLnJzdC03My0gICAgICAgIHBncHJvdF90IHBhZ2VfcHJvdDtcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTE1LVxcbmRyaXZlcnMvZGF4L2RldmljZS5jOjE2OnN0YXRpYyBpbnQgX19jaGVja192bWEoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHZtYV9mbGFnc190IGZsYWdzLFxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTE3LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yNi1cXHQvKiBwcmV2ZW50IHByaXZhdGUgbWFwcGluZ3MgZnJvbSBiZWluZyBlc3RhYmxpc2hlZCAqL1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjI3OlxcdGlmICghdm1hX2ZsYWdzX3Rlc3RfYW55KFxcdTAwMjZmbGFncywgVk1BX01BWVNIQVJFX0JJVCkpIHtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yOC1cXHRcXHRkZXZfaW5mb19yYXRlbGltaXRlZChkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTE4ND1pbnQgZHJtX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtMTg4LVxcdHN0cnVjdCBmaWxlICpmaWxwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6MTg5OlxcdGNvbnN0IHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9OT1JFU0VSVkVfQklUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE5MC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTUwMz1zdGF0aWMgaW50IF9fY3JlYXRlX3NobWVtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTA3LXtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzo1MDg6XFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgc2htZW1fZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX05PUkVTRVJWRV9CSVQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTUwOS1cXHRzdHJ1Y3QgdmZzbW91bnQgKmh1Z2VfbW50O1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNC1cXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1OlxcdHZtYV9mbGFnc190IHZtYV9mbGFncztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDYtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDk4PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ5OTpcXHRcXHRcXHRcXHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZywgaW50IGNyZWF0X2ZsYWdzLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtXFx0XFx0XFx0XFx0aW50IHBhZ2Vfc2l6ZV9sb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTQ9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zOTUtXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mzk2OlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjIwPXRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyMS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjIyOlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTE1MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGZyb20sIGxvbmcgdG8sXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUyOlxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1My1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIwOnN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTIxLVxcdFxcdFxcdFxcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTM1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjUzNjpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3RmbGFnLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUzNy1cXHRcXHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oOjk6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTAte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaDoxMTpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9IVUdFVExCX0JJVCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTEyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmg6MTY6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaD0xOD1pbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9rc20uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgva3NtLmg6MjA6dm1hX2ZsYWdzX3Qga3NtX3ZtYV9mbGFncyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9rc20uaDoyMTpcXHRcXHRcXHQgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9rc20uaC0yMi1pbnQga3NtX2VuYWJsZV9tZXJnZV9hbnkoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaD0xMDI9Ym9vbCBrc21fcHJvY2Vzc19tZXJnZWFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaC0xMDUtXFxuaW5jbHVkZS9saW51eC9rc20uaDoxMDY6c3RhdGljIGlubGluZSB2bWFfZmxhZ3NfdCBrc21fdm1hX2ZsYWdzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva3NtLmg6MTA3OlxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9rc20uaC0xMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1mZC5oPTExPXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjE5OmludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cik7XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTIwLXN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg9MzI9c3RhdGljIGlubGluZSBpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MzM6XFx0XFx0XFx0XFx0XFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0zNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjk0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUxMy0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDo1MTQ6ICogdm1hX2ZsYWdzX3QgbWFza3MgZm9yIHRoZSB1c2VyZmF1bHRmZCBWTUEgZmxhZ3MuIFRoZSB0d28gaGlnaC1iaXQgbW9kZXMgYXJlXFxuaW5jbHVkZS9saW51eC9tbS5oLTUxNS0gKiBnYXRlZCBvbiB0aGUgc2FtZSBjb25maWdzIGFzIHRoZWlyIFZNXyogZmxhZ3MgYWJvdmUgLS0gYm90aCBvZiB3aGljaCBpbXBseVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTU3Ni0vKiBUZW1wb3JhcnkgdW50aWwgVk1BIGZsYWdzIGNvbnZlcnNpb24gY29tcGxldGUuICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjU3NzojZGVmaW5lIFZNX1NUQUNLX0ZMQUdTIHZtYV9mbGFnc190b19sZWdhY3koVk1BX1NUQUNLX0ZMQUdTKVxcbmluY2x1ZGUvbGludXgvbW0uaC01NzgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTk0LVxcdFxcdFxcdFxcdCAgICAgICBWTUFfUEZOTUFQX0JJVCwgVk1BX01JWEVETUFQX0JJVClcXG5pbmNsdWRlL2xpbnV4L21tLmg6NTk1OiNkZWZpbmUgVk1fU1BFQ0lBTCB2bWFfZmxhZ3NfdG9fbGVnYWN5KFZNQV9TUEVDSUFMX0ZMQUdTKVxcbmluY2x1ZGUvbGludXgvbW0uaC01OTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTAyMj1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3Jlc2V0X29uY2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tbS5oOjEwMjM6XFx0XFx0XFx0XFx0XFx0dm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMDI0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xMTA3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hdG9taWNfZmxhZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTE2LS8qIFNldCBhbiBpbmRpdmlkdWFsIFZNQSBmbGFnIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTExNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9mbGFnKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTExOC1cXHRcXHR2bWFfZmxhZ190IGJpdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTI0LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgX19ta192bWFfZmxhZ3Modm1hX2ZsYWdzX3QgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tbS5oLTExMjYtXFx0XFx0c2l6ZV90IGNvdW50LCBjb25zdCB2bWFfZmxhZ190ICpiaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExMzYtICogSGVscGVyIG1hY3JvIHdoaWNoIGJpdHdpc2Utb3IgY29tYmluZXMgdGhlIHNwZWNpZmllZCBpbnB1dCBmbGFncyBpbnRvIGFcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzNzogKiB2bWFfZmxhZ3NfdCBiaXRtYXAgdmFsdWUuIEUuZy46XFxuaW5jbHVkZS9saW51eC9tbS5oLTExMzgtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzOTogKiB2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfSU9fQklULCBWTUFfUEZOTUFQX0JJVCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE0MC0gKiAgICAgICAgICAgICAgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfRE9OVERVTVBfQklUKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTUxLSAqXFxuaW5jbHVkZS9saW51eC9tbS5oOjExNTI6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBhcHBlbmRfdm1hX2ZsYWdzKFZNQV9TVEFDS19ERUZBVUxUX0ZMQUdTLCBWTUFfU1RBQ0tfQklULFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTUzLSAqICAgICAgICAgICAgICBWTUFfQUNDT1VOVF9CSVQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNTgtLyogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIHRoZSBzcGVjaWZpZWQgVk1BIGZsYWdzLiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMTU5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHZtYV9mbGFnc19jb3VudChjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNjAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNjgtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE2OTogKiBpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9SRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3MC0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE3MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3QoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTcyLVxcdFxcdHZtYV9mbGFnX3QgYml0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExODItICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjExODM6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3NfYW5kX21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTg0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZtYV9mbGFnc190IHRvX2FuZClcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE4NS17XFxuaW5jbHVkZS9saW51eC9tbS5oOjExODY6XFx0dm1hX2ZsYWdzX3QgZHN0O1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMTg3LVxcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9kc3QgPSBkc3QuX192bWFfZmxhZ3M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE5OC0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTk5OiAqIHZtYV9mbGFnc190IHJlYWRfZmxhZ3MgPSB2bWFfZmxhZ3NfYW5kKFxcdTAwMjZmbGFncywgVk1BX1JFQURfQklULFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjAwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNQV9NQVlfUkVBRF9CSVQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMDUtLyogIFRlc3QgZWFjaCBvZiB0b190ZXN0IGZsYWdzIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjA3OlxcdFxcdHZtYV9mbGFnc190IHRvX3Rlc3QpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTctICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIxODogKiBpZiAodm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfUkVBRF9CSVQsIFZNQV9NQVlSRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIxOS0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyMDojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FueShmbGFncywgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMjE6XFx0dm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soZmxhZ3MsIG1rX3ZtYV9mbGFncyhfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjItXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjMtLyogVGVzdCB0aGF0IEFMTCBvZiB0aGUgdG9fdGVzdCBmbGFncyBhcmUgc2V0LCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyNDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjI1OlxcdFxcdHZtYV9mbGFnc190IHRvX3Rlc3QpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMzUtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzNjogKiBpZiAodm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCBWTUFfUkVBRF9CSVQsIFZNQV9NQVlSRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNy0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzODojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMzk6XFx0dm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soZmxhZ3MsIG1rX3ZtYV9mbGFncyhfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDAtXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDEtLypcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI0MjogKiBIZWxwZXIgdG8gdGVzdCB0aGF0IGEgZmxhZyBtYXNrIG9mIHR5cGUgdm1hX2ZsYWdzX3QgaGFzIGEgU0lOR0xFIGZsYWcgc2V0XFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDMtICogKHJldHVybmluZyBmYWxzZSBpZiBmbGFnbWFzayBoYXMgbm8gZmxhZ3Mgc2V0KS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjQ3LSAqXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDg6ICogaWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFxcdTAwMjZmbGFncywgVk1BX0RST1BQQUJMRSkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0OS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNTItICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNTM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1NDpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFnbWFzaylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1Ny1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1ODpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soZmxhZ3MsIGZsYWdtYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1OS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI2MS0vKiBTZXQgZWFjaCBvZiB0aGUgdG9fc2V0IGZsYWdzIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MzpcXHRcXHR2bWFfZmxhZ3NfdCB0b19zZXQpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNjQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNzgtXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNzk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCBfX21rX3ZtYV9mbGFnc19mcm9tX21hc2tzKHNpemVfdCBjb3VudCxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI4MDpcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqbWFza3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyODEte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMjgyOlxcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMjgzLVxcdHNpemVfdCBpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyOTAtLypcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI5MTogKiBDb21iaW5lIHByZS1jb21wdXRlZCB2bWFfZmxhZ3NfdCBtYXNrcyBpbnRvIG9uZSB2YWx1ZSwgZS5nLjpcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5Mi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjkzOiAqIHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzX2Zyb21fbWFza3MoVk1BX1VGRkRfV1AsIFZNQV9VRkZEX01JTk9SKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5NC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDAtXFx0X19ta192bWFfZmxhZ3NfZnJvbV9tYXNrcyhDT1VOVF9BUkdTKF9fVkFfQVJHU19fKSxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMDE6XFx0XFx0KGNvbnN0IHZtYV9mbGFnc190IFtdKXtfX1ZBX0FSR1NfX30pXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDItXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDMtLyogQ2xlYXIgYWxsIG9mIHRoZSB0by1jbGVhciBmbGFncyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMwNTpcXHRcXHR2bWFfZmxhZ3NfdCB0b19jbGVhcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNC0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMyNTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IHZtYV9mbGFnc19kaWZmX3BhaXIoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzI2OlxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFnc19vdGhlcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNy17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMjg6XFx0dm1hX2ZsYWdzX3QgZHN0O1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMzI5LVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9vdGhlciA9IGZsYWdzX290aGVyLVxcdTAwM2VfX3ZtYV9mbGFncztcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMzM3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMzM4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9wYWlyKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMzOTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3Nfb3RoZXIpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDctLyogRGV0ZXJtaW5lIGlmIGZsYWdzIGFuZCBmbGFnc19vdGhlciBoYXZlIHByZWNpc2VseSB0aGUgc2FtZSBmbGFncyBzZXQuICAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTM0OTpcXHRcXHRcXHRcXHRcXHRcXHR2bWFfZmxhZ3NfdCBmbGFnc19vdGhlcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM1MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTM3MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX3Rlc3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3Mi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzNzM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzLCBiaXQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMzc0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xMzc3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hbnlfbWFzayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTM3ODpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3OS17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzODA6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzLCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTEzODEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTEzOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDAwOlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDAxLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQwMjpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MsIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQwMy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQxMy0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDE0OiAqIEhlbHBlciB0byB0ZXN0IHRoYXQgYSBmbGFnIG1hc2sgb2YgdHlwZSB2bWFfZmxhZ3NfdCBoYXMgYSBTSU5HTEUgZmxhZyBzZXRcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQxNS0gKiAocmV0dXJuaW5nIGZhbHNlIGlmIGZsYWdtYXNrIGhhcyBubyBmbGFncyBzZXQpLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE0MjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXFxuaW5jbHVkZS9saW51eC9tbS5oOjE0MjY6dm1hX3Rlc3Rfc2luZ2xlX21hc2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtYV9mbGFnc190IGZsYWdtYXNrKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDI3LXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyODpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MsIGZsYWdtYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQyOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQzNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX3NldF9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDM4OlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDM5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNDU2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ1NzpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQ1OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQ3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2Rlc2NfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTE0Nzgte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxNDc5OlxcdHJldHVybiB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2ZGVzYy1cXHUwMDNldm1hX2ZsYWdzLCBiaXQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xNDgwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNDgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXFxuaW5jbHVkZS9saW51eC9tbS5oOjE0ODQ6XFx0XFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTE0ODUte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxNDg2OlxcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcXHUwMDI2ZGVzYy1cXHUwMDNldm1hX2ZsYWdzLCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTE0ODctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE1MDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9kZXNjX3Rlc3RfYWxsX21hc2soY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMTpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwMi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjE1MDM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FsbF9tYXNrKFxcdTAwMjZkZXNjLVxcdTAwM2V2bWFfZmxhZ3MsIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwNC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2ZsYWdzX21hc2soc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUxNzpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUxOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTUzMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2Rlc2NfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNTM0OlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTM1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNTc4PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTg4LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNTg5OnN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTkwLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MTpcXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MzpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNjI3PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYWNjZXNzaWJsZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMxLVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNjMyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19zaGFyZWRfbWF5d3JpdGUoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMzLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTYzNDpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTE2MzUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyNzk9c3RhdGljIGlubGluZSBib29sIHZtYV9kZXNjX2lzX2Nvd19tYXBwaW5nKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODAte1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjgxOlxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyA9IFxcdTAwMjZkZXNjLVxcdTAwM2V2bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODItXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyODM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg0OlxcdFxcdCF2bWFfZmxhZ3NfdGVzdChmbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjg1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub21tdV9zaGFyZWRfbWFwcGluZyh2bV9mbGFnc190IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDAtXFxuaW5jbHVkZS9saW51eC9tbS5oOjIzMDE6c3RhdGljIGlubGluZSBib29sIGlzX25vbW11X3NoYXJlZF92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAyLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwMzpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfTUFZU0hBUkVfQklULCBWTUFfTUFZT1ZFUkxBWV9CSVQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzA0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD00MTk3PV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuaW5jbHVkZS9saW51eC9tbS5oLTQxOTgtXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tbS5oOjQxOTk6XFx0XFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMDAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDIwOT11bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDIxMC1cXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDo0MjExOlxcdHZtYV9mbGFnc190IHZtYV9mbGFncywgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMTItXFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MDg9cGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYwOS1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMDpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC00NjExLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMjpcXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00NjEzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MTc9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxOC17XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ2MTk6XFx0cmV0dXJuIHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hLVxcdTAwM2VmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQ2MjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MjQ9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyNy19XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ2Mjg6c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODY5PXR5cGVkZWYgc3RydWN0IHtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODcwLVxcdERFQ0xBUkVfQklUTUFQKF9fdm1hX2ZsYWdzLCBOVU1fVk1BX0ZMQUdfQklUUyk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjg3MTp9IHZtYV9mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjg3MzojZGVmaW5lIEVNUFRZX1ZNQV9GTEFHUyAoKHZtYV9mbGFnc190KXsgfSlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODc0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzUtLyogQXJlIG5vIGZsYWdzIHNldCBpbiB0aGUgc3BlY2lmaWVkIFZNQSBmbGFncz8gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODc2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfZW1wdHkoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04Nzcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTg5MD1zdHJ1Y3Qgdm1fYXJlYV9kZXNjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04OTktXFx0c3RydWN0IGZpbGUgKnZtX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjkwMDpcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTkwMS1cXHRwZ3Byb3RfdCBwYWdlX3Byb3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9OTIzPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTQ5LVxcdFxcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjk1MDpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncztcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTUxLVxcdH07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA2OC0vKiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIFZNQSBmbGFncyBiaXRtYXAsIG5vbi1hdG9taWNhbGx5LiAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3NC0vKlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDc1OiAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBhIHZtYV9mbGFnc190IHZhbHVlIHRvIGEgbGVnYWN5IHZtX2ZsYWdzX3RcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3Ni0gKiB2YWx1ZS4gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSBpbnB1dCBmbGFncyB2YWx1ZSBjYW4gYmUgZXhwcmVzc2VkIGluIGFcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDgwLSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDgxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1fZmxhZ3NfdCB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDgyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkxLSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDkyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfb3ZlcndyaXRlX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkzLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMC0vKlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTAxOiAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBhIGxlZ2FjeSB2bV9mbGFnc190IHZhbHVlIHRvIGEgdm1hX2ZsYWdzX3RcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMi0gKiB2YWx1ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA1LSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA3LXtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEwODpcXHR2bWFfZmxhZ3NfdCByZXQgPSBFTVBUWV9WTUFfRkxBR1M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTExOS0gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX292ZXJ3cml0ZV93b3JkX29uY2Uodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTIxLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEyOC0vKiBVcGRhdGUgdGhlIGZpcnN0IHN5c3RlbSB3b3JkIG9mIFZNQSBmbGFncyBzZXR0aW5nIGJpdHMsIG5vbi1hdG9taWNhbGx5LiAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfc2V0X3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTMwLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEzNy0vKiBVcGRhdGUgdGhlIGZpcnN0IHN5c3RlbSB3b3JkIG9mIFZNQSBmbGFncyBjbGVhcmluZyBiaXRzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEzODpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX2NsZWFyX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTM5LVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTE2Mz1zdHJ1Y3QgbW1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMjc5LVxcdFxcdFxcdHZtX2ZsYWdzX3QgZGVmX2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMjgwOlxcdFxcdFxcdHZtYV9mbGFnc190IGRlZl92bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyODEtXFx0XFx0fTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oPTg0NT1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05Nzc9c3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjk3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTc5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xOTY9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTk3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE5ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xOTktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjAxPWdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjAyLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwMzpcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwNC11bnNpZ25lZCBsb25nXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIwNT1nZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwNzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEwMz1leHRlcm4gaW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMDQ6c3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHZtYV9mbGFnc190IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTA1OnN0cnVjdCBmaWxlICpzaG1lbV9rZXJuZWxfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cF93aXRoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTA3OlxcdFxcdGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB2bWFfZmxhZ3NfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEwOC1pbnQgc2htZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5pcGMvc2htLmM9NzA0PXN0YXRpYyBpbnQgbmV3c2VnKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmlwYy9zaG0uYy03MTItXFx0Y29uc3QgYm9vbCBoYXNfbm9fcmVzZXJ2ZSA9IHNobWZsZyBcXHUwMDI2IFNITV9OT1JFU0VSVkU7XFxuaXBjL3NobS5jOjcxMzpcXHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZyA9IEVNUFRZX1ZNQV9GTEFHUztcXG5pcGMvc2htLmMtNzE0LVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTk0PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTk2LVxcdFxcdGxvZmZfdCBvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5tbS9odWdlX21lbW9yeS5jOjExOTc6XFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE5OC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyNDA9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdlX21lbW9yeS5jLTEyNDEtXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxubW0vaHVnZV9tZW1vcnkuYzoxMjQyOlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5tbS9odWdlX21lbW9yeS5jLTEyNDMte1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NzI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Njc0LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYzo2Njc1OlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5tbS9odWdldGxiLmMtNjY3Ni17XFxuLS1cXG5tbS9odWdldGxiLmMtNjcwMS1cXHQgKi9cXG5tbS9odWdldGxiLmM6NjcwMjpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpKVxcbm1tL2h1Z2V0bGIuYy02NzAzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xNTczPXN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xNTc3LVxcbm1tL2ludGVybmFsLmg6MTU3ODpib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXFxubW0vaW50ZXJuYWwuaC0xNTc5LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcXG4tLVxcbm1tL2tzbS5jPTY5OD1zdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va3NtLmMtNzQzLVxcbm1tL2tzbS5jOjc0NDpzdGF0aWMgYm9vbCBrc21fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbm1tL2tzbS5jLTc0NS17XFxubW0va3NtLmMtNzQ2LVxcdC8qIEp1c3QgaWdub3JlIHRoZSBhZHZpY2UuICovXFxubW0va3NtLmM6NzQ3OlxcdGlmICh2bWFfZmxhZ3NfdGVzdF9hbnkoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQsXFxubW0va3NtLmMtNzQ4LVxcdFxcdFxcdCAgICAgICBWTUFfSFVHRVRMQl9CSVQpKVxcbm1tL2tzbS5jLTc0OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0va3NtLmM6NzUwOlxcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRFJPUFBBQkxFKSlcXG5tbS9rc20uYy03NTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2tzbS5jOjc1MjpcXHRpZiAodm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soXFx1MDAyNnZtYV9mbGFncywgVk1BX1NQRUNJQUxfRkxBR1MpKVxcbm1tL2tzbS5jLTc1My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9rc20uYy03NTYtI2lmZGVmIFZNX1NBT1xcbm1tL2tzbS5jOjc1NzpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NBT19CSVQpKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNTowNS4xMDc4MzI1MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ0MjkyOTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGB2bWFfZmxhZ3NfdGAgaXMgdGhlIGtleS4gSXQncyBhIHN0cnVjdHVyZSwgZXNzZW50aWFsbHkgYSBiaXRtYXAsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW1fdHlwZXMuaGAuIFRoaXMgcGF0Y2ggaXMgcmVwbGFjaW5nIGB2bV9mbGFnc190YCB3aXRoIGl0IGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9ybWFwLmNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGl0J3Mgbm90IGp1c3QgYSBzdHJhaWdodCBzd2FwLiBUaGUgcGF0Y2ggaXMgYWxzbyBpbnRyb2R1Y2luZyBgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc2AgYXMgYSBwYXJhbWV0ZXIgdG8gYGxydV9nZW5fc2V0X3JlZnNgIGFuZCBgZm9saW9fdXBkYXRlX2dlbmAuICBJdCdzIGFkZGluZyBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBpc19leGVjX2ZpbGVfZm9saW9gLCB3aGljaCBjaGVja3MgaWYgYSBmb2xpbyBpcyBib3RoIGZpbGUtYmFja2VkIGFuZCBleGVjdXRhYmxlLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGlzOlxuYGBgY1xuc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG57XG5cdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbn1cbmBgYFxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGlzIGhvdyB0aGlzIG5ldyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJdCdzIGJlaW5nIGludGVncmF0ZWQgaW50byBgbHJ1X2dlbl9zZXRfcmVmc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYC4gTG9va2luZyBhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIHRoZSBwcmV2aW91cyBsb2dpYyB3YXMgYSBzaW1wbGUgYCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKWAuIE5vdywgaXQncyBjYWxsaW5nIGBpc19leGVjX2ZpbGVfZm9saW9gLCBhbmQgaW1wb3J0YW50bHksIGl0IGFjdGl2YXRlcyB0aGVzZSBmb2xpb3MsIHdoaWNoIHdhc24ndCB0aGUgY2FzZSBlYXJsaWVyOlxuYGBgY1xuXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG5cdFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG5gYGBcblxuSW4gYGxydV9nZW5fc2V0X3JlZnNgLCB3ZSBzZWUgdGhlIHNhbWUgcHJpbmNpcGxlIC0gYWN0aXZhdGUgZmlsZS1iYWNrZWQsIGV4ZWN1dGFibGUgZm9saW9zOlxuYGBgY1xuc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxue1xuXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cblx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcblx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5gYGBcblxuU28sIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBhY3RpdmF0ZXMgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKGFmdGVyIGZpcnN0IHVzYWdlKSBpbiByZWNsYWltIHBhdGhzLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgdGhpcyBpcyBhIHBhdGNoIGJlaW5nIGFwcGxpZWQgZnJvbSBhIGZ1enppbmcgY2x1c3Rlciwgd2hpY2ggc3VnZ2VzdHMgaXQgdGFyZ2V0cyBhIHN0YWJpbGl0eSBpc3N1ZSwgcHJvYmFibHkgaW52b2x2aW5nIHRoZSBMUlUgYWxnb3JpdGhtLiAgTWVtb3J5IHJlY2xhaW0gaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCB0aGlzIHRvdWNoZXMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVIGxvZ2ljLCBhcyBzaG93biBmcm9tIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBscnVfZ2VuX3NldF9yZWZzYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLiAgU2luY2UgYHNocmlua19hY3RpdmVfbGlzdGAsIGZvciBleGFtcGxlLCBpcyB0aGVyZSwgdGhpcyB0b3VjaGVzIGJvdGggTUdMUlUgYW5kIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0IHJlY2xhaW0uIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVyZSBieSBydW5uaW5nIG1lbW9yeSBwcmVzc3VyZSwgc28geWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5HaXZlbiB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lbnRpb25zIFwic3l6LWNsdXN0ZXJcIiBtZWFucyB0aGVyZSdzIHByb2JhYmx5IGEgcmVhbCBidWcuIEknbGwgbmVlZCB0byBjaGVjayBpZiBNR0xSVSAoYENPTkZJR19MUlVfR0VOYCkgaXMgZW5hYmxlZCBvciBuZWVkcyBhIGNvbmZpZywgYnV0IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhbiBhY3RpdmUgcGFydCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNToxNy41NTA3NjQ3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNTc1NDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODk9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk5LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAwOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAxLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDgtXFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTQtXFxubW0vS2NvbmZpZzoxNDE1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE2LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMy1cXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI1LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjAuMzU2NTI4NDExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNTUzNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBMUlVfR0VOYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZSwgYW5kIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IGEgZmVhdHVyZSBsaWtlIGBMUlVfR0VOYCB3aWxsIGhhdmUgaXRzIGRlZmluaW5nIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBvbiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG1tL0tjb25maWdgIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjMuNzcyMDY3OTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5OTpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDA6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAxOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDM6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNTpcXHRcXHRoZWxwXFxuMTQwNjpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDc6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwODpcXHRcXG4xNDA5OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDEwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTE6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMjpcXHRcXHRoZWxwXFxuMTQxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE0OlxcdFxcbjE0MTU6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE2OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTg6XFx0XFx0aGVscFxcbjE0MTk6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDIwOlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIzOlxcdFxcbjE0MjQ6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNTpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNzpcXHQjIH1cXG4xNDI4OlxcdFxcbjE0Mjk6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuMTQzMDpcXHQgICAgICAgZGVmX2Jvb2wgblxcbjE0MzE6XFx0XFxuMTQzMjpcXHRjb25maWcgUEVSX1ZNQV9MT0NLXFxuMTQzMzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG4xNDM1OlxcdFxcdGhlbHBcXG4xNDM2OlxcdFxcdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxcbjE0Mzc6XFx0XFxuMTQzODpcXHRcXHQgIFRoaXMgZmVhdHVyZSBhbGxvd3MgbG9ja2luZyBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEgc2VwYXJhdGVseSB3aGVuXFxuMTQzOTpcXHRcXHQgIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluc3RlYWQgb2YgdGFraW5nIG1tYXBfbG9jay5cXG4xNDQwOlxcdFxcbjE0NDE6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQ0MjpcXHRcXHRib29sXFxuMTQ0MzpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQ0NjpcXHRcXHRib29sXFxuMTQ0NzpcXHRcXG4xNDQ4OlxcdGNvbmZpZyBFWEVDTUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjM1OjIzLjc3MjI2MTM4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTA3NTA0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMUlVfR0VOIGZvciBQcm9wZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIHRvIHJlYWxseSBwdXQgdGhpcyBuZXcgYExSVV9HRU5gIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBpdHMgcGFjZXMsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGF0IHNlZW1zIG9idmlvdXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCB3aGljaCwgYXMgSSByZWNhbGwsIGFyZSBhbHNvIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgdGhlIHN0YW5kYXJkIExSVSByZWNsYWltIHByb2Nlc3MuIEhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBUaGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IGBMUlVfR0VOYCBtZWNoYW5pc20gYmxlZWRzIGludG8gdGhlIHN0YW5kYXJkIExSVS4gV2FpdCwgbm8sIGhhbmcgb24sIHRoZSBkZWZpbml0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIHNldHRpbmcsIHNvIGl0ICpzaG91bGRuJ3QqIGludGVyZmVyZSB3aGVuIGBMUlVfR0VOYCBpc24ndCBhY3RpdmUuIEp1c3Qgd2FudCB0byBjb25maXJtIHRoYXQgaW4gbXkgaGVhZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbiBwb2ludCBpbiBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDg0MS4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjguMTYzMDE0NjM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbiA4MzI6XFx0XFx0Rk9MSU9SRUZfUkVDTEFJTSxcXG4gODMzOlxcdFxcdEZPTElPUkVGX0tFRVAsXFxuIDgzNDpcXHRcXHRGT0xJT1JFRl9BQ1RJVkFURSxcXG4gODM1OlxcdH07XFxuIDgzNjpcXHRcXG4gODM3OlxcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbiA4Mzg6XFx0LypcXG4gODM5OlxcdCAqIE9ubHkgdXNlZCBvbiBhIG1hcHBlZCBmb2xpbyBpbiB0aGUgZXZpY3Rpb24gKHJtYXAgd2FsaykgcGF0aCwgd2hlcmUgcHJvbW90aW9uXFxuIDg0MDpcXHQgKiBuZWVkcyB0byBiZSBkb25lIGJ5IHRha2luZyB0aGUgZm9saW8gb2ZmIHRoZSBMUlUgbGlzdCBhbmQgdGhlbiBhZGRpbmcgaXQgYmFja1xcbiA4NDE6XFx0ICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlc1xcbiA4NDI6XFx0ICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiA4NDM6XFx0ICovXFxuIDg0NDpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIDg0NTpcXHR7XFxuIDg0NjpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gODQ3OlxcdFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiA4NDg6XFx0XFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuIDg0OTpcXHRcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuIDg1MDpcXHRcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuIDg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gODUyOlxcdFxcdFxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuIDg1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg1NjpcXHRcXHR9XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbiA4NTk6XFx0XFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpXFxuIDg2MDpcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuIDg2MTpcXHRcXHRlbHNlXFxuIDg2MjpcXHRcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gODYzOlxcdFxcdHJldHVybiB0cnVlO1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0I2Vsc2VcXG4gODY2OlxcdHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gODY3OlxcdHtcXG4gODY4OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gODY5OlxcdH1cXG4gODcwOlxcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIDg3NDpcXHR7XFxuIDg3NTpcXHRcXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xcbiA4NzY6XFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1hX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjguMTYzNDQ5Mjc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODk2MjcwMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggaXMgTUdMUlUsIGJ1dCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgaXMgYWxzbyB1c2VkIGluIHN0YW5kYXJkIExSVSByZWNsYWltLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoZW4gSSBzZWUgdGhhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgZGlyZWN0bHkgY2FsbHMgYGlzX2V4ZWNfZmlsZV9mb2xpb2AsIGFuZCB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgICphbHNvKiB1dGlsaXplcyBgaXNfZXhlY19maWxlX2ZvbGlvYC4gU28sIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCB0b3VjaGluZyBNR0xSVTsgaXQncyBnb3QgaW1wbGljYXRpb25zIGZvciB0aGUgc3RhbmRhcmQgTFJVIHJlY2xhaW0gcGF0aCBhcyB3ZWxsLiBIbW0sIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gSSd2ZSBnb3Q6IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGZvbGlvX3JlZmVyZW5jZWRgLCBhbmQgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC5cblxuV2FpdCwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGZvbGlvX3JlZmVyZW5jZWRgIGFuZCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGFyZSBpbiBgbW0vcm1hcC5jYCwgd2hpbGUgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlbiB0aGUgTUdMUlUgY29kZTogYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGluIGBtbS92bXNjYW4uY2AuXG5cbk9rYXksIGxldCdzIGNoZWNrIGZ1bmN0aW9uIHZpc2liaWxpdHkuIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIHN0YXRpYy4gYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGV4cG9ydGVkL2dsb2JhbC4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYy4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBzdGF0aWMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwuXG5cblNvLCBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLiBTaW5jZSBgRm9jdXNTeW1ib2xzYCBpcyBhYm91dCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBJIGNhbiBmdXp6IHRoZSBzdGF0aWMgb25lcyBpZiB0aGUgY29kZSBwYXRoIGlzIGhpdC5cblxuKiAgIGBmb2xpb19yZWZlcmVuY2VkYFxuKiAgIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYFxuKiAgIGBzaHJpbmtfYWN0aXZlX2xpc3RgXG4qICAgYGZvbGlvX3VwZGF0ZV9nZW5gXG4qICAgYHdhbGtfdXBkYXRlX2ZvbGlvYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuKiAgIGB3YWxrX3B0ZV9yYW5nZWBcbiogICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYFxuXG5BcmUgdGhlc2UgaG90IHBhdGhzPyBNZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMgYXJlbid0IG5lY2Vzc2FyaWx5ICpob3QqLCB1bmxlc3MgdGhlcmUncyBtZW1vcnkgcHJlc3N1cmUuIEJ1dCBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGR1cmluZyByZWNsYWltLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0IChmcm9tIGBkb19zZXRfcHRlYCBvciBzaW1pbGFyKSwgc28gZGVmaW5pdGVseSBjb3VsZCBiZSBmcmVxdWVudGx5IGhpdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB3aGVyZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzk3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MzkuMDU5NzIxOTg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5NTI0OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjkxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzEzLVxcdFxcdHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODEtXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MjpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODMtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9MjcyMD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjc0OS0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyNzUwOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yNzUxLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDAyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDAyMS1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwMjI6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDIzLVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDE0MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE4Ny0gKi9cXG5tbS92bXNjYW4uYzo0MTg4OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MTg5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NDEuMjk5MjUzMzIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjcwMDY5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBpcyBpbiBgbW0vcm1hcC5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHVwZGF0aW5nIGBmb2xpb19yZWZlcmVuY2VkYCB0byB1c2UgYHZtYV9mbGFnc190YCBhbmQgcGFzcyBpdCBkb3duIHRvIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEludGVyZXN0aW5nLiBBbmQgSSBzZWUgYSBjaGFuZ2UgaW4gYGxydV9nZW5fc2V0X3JlZnNgIHRvbywgd2hpY2ggbm93IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBpbml0aWFsIHVzZS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNlZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGVzZSBhcmUgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvbXBvbmVudCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgYnV0IHdoYXQgYWJvdXQgdGhlIHN0YW5kYXJkIExSVSBmdW5jdGlvbmFsaXR5PyBBaCwgcmlnaHQsIHRoYXQncyBhbHdheXMgb247IGl0IGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBjb25maWcuIFNvLCBpbmNsdWRpbmcgdGhvc2UgTUdMUlUtc3BlY2lmaWMgb3B0aW9ucywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgd2lsbCBlbnN1cmUgdGhhdCBib3RoIHBhdGhzIGFyZSBwcm9wZXJseSB0ZXN0ZWQuIFNtYXJ0IG1vdmUuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IGB2bWFfZmxhZ3NfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gWWVwLCBpdCdzIHRoZXJlLCBhcyBleHBlY3RlZC4gVGhpcyBwYXRjaCBsb29rcyBmdW5jdGlvbmFsbHkgc291bmQuIEl0J3MgY2xlYXJseSBtb2RpZnlpbmcgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBhZmZlY3RpbmcgdGhpbmdzIGF0IHRoZSBmb2xpbyBsZXZlbC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgYGxydV9nZW5fc2V0X3JlZnNgLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIGlzIGBscnVfZ2VuX3NldF9yZWZzYCBpbmxpbmUgb3Igc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBpdCdzIHN0YXRpYywgd2hpY2ggZXhwbGFpbnMgd2h5IGl0J3MgZGVmaW5lZCBpbiBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHN0YXRpYyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NDguMzI2MjY1MjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU3NDg2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2V0X3JlZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD00MjI9ZW51bSBscnV2ZWNfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MDktICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIHBhZ2UgdGFibGVzLCBmb2xpb191cGRhdGVfZ2VuKClcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxMDogKiBmcm9tIGEgcGFnZSB0YWJsZSB3YWxrIG9yIGxydV9nZW5fc2V0X3JlZnMoKSBmcm9tIGEgcm1hcCB3YWxrIHNldHNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBQR19yZWZlcmVuY2VkIGFmdGVyIHRoZSBhY2Nlc3NlZCBiaXQgaXMgY2xlYXJlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXFxuLS1cXG5tbS92bXNjYW4uYz04MzE9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg0My0gKi9cXG5tbS92bXNjYW4uYzo4NDQ6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg0NS17XFxuLS1cXG5tbS92bXNjYW4uYy04NjUtI2Vsc2VcXG5tbS92bXNjYW4uYzo4NjY6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg2Ny17XFxuLS1cXG5tbS92bXNjYW4uYz04NzI9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy05MDAtXFxubW0vdm1zY2FuLmM6OTAxOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MDItXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ0Nj1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NjItXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM0NjM6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNDY0LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NTAuNjgzNzU5MzM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODUwMTIxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJ3MgUmVhY2ggYW5kIFNpZ25pZmljYW5jZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgc28gSSBjYW4gc2VlIHdoYXQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIEknbGwgbmVlZCB0byBmb2N1cyBvbjogYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGFuZCBvZiBjb3Vyc2UsIGBscnVfZ2VuX3NldF9yZWZzYCBpdHNlbGYuXG5cbkhvbGQgb24sIEkgc2VlIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBhbHNvIG1vZGlmaWVkLCBJIG5lZWQgdG8gaW5jbHVkZSB0aGF0IGluIHRoZSBsaXN0IGFzIHdlbGwuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vcm1hcC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBkZWVwbHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE1lbW9yeSByZWNsYWltIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3MgYSBnaXZlbi4gTUdMUlUsIGhvd2V2ZXIsIGlzIGdhdGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAuIFNvLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcyB0aGUgY3JpdGljYWwgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgbXkgbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBWTUEgZmxhZ3MgYXJlIHBhc3NlZCBhbmQgY2hlY2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVLiBUaGUgbWFpbiBwb2ludCBpcyB0byB0cmlnZ2VyIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIHRoZWlyIGZpcnN0IHVzZSB0byBwcmV2ZW50IElPIHRocmFzaGluZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBtYWtlcyBpdCBoaWdobHkgcmVhY2hhYmxlLiBUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLlxuXG5UaW1lIHRvIGZlZWQgdGhpcyBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxNCwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NTguNzY4Nzc0MjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MzkwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gICAgXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcIndhbGtfdXBkYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJscnVfZ2VuX3NldF9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIixcbiAgICBcImZvbGlvX2NoZWNrX3JlZmVyZW5jZXNcIixcbiAgICBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICAgIFwiZm9saW9fdXBkYXRlX2dlblwiLFxuICAgIFwid2Fsa191cGRhdGVfZm9saW9cIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImxydV9nZW5fc2V0X3JlZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxd8d2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-20 15:20:11 +0000 UTC FinishedAt: 2026-07-20 15:36:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "70a23b27c3d8e0ac4bd40845d4f50db701f4555e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "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": "70a23b27c3d8e0ac4bd40845d4f50db701f4555e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "LRU_GEN_ENABLED" ], "series_id": "2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "folio_referenced", "folio_check_references", "shrink_active_list", "folio_update_gen", "walk_update_folio", "lru_gen_look_around", "lru_gen_set_refs" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICAgJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb191cGRhdGVfZ2VuJiMzNDssCiAgICAmIzM0O3dhbGtfdXBkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXRfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmQzOTI0OTg4MWRmNzI0ZjdiYjg2ZTVjZGUyOTVjN2M1NWZiY2E0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdWwgMjAgMTU6MzQ6NTMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9ybWFwLmggYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcm1hcC5oXG5AQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuIFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xuIHZvaWQgdHJ5X3RvX3VubWFwKHN0cnVjdCBmb2xpbyAqLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG5AQCAtOTc1LDEwICYjNDM7OTc1LDkgQEAgc3RydWN0IGFub25fdm1hICpmb2xpb19sb2NrX2Fub25fdm1hX3JlYWQoY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbyxcbiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKVx0KDApXG4gXG4gc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHRcdFx0ICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxuJiM0MztcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4mIzQzO1x0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuZGlmZiAtLWdpdCBhL21tL3JtYXAuYyBiL21tL3JtYXAuY1xuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NFxuLS0tIGEvbW0vcm1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9ybWFwLmNcbkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XG4gXHRpbnQgbWFwY291bnQ7XG4gXHRpbnQgcmVmZXJlbmNlZDtcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgJiM0Mzs5MjYsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRhZGRyZXNzID0gcHZtdy5hZGRyZXNzO1xuIFx0XHRuciA9IDE7XG4gXG4tXHRcdGlmICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRCkge1xuJiM0MztcdFx0aWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7XG4gXHRcdFx0cHRlcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cHJhLVx1MDAzZW1hcGNvdW50LS07XG4gXG5AQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdC8qIFJlc3RvcmUgdGhlIG1sb2NrIHdoaWNoIGdvdCBtaXNzZWQgKi9cbiBcdFx0XHRtbG9ja192bWFfZm9saW8oZm9saW8sIHZtYSk7XG4gXHRcdFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcdTAwMjZwdm13KTtcbi1cdFx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xuJiM0MztcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggJiM0MzsxMDE1LDExIEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbiYjNDM7XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyA9IHZtYS1cdTAwM2VmbGFncztcbiYjNDM7XG4gXHRcdHByYS1cdTAwM2VyZWZlcmVuY2VkJiM0MzsmIzQzOztcbi1cdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgflZNX0xPQ0tFRDtcbiYjNDM7XHRcdHZtYV9mbGFnc19jbGVhcihcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiYjNDM7XHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZylcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxuICAqIEBpc19sb2NrZWQ6IENhbGxlciBob2xkcyBsb2NrIG9uIHRoZSBmb2xpby5cbiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZXZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuJiM0MzsgKiBAdm1hX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVx1MDAzZWZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLlxuICAqXG4gICogUXVpY2sgdGVzdF9hbmRfY2xlYXJfcmVmZXJlbmNlZCBmb3IgYWxsIG1hcHBpbmdzIG9mIGEgZm9saW8sXG4gICpcbkBAIC0xMDYyLDcgJiM0MzsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4mIzQzO1x0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Ym9vbCB3ZV9sb2NrZWQgPSBmYWxzZTtcbiBcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XG5AQCAtMTA3OCw3ICYjNDM7MTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9O1xuIFxuIFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pO1xuLVx0KnZtX2ZsYWdzID0gMDtcbiYjNDM7XHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICYjNDM7MTA5NSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG4gXHR9XG4gXG4gXHRybWFwX3dhbGsoZm9saW8sIFx1MDAyNnJ3Yyk7XG4tXHQqdm1fZmxhZ3MgPSBwcmEudm1fZmxhZ3M7XG4mIzQzO1x0dm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7XG4gXG4gXHRpZiAod2VfbG9ja2VkKVxuIFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGI3ZWYwMzJlNzhhMGJkLi5iMWVjNjVmYjg5NDdjZCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTI2OCw2ICYjNDM7MjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWZcbiBcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuJiM0MztcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiYjNDM7e1xuJiM0MztcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcbiB7XG5AQCAtODM1LDEwICYjNDM7ODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4gICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlc1xuICAqIGZvbGlvX3VwZGF0ZV9nZW4oKS5cbiAgKi9cbi1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cbiBcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHtcbiYjNDM7XHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuJiM0MztcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuJiM0MztcdFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX0ZMQUdTLCBCSVQoUEdfd29ya2luZ3NldCkpO1xuJiM0MztcdFx0XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuQEAgLTg1MSw3ICYjNDM7ODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbkBAIC04NjEsMTYgJiM0Mzs4NzMsMTYgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuJiM0MztcdFx0XHRcdFx0ICAgXHUwMDI2dm1hX2ZsYWdzKTtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgc3VwcG9zZWRseSByZWNsYWltYWJsZSBmb2xpbyB3YXMgZm91bmQgdG8gYmUgaW4gYSBWTV9MT0NLRUQgdm1hLlxuIFx0ICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC5cbiBcdCAqL1xuLVx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9MT0NLRUQpXG4mIzQzO1x0aWYgKHZtYV9mbGFnc190ZXN0KFx1MDAyNnZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpKVxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG4gXG4gXHQvKlxuQEAgLTg4Niw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4mIzQzO1x0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbiBcdH1cbiBcbiBcdHJlZmVyZW5jZWRfZm9saW8gPSBmb2xpb190ZXN0X2NsZWFyX3JlZmVyZW5jZWQoZm9saW8pO1xuQEAgLTkxNCw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdC8qXG4gXHRcdCAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLlxuIFx0XHQgKi9cbi1cdFx0aWYgKCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSlcbiYjNDM7XHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDYzLDcgJiM0MzsyMDc1LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuLVx0dm1fZmxhZ3NfdCB2bV9mbGFncztcbiYjNDM7XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXHRMSVNUX0hFQUQobF9ob2xkKTtcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xuIFx0TElTVF9IRUFEKGxfYWN0aXZlKTtcbiBcdExJU1RfSEVBRChsX2luYWN0aXZlKTtcbkBAIC0yMTA3LDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbiYjNDM7XHRcdFx0XHQgICAgIFx1MDAyNnZtYV9mbGFncykgIT0gMCkge1xuIFx0XHRcdC8qXG4gXHRcdFx0ICogSWRlbnRpZnkgcmVmZXJlbmNlZCwgZmlsZS1iYWNrZWQgYWN0aXZlIGZvbGlvcyBhbmRcbiBcdFx0XHQgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTb1xuQEAgLTIxMTcsNyAmIzQzOzIxMjksNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0XHRcdCAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcyxcbiBcdFx0XHQgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHtcbiYjNDM7XHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCAmIzQzOz0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuIFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZsX2FjdGl2ZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbkBAIC0zMTg2LDE0ICYjNDM7MzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxuICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4gXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXG4tc3RhdGljIGludCBmb2xpb191cGRhdGVfZ2VuKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBnZW4pXG4mIzQzO3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuIFxuLVx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxuJiM0MztcdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbiYjNDM7XHQgKiB0aHJhc2hpbmcgZnJvbSByZWNsYWltaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcbiBcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIFx0XHRyZXR1cm4gLTE7XG4gXHR9XG5AQCAtMzQyNiw4ICYjNDM7MzQ0Myw4IEBAIHN0YXRpYyBib29sIHN1aXRhYmxlX3RvX3NjYW4oaW50IHRvdGFsLCBpbnQgeW91bmcpXG4gXHRyZXR1cm4geW91bmcgKiBuIFx1MDAzZT0gdG90YWw7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tXHRcdFx0ICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4mIzQzO3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpXG4ge1xuIFx0aW50IG9sZF9nZW47XG4gXG5AQCAtMzQ0MCwxMCAmIzQzOzM0NTcsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0Zm9saW9fbWFya19kaXJ0eShmb2xpbyk7XG4gXG4gXHRpZiAod2Fsaykge1xuLVx0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7XG4mIzQzO1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuJiM0MztcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XG4gXHRcdGlmIChvbGRfZ2VuIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxuIFx0XHRcdGZvbGlvX2FjdGl2YXRlKGZvbGlvKTtcbkBAIC0zNTE2LDcgJiM0MzszNTMzLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTI5LDcgJiM0MzszNTQ2LDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdHdhbGstXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yO1xuIFx0fVxuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4mIzQzO1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwNyw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhXG4gXHRcdFx0Z290byBuZXh0O1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTM2MjEsNyAmIzQzOzM2MzgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgJiM0MzsgMTtcbiBcdH0gd2hpbGUgKGkgXHUwMDNjPSBNSU5fTFJVX0JBVENIKTtcbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuJiM0MztcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcdHNwaW5fdW5sb2NrKHB0bCk7XG5AQCAtNDI1Niw3ICYjNDM7NDI3Myw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC00MjY4LDcgJiM0Mzs0Mjg1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxuIFx0XHR5b3VuZyAmIzQzOz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiYjNDM7XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7TFJVX0dFTl9FTkFCTEVEJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Zm9saW9fcmVmZXJlbmNlZCYjMzQ7LAogICAgJiMzNDtmb2xpb19jaGVja19yZWZlcmVuY2VzJiMzNDssCiAgICAmIzM0O3Nocmlua19hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtmb2xpb191cGRhdGVfZ2VuJiMzNDssCiAgICAmIzM0O3dhbGtfdXBkYXRlX2ZvbGlvJiMzNDssCiAgICAmIzM0O2xydV9nZW5fbG9va19hcm91bmQmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9zZXRfcmVmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmZDM5MjQ5ODgxZGY3MjRmN2JiODZlNWNkZTI5NWM3YzU1ZmJjYTQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyMCAxNTozNDo1MyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmgKaW5kZXggOGRjMDg3MWU1ZjAwMTEuLmUwOTBhYTA5ODI1ZDUyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JtYXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaApAQCAtODQzLDcgJiM0Mzs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLAogICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXQKICAqLwogaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsCi0JCQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKTsKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyk7CiAKIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpOwogdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTsKQEAgLTk3NSwxMCAmIzQzOzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sCiAjZGVmaW5lIGFub25fdm1hX3ByZXBhcmUodm1hKQkoMCkKIAogc3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAotCQkJCSAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpCiYjNDM7CQlzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7Ci0JKnZtX2ZsYWdzID0gMDsKJiM0MzsJdm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9tbS9ybWFwLmMgYi9tbS9ybWFwLmMKaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NAotLS0gYS9tbS9ybWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcm1hcC5jCkBAIC05MDcsNyAmIzQzOzkwNyw3IEBAIHBtZF90ICptbV9maW5kX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQogc3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHsKIAlpbnQgbWFwY291bnQ7CiAJaW50IHJlZmVyZW5jZWQ7Ci0Jdm1fZmxhZ3NfdCB2bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzOwogCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZzsKIH07CiAKQEAgLTkyNiw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbywKIAkJYWRkcmVzcyA9IHB2bXcuYWRkcmVzczsKIAkJbnIgPSAxOwogCi0JCWlmICh2bWEtJmd0O3ZtX2ZsYWdzICZhbXA7IFZNX0xPQ0tFRCkgewomIzQzOwkJaWYgKHZtYV90ZXN0KHZtYSwgVk1BX0xPQ0tFRF9CSVQpKSB7CiAJCQlwdGVzJiM0MzsmIzQzOzsKIAkJCXByYS0mZ3Q7bWFwY291bnQtLTsKIApAQCAtOTQ3LDcgJiM0Mzs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJLyogUmVzdG9yZSB0aGUgbWxvY2sgd2hpY2ggZ290IG1pc3NlZCAqLwogCQkJbWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpOwogCQkJcGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZSgmYW1wO3B2bXcpOwotCQkJcHJhLSZndDt2bV9mbGFncyB8PSBWTV9MT0NLRUQ7CiYjNDM7CQkJdm1hX2ZsYWdzX3NldCgmYW1wO3ByYS0mZ3Q7dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7CiAJCQlyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovCiAJCX0KIApAQCAtMTAxNSw4ICYjNDM7MTAxNSwxMSBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlyZWZlcmVuY2VkJiM0MzsmIzQzOzsKIAogCWlmIChyZWZlcmVuY2VkKSB7CiYjNDM7CQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtJmd0O2ZsYWdzOwomIzQzOwogCQlwcmEtJmd0O3JlZmVyZW5jZWQmIzQzOyYjNDM7OwotCQlwcmEtJmd0O3ZtX2ZsYWdzIHw9IHZtYS0mZ3Q7dm1fZmxhZ3MgJmFtcDsgflZNX0xPQ0tFRDsKJiM0MzsJCXZtYV9mbGFnc19jbGVhcigmYW1wO3ZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpOwomIzQzOwkJdm1hX2ZsYWdzX3NldF9tYXNrKCZhbXA7cHJhLSZndDt2bWFfZmxhZ3MsIHZtYV9mbGFncyk7CiAJfQogCiAJaWYgKCFwcmEtJmd0O21hcGNvdW50KQpAQCAtMTA1NCw3ICYjNDM7MTA1Nyw3IEBAIHN0YXRpYyBib29sIGludmFsaWRfZm9saW9fcmVmZXJlbmNlZF92bWEoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZvaWQgKmFyZykKICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuCiAgKiBAaXNfbG9ja2VkOiBDYWxsZXIgaG9sZHMgbG9jayBvbiB0aGUgZm9saW8uCiAgKiBAbWVtY2c6IHRhcmdldCBtZW1vcnkgY2dyb3VwCi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtJmd0O3ZtX2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLgomIzQzOyAqIEB2bWFfZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtJmd0O2ZsYWdzIHdoaWNoIHJlZmVyZW5jZWQgdGhlIGZvbGlvLgogICoKICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLAogICoKQEAgLTEwNjIsNyAmIzQzOzEwNjUsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpCiAgKiB0aGUgZnVuY3Rpb24gYmFpbGVkIG91dCBkdWUgdG8gcm1hcCBsb2NrIGNvbnRlbnRpb24uCiAgKi8KIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsCi0JCSAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncykKJiM0MzsJCXN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAlib29sIHdlX2xvY2tlZCA9IGZhbHNlOwogCXN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7CkBAIC0xMDc4LDcgJiM0MzsxMDgxLDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCwKIAl9OwogCiAJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSwgZm9saW8pOwotCSp2bV9mbGFncyA9IDA7CiYjNDM7CXZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzKTsKIAlpZiAoIXByYS5tYXBjb3VudCkKIAkJcmV0dXJuIDA7CiAKQEAgLTEwOTIsNyAmIzQzOzEwOTUsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLAogCX0KIAogCXJtYXBfd2Fsayhmb2xpbywgJmFtcDtyd2MpOwotCSp2bV9mbGFncyA9IHByYS52bV9mbGFnczsKJiM0MzsJdm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFncywgcHJhLnZtYV9mbGFncyk7CiAKIAlpZiAod2VfbG9ja2VkKQogCQlmb2xpb191bmxvY2soZm9saW8pOwpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0yNjgsNiAmIzQzOzI2OCwxMiBAQCBzdGF0aWMgaW50IHNjX3N3YXBwaW5lc3Moc3RydWN0IHNjYW5fY29udHJvbCAqc2MsIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKIH0KICNlbmRpZgogCiYjNDM7c3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAomIzQzOwkJY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKJiM0Mzt7CiYjNDM7CXJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgJmFtcDsmYW1wOyBmb2xpb19pc19maWxlX2xydShmb2xpbyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2ssCiAJCQkJICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKQogewpAQCAtODM1LDEwICYjNDM7ODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7CiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzCiAgKiBmb2xpb191cGRhdGVfZ2VuKCkuCiAgKi8KLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7CiAJLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCiAJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKJiM0MzsJCS8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqLwomIzQzOwkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewomIzQzOwkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CiYjNDM7CQkJcmV0dXJuIHRydWU7CiYjNDM7CQl9CiYjNDM7CiAJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KQEAgLTg1MSw3ICYjNDM7ODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCXJldHVybiB0cnVlOwogfQogI2Vsc2UKLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbykKJiM0MztzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQpAQCAtODYxLDE2ICYjNDM7ODczLDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQkJCQkJICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAlpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvOwotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFnczsKIAogCXJlZmVyZW5jZWRfcHRlcyA9IGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDEsIHNjLSZndDt0YXJnZXRfbWVtX2Nncm91cCwKLQkJCQkJICAgJmFtcDt2bV9mbGFncyk7CiYjNDM7CQkJCQkgICAmYW1wO3ZtYV9mbGFncyk7CiAKIAkvKgogCSAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuCiAJICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC4KIAkgKi8KLQlpZiAodm1fZmxhZ3MgJmFtcDsgVk1fTE9DS0VEKQomIzQzOwlpZiAodm1hX2ZsYWdzX3Rlc3QoJmFtcDt2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSkKIAkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwogCiAJLyoKQEAgLTg4Niw3ICYjNDM7ODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCWlmICghcmVmZXJlbmNlZF9wdGVzKQogCQkJcmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07CiAKLQkJcmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8pID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQOwomIzQzOwkJcmV0dXJuIGxydV9nZW5fc2V0X3JlZnMoZm9saW8sICZhbXA7dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDsKIAl9CiAKIAlyZWZlcmVuY2VkX2ZvbGlvID0gZm9saW9fdGVzdF9jbGVhcl9yZWZlcmVuY2VkKGZvbGlvKTsKQEAgLTkxNCw3ICYjNDM7OTI2LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCS8qCiAJCSAqIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLgogCQkgKi8KLQkJaWYgKCh2bV9mbGFncyAmYW1wOyBWTV9FWEVDKSAmYW1wOyZhbXA7IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKSkKJiM0MzsJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sICZhbXA7dm1hX2ZsYWdzKSkKIAkJCXJldHVybiBGT0xJT1JFRl9BQ1RJVkFURTsKIAogCQlyZXR1cm4gRk9MSU9SRUZfS0VFUDsKQEAgLTIwNjMsNyAmIzQzOzIwNzUsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogewogCXVuc2lnbmVkIGxvbmcgbnJfdGFrZW47CiAJdW5zaWduZWQgbG9uZyBucl9zY2FubmVkOwotCXZtX2ZsYWdzX3Qgdm1fZmxhZ3M7CiYjNDM7CXZtYV9mbGFnc190IHZtYV9mbGFnczsKIAlMSVNUX0hFQUQobF9ob2xkKTsJLyogVGhlIGZvbGlvcyB3aGljaCB3ZXJlIHNuaXBwZWQgb2ZmICovCiAJTElTVF9IRUFEKGxfYWN0aXZlKTsKIAlMSVNUX0hFQUQobF9pbmFjdGl2ZSk7CkBAIC0yMTA3LDcgJiM0MzsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAogCQkvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi8KIAkJaWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLSZndDt0YXJnZXRfbWVtX2Nncm91cCwKLQkJCQkgICAgICZhbXA7dm1fZmxhZ3MpICE9IDApIHsKJiM0MzsJCQkJICAgICAmYW1wO3ZtYV9mbGFncykgIT0gMCkgewogCQkJLyoKIAkJCSAqIElkZW50aWZ5IHJlZmVyZW5jZWQsIGZpbGUtYmFja2VkIGFjdGl2ZSBmb2xpb3MgYW5kCiAJCQkgKiBnaXZlIHRoZW0gb25lIG1vcmUgdHJpcCBhcm91bmQgdGhlIGFjdGl2ZSBsaXN0LiBTbwpAQCAtMjExNyw3ICYjNDM7MjEyOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCQkgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsCiAJCQkgKiBzbyB3ZSBpZ25vcmUgdGhlbSBoZXJlLgogCQkJICovCi0JCQlpZiAoKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7CiYjNDM7CQkJaWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgJmFtcDt2bWFfZmxhZ3MpKSB7CiAJCQkJbnJfcm90YXRlZCAmIzQzOz0gZm9saW9fbnJfcGFnZXMoZm9saW8pOwogCQkJCWxpc3RfYWRkKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtsX2FjdGl2ZSk7CiAJCQkJY29udGludWU7CkBAIC0zMTg2LDE0ICYjNDM7MzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KQogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovCi1zdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbikKJiM0MztzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncykKIHsKIAl1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLSZndDtmbGFncy5mKTsKIAogCVZNX1dBUk5fT05fT05DRShnZW4gJmd0Oz0gTUFYX05SX0dFTlMpOwogCi0JLyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovCi0JaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKJiM0MzsJLyoKJiM0MzsJICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWQKJiM0MzsJICogZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UgdG8gYXZvaWQgdHlwaWNhbCBJTwomIzQzOwkgKiB0aHJhc2hpbmcgZnJvbSByZWNsYWltaW5nLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkgewogCQlzZXRfbWFza19iaXRzKCZhbXA7Zm9saW8tJmd0O2ZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7CiAJCXJldHVybiAtMTsKIAl9CkBAIC0zNDI2LDggJiM0MzszNDQzLDggQEAgc3RhdGljIGJvb2wgc3VpdGFibGVfdG9fc2NhbihpbnQgdG90YWwsIGludCB5b3VuZykKIAlyZXR1cm4geW91bmcgKiBuICZndDs9IHRvdGFsOwogfQogCi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLAotCQkJICAgICAgaW50IG5ld19nZW4sIGJvb2wgZGlydHkpCiYjNDM7c3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSkKIHsKIAlpbnQgb2xkX2dlbjsKIApAQCAtMzQ0MCwxMCAmIzQzOzM0NTcsMTAgQEAgc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IGZvbGlvICpmb2xpbywKIAkJZm9saW9fbWFya19kaXJ0eShmb2xpbyk7CiAKIAlpZiAod2FsaykgewotCQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbik7CiYjNDM7CQlvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgJmFtcDt2bWEtJmd0O2ZsYWdzKTsKIAkJaWYgKG9sZF9nZW4gJmd0Oz0gMCAmYW1wOyZhbXA7IG9sZF9nZW4gIT0gbmV3X2dlbikKIAkJCXVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTsKLQl9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8pKSB7CiYjNDM7CX0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgJmFtcDt2bWEtJmd0O2ZsYWdzKSkgewogCQlvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7CiAJCWlmIChvbGRfZ2VuICZndDs9IDAgJmFtcDsmYW1wOyBvbGRfZ2VuICE9IG5ld19nZW4pCiAJCQlmb2xpb19hY3RpdmF0ZShmb2xpbyk7CkBAIC0zNTE2LDcgJiM0MzszNTMzLDcgQEAgc3RhdGljIGJvb2wgd2Fsa19wdGVfcmFuZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCQljb250aW51ZTsKIAogCQlpZiAobGFzdCAhPSBmb2xpbykgewotCQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CQkJd2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy0mZ3Q7dm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCQkJbGFzdCA9IGZvbGlvOwogCQkJZGlydHkgPSBmYWxzZTsKQEAgLTM1MjksNyAmIzQzOzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwKIAkJd2Fsay0mZ3Q7bW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gJiM0Mzs9IG5yOwogCX0KIAotCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLSZndDt2bWEsIGxhc3QsIGdlbiwgZGlydHkpOwogCWxhc3QgPSBOVUxMOwogCiAJaWYgKGkgJmx0OyBQVFJTX1BFUl9QVEUgJmFtcDsmYW1wOyBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgJmFtcDtzdGFydCwgJmFtcDtlbmQpKQpAQCAtMzYwNyw3ICYjNDM7MzYyNCw3IEBAIHN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlX2xvY2tlZChwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCB2bV9hcmVhCiAJCQlnb3RvIG5leHQ7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC0zNjIxLDcgJiM0MzszNjM4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWEKIAkJaSA9IGkgJmd0OyBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSAmIzQzOyAxOwogCX0gd2hpbGUgKGkgJmx0Oz0gTUlOX0xSVV9CQVRDSCk7CiAKLQl3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTsKJiM0MzsJd2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTsKIAogCWxhenlfbW11X21vZGVfZGlzYWJsZSgpOwogCXNwaW5fdW5sb2NrKHB0bCk7CkBAIC00MjU2LDcgJiM0Mzs0MjczLDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQkJY29udGludWU7CiAKIAkJaWYgKGxhc3QgIT0gZm9saW8pIHsKLQkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpOwomIzQzOwkJCXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAkJCWxhc3QgPSBmb2xpbzsKIAkJCWRpcnR5ID0gZmFsc2U7CkBAIC00MjY4LDcgJiM0Mzs0Mjg1LDcgQEAgYm9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKQogCQl5b3VuZyAmIzQzOz0gbnI7CiAJfQogCi0Jd2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7CiYjNDM7CXdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7CiAKIAlsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MTc1CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBUaGlzIFZNIEZsYWcgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyB0d2Vha2luZyBob3cgd2UgaGFuZGxlIHZpcnR1YWwgbWVtb3J5IGFyZWEgKFZNQSkgZmxhZ3MsIHNwZWNpZmljYWxseSBpbiByZWxhdGlvbiB0byBgZm9saW9fcmVmZXJlbmNlZGAgYW5kIExSVSBnZW5lcmF0aW9uLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGludm9sdmUgaG93IHdlIHJlcHJlc2VudCBhbmQgbWFuaXB1bGF0ZSB0aGVzZSBmbGFncy4gSW5pdGlhbGx5LCBJIHRob3VnaHQgaXQgd2FzIGp1c3QgYSBzaW1wbGUgdHlwZSByZW5hbWUg4oCTIGB2bV9mbGFnc190YCB0byBgdm1hX2ZsYWdzX3RgIG9yIHBlcmhhcHMgZXZlbiBqdXN0IGFuIHVuZGVybHlpbmcgdHlwZSBjaGFuZ2UgbGlrZSBgdW5zaWduZWQgbG9uZ2AuIFRoYXQmIzM5O3MgdGhlIGZpcnN0IGFzc3VtcHRpb24uCgpCdXQgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGl0JiMzOTtzIGFjdHVhbGx5IGNoYW5naW5nIGhvdyB3ZSB3b3JrIHdpdGggcG9pbnRlcnM6IGB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzYCBpbnN0ZWFkIG9mIGB2bV9mbGFnc190ICp2bV9mbGFnc2AuIE9rYXksIHRoYXQmIzM5O3MgbW9yZSBzaWduaWZpY2FudC4gVGhpcyBpcyBub3QganVzdCBhIHR5cGUgcmVuYW1lLCB3ZSBhcmUgY2hhbmdpbmcgaG93IHRoZSBmbGFncyBhcmUgcGFzc2VkLgoKVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zOiBgdm1hX2ZsYWdzX2NsZWFyX2FsbGAsIGB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKWAsIGB2bWFfZmxhZ3Nfc2V0YCwgYHZtYV9mbGFnc19jbGVhcmAsIGFuZCBgdm1hX2ZsYWdzX3NldF9tYXNrYC4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbjsgbWF5YmUgdGhpcyBpcyBhIGNsZWFuZXIgQVBJLCBhbmQgdGhleSBhcmUgdXNpbmcgaGVscGVycyB0byBtYWtlIHRoaW5ncyBtb3JlIHJvYnVzdC4KCkhhbmcgb24gYSBzZWNvbmQuIElmIHRoZXkmIzM5O3JlIHVzaW5nIHRob3NlIGhlbHBlciBmdW5jdGlvbnMsIEkgaGF2ZSBhIGZlZWxpbmcgYHZtYV9mbGFnc190YCBpcyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhIHNpbXBsZSBpbnRlZ2VyIHR5cGUuIE15IGd1dCBzYXlzIGl0JiMzOTtzIGxpa2VseSBhIGBzdHJ1Y3RgIG9yIHNvbWUgc29ydCBvZiBjdXN0b20gdHlwZSB0aGF0IHByb3ZpZGVzIG1vcmUgc3RydWN0dXJlLiBJZiB0aGlzIGlzIHRoZSBjYXNlLCBpdCBtYWtlcyBzZW5zZTsgd2l0aCBzbyBtYW55IGZsYWdzIGluIHRoZSBzeXN0ZW0sIHlvdSBuZWVkIGEgd2F5IHRvIGVuY2Fwc3VsYXRlIHRoZW0uCgpUaW1lIHRvIGxvb2sgZm9yIHRoZSBkZWZpbml0aW9uLiBJJiMzOTtsbCBjaGVjayBgaW5jbHVkZS9saW51eC9ybWFwLmhgIG9yIG1heWJlIGBtbS9ybWFwLmNgIGZpcnN0LiBUaG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB0byBmaW5kIGEgZGVmaW5pdGlvbiBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gVk1BcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuCgpSaWdodCwgbmVlZCB0byBiZSBzdXJlOyBpcyB0aGlzIGEgbmV3IHR5cGU/IExldCBtZSBkbyBhIHF1aWNrIHNlYXJjaCB0aHJvdWdoIHRoZSBjb2RlYmFzZSBmb3IgYHZtYV9mbGFnc190YCBqdXN0IHRvIGNvbmZpcm0gaXQmIzM5O3Mgbm90IGEgcHJlLWV4aXN0aW5nIHR5cGUgdGhhdCB0aGV5IGFyZSBtZXJlbHkgdXNpbmcgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfZmxhZ3NfdCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTY3OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0PTU4PUV4YW1pbmluZyB0aGUgc3RydWN0IHZtX2FyZWFfZGVzYyB0eXBlOlxuLS1cbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbW1hcF9wcmVwYXJlLnJzdC03MS0gICAgICAgIHN0cnVjdCBmaWxlICp2bV9maWxlO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0OjcyOiAgICAgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0LTczLSAgICAgICAgcGdwcm90X3QgcGFnZV9wcm90O1xuLS1cbmRyaXZlcnMvZGF4L2RldmljZS5jLTE1LVxuZHJpdmVycy9kYXgvZGV2aWNlLmM6MTY6c3RhdGljIGludCBfX2NoZWNrX3ZtYShzdHJ1Y3QgZGV2X2RheCAqZGV2X2RheCwgdm1hX2ZsYWdzX3QgZmxhZ3MsXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0xNy1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yNi1cdC8qIHByZXZlbnQgcHJpdmF0ZSBtYXBwaW5ncyBmcm9tIGJlaW5nIGVzdGFibGlzaGVkICovXG5kcml2ZXJzL2RheC9kZXZpY2UuYzoyNzpcdGlmICghdm1hX2ZsYWdzX3Rlc3RfYW55KFx1MDAyNmZsYWdzLCBWTUFfTUFZU0hBUkVfQklUKSkge1xuZHJpdmVycy9kYXgvZGV2aWNlLmMtMjgtXHRcdGRldl9pbmZvX3JhdGVsaW1pdGVkKGRldixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTE4ND1pbnQgZHJtX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE4OC1cdHN0cnVjdCBmaWxlICpmaWxwO1xuZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYzoxODk6XHRjb25zdCB2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfTk9SRVNFUlZFX0JJVCk7XG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE5MC1cbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYz01MDM9c3RhdGljIGludCBfX2NyZWF0ZV9zaG1lbShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSxcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYy01MDcte1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmM6NTA4Olx0Y29uc3Qgdm1hX2ZsYWdzX3Qgc2htZW1fZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX05PUkVTRVJWRV9CSVQpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTA5LVx0c3RydWN0IHZmc21vdW50ICpodWdlX21udDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz05OT1zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNC1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfZmlsZShmaWxlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTpcdHZtYV9mbGFnc190IHZtYV9mbGFncztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDk4PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk5Olx0XHRcdFx0dm1hX2ZsYWdzX3QgYWNjdGZsYWcsIGludCBjcmVhdF9mbGFncyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtXHRcdFx0XHRpbnQgcGFnZV9zaXplX2xvZylcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTQ9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM5NS1cdFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozOTY6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zOTctXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjIwPXRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIxLVx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjYyMjpcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIzLXtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD0xNTE9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBmcm9tLCBsb25nIHRvLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUyOlx0XHRcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9odWdldGxiLmgtMTUzLWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MjA6c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdCxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUyMS1cdFx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTUzNT1zdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjUzNjpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3RmbGFnLFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTM3LVx0XHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC04LVxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oOjk6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xMC17XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmg6MTE6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9IVUdFVExCX0JJVCk7XG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTItfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xNS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaDoxNjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfdm1hX2h1Z2V0bGJfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTE3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L2tzbS5oPTE4PWludCBrc21fbWFkdmlzZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBzdGFydCxcbmluY2x1ZGUvbGludXgva3NtLmgtMTktXHRcdHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgYWR2aWNlLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2tzbS5oOjIwOnZtYV9mbGFnc190IGtzbV92bWFfZmxhZ3Moc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLFxuaW5jbHVkZS9saW51eC9rc20uaDoyMTpcdFx0XHQgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L2tzbS5oLTIyLWludCBrc21fZW5hYmxlX21lcmdlX2FueShzdHJ1Y3QgbW1fc3RydWN0ICptbSk7XG4tLVxuaW5jbHVkZS9saW51eC9rc20uaD0xMDI9Ym9vbCBrc21fcHJvY2Vzc19tZXJnZWFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuLS1cbmluY2x1ZGUvbGludXgva3NtLmgtMTA1LVxuaW5jbHVkZS9saW51eC9rc20uaDoxMDY6c3RhdGljIGlubGluZSB2bWFfZmxhZ3NfdCBrc21fdm1hX2ZsYWdzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuaW5jbHVkZS9saW51eC9rc20uaDoxMDc6XHRcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L2tzbS5oLTEwOC17XG4tLVxuaW5jbHVkZS9saW51eC9tZW1mZC5oPTExPXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTE4LSAqL1xuaW5jbHVkZS9saW51eC9tZW1mZC5oOjE5OmludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cik7XG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMjAtc3RydWN0IGZpbGUgKm1lbWZkX2FsbG9jX2ZpbGUoY29uc3QgY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGZsYWdzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg9MzI9c3RhdGljIGlubGluZSBpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSxcbmluY2x1ZGUvbGludXgvbWVtZmQuaDozMzpcdFx0XHRcdFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTM0LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjk0PWVudW0ge1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01MTMtLypcbmluY2x1ZGUvbGludXgvbW0uaDo1MTQ6ICogdm1hX2ZsYWdzX3QgbWFza3MgZm9yIHRoZSB1c2VyZmF1bHRmZCBWTUEgZmxhZ3MuIFRoZSB0d28gaGlnaC1iaXQgbW9kZXMgYXJlXG5pbmNsdWRlL2xpbnV4L21tLmgtNTE1LSAqIGdhdGVkIG9uIHRoZSBzYW1lIGNvbmZpZ3MgYXMgdGhlaXIgVk1fKiBmbGFncyBhYm92ZSAtLSBib3RoIG9mIHdoaWNoIGltcGx5XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTU3Ni0vKiBUZW1wb3JhcnkgdW50aWwgVk1BIGZsYWdzIGNvbnZlcnNpb24gY29tcGxldGUuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6NTc3OiNkZWZpbmUgVk1fU1RBQ0tfRkxBR1Mgdm1hX2ZsYWdzX3RvX2xlZ2FjeShWTUFfU1RBQ0tfRkxBR1MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNTc4LVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC01OTQtXHRcdFx0XHQgICAgICAgVk1BX1BGTk1BUF9CSVQsIFZNQV9NSVhFRE1BUF9CSVQpXG5pbmNsdWRlL2xpbnV4L21tLmg6NTk1OiNkZWZpbmUgVk1fU1BFQ0lBTCB2bWFfZmxhZ3NfdG9fbGVnYWN5KFZNQV9TUEVDSUFMX0ZMQUdTKVxuaW5jbHVkZS9saW51eC9tbS5oLTU5Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTAyMj1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3Jlc2V0X29uY2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTAyMzpcdFx0XHRcdFx0dm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTEwMjQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xMTA3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hdG9taWNfZmxhZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTExNi0vKiBTZXQgYW4gaW5kaXZpZHVhbCBWTUEgZmxhZyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTExNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9mbGFnKHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTE4LVx0XHR2bWFfZmxhZ190IGJpdClcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTEyNC1cbmluY2x1ZGUvbGludXgvbW0uaDoxMTI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgX19ta192bWFfZmxhZ3Modm1hX2ZsYWdzX3QgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTEyNi1cdFx0c2l6ZV90IGNvdW50LCBjb25zdCB2bWFfZmxhZ190ICpiaXRzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMTM2LSAqIEhlbHBlciBtYWNybyB3aGljaCBiaXR3aXNlLW9yIGNvbWJpbmVzIHRoZSBzcGVjaWZpZWQgaW5wdXQgZmxhZ3MgaW50byBhXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzNzogKiB2bWFfZmxhZ3NfdCBiaXRtYXAgdmFsdWUuIEUuZy46XG5pbmNsdWRlL2xpbnV4L21tLmgtMTEzOC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExMzk6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX0lPX0JJVCwgVk1BX1BGTk1BUF9CSVQsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE0MC0gKiAgICAgICAgICAgICAgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfRE9OVERVTVBfQklUKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE1MS0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExNTI6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBhcHBlbmRfdm1hX2ZsYWdzKFZNQV9TVEFDS19ERUZBVUxUX0ZMQUdTLCBWTUFfU1RBQ0tfQklULFxuaW5jbHVkZS9saW51eC9tbS5oLTExNTMtICogICAgICAgICAgICAgIFZNQV9BQ0NPVU5UX0JJVCk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTExNTgtLyogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIHRoZSBzcGVjaWZpZWQgVk1BIGZsYWdzLiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjExNTk6c3RhdGljIF9fYWx3YXlzX2lubGluZSBpbnQgdm1hX2ZsYWdzX2NvdW50KGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xMTYwLXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE2OC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExNjk6ICogaWYgKHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfUkVBRF9CSVQpKSB7IC4uLiB9XG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3MC0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMTcxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdChjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3Mi1cdFx0dm1hX2ZsYWdfdCBiaXQpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTExODItICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4MzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IHZtYV9mbGFnc19hbmRfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4NDpcdFx0XHRcdFx0XHQgICAgICB2bWFfZmxhZ3NfdCB0b19hbmQpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE4NS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTE4NjpcdHZtYV9mbGFnc190IGRzdDtcbmluY2x1ZGUvbGludXgvbW0uaC0xMTg3LVx0dW5zaWduZWQgbG9uZyAqYml0bWFwX2RzdCA9IGRzdC5fX3ZtYV9mbGFncztcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE5OC0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjExOTk6ICogdm1hX2ZsYWdzX3QgcmVhZF9mbGFncyA9IHZtYV9mbGFnc19hbmQoXHUwMDI2ZmxhZ3MsIFZNQV9SRUFEX0JJVCxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjAwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNQV9NQVlfUkVBRF9CSVQpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjA1LS8qICBUZXN0IGVhY2ggb2YgdG9fdGVzdCBmbGFncyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMDc6XHRcdHZtYV9mbGFnc190IHRvX3Rlc3QpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIwOC17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTctICpcbmluY2x1ZGUvbGludXgvbW0uaDoxMjE4OiAqIGlmICh2bWFfZmxhZ3NfdGVzdF9hbnkoZmxhZ3MsIFZNQV9SRUFEX0JJVCwgVk1BX01BWVJFQURfQklUKSkgeyAuLi4gfVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTktICovXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyMDojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FueShmbGFncywgLi4uKSBcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMjE6XHR2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhmbGFncywgbWtfdm1hX2ZsYWdzKF9fVkFfQVJHU19fKSlcbmluY2x1ZGUvbGludXgvbW0uaC0xMjIyLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjMtLyogVGVzdCB0aGF0IEFMTCBvZiB0aGUgdG9fdGVzdCBmbGFncyBhcmUgc2V0LCBub24tYXRvbWljYWxseS4gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjI0OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdF9hbGxfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyNTpcdFx0dm1hX2ZsYWdzX3QgdG9fdGVzdClcbmluY2x1ZGUvbGludXgvbW0uaC0xMjI2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNS0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyMzY6ICogaWYgKHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgVk1BX1JFQURfQklULCBWTUFfTUFZUkVBRF9CSVQpKSB7IC4uLiB9XG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNy0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjM4OiNkZWZpbmUgdm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCAuLi4pIFxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzOTpcdHZtYV9mbGFnc190ZXN0X2FsbF9tYXNrKGZsYWdzLCBta192bWFfZmxhZ3MoX19WQV9BUkdTX18pKVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDAtXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0MS0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDI6ICogSGVscGVyIHRvIHRlc3QgdGhhdCBhIGZsYWcgbWFzayBvZiB0eXBlIHZtYV9mbGFnc190IGhhcyBhIFNJTkdMRSBmbGFnIHNldFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDMtICogKHJldHVybmluZyBmYWxzZSBpZiBmbGFnbWFzayBoYXMgbm8gZmxhZ3Mgc2V0KS5cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0Ny0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDg6ICogaWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFx1MDAyNmZsYWdzLCBWTUFfRFJPUFBBQkxFKSkgeyAuLi4gfVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDktICpcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1Mi0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMjUzOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1NDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ21hc2spXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1NS17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNTctXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1ODpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhmbGFncywgZmxhZ21hc2spO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyNTktfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjYxLS8qIFNldCBlYWNoIG9mIHRoZSB0b19zZXQgZmxhZ3MgaW4gZmxhZ3MsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEyNjI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MzpcdFx0dm1hX2ZsYWdzX3QgdG9fc2V0KVxuaW5jbHVkZS9saW51eC9tbS5oLTEyNjQte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMjc4LVxuaW5jbHVkZS9saW51eC9tbS5oOjEyNzk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCBfX21rX3ZtYV9mbGFnc19mcm9tX21hc2tzKHNpemVfdCBjb3VudCxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjgwOlx0XHRjb25zdCB2bWFfZmxhZ3NfdCAqbWFza3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI4MS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTI4MjpcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyODMtXHRzaXplX3QgaTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5MC0vKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyOTE6ICogQ29tYmluZSBwcmUtY29tcHV0ZWQgdm1hX2ZsYWdzX3QgbWFza3MgaW50byBvbmUgdmFsdWUsIGUuZy46XG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5Mi0gKlxuaW5jbHVkZS9saW51eC9tbS5oOjEyOTM6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBta192bWFfZmxhZ3NfZnJvbV9tYXNrcyhWTUFfVUZGRF9XUCwgVk1BX1VGRkRfTUlOT1IpO1xuaW5jbHVkZS9saW51eC9tbS5oLTEyOTQtICpcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwMC1cdF9fbWtfdm1hX2ZsYWdzX2Zyb21fbWFza3MoQ09VTlRfQVJHUyhfX1ZBX0FSR1NfXyksXHRcdFxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMwMTpcdFx0KGNvbnN0IHZtYV9mbGFnc190IFtdKXtfX1ZBX0FSR1NfX30pXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwMi1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzAzLS8qIENsZWFyIGFsbCBvZiB0aGUgdG8tY2xlYXIgZmxhZ3MgaW4gZmxhZ3MsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzA1Olx0XHR2bWFfZmxhZ3NfdCB0b19jbGVhcilcbmluY2x1ZGUvbGludXgvbW0uaC0xMzA2LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNC0gKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMzI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzX2RpZmZfcGFpcihjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMyNjpcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzMjcte1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMjg6XHR2bWFfZmxhZ3NfdCBkc3Q7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyOS1cdGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9vdGhlciA9IGZsYWdzX290aGVyLVx1MDAzZV9fdm1hX2ZsYWdzO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzM3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAqL1xuaW5jbHVkZS9saW51eC9tbS5oOjEzMzg6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc19zYW1lX3BhaXIoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMzk6XHRcdFx0XHRcdFx0Y29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDAte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xMzQ3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAgKi9cbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ5Olx0XHRcdFx0XHRcdHZtYV9mbGFnc190IGZsYWdzX290aGVyKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNTAte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xMzcwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3Mi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTM3MzpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIGJpdCk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3NC19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTEzNzc9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjEzNzg6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTEzNzkte1xuaW5jbHVkZS9saW51eC9tbS5oOjEzODA6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTM4MS19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTEzOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjE0MDA6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE0MDEte1xuaW5jbHVkZS9saW51eC9tbS5oOjE0MDI6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soXHUwMDI2dm1hLVx1MDAzZWZsYWdzLCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtMTQwMy19XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE0MTMtLypcbmluY2x1ZGUvbGludXgvbW0uaDoxNDE0OiAqIEhlbHBlciB0byB0ZXN0IHRoYXQgYSBmbGFnIG1hc2sgb2YgdHlwZSB2bWFfZmxhZ3NfdCBoYXMgYSBTSU5HTEUgZmxhZyBzZXRcbmluY2x1ZGUvbGludXgvbW0uaC0xNDE1LSAqIChyZXR1cm5pbmcgZmFsc2UgaWYgZmxhZ21hc2sgaGFzIG5vIGZsYWdzIHNldCkuXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTE0MjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyNjp2bWFfdGVzdF9zaW5nbGVfbWFzayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm1hX2ZsYWdzX3QgZmxhZ21hc2spXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQyNy17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyODpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MsIGZsYWdtYXNrKTtcbmluY2x1ZGUvbGludXgvbW0uaC0xNDI5LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQzNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX3NldF9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oOjE0Mzg6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE0Mzkte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNDU2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDU3Olx0XHR2bWFfZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xNDU4LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQ3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2Rlc2NfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xNDc4LXtcbmluY2x1ZGUvbGludXgvbW0uaDoxNDc5Olx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KFx1MDAyNmRlc2MtXHUwMDNldm1hX2ZsYWdzLCBiaXQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE0ODAtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNDgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ4NDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQ4NS17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ4NjpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncywgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE0ODctfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTAwPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMTpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwMi17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMzpcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbGxfbWFzayhcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncywgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE1MDQtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTE2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZGVzY19zZXRfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuaW5jbHVkZS9saW51eC9tbS5oOjE1MTc6XHRcdHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTE1MTgte1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0xNTMzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZGVzY19jbGVhcl9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUzNDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUzNS17XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTE1Nzg9c3RhdGljIGlubGluZSBib29sIHZtYV9pc19pbml0aWFsX3N0YWNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0xNTg4LVxuaW5jbHVkZS9saW51eC9tbS5oOjE1ODk6c3RhdGljIGlubGluZSBib29sIHZtYV9mbGFnc19jYW5fZ3Jvdyhjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5MC17XG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MTpcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhmbGFncywgVk1BX0dST1dTVVApKVxuaW5jbHVkZS9saW51eC9tbS5oLTE1OTItXHRcdHJldHVybiB0cnVlO1xuaW5jbHVkZS9saW51eC9tbS5oOjE1OTM6XHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcbmluY2x1ZGUvbGludXgvbW0uaC0xNTk0LVx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9MTYyNz1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX2lzX2FjY2Vzc2libGUoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW5jbHVkZS9saW51eC9tbS5oLTE2MzEtXG5pbmNsdWRlL2xpbnV4L21tLmg6MTYzMjpzdGF0aWMgaW5saW5lIGJvb2wgaXNfc2hhcmVkX21heXdyaXRlKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMzLXtcbmluY2x1ZGUvbGludXgvbW0uaDoxNjM0Olx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlXUklURV9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTE2MzUtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjc5PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZGVzY19pc19jb3dfbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKVxuaW5jbHVkZS9saW51eC9tbS5oLTIyODAte1xuaW5jbHVkZS9saW51eC9tbS5oOjIyODE6XHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MgPSBcdTAwMjZkZXNjLVx1MDAzZXZtYV9mbGFncztcbmluY2x1ZGUvbGludXgvbW0uaC0yMjgyLVxuaW5jbHVkZS9saW51eC9tbS5oOjIyODM6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9NQVlXUklURV9CSVQpIFx1MDAyNlx1MDAyNlxuaW5jbHVkZS9saW51eC9tbS5oOjIyODQ6XHRcdCF2bWFfZmxhZ3NfdGVzdChmbGFncywgVk1BX1NIQVJFRF9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIyODUtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD0yMjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub21tdV9zaGFyZWRfbWFwcGluZyh2bV9mbGFnc190IGZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC0yMzAwLVxuaW5jbHVkZS9saW51eC9tbS5oOjIzMDE6c3RhdGljIGlubGluZSBib29sIGlzX25vbW11X3NoYXJlZF92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDIte1xuaW5jbHVkZS9saW51eC9tbS5oOjIzMDM6XHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfTUFZU0hBUkVfQklULCBWTUFfTUFZT1ZFUkxBWV9CSVQpO1xuaW5jbHVkZS9saW51eC9tbS5oLTIzMDQtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00MTk3PV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG5pbmNsdWRlL2xpbnV4L21tLmgtNDE5OC1cdFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tLmg6NDE5OTpcdFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDIwMC1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDIwOT11bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvbW0uaC00MjEwLVx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwgdW5zaWduZWQgbG9uZyBmbGFncyxcbmluY2x1ZGUvbGludXgvbW0uaDo0MjExOlx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nICpwb3B1bGF0ZSxcbmluY2x1ZGUvbGludXgvbW0uaC00MjEyLVx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00NjA4PXBncHJvdF90IHZtX2dldF9wYWdlX3Byb3Qodm1fZmxhZ3NfdCB2bV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDYwOS1cbmluY2x1ZGUvbGludXgvbW0uaDo0NjEwOnN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxMS17XG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMjpcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MgPSB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21tLmg9NDYxNz1zdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9nZXRfcGFnZV9wcm90KGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW5jbHVkZS9saW51eC9tbS5oLTQ2MTgte1xuaW5jbHVkZS9saW51eC9tbS5oOjQ2MTk6XHRyZXR1cm4gdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWEtXHUwMDNlZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9tbS5oLTQ2MjAtfVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaD00NjI0PXN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKVxuLS1cbmluY2x1ZGUvbGludXgvbW0uaC00NjI3LX1cbmluY2x1ZGUvbGludXgvbW0uaDo0NjI4OnN0YXRpYyBpbmxpbmUgcGdwcm90X3Qgdm1hX2ZsYWdzX3RvX3BhZ2VfcHJvdCh2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyOS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTg2OT10eXBlZGVmIHN0cnVjdCB7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODcwLVx0REVDTEFSRV9CSVRNQVAoX192bWFfZmxhZ3MsIE5VTV9WTUFfRkxBR19CSVRTKTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4NzE6fSB2bWFfZmxhZ3NfdDtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzItXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODczOiNkZWZpbmUgRU1QVFlfVk1BX0ZMQUdTICgodm1hX2ZsYWdzX3QpeyB9KVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTg3NC1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzUtLyogQXJlIG5vIGZsYWdzIHNldCBpbiB0aGUgc3BlY2lmaWVkIFZNQSBmbGFncz8gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo4NzY6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc19lbXB0eShjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODc3LXtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODkwPXN0cnVjdCB2bV9hcmVhX2Rlc2Mge1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04OTktXHRzdHJ1Y3QgZmlsZSAqdm1fZmlsZTtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDo5MDA6XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTAxLVx0cGdwcm90X3QgcGFnZV9wcm90O1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaD05MjM9c3RydWN0IHZtX2FyZWFfc3RydWN0IHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTQ5LVx0XHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjk1MDpcdFx0dm1hX2ZsYWdzX3QgZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTUxLVx0fTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA2OC0vKiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIFZNQSBmbGFncyBiaXRtYXAsIG5vbi1hdG9taWNhbGx5LiAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEwNjk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzX3QgKmZsYWdzKVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEwNzAte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDc0LS8qXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTA3NTogKiBIZWxwZXIgZnVuY3Rpb24gd2hpY2ggY29udmVydHMgYSB2bWFfZmxhZ3NfdCB2YWx1ZSB0byBhIGxlZ2FjeSB2bV9mbGFnc190XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3Ni0gKiB2YWx1ZS4gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSBpbnB1dCBmbGFncyB2YWx1ZSBjYW4gYmUgZXhwcmVzc2VkIGluIGFcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA4MC0gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDgxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1fZmxhZ3NfdCB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFnc190IGZsYWdzKVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEwODIte1xuLS1cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkxLSAqL1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjEwOTI6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19vdmVyd3JpdGVfd29yZCh2bWFfZmxhZ3NfdCAqZmxhZ3MsXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA5My1cdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSlcbi0tXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMC0vKlxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjExMDE6ICogSGVscGVyIGZ1bmN0aW9uIHdoaWNoIGNvbnZlcnRzIGEgbGVnYWN5IHZtX2ZsYWdzX3QgdmFsdWUgdG8gYSB2bWFfZmxhZ3NfdFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDItICogdmFsdWUuXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDUtICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IGxlZ2FjeV90b192bWFfZmxhZ3Modm1fZmxhZ3NfdCBmbGFncylcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA3LXtcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTA4Olx0dm1hX2ZsYWdzX3QgcmV0ID0gRU1QVFlfVk1BX0ZMQUdTO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDktXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMTktICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX292ZXJ3cml0ZV93b3JkX29uY2Uodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMjEtXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMjgtLyogVXBkYXRlIHRoZSBmaXJzdCBzeXN0ZW0gd29yZCBvZiBWTUEgZmxhZ3Mgc2V0dGluZyBiaXRzLCBub24tYXRvbWljYWxseS4gKi9cbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfc2V0X3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzAtXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzctLyogVXBkYXRlIHRoZSBmaXJzdCBzeXN0ZW0gd29yZCBvZiBWTUEgZmxhZ3MgY2xlYXJpbmcgYml0cywgbm9uLWF0b21pY2FsbHkuICovXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEzODpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX2NsZWFyX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMzktXHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTExNjM9c3RydWN0IG1tX3N0cnVjdCB7XG4tLVxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyNzktXHRcdFx0dm1fZmxhZ3NfdCBkZWZfZmxhZ3M7XG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTI4MDpcdFx0XHR2bWFfZmxhZ3NfdCBkZWZfdm1hX2ZsYWdzO1xuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyODEtXHRcdH07XG4tLVxuaW5jbHVkZS9saW51eC9ybWFwLmg9ODQ1PWludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxuaW5jbHVkZS9saW51eC9ybWFwLmg6ODQ2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9ybWFwLmgtODQ3LVxuLS1cbmluY2x1ZGUvbGludXgvcm1hcC5oPTk3Nz1zdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo5Nzg6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbmluY2x1ZGUvbGludXgvcm1hcC5oLTk3OS17XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTE5Nj11bnNpZ25lZCBsb25nIG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTE5Ny1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoxOTg6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTk5LVxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMDE9Z2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwMi1cdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwMzpcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA0LXVuc2lnbmVkIGxvbmdcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0yMDU9Z2VuZXJpY19nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA2LVx0XHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaDoyMDc6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA4LSNlbHNlXG4tLVxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEwMz1leHRlcm4gaW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEwNDpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgZmxhZ3MpO1xuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oOjEwNTpzdHJ1Y3QgZmlsZSAqc2htZW1fa2VybmVsX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cF93aXRoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCxcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMDc6XHRcdGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB2bWFfZmxhZ3NfdCBmbGFncyk7XG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA4LWludCBzaG1lbV96ZXJvX3NldHVwKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbi0tXG5pcGMvc2htLmM9NzA0PXN0YXRpYyBpbnQgbmV3c2VnKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcylcbi0tXG5pcGMvc2htLmMtNzEyLVx0Y29uc3QgYm9vbCBoYXNfbm9fcmVzZXJ2ZSA9IHNobWZsZyBcdTAwMjYgU0hNX05PUkVTRVJWRTtcbmlwYy9zaG0uYzo3MTM6XHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZyA9IEVNUFRZX1ZNQV9GTEFHUztcbmlwYy9zaG0uYy03MTQtXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTExOTQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX190aHBfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTk2LVx0XHRsb2ZmX3Qgb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIHNpemUsXG5tbS9odWdlX21lbW9yeS5jOjExOTc6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2h1Z2VfbWVtb3J5LmMtMTE5OC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjQwPXVuc2lnbmVkIGxvbmcgdGhwX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9odWdlX21lbW9yeS5jLTEyNDEtXHRcdHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLFxubW0vaHVnZV9tZW1vcnkuYzoxMjQyOlx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG5tbS9odWdlX21lbW9yeS5jLTEyNDMte1xuLS1cbm1tL2h1Z2V0bGIuYz02NjcyPWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY2NzQtXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZXRsYi5jOjY2NzU6XHRcdHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2h1Z2V0bGIuYy02Njc2LXtcbi0tXG5tbS9odWdldGxiLmMtNjcwMS1cdCAqL1xubW0vaHVnZXRsYi5jOjY3MDI6XHRpZiAodm1hX2ZsYWdzX3Rlc3QoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTk9SRVNFUlZFX0JJVCkpXG5tbS9odWdldGxiLmMtNjcwMy1cdFx0cmV0dXJuIDA7XG4tLVxubW0vaW50ZXJuYWwuaD0xNTczPXN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxuLS1cbm1tL2ludGVybmFsLmgtMTU3Ny1cbm1tL2ludGVybmFsLmg6MTU3ODpib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXG5tbS9pbnRlcm5hbC5oLTE1NzktXHRcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcbi0tXG5tbS9rc20uYz02OTg9c3RhdGljIGludCBicmVha19rc20oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9rc20uYy03NDMtXG5tbS9rc20uYzo3NDQ6c3RhdGljIGJvb2wga3NtX2NvbXBhdGlibGUoY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsIHZtYV9mbGFnc190IHZtYV9mbGFncylcbm1tL2tzbS5jLTc0NS17XG5tbS9rc20uYy03NDYtXHQvKiBKdXN0IGlnbm9yZSB0aGUgYWR2aWNlLiAqL1xubW0va3NtLmM6NzQ3Olx0aWYgKHZtYV9mbGFnc190ZXN0X2FueShcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TSEFSRURfQklULCBWTUFfTUFZU0hBUkVfQklULFxubW0va3NtLmMtNzQ4LVx0XHRcdCAgICAgICBWTUFfSFVHRVRMQl9CSVQpKVxubW0va3NtLmMtNzQ5LVx0XHRyZXR1cm4gZmFsc2U7XG5tbS9rc20uYzo3NTA6XHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRFJPUFBBQkxFKSlcbm1tL2tzbS5jLTc1MS1cdFx0cmV0dXJuIGZhbHNlO1xubW0va3NtLmM6NzUyOlx0aWYgKHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFx1MDAyNnZtYV9mbGFncywgVk1BX1NQRUNJQUxfRkxBR1MpKVxubW0va3NtLmMtNzUzLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0va3NtLmMtNzU2LSNpZmRlZiBWTV9TQU9cbm1tL2tzbS5jOjc1NzpcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9TQU9fQklUKSlcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjM1CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogOTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBgdm1hX2ZsYWdzX3RgIGlzIHRoZSBrZXkuIEl0JiMzOTtzIGEgc3RydWN0dXJlLCBlc3NlbnRpYWxseSBhIGJpdG1hcCwgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gVGhpcyBwYXRjaCBpcyByZXBsYWNpbmcgYHZtX2ZsYWdzX3RgIHdpdGggaXQgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL3JtYXAuY2AuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLgoKTm93LCBpdCYjMzk7cyBub3QganVzdCBhIHN0cmFpZ2h0IHN3YXAuIFRoZSBwYXRjaCBpcyBhbHNvIGludHJvZHVjaW5nIGBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzYCBhcyBhIHBhcmFtZXRlciB0byBgbHJ1X2dlbl9zZXRfcmVmc2AgYW5kIGBmb2xpb191cGRhdGVfZ2VuYC4gIEl0JiMzOTtzIGFkZGluZyBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBpc19leGVjX2ZpbGVfZm9saW9gLCB3aGljaCBjaGVja3MgaWYgYSBmb2xpbyBpcyBib3RoIGZpbGUtYmFja2VkIGFuZCBleGVjdXRhYmxlLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGlzOgpgYGBjCnN0YXRpYyBpbmxpbmUgYm9vbCBpc19leGVjX2ZpbGVfZm9saW8oY29uc3Qgc3RydWN0IGZvbGlvICpmb2xpbywKCQljb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKQp7CglyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Qodm1hX2ZsYWdzLCBWTUFfRVhFQ19CSVQpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pOwp9CmBgYAoKVGhlIGNydWNpYWwgcGFydCBpcyBob3cgdGhpcyBuZXcgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gSXQmIzM5O3MgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIGBscnVfZ2VuX3NldF9yZWZzYCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgd2Fsa191cGRhdGVfZm9saW9gLiBMb29raW5nIGF0IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgdGhlIHByZXZpb3VzIGxvZ2ljIHdhcyBhIHNpbXBsZSBgKHZtX2ZsYWdzICZhbXA7IFZNX0VYRUMpICZhbXA7JmFtcDsgZm9saW9faXNfZmlsZV9scnUoZm9saW8pYC4gTm93LCBpdCYjMzk7cyBjYWxsaW5nIGBpc19leGVjX2ZpbGVfZm9saW9gLCBhbmQgaW1wb3J0YW50bHksIGl0IGFjdGl2YXRlcyB0aGVzZSBmb2xpb3MsIHdoaWNoIHdhc24mIzM5O3QgdGhlIGNhc2UgZWFybGllcjoKYGBgYwoJCWlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sICZhbXA7dm1hX2ZsYWdzKSkKCQkJcmV0dXJuIEZPTElPUkVGX0FDVElWQVRFOwpgYGAKCkluIGBscnVfZ2VuX3NldF9yZWZzYCwgd2Ugc2VlIHRoZSBzYW1lIHByaW5jaXBsZSAtIGFjdGl2YXRlIGZpbGUtYmFja2VkLCBleGVjdXRhYmxlIGZvbGlvczoKYGBgYwpzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpCnsKCS8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqLwoJaWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykpIHsKCQkvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi8KCQlpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7CgkJCXNldF9tYXNrX2JpdHMoJmFtcDtmb2xpby0mZ3Q7ZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7CgkJCXJldHVybiB0cnVlOwoJCX0KCgkJc2V0X21hc2tfYml0cygmYW1wO2ZvbGlvLSZndDtmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpOwoJCXJldHVybiBmYWxzZTsKCX0KYGBgCgpTbywgdGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UuIEl0IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyAoYWZ0ZXIgZmlyc3QgdXNhZ2UpIGluIHJlY2xhaW0gcGF0aHMuIFRoZSBjb21taXQgbWVzc2FnZSBtZW50aW9ucyB0aGlzIGlzIGEgcGF0Y2ggYmVpbmcgYXBwbGllZCBmcm9tIGEgZnV6emluZyBjbHVzdGVyLCB3aGljaCBzdWdnZXN0cyBpdCB0YXJnZXRzIGEgc3RhYmlsaXR5IGlzc3VlLCBwcm9iYWJseSBpbnZvbHZpbmcgdGhlIExSVSBhbGdvcml0aG0uICBNZW1vcnkgcmVjbGFpbSBpcyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCwgYW5kIHRoaXMgdG91Y2hlcyBib3RoIHN0YW5kYXJkIExSVSBhbmQgTUdMUlUgbG9naWMsIGFzIHNob3duIGZyb20gdGhlIG1vZGlmaWVkIGZ1bmN0aW9uczogYGxydV9nZW5fc2V0X3JlZnNgLCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGB3YWxrX3B0ZV9yYW5nZWAsIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAuICBTaW5jZSBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgZm9yIGV4YW1wbGUsIGlzIHRoZXJlLCB0aGlzIHRvdWNoZXMgYm90aCBNR0xSVSBhbmQgYWN0aXZlL2luYWN0aXZlIGxpc3QgcmVjbGFpbS4gV2Ugc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZXJlIGJ5IHJ1bm5pbmcgbWVtb3J5IHByZXNzdXJlLCBzbyB5ZXMsIHRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuCgpHaXZlbiB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lbnRpb25zICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBtZWFucyB0aGVyZSYjMzk7cyBwcm9iYWJseSBhIHJlYWwgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIGlmIE1HTFJVIChgQ09ORklHX0xSVV9HRU5gKSBpcyBlbmFibGVkIG9yIG5lZWRzIGEgY29uZmlnLCBidXQgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhbiBhY3RpdmUgcGFydCBvZiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBMUlVfR0VOJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM4OT1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xMzk5LSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDA6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwMS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQwOC1cbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTAtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE0LVxubW0vS2NvbmZpZzoxNDE1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MTYtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyMy1cbm1tL0tjb25maWc6MTQyNDpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyNS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTcwNAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYExSVV9HRU5gLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zIHVzdWFsbHkgcmVzaWRlLCBhbmQgaXQmIzM5O3MgaGlnaGx5IGxpa2VseSB0aGF0IGEgZmVhdHVyZSBsaWtlIGBMUlVfR0VOYCB3aWxsIGhhdmUgaXRzIGRlZmluaW5nIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gSSYjMzk7bSBnb2luZyBzdHJhaWdodCBmb3IgdGhlIHNvdXJjZSB0byBnZXQgdGhlIGRlZmluaXRpdmUgaW5mb3JtYXRpb24gb24gdGhpcy4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IGBtbS9LY29uZmlnYCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzOTksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTM5OTpcdCMgbXVsdGktZ2VuIExSVSB7XG4xNDAwOlx0Y29uZmlnIExSVV9HRU5cbjE0MDE6XHRcdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuMTQwMjpcdFx0ZGVwZW5kcyBvbiBNTVVcbjE0MDM6XHRcdCMgbWFrZSBzdXJlIGZvbGlvLVx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xuMTQwNDpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXG4xNDA1Olx0XHRoZWxwXG4xNDA2Olx0XHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxuMTQwNzpcdFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXG4xNDA4Olx0XG4xNDA5Olx0Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxuMTQxMDpcdFx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuMTQxMTpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDEyOlx0XHRoZWxwXG4xNDEzOlx0XHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cbjE0MTQ6XHRcbjE0MTU6XHRjb25maWcgTFJVX0dFTl9TVEFUU1xuMTQxNjpcdFx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbjE0MTc6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxODpcdFx0aGVscFxuMTQxOTpcdFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcbjE0MjA6XHRcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cbjE0MjE6XHRcbjE0MjI6XHRcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXG4xNDIzOlx0XG4xNDI0Olx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG4xNDI1Olx0XHRkZWZfYm9vbCB5XG4xNDI2Olx0XHRkZXBlbmRzIG9uIExSVV9HRU4gXHUwMDI2XHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xuMTQyNzpcdCMgfVxuMTQyODpcdFxuMTQyOTpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DS1xuMTQzMDpcdCAgICAgICBkZWZfYm9vbCBuXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIFBFUl9WTUFfTE9DS1xuMTQzMzpcdFx0ZGVmX2Jvb2wgeVxuMTQzNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX1BFUl9WTUFfTE9DSyBcdTAwMjZcdTAwMjYgTU1VIFx1MDAyNlx1MDAyNiBTTVBcbjE0MzU6XHRcdGhlbHBcbjE0MzY6XHRcdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxuMTQzNzpcdFxuMTQzODpcdFx0ICBUaGlzIGZlYXR1cmUgYWxsb3dzIGxvY2tpbmcgZWFjaCB2aXJ0dWFsIG1lbW9yeSBhcmVhIHNlcGFyYXRlbHkgd2hlblxuMTQzOTpcdFx0ICBoYW5kbGluZyBwYWdlIGZhdWx0cyBpbnN0ZWFkIG9mIHRha2luZyBtbWFwX2xvY2suXG4xNDQwOlx0XG4xNDQxOlx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDQyOlx0XHRib29sXG4xNDQzOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDQ0Olx0XG4xNDQ1Olx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0NDY6XHRcdGJvb2xcbjE0NDc6XHRcbjE0NDg6XHRjb25maWcgRVhFQ01FTVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTY5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTFJVX0dFTiBmb3IgUHJvcGVyIFRlc3RpbmcqKgoKT2theSwgc28gdG8gcmVhbGx5IHB1dCB0aGlzIG5ldyBgTFJVX0dFTmAgZnVuY3Rpb25hbGl0eSB0aHJvdWdoIGl0cyBwYWNlcywgSSBuZWVkIHRvIGVuYWJsZSBib3RoIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoYXQgc2VlbXMgb2J2aW91cy4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCB0b3VjaGVzIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAsIHdoaWNoLCBhcyBJIHJlY2FsbCwgYXJlIGFsc28gZnVuZGFtZW50YWwgY29tcG9uZW50cyBvZiB0aGUgc3RhbmRhcmQgTFJVIHJlY2xhaW0gcHJvY2Vzcy4gSG1tLCB0aGlzIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHNlZWluZyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBUaGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IGBMUlVfR0VOYCBtZWNoYW5pc20gYmxlZWRzIGludG8gdGhlIHN0YW5kYXJkIExSVS4gV2FpdCwgbm8sIGhhbmcgb24sIHRoZSBkZWZpbml0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIHNldHRpbmcsIHNvIGl0ICpzaG91bGRuJiMzOTt0KiBpbnRlcmZlcmUgd2hlbiBgTFJVX0dFTmAgaXNuJiMzOTt0IGFjdGl2ZS4gSnVzdCB3YW50IHRvIGNvbmZpcm0gdGhhdCBpbiBteSBoZWFkLiBMZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGludGVyYWN0aW9uIHBvaW50IGluIGBtbS92bXNjYW4uY2AgYXJvdW5kIGxpbmUgODQxLiBJdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aGVuIHlvdSYjMzk7cmUgZGVhbGluZyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogODMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA4MzA6XHRcbiA4MzE6XHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuIDgzMjpcdFx0Rk9MSU9SRUZfUkVDTEFJTSxcbiA4MzM6XHRcdEZPTElPUkVGX0tFRVAsXG4gODM0Olx0XHRGT0xJT1JFRl9BQ1RJVkFURSxcbiA4MzU6XHR9O1xuIDgzNjpcdFxuIDgzNzpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuIDgzODpcdC8qXG4gODM5Olx0ICogT25seSB1c2VkIG9uIGEgbWFwcGVkIGZvbGlvIGluIHRoZSBldmljdGlvbiAocm1hcCB3YWxrKSBwYXRoLCB3aGVyZSBwcm9tb3Rpb25cbiA4NDA6XHQgKiBuZWVkcyB0byBiZSBkb25lIGJ5IHRha2luZyB0aGUgZm9saW8gb2ZmIHRoZSBMUlUgbGlzdCBhbmQgdGhlbiBhZGRpbmcgaXQgYmFja1xuIDg0MTpcdCAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcbiA4NDI6XHQgKiBmb2xpb191cGRhdGVfZ2VuKCkuXG4gODQzOlx0ICovXG4gODQ0Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIDg0NTpcdHtcbiA4NDY6XHRcdC8qIHNlZSB0aGUgY29tbWVudCBvbiBMUlVfUkVGU19GTEFHUyAqL1xuIDg0NzpcdFx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuIDg0ODpcdFx0XHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cbiA4NDk6XHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuIDg1MDpcdFx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4gODUxOlx0XHRcdFx0cmV0dXJuIHRydWU7XG4gODUyOlx0XHRcdH1cbiA4NTM6XHRcbiA4NTQ6XHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19NQVNLLCBCSVQoUEdfcmVmZXJlbmNlZCkpO1xuIDg1NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gODU2Olx0XHR9XG4gODU3Olx0XG4gODU4Olx0XHQvKiBQcm9tb3RlIG9uIHNlY29uZCBhY2Nlc3MgKi9cbiA4NTk6XHRcdGlmIChmb2xpb19scnVfcmVmcyhmb2xpbykgXHUwMDNlIDEpXG4gODYwOlx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG4gODYxOlx0XHRlbHNlXG4gODYyOlx0XHRcdGZvbGlvX21hcmtfYWNjZXNzZWQoZm9saW8pO1xuIDg2MzpcdFx0cmV0dXJuIHRydWU7XG4gODY0Olx0fVxuIDg2NTpcdCNlbHNlXG4gODY2Olx0c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIDg2NzpcdHtcbiA4Njg6XHRcdHJldHVybiBmYWxzZTtcbiA4Njk6XHR9XG4gODcwOlx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gODcxOlx0XG4gODcyOlx0c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gODczOlx0XHRcdFx0XHRcdFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiA4NzQ6XHR7XG4gODc1Olx0XHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xuIDg3NjpcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIDg3NzpcdFxuIDg3ODpcdFx0cmVmZXJlbmNlZF9wdGVzID0gZm9saW9fcmVmZXJlbmNlZChmb2xpbywgMSwgc2MtXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXG4gODc5Olx0XHRcdFx0XHRcdCAgIFx1MDAyNnZtYV9mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzk3CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZGlnZ2luZyBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIHRoYXQgYGxydV9nZW5fc2V0X3JlZnNgIGlzIGRlZmluaXRlbHkgcGFydCBvZiBgQ09ORklHX0xSVV9HRU5gLCB3aGljaCBpcyBNR0xSVSwgYnV0IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBpcyBhbHNvIHVzZWQgaW4gc3RhbmRhcmQgTFJVIHJlY2xhaW0uIFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoZW4gSSBzZWUgdGhhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgZGlyZWN0bHkgY2FsbHMgYGlzX2V4ZWNfZmlsZV9mb2xpb2AsIGFuZCB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgICphbHNvKiB1dGlsaXplcyBgaXNfZXhlY19maWxlX2ZvbGlvYC4gU28sIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGp1c3QgdG91Y2hpbmcgTUdMUlU7IGl0JiMzOTtzIGdvdCBpbXBsaWNhdGlvbnMgZm9yIHRoZSBzdGFuZGFyZCBMUlUgcmVjbGFpbSBwYXRoIGFzIHdlbGwuIEhtbSwgZGVmaW5pdGVseSBzb21ldGhpbmcgdG8gcHJpb3JpdGl6ZSBmb3IgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEkmIzM5O3ZlIGdvdDogYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBgZm9saW9fcmVmZXJlbmNlZGAsIGFuZCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLgoKV2FpdCwgbGV0JiMzOTtzIHJlZmluZSB0aGlzIGxpc3QuIGBmb2xpb19yZWZlcmVuY2VkYCBhbmQgYGZvbGlvX3JlZmVyZW5jZWRfb25lYCBhcmUgaW4gYG1tL3JtYXAuY2AsIHdoaWxlIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIGluIGBtbS92bXNjYW4uY2AuIFRoZW4gdGhlIE1HTFJVIGNvZGU6IGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBhcmUgYWxzbyBpbiBgbW0vdm1zY2FuLmNgLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIGZ1bmN0aW9uIHZpc2liaWxpdHkuIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIHN0YXRpYy4gYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGV4cG9ydGVkL2dsb2JhbC4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYy4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBzdGF0aWMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwuCgpTbywgZm9yIGZ1enppbmcsIEkmIzM5O20gdGhpbmtpbmcgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMuIFNpbmNlIGBGb2N1c1N5bWJvbHNgIGlzIGFib3V0IGZ1bmN0aW9ucyB0byB0YXJnZXQsIEkgY2FuIGZ1enogdGhlIHN0YXRpYyBvbmVzIGlmIHRoZSBjb2RlIHBhdGggaXMgaGl0LgoKKiAgIGBmb2xpb19yZWZlcmVuY2VkYAoqICAgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgCiogICBgc2hyaW5rX2FjdGl2ZV9saXN0YAoqICAgYGZvbGlvX3VwZGF0ZV9nZW5gCiogICBgd2Fsa191cGRhdGVfZm9saW9gCiogICBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAKKiAgIGB3YWxrX3B0ZV9yYW5nZWAKKiAgIGB3YWxrX3BtZF9yYW5nZV9sb2NrZWRgCgpBcmUgdGhlc2UgaG90IHBhdGhzPyBNZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMgYXJlbiYjMzk7dCBuZWNlc3NhcmlseSAqaG90KiwgdW5sZXNzIHRoZXJlJiMzOTtzIG1lbW9yeSBwcmVzc3VyZS4gQnV0IGBmb2xpb19yZWZlcmVuY2VkYCBpcyBjYWxsZWQgZHVyaW5nIHJlY2xhaW0uIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQgZHVyaW5nIHBhZ2UgZmF1bHQgKGZyb20gYGRvX3NldF9wdGVgIG9yIHNpbWlsYXIpLCBzbyBkZWZpbml0ZWx5IGNvdWxkIGJlIGZyZXF1ZW50bHkgaGl0LiBMZXQgbWUgZG91YmxlLWNoZWNrIHdoZXJlIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBjYWxsZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjAgMTU6MzU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bHJ1X2dlbl9sb29rX2Fyb3VuZCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtEb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3Q9MTg3PWNhbiBpbmN1ciB0aGUgaGlnaGVzdCBDUFUgY29zdCBpbiB0aGUgcmVjbGFpbSBwYXRoLlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTE4OC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0xOTAtdHJpcHMgaW50byB0aGUgcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kXG4tLVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMC1cbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoyMDE6SW4gdGhlIGV2aWN0aW9uIHBhdGgsIHNwZWNpZmljYWxseSwgaW4gYGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCwgaWYgYVxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD02ODk9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xuaW5jbHVkZS9saW51eC9tbXpvbmUuaC02OTEtXG4tLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzExLVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTMtXHRcdHVuc2lnbmVkIGludCBucilcbi0tXG5tbS9ybWFwLmM9OTE3PXN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vcm1hcC5jLTk4MS1cdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcdTAwMjZcdTAwMjYgcHZtdy5wdGUpIHtcbm1tL3JtYXAuYzo5ODI6XHRcdFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXHUwMDI2cHZtdywgbnIpKVxubW0vcm1hcC5jLTk4My1cdFx0XHRcdHJlZmVyZW5jZWQmIzQzOyYjNDM7O1xuLS1cbm1tL3Ztc2Nhbi5jPTI3MjA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy0yNzQ5LSAqIHdhbGtfcG1kX3JhbmdlKCk7IHRoZSBldmljdGlvbiBhbHNvIHJlcG9ydCB0aGVtIHdoZW4gd2Fsa2luZyB0aGUgcm1hcFxubW0vdm1zY2FuLmM6Mjc1MDogKiBpbiBscnVfZ2VuX2xvb2tfYXJvdW5kKCkuXG5tbS92bXNjYW4uYy0yNzUxLSAqXG4tLVxubW0vdm1zY2FuLmM9NDAwMj1zdGF0aWMgYm9vbCB0cnlfdG9faW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSxcbi0tXG5tbS92bXNjYW4uYy00MDIxLVx0ICogSWYgdGhlIGhhcmR3YXJlIGRvZXNuJiMzOTt0IGF1dG9tYXRpY2FsbHkgc2V0IHRoZSBhY2Nlc3NlZCBiaXQsIGZhbGxiYWNrXG5tbS92bXNjYW4uYzo0MDIyOlx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcbm1tL3Ztc2Nhbi5jLTQwMjMtXHQgKiBoYW5kZnVsIG9mIFBURXMuIFNwcmVhZGluZyB0aGUgd29yayBvdXQgb3ZlciBhIHBlcmlvZCBvZiB0aW1lIHVzdWFsbHlcbi0tXG5tbS92bXNjYW4uYz00MTQxPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNDE4Ny0gKi9cbm1tL3Ztc2Nhbi5jOjQxODg6Ym9vbCBscnVfZ2VuX2xvb2tfYXJvdW5kKHN0cnVjdCBwYWdlX3ZtYV9tYXBwZWRfd2FsayAqcHZtdywgdW5zaWduZWQgaW50IG5yKVxubW0vdm1zY2FuLmMtNDE4OS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTE2CgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBpcyBpbiBgbW0vcm1hcC5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHVwZGF0aW5nIGBmb2xpb19yZWZlcmVuY2VkYCB0byB1c2UgYHZtYV9mbGFnc190YCBhbmQgcGFzcyBpdCBkb3duIHRvIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEludGVyZXN0aW5nLiBBbmQgSSBzZWUgYSBjaGFuZ2UgaW4gYGxydV9nZW5fc2V0X3JlZnNgIHRvbywgd2hpY2ggbm93IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBpbml0aWFsIHVzZS4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgc2VlIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAuIFRoZXNlIGFyZSBvYnZpb3VzbHkgcmVsYXRlZCB0byB0aGUgTUdMUlUgY29tcG9uZW50LCB3aGljaCBtYWtlcyBzZW5zZS4gSG1tLCBidXQgd2hhdCBhYm91dCB0aGUgc3RhbmRhcmQgTFJVIGZ1bmN0aW9uYWxpdHk/IEFoLCByaWdodCwgdGhhdCYjMzk7cyBhbHdheXMgb247IGl0IGRvZXNuJiMzOTt0IG5lZWQgYW55IHNwZWNpYWwgY29uZmlnLiBTbywgaW5jbHVkaW5nIHRob3NlIE1HTFJVLXNwZWNpZmljIG9wdGlvbnMsIGBMUlVfR0VOYCBhbmQgYExSVV9HRU5fRU5BQkxFRGAsIHdpbGwgZW5zdXJlIHRoYXQgYm90aCBwYXRocyBhcmUgcHJvcGVybHkgdGVzdGVkLiBTbWFydCBtb3ZlLgoKT2theSwgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IGB2bWFfZmxhZ3NfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gWWVwLCBpdCYjMzk7cyB0aGVyZSwgYXMgZXhwZWN0ZWQuIFRoaXMgcGF0Y2ggbG9va3MgZnVuY3Rpb25hbGx5IHNvdW5kLiBJdCYjMzk7cyBjbGVhcmx5IG1vZGlmeWluZyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMsIGFmZmVjdGluZyB0aGluZ3MgYXQgdGhlIGZvbGlvIGxldmVsLgoKTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBrZXkgc3ltYm9scyBpbnZvbHZlZC4gSSBuZWVkIHRvIGtlZXAgdGhlc2UgaW4gbWluZDogYGZvbGlvX3JlZmVyZW5jZWRgLCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCBgZm9saW9fdXBkYXRlX2dlbmAsIGB3YWxrX3VwZGF0ZV9mb2xpb2AsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYW5kIGBscnVfZ2VuX3NldF9yZWZzYC4KCldhaXQsIGp1c3QgYSBzZWNvbmQuLi4gaXMgYGxydV9nZW5fc2V0X3JlZnNgIGlubGluZSBvciBzdGF0aWM/IExldCBtZSBkb3VibGUtY2hlY2suIE9rYXksIGl0JiMzOTtzIHN0YXRpYywgd2hpY2ggZXhwbGFpbnMgd2h5IGl0JiMzOTtzIGRlZmluZWQgaW4gYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgbW0vdm1zY2FuLmNgIGFuZCBtYWtlIHN1cmUgSSBmdWxseSB1bmRlcnN0YW5kIHRoYXQgc3RhdGljIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX3NldF9yZWZzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbW16b25lLmg9NDIyPWVudW0gbHJ1dmVjX2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUwOS0gKiBGb3IgZm9saW9zIGFjY2Vzc2VkIG11bHRpcGxlIHRpbWVzIHRocm91Z2ggcGFnZSB0YWJsZXMsIGZvbGlvX3VwZGF0ZV9nZW4oKVxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo1MTA6ICogZnJvbSBhIHBhZ2UgdGFibGUgd2FsayBvciBscnVfZ2VuX3NldF9yZWZzKCkgZnJvbSBhIHJtYXAgd2FsayBzZXRzXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBQR19yZWZlcmVuY2VkIGFmdGVyIHRoZSBhY2Nlc3NlZCBiaXQgaXMgY2xlYXJlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXG4tLVxubW0vdm1zY2FuLmM9ODMxPWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XG4tLVxubW0vdm1zY2FuLmMtODQzLSAqL1xubW0vdm1zY2FuLmM6ODQ0OnN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbm1tL3Ztc2Nhbi5jLTg0NS17XG4tLVxubW0vdm1zY2FuLmMtODY1LSNlbHNlXG5tbS92bXNjYW4uYzo4NjY6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxubW0vdm1zY2FuLmMtODY3LXtcbi0tXG5tbS92bXNjYW4uYz04NzI9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0vdm1zY2FuLmMtOTAwLVxubW0vdm1zY2FuLmM6OTAxOlx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcbm1tL3Ztc2Nhbi5jLTkwMi1cdH1cbi0tXG5tbS92bXNjYW4uYz0zNDQ2PXN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL3Ztc2Nhbi5jLTM0NjItXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xubW0vdm1zY2FuLmM6MzQ2MzpcdH0gZWxzZSBpZiAobHJ1X2dlbl9zZXRfcmVmcyhmb2xpbywgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKSkge1xubW0vdm1zY2FuLmMtMzQ2NC1cdFx0b2xkX2dlbiA9IGZvbGlvX2xydV9nZW4oZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMCAxNTozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxNAoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAyNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJiMzOTtzIFJlYWNoIGFuZCBTaWduaWZpY2FuY2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgc28gSSBjYW4gc2VlIHdoYXQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb246IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgb2YgY291cnNlLCBgbHJ1X2dlbl9zZXRfcmVmc2AgaXRzZWxmLgoKSG9sZCBvbiwgSSBzZWUgYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGFsc28gbW9kaWZpZWQsIEkgbmVlZCB0byBpbmNsdWRlIHRoYXQgaW4gdGhlIGxpc3QgYXMgd2VsbC4KCk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vcm1hcC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQmIzM5O3MgZGVlcGx5IGludm9sdmVkIGluIG1lbW9yeSBtYW5hZ2VtZW50LiBNZW1vcnkgcmVjbGFpbSBpcyBhbHdheXMgZW5hYmxlZCwgc28gdGhhdCYjMzk7cyBhIGdpdmVuLiBNR0xSVSwgaG93ZXZlciwgaXMgZ2F0ZWQgYnkgYENPTkZJR19MUlVfR0VOYC4gU28sIEkmIzM5O2xsIG5lZWQgdG8gY29uc2lkZXIgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcyB0aGUgY3JpdGljYWwgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuCgpMZXQgbWUgZG91YmxlLWNoZWNrIG15IGxvZ2ljLiBJdCBsb29rcyBsaWtlIHRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGNoZWNrZWQgZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGFmZmVjdHMgYm90aCB0aGUgc3RhbmRhcmQgTFJVIGFuZCBNR0xSVS4gVGhlIG1haW4gcG9pbnQgaXMgdG8gdHJpZ2dlciBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2UgdG8gcHJldmVudCBJTyB0aHJhc2hpbmcuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggbWFrZXMgaXQgaGlnaGx5IHJlYWNoYWJsZS4gVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4KClRpbWUgdG8gZmVlZCB0aGlzIGludG8gdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIwIDE1OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fY2hlY2tfcmVmZXJlbmNlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDt3YWxrX3VwZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0xSVV9HRU5fRU5BQkxFRCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2ZvbGlvX3JlZmVyZW5jZWQmIzM0OywKICAgICYjMzQ7Zm9saW9fY2hlY2tfcmVmZXJlbmNlcyYjMzQ7LAogICAgJiMzNDtzaHJpbmtfYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7Zm9saW9fdXBkYXRlX2dlbiYjMzQ7LAogICAgJiMzNDt3YWxrX3VwZGF0ZV9mb2xpbyYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2xvb2tfYXJvdW5kJiMzNDssCiAgICAmIzM0O2xydV9nZW5fc2V0X3JlZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzQ6NTUuNDQxOTQyMjQ5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjM0OTUyMzU2MzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiTFJVX0dFTl9FTkFCTEVEXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZm9saW9fcmVmZXJlbmNlZFwiLFxuICAgIFwiZm9saW9fY2hlY2tfcmVmZXJlbmNlc1wiLFxuICAgIFwic2hyaW5rX2FjdGl2ZV9saXN0XCIsXG4gICAgXCJmb2xpb191cGRhdGVfZ2VuXCIsXG4gICAgXCJ3YWxrX3VwZGF0ZV9mb2xpb1wiLFxuICAgIFwibHJ1X2dlbl9sb29rX2Fyb3VuZFwiLFxuICAgIFwibHJ1X2dlbl9zZXRfcmVmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSByZWNsYWltIGxvZ2ljIChib3RoIHN0YW5kYXJkIExSVSBhbmQgTUdMUlUpIHRvIGFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIHRoZWlyIGZpcnN0IHVzYWdlLCBwcmV2ZW50aW5nIElPIHRocmFzaGluZy4gSXQgYWxzbyBjaGFuZ2VzIGhvdyBWTUEgZmxhZ3MgYXJlIHBhc3NlZCBhbmQgZXZhbHVhdGVkIGR1cmluZyByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgaXMgaGlnaGx5IHJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzQ6NTUuNDQxOTQ4ODY5WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MDc2Nzc2MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZmQzOTI0OTg4MWRmNzI0ZjdiYjg2ZTVjZGUyOTVjN2M1NWZiY2E0XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDIwIDE1OjM0OjUzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcXG5pbmRleCA4ZGMwODcxZTVmMDAxMS4uZTA5MGFhMDk4MjVkNTIgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9ybWFwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxcbkBAIC04NDMsNyArODQzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgZm9saW9fdHJ5X3NoYXJlX2Fub25fcm1hcF9wbWQoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gICogQ2FsbGVkIGZyb20gbW0vdm1zY2FuLmMgdG8gaGFuZGxlIHBhZ2luZyBvdXRcXG4gICovXFxuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqLCBpbnQgaXNfbG9ja2VkLFxcbi1cXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKTtcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTtcXG4gXFxuIHZvaWQgdHJ5X3RvX21pZ3JhdGUoc3RydWN0IGZvbGlvICpmb2xpbywgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbiB2b2lkIHRyeV90b191bm1hcChzdHJ1Y3QgZm9saW8gKiwgZW51bSB0dHVfZmxhZ3MgZmxhZ3MpO1xcbkBAIC05NzUsMTAgKzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuICNkZWZpbmUgYW5vbl92bWFfcHJlcGFyZSh2bWEpXFx0KDApXFxuIFxcbiBzdGF0aWMgaW5saW5lIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgIHZtX2ZsYWdzX3QgKnZtX2ZsYWdzKVxcbitcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0KnZtX2ZsYWdzID0gMDtcXG4rXFx0dm1hX2ZsYWdzX2NsZWFyX2FsbCh2bWFfZmxhZ3MpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXFxuaW5kZXggYWQ4MjBmZTg2ZjdkOGMuLjczYzJmZTJkMTk0NjI1IDEwMDY0NFxcbi0tLSBhL21tL3JtYXAuY1xcbisrKyBiL21tL3JtYXAuY1xcbkBAIC05MDcsNyArOTA3LDcgQEAgcG1kX3QgKm1tX2ZpbmRfcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuIHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyB7XFxuIFxcdGludCBtYXBjb3VudDtcXG4gXFx0aW50IHJlZmVyZW5jZWQ7XFxuLVxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuK1xcdHZtYV9mbGFnc190IHZtYV9mbGFncztcXG4gXFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbiB9O1xcbiBcXG5AQCAtOTI2LDcgKzkyNiw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XFxuIFxcdFxcdG5yID0gMTtcXG4gXFxuLVxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX2ZsYWdzIFxcdTAwMjYgVk1fTE9DS0VEKSB7XFxuK1xcdFxcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xcbiBcXHRcXHRcXHRwdGVzKys7XFxuIFxcdFxcdFxcdHByYS1cXHUwMDNlbWFwY291bnQtLTtcXG4gXFxuQEAgLTk0Nyw3ICs5NDcsNyBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHQvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovXFxuIFxcdFxcdFxcdG1sb2NrX3ZtYV9mb2xpbyhmb2xpbywgdm1hKTtcXG4gXFx0XFx0XFx0cGFnZV92bWFfbWFwcGVkX3dhbGtfZG9uZShcXHUwMDI2cHZtdyk7XFxuLVxcdFxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gVk1fTE9DS0VEO1xcbitcXHRcXHRcXHR2bWFfZmxhZ3Nfc2V0KFxcdTAwMjZwcmEtXFx1MDAzZXZtYV9mbGFncywgVk1BX0xPQ0tFRF9CSVQpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXFxuIFxcdFxcdH1cXG4gXFxuQEAgLTEwMTUsOCArMTAxNSwxMSBAQCBzdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRyZWZlcmVuY2VkKys7XFxuIFxcbiBcXHRpZiAocmVmZXJlbmNlZCkge1xcbitcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MgPSB2bWEtXFx1MDAzZWZsYWdzO1xcbitcXG4gXFx0XFx0cHJhLVxcdTAwM2VyZWZlcmVuY2VkKys7XFxuLVxcdFxcdHByYS1cXHUwMDNldm1fZmxhZ3MgfD0gdm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IH5WTV9MT0NLRUQ7XFxuK1xcdFxcdHZtYV9mbGFnc19jbGVhcihcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XFxuK1xcdFxcdHZtYV9mbGFnc19zZXRfbWFzayhcXHUwMDI2cHJhLVxcdTAwM2V2bWFfZmxhZ3MsIHZtYV9mbGFncyk7XFxuIFxcdH1cXG4gXFxuIFxcdGlmICghcHJhLVxcdTAwM2VtYXBjb3VudClcXG5AQCAtMTA1NCw3ICsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxcbiAgKiBAZm9saW86IFRoZSBmb2xpbyB0byB0ZXN0LlxcbiAgKiBAaXNfbG9ja2VkOiBDYWxsZXIgaG9sZHMgbG9jayBvbiB0aGUgZm9saW8uXFxuICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcXG4tICogQHZtX2ZsYWdzOiBBIGNvbWJpbmF0aW9uIG9mIGFsbCB0aGUgdm1hLVxcdTAwM2V2bV9mbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cXG4rICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS1cXHUwMDNlZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXFxuICAqXFxuICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLFxcbiAgKlxcbkBAIC0xMDYyLDcgKzEwNjUsNyBAQCBzdGF0aWMgYm9vbCBpbnZhbGlkX2ZvbGlvX3JlZmVyZW5jZWRfdm1hKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2b2lkICphcmcpXFxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cXG4gICovXFxuIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuLVxcdFxcdCAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncylcXG4rXFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdGJvb2wgd2VfbG9ja2VkID0gZmFsc2U7XFxuIFxcdHN0cnVjdCBmb2xpb19yZWZlcmVuY2VkX2FyZyBwcmEgPSB7XFxuQEAgLTEwNzgsNyArMTA4MSw3IEBAIGludCBmb2xpb19yZWZlcmVuY2VkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBpc19sb2NrZWQsXFxuIFxcdH07XFxuIFxcbiBcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pLCBmb2xpbyk7XFxuLVxcdCp2bV9mbGFncyA9IDA7XFxuK1xcdHZtYV9mbGFnc19jbGVhcl9hbGwodm1hX2ZsYWdzKTtcXG4gXFx0aWYgKCFwcmEubWFwY291bnQpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5AQCAtMTA5Miw3ICsxMDk1LDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcXG4gXFx0fVxcbiBcXG4gXFx0cm1hcF93YWxrKGZvbGlvLCBcXHUwMDI2cndjKTtcXG4tXFx0KnZtX2ZsYWdzID0gcHJhLnZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3Nfc2V0X21hc2sodm1hX2ZsYWdzLCBwcmEudm1hX2ZsYWdzKTtcXG4gXFxuIFxcdGlmICh3ZV9sb2NrZWQpXFxuIFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC0yNjgsNiArMjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiB9XFxuICNlbmRpZlxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbitcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbit7XFxuK1xcdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IHJlY2xhaW1fc3RhdGUgKnJzKVxcbiB7XFxuQEAgLTgzNSwxMCArODQxLDE2IEBAIGVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuICAqIHdpdGggUEdfYWN0aXZlIHNldC4gSW4gY29udHJhc3QsIHRoZSBhZ2luZyAocGFnZSB0YWJsZSB3YWxrKSBwYXRoIHVzZXNcXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiAgKi9cXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIHtcXG4gXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuIFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbitcXHRcXHQvKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS4gKi9cXG4rXFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xcbitcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuK1xcdFxcdFxcdHJldHVybiB0cnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfTUFTSywgQklUKFBHX3JlZmVyZW5jZWQpKTtcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuQEAgLTg1MSw3ICs4NjMsNyBAQCBzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuICNlbHNlXFxuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcXG4rc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbkBAIC04NjEsMTYgKzg3MywxNiBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4ge1xcbiBcXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuIFxcbiBcXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2bV9mbGFncyk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZ2bWFfZmxhZ3MpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogVGhlIHN1cHBvc2VkbHkgcmVjbGFpbWFibGUgZm9saW8gd2FzIGZvdW5kIHRvIGJlIGluIGEgVk1fTE9DS0VEIHZtYS5cXG4gXFx0ICogTGV0IHRoZSBmb2xpbywgbm93IG1hcmtlZCBNbG9ja2VkLCBiZSBtb3ZlZCB0byB0aGUgdW5ldmljdGFibGUgbGlzdC5cXG4gXFx0ICovXFxuLVxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX0xPQ0tFRClcXG4rXFx0aWYgKHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcXG4gXFx0XFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xcbiBcXG4gXFx0LypcXG5AQCAtODg2LDcgKzg5OCw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4gXFx0XFx0XFx0cmV0dXJuIEZPTElPUkVGX1JFQ0xBSU07XFxuIFxcbi1cXHRcXHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XFxuK1xcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG4gXFx0fVxcbiBcXG4gXFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuQEAgLTkxNCw3ICs5MjYsNyBAQCBzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRpZiAoKHZtX2ZsYWdzIFxcdTAwMjYgVk1fRVhFQykgXFx1MDAyNlxcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKVxcbitcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSlcXG4gXFx0XFx0XFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xcbiBcXG4gXFx0XFx0cmV0dXJuIEZPTElPUkVGX0tFRVA7XFxuQEAgLTIwNjMsNyArMjA3NSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xcbitcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuIFxcdExJU1RfSEVBRChsX2hvbGQpO1xcdC8qIFRoZSBmb2xpb3Mgd2hpY2ggd2VyZSBzbmlwcGVkIG9mZiAqL1xcbiBcXHRMSVNUX0hFQUQobF9hY3RpdmUpO1xcbiBcXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XFxuQEAgLTIxMDcsNyArMjExOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcbiBcXHRcXHQvKiBSZWZlcmVuY2VkIG9yIHJtYXAgbG9jayBjb250ZW50aW9uOiByb3RhdGUgKi9cXG4gXFx0XFx0aWYgKGZvbGlvX3JlZmVyZW5jZWQoZm9saW8sIDAsIHNjLVxcdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcXG4tXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcXG4rXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XFxuIFxcdFxcdFxcdC8qXFxuIFxcdFxcdFxcdCAqIElkZW50aWZ5IHJlZmVyZW5jZWQsIGZpbGUtYmFja2VkIGFjdGl2ZSBmb2xpb3MgYW5kXFxuIFxcdFxcdFxcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXFxuQEAgLTIxMTcsNyArMjEyOSw3IEBAIHN0YXRpYyB2b2lkIHNocmlua19hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdFxcdFxcdCAqIElPLCBwbHVzIEpWTSBjYW4gY3JlYXRlIGxvdHMgb2YgYW5vbiBWTV9FWEVDIGZvbGlvcyxcXG4gXFx0XFx0XFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdGlmICgodm1fZmxhZ3MgXFx1MDAyNiBWTV9FWEVDKSBcXHUwMDI2XFx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpIHtcXG4rXFx0XFx0XFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXFx1MDAyNnZtYV9mbGFncykpIHtcXG4gXFx0XFx0XFx0XFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XFxuIFxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2bF9hY3RpdmUpO1xcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG5AQCAtMzE4NiwxNCArMzE5OCwxOSBAQCBzdGF0aWMgYm9vbCBwb3NpdGl2ZV9jdHJsX2VycihzdHJ1Y3QgY3RybF9wb3MgKnNwLCBzdHJ1Y3QgY3RybF9wb3MgKnB2KVxcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbiBcXG4gLyogcHJvbW90ZSBwYWdlcyBhY2Nlc3NlZCB0aHJvdWdoIHBhZ2UgdGFibGVzICovXFxuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuKVxcbitzdGF0aWMgaW50IGZvbGlvX3VwZGF0ZV9nZW4oc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGdlbiwgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4ge1xcbiBcXHR1bnNpZ25lZCBsb25nIG5ld19mbGFncywgb2xkX2ZsYWdzID0gUkVBRF9PTkNFKGZvbGlvLVxcdTAwM2VmbGFncy5mKTtcXG4gXFxuIFxcdFZNX1dBUk5fT05fT05DRShnZW4gXFx1MDAzZT0gTUFYX05SX0dFTlMpO1xcbiBcXG4tXFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXFxuLVxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbitcXHQvKlxcbitcXHQgKiBTZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MsIGFuZCBhY3RpdmF0ZSBmaWxlLWJhY2tlZFxcbitcXHQgKiBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZSB0byBhdm9pZCB0eXBpY2FsIElPXFxuK1xcdCAqIHRocmFzaGluZyBmcm9tIHJlY2xhaW1pbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICFpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcXG4gXFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuIFxcdFxcdHJldHVybiAtMTtcXG4gXFx0fVxcbkBAIC0zNDI2LDggKzM0NDMsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxcbiBcXHRyZXR1cm4geW91bmcgKiBuIFxcdTAwM2U9IHRvdGFsO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi1cXHRcXHRcXHQgICAgICBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcXG4rc3RhdGljIHZvaWQgd2Fsa191cGRhdGVfZm9saW8oc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxcbiB7XFxuIFxcdGludCBvbGRfZ2VuO1xcbiBcXG5AQCAtMzQ0MCwxMCArMzQ1NywxMCBAQCBzdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRmb2xpb19tYXJrX2RpcnR5KGZvbGlvKTtcXG4gXFxuIFxcdGlmICh3YWxrKSB7XFxuLVxcdFxcdG9sZF9nZW4gPSBmb2xpb191cGRhdGVfZ2VuKGZvbGlvLCBuZXdfZ2VuKTtcXG4rXFx0XFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKTtcXG4gXFx0XFx0aWYgKG9sZF9nZW4gXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXFxuIFxcdFxcdFxcdHVwZGF0ZV9iYXRjaF9zaXplKHdhbGssIGZvbGlvLCBvbGRfZ2VuLCBuZXdfZ2VuKTtcXG4tXFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xcbitcXHR9IGVsc2UgaWYgKGxydV9nZW5fc2V0X3JlZnMoZm9saW8sIFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzKSkge1xcbiBcXHRcXHRvbGRfZ2VuID0gZm9saW9fbHJ1X2dlbihmb2xpbyk7XFxuIFxcdFxcdGlmIChvbGRfZ2VuIFxcdTAwM2U9IDAgXFx1MDAyNlxcdTAwMjYgb2xkX2dlbiAhPSBuZXdfZ2VuKVxcbiBcXHRcXHRcXHRmb2xpb19hY3RpdmF0ZShmb2xpbyk7XFxuQEAgLTM1MTYsNyArMzUzMyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdGlmIChsYXN0ICE9IGZvbGlvKSB7XFxuLVxcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0XFx0XFx0bGFzdCA9IGZvbGlvO1xcbiBcXHRcXHRcXHRkaXJ0eSA9IGZhbHNlO1xcbkBAIC0zNTI5LDcgKzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0d2Fsay1cXHUwMDNlbW1fc3RhdHNbTU1fTEVBRl9ZT1VOR10gKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBhcmdzLVxcdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXHRsYXN0ID0gTlVMTDtcXG4gXFxuIFxcdGlmIChpIFxcdTAwM2MgUFRSU19QRVJfUFRFIFxcdTAwMjZcXHUwMDI2IGdldF9uZXh0X3ZtYShQTURfTUFTSywgUEFHRV9TSVpFLCBhcmdzLCBcXHUwMDI2c3RhcnQsIFxcdTAwMjZlbmQpKVxcbkBAIC0zNjA3LDcgKzM2MjQsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxcbiBcXHRcXHRcXHRnb3RvIG5leHQ7XFxuIFxcbiBcXHRcXHRpZiAobGFzdCAhPSBmb2xpbykge1xcbi1cXHRcXHRcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdFxcdFxcdGxhc3QgPSBmb2xpbztcXG4gXFx0XFx0XFx0ZGlydHkgPSBmYWxzZTtcXG5AQCAtMzYyMSw3ICszNjM4LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcXG4gXFx0XFx0aSA9IGkgXFx1MDAzZSBNSU5fTFJVX0JBVENIID8gMCA6IGZpbmRfbmV4dF9iaXQoYml0bWFwLCBNSU5fTFJVX0JBVENILCBpKSArIDE7XFxuIFxcdH0gd2hpbGUgKGkgXFx1MDAzYz0gTUlOX0xSVV9CQVRDSCk7XFxuIFxcbi1cXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4rXFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcXG4gXFxuIFxcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xcbiBcXHRzcGluX3VubG9jayhwdGwpO1xcbkBAIC00MjU2LDcgKzQyNzMsNyBAQCBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcXG4tXFx0XFx0XFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuK1xcdFxcdFxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XFxuIFxcbiBcXHRcXHRcXHRsYXN0ID0gZm9saW87XFxuIFxcdFxcdFxcdGRpcnR5ID0gZmFsc2U7XFxuQEAgLTQyNjgsNyArNDI4NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG4gXFx0XFx0eW91bmcgKz0gbnI7XFxuIFxcdH1cXG4gXFxuLVxcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xcbitcXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xcbiBcXG4gXFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNDo1Ni4wNTAyNDMzODFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo2Mjg4NjkyNTE4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gICAgXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcIndhbGtfdXBkYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJscnVfZ2VuX3NldF9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmZDM5MjQ5ODgxZGY3MjRmN2JiODZlNWNkZTI5NWM3YzU1ZmJjYTRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyMCAxNTozNDo1MyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm1hcC5oIGIvaW5jbHVkZS9saW51eC9ybWFwLmhcbmluZGV4IDhkYzA4NzFlNWYwMDExLi5lMDkwYWEwOTgyNWQ1MiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm1hcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JtYXAuaFxuQEAgLTg0Myw3ICs4NDMsNyBAQCBzdGF0aWMgaW5saW5lIGludCBmb2xpb190cnlfc2hhcmVfYW5vbl9ybWFwX3BtZChzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuICAqIENhbGxlZCBmcm9tIG1tL3Ztc2Nhbi5jIHRvIGhhbmRsZSBwYWdpbmcgb3V0XG4gICovXG4gaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICosIGludCBpc19sb2NrZWQsXG4tXHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bV9mbGFnc190ICp2bV9mbGFncyk7XG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncyk7XG4gXG4gdm9pZCB0cnlfdG9fbWlncmF0ZShzdHJ1Y3QgZm9saW8gKmZvbGlvLCBlbnVtIHR0dV9mbGFncyBmbGFncyk7XG4gdm9pZCB0cnlfdG9fdW5tYXAoc3RydWN0IGZvbGlvICosIGVudW0gdHR1X2ZsYWdzIGZsYWdzKTtcbkBAIC05NzUsMTAgKzk3NSw5IEBAIHN0cnVjdCBhbm9uX3ZtYSAqZm9saW9fbG9ja19hbm9uX3ZtYV9yZWFkKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gI2RlZmluZSBhbm9uX3ZtYV9wcmVwYXJlKHZtYSlcdCgwKVxuIFxuIHN0YXRpYyBpbmxpbmUgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbi1cdFx0XHRcdCAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICB2bV9mbGFnc190ICp2bV9mbGFncylcbitcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbi1cdCp2bV9mbGFncyA9IDA7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5kaWZmIC0tZ2l0IGEvbW0vcm1hcC5jIGIvbW0vcm1hcC5jXG5pbmRleCBhZDgyMGZlODZmN2Q4Yy4uNzNjMmZlMmQxOTQ2MjUgMTAwNjQ0XG4tLS0gYS9tbS9ybWFwLmNcbisrKyBiL21tL3JtYXAuY1xuQEAgLTkwNyw3ICs5MDcsNyBAQCBwbWRfdCAqbW1fZmluZF9wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiBzdHJ1Y3QgZm9saW9fcmVmZXJlbmNlZF9hcmcge1xuIFx0aW50IG1hcGNvdW50O1xuIFx0aW50IHJlZmVyZW5jZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuIH07XG4gXG5AQCAtOTI2LDcgKzkyNiw3IEBAIHN0YXRpYyBib29sIGZvbGlvX3JlZmVyZW5jZWRfb25lKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGFkZHJlc3MgPSBwdm13LmFkZHJlc3M7XG4gXHRcdG5yID0gMTtcbiBcbi1cdFx0aWYgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fTE9DS0VEKSB7XG4rXHRcdGlmICh2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKSkge1xuIFx0XHRcdHB0ZXMrKztcbiBcdFx0XHRwcmEtXHUwMDNlbWFwY291bnQtLTtcbiBcbkBAIC05NDcsNyArOTQ3LDcgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHQvKiBSZXN0b3JlIHRoZSBtbG9jayB3aGljaCBnb3QgbWlzc2VkICovXG4gXHRcdFx0bWxvY2tfdm1hX2ZvbGlvKGZvbGlvLCB2bWEpO1xuIFx0XHRcdHBhZ2Vfdm1hX21hcHBlZF93YWxrX2RvbmUoXHUwMDI2cHZtdyk7XG4tXHRcdFx0cHJhLVx1MDAzZXZtX2ZsYWdzIHw9IFZNX0xPQ0tFRDtcbitcdFx0XHR2bWFfZmxhZ3Nfc2V0KFx1MDAyNnByYS1cdTAwM2V2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKTtcbiBcdFx0XHRyZXR1cm4gZmFsc2U7IC8qIFRvIGJyZWFrIHRoZSBsb29wICovXG4gXHRcdH1cbiBcbkBAIC0xMDE1LDggKzEwMTUsMTEgQEAgc3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0cmVmZXJlbmNlZCsrO1xuIFxuIFx0aWYgKHJlZmVyZW5jZWQpIHtcbitcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzID0gdm1hLVx1MDAzZWZsYWdzO1xuK1xuIFx0XHRwcmEtXHUwMDNlcmVmZXJlbmNlZCsrO1xuLVx0XHRwcmEtXHUwMDNldm1fZmxhZ3MgfD0gdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiB+Vk1fTE9DS0VEO1xuK1x0XHR2bWFfZmxhZ3NfY2xlYXIoXHUwMDI2dm1hX2ZsYWdzLCBWTUFfTE9DS0VEX0JJVCk7XG4rXHRcdHZtYV9mbGFnc19zZXRfbWFzayhcdTAwMjZwcmEtXHUwMDNldm1hX2ZsYWdzLCB2bWFfZmxhZ3MpO1xuIFx0fVxuIFxuIFx0aWYgKCFwcmEtXHUwMDNlbWFwY291bnQpXG5AQCAtMTA1NCw3ICsxMDU3LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIEBmb2xpbzogVGhlIGZvbGlvIHRvIHRlc3QuXG4gICogQGlzX2xvY2tlZDogQ2FsbGVyIGhvbGRzIGxvY2sgb24gdGhlIGZvbGlvLlxuICAqIEBtZW1jZzogdGFyZ2V0IG1lbW9yeSBjZ3JvdXBcbi0gKiBAdm1fZmxhZ3M6IEEgY29tYmluYXRpb24gb2YgYWxsIHRoZSB2bWEtXHUwMDNldm1fZmxhZ3Mgd2hpY2ggcmVmZXJlbmNlZCB0aGUgZm9saW8uXG4rICogQHZtYV9mbGFnczogQSBjb21iaW5hdGlvbiBvZiBhbGwgdGhlIHZtYS1cdTAwM2VmbGFncyB3aGljaCByZWZlcmVuY2VkIHRoZSBmb2xpby5cbiAgKlxuICAqIFF1aWNrIHRlc3RfYW5kX2NsZWFyX3JlZmVyZW5jZWQgZm9yIGFsbCBtYXBwaW5ncyBvZiBhIGZvbGlvLFxuICAqXG5AQCAtMTA2Miw3ICsxMDY1LDcgQEAgc3RhdGljIGJvb2wgaW52YWxpZF9mb2xpb19yZWZlcmVuY2VkX3ZtYShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdm9pZCAqYXJnKVxuICAqIHRoZSBmdW5jdGlvbiBiYWlsZWQgb3V0IGR1ZSB0byBybWFwIGxvY2sgY29udGVudGlvbi5cbiAgKi9cbiBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuLVx0XHQgICAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpXG4rXHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRib29sIHdlX2xvY2tlZCA9IGZhbHNlO1xuIFx0c3RydWN0IGZvbGlvX3JlZmVyZW5jZWRfYXJnIHByYSA9IHtcbkBAIC0xMDc4LDcgKzEwODEsNyBAQCBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxuIFx0fTtcbiBcbiBcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19pc196b25lX2RldmljZShmb2xpbyksIGZvbGlvKTtcbi1cdCp2bV9mbGFncyA9IDA7XG4rXHR2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFncyk7XG4gXHRpZiAoIXByYS5tYXBjb3VudClcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtMTA5Miw3ICsxMDk1LDcgQEAgaW50IGZvbGlvX3JlZmVyZW5jZWQoc3RydWN0IGZvbGlvICpmb2xpbywgaW50IGlzX2xvY2tlZCxcbiBcdH1cbiBcbiBcdHJtYXBfd2Fsayhmb2xpbywgXHUwMDI2cndjKTtcbi1cdCp2bV9mbGFncyA9IHByYS52bV9mbGFncztcbitcdHZtYV9mbGFnc19zZXRfbWFzayh2bWFfZmxhZ3MsIHByYS52bWFfZmxhZ3MpO1xuIFxuIFx0aWYgKHdlX2xvY2tlZClcbiBcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBiN2VmMDMyZTc4YTBiZC4uYjFlYzY1ZmI4OTQ3Y2QgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0yNjgsNiArMjY4LDEyIEBAIHN0YXRpYyBpbnQgc2Nfc3dhcHBpbmVzcyhzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIH1cbiAjZW5kaWZcbiBcbitzdGF0aWMgaW5saW5lIGJvb2wgaXNfZXhlY19maWxlX2ZvbGlvKGNvbnN0IHN0cnVjdCBmb2xpbyAqZm9saW8sXG4rXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4re1xuK1x0cmV0dXJuIHZtYV9mbGFnc190ZXN0KHZtYV9mbGFncywgVk1BX0VYRUNfQklUKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xuK31cbitcbiBzdGF0aWMgdm9pZCBzZXRfdGFza19yZWNsYWltX3N0YXRlKHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayxcbiBcdFx0XHRcdCAgIHN0cnVjdCByZWNsYWltX3N0YXRlICpycylcbiB7XG5AQCAtODM1LDEwICs4NDEsMTYgQEAgZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbiAgKiB3aXRoIFBHX2FjdGl2ZSBzZXQuIEluIGNvbnRyYXN0LCB0aGUgYWdpbmcgKHBhZ2UgdGFibGUgd2FsaykgcGF0aCB1c2VzXG4gICogZm9saW9fdXBkYXRlX2dlbigpLlxuICAqL1xuLXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbylcbitzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4ge1xuIFx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4gXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4rXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuK1x0XHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XG4rXHRcdFx0c2V0X21hc2tfYml0cyhcdTAwMjZmb2xpby1cdTAwM2VmbGFncy5mLCBMUlVfUkVGU19GTEFHUywgQklUKFBHX3dvcmtpbmdzZXQpKTtcbitcdFx0XHRyZXR1cm4gdHJ1ZTtcbitcdFx0fVxuK1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiBmYWxzZTtcbiBcdH1cbkBAIC04NTEsNyArODYzLDcgQEAgc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuICNlbHNlXG4tc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3N0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuQEAgLTg2MSwxNiArODczLDE2IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHRcdFx0XHRcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0aW50IHJlZmVyZW5jZWRfcHRlcywgcmVmZXJlbmNlZF9mb2xpbztcbi1cdHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XG4rXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XG4gXG4gXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdFx0ICAgXHUwMDI2dm1fZmxhZ3MpO1xuK1x0XHRcdFx0XHQgICBcdTAwMjZ2bWFfZmxhZ3MpO1xuIFxuIFx0LypcbiBcdCAqIFRoZSBzdXBwb3NlZGx5IHJlY2xhaW1hYmxlIGZvbGlvIHdhcyBmb3VuZCB0byBiZSBpbiBhIFZNX0xPQ0tFRCB2bWEuXG4gXHQgKiBMZXQgdGhlIGZvbGlvLCBub3cgbWFya2VkIE1sb2NrZWQsIGJlIG1vdmVkIHRvIHRoZSB1bmV2aWN0YWJsZSBsaXN0LlxuIFx0ICovXG4tXHRpZiAodm1fZmxhZ3MgXHUwMDI2IFZNX0xPQ0tFRClcbitcdGlmICh2bWFfZmxhZ3NfdGVzdChcdTAwMjZ2bWFfZmxhZ3MsIFZNQV9MT0NLRURfQklUKSlcbiBcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0LypcbkBAIC04ODYsNyArODk4LDcgQEAgc3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuIFx0XHRcdHJldHVybiBGT0xJT1JFRl9SRUNMQUlNO1xuIFxuLVx0XHRyZXR1cm4gbHJ1X2dlbl9zZXRfcmVmcyhmb2xpbykgPyBGT0xJT1JFRl9BQ1RJVkFURSA6IEZPTElPUkVGX0tFRVA7XG4rXHRcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWFfZmxhZ3MpID8gRk9MSU9SRUZfQUNUSVZBVEUgOiBGT0xJT1JFRl9LRUVQO1xuIFx0fVxuIFxuIFx0cmVmZXJlbmNlZF9mb2xpbyA9IGZvbGlvX3Rlc3RfY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG5AQCAtOTE0LDcgKzkyNiw3IEBAIHN0YXRpYyBlbnVtIGZvbGlvX3JlZmVyZW5jZXMgZm9saW9fY2hlY2tfcmVmZXJlbmNlcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuIFx0XHQvKlxuIFx0XHQgKiBBY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciBmaXJzdCB1c2FnZS5cbiBcdFx0ICovXG4tXHRcdGlmICgodm1fZmxhZ3MgXHUwMDI2IFZNX0VYRUMpIFx1MDAyNlx1MDAyNiBmb2xpb19pc19maWxlX2xydShmb2xpbykpXG4rXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG4gXHRcdFx0cmV0dXJuIEZPTElPUkVGX0FDVElWQVRFO1xuIFxuIFx0XHRyZXR1cm4gRk9MSU9SRUZfS0VFUDtcbkBAIC0yMDYzLDcgKzIwNzUsNyBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR2bV9mbGFnc190IHZtX2ZsYWdzO1xuK1x0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xuIFx0TElTVF9IRUFEKGxfaG9sZCk7XHQvKiBUaGUgZm9saW9zIHdoaWNoIHdlcmUgc25pcHBlZCBvZmYgKi9cbiBcdExJU1RfSEVBRChsX2FjdGl2ZSk7XG4gXHRMSVNUX0hFQUQobF9pbmFjdGl2ZSk7XG5AQCAtMjEwNyw3ICsyMTE5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcbiBcdFx0LyogUmVmZXJlbmNlZCBvciBybWFwIGxvY2sgY29udGVudGlvbjogcm90YXRlICovXG4gXHRcdGlmIChmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAwLCBzYy1cdTAwM2V0YXJnZXRfbWVtX2Nncm91cCxcbi1cdFx0XHRcdCAgICAgXHUwMDI2dm1fZmxhZ3MpICE9IDApIHtcbitcdFx0XHRcdCAgICAgXHUwMDI2dm1hX2ZsYWdzKSAhPSAwKSB7XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBJZGVudGlmeSByZWZlcmVuY2VkLCBmaWxlLWJhY2tlZCBhY3RpdmUgZm9saW9zIGFuZFxuIFx0XHRcdCAqIGdpdmUgdGhlbSBvbmUgbW9yZSB0cmlwIGFyb3VuZCB0aGUgYWN0aXZlIGxpc3QuIFNvXG5AQCAtMjExNyw3ICsyMTI5LDcgQEAgc3RhdGljIHZvaWQgc2hyaW5rX2FjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0XHQgKiBJTywgcGx1cyBKVk0gY2FuIGNyZWF0ZSBsb3RzIG9mIGFub24gVk1fRVhFQyBmb2xpb3MsXG4gXHRcdFx0ICogc28gd2UgaWdub3JlIHRoZW0gaGVyZS5cbiBcdFx0XHQgKi9cbi1cdFx0XHRpZiAoKHZtX2ZsYWdzIFx1MDAyNiBWTV9FWEVDKSBcdTAwMjZcdTAwMjYgZm9saW9faXNfZmlsZV9scnUoZm9saW8pKSB7XG4rXHRcdFx0aWYgKGlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgXHUwMDI2dm1hX2ZsYWdzKSkge1xuIFx0XHRcdFx0bnJfcm90YXRlZCArPSBmb2xpb19ucl9wYWdlcyhmb2xpbyk7XG4gXHRcdFx0XHRsaXN0X2FkZChcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmxfYWN0aXZlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTMxODYsMTQgKzMxOTgsMTkgQEAgc3RhdGljIGJvb2wgcG9zaXRpdmVfY3RybF9lcnIoc3RydWN0IGN0cmxfcG9zICpzcCwgc3RydWN0IGN0cmxfcG9zICpwdilcbiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuIFxuIC8qIHByb21vdGUgcGFnZXMgYWNjZXNzZWQgdGhyb3VnaCBwYWdlIHRhYmxlcyAqL1xuLXN0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuKVxuK3N0YXRpYyBpbnQgZm9saW9fdXBkYXRlX2dlbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgZ2VuLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbmV3X2ZsYWdzLCBvbGRfZmxhZ3MgPSBSRUFEX09OQ0UoZm9saW8tXHUwMDNlZmxhZ3MuZik7XG4gXG4gXHRWTV9XQVJOX09OX09OQ0UoZ2VuIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuIFxuLVx0Lyogc2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTICovXG4tXHRpZiAoIWZvbGlvX3Rlc3RfcmVmZXJlbmNlZChmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dvcmtpbmdzZXQoZm9saW8pKSB7XG4rXHQvKlxuK1x0ICogU2VlIHRoZSBjb21tZW50IG9uIExSVV9SRUZTX0ZMQUdTLCBhbmQgYWN0aXZhdGUgZmlsZS1iYWNrZWRcbitcdCAqIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlIHRvIGF2b2lkIHR5cGljYWwgSU9cbitcdCAqIHRocmFzaGluZyBmcm9tIHJlY2xhaW1pbmcuXG4rXHQgKi9cbitcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd29ya2luZ3NldChmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlzX2V4ZWNfZmlsZV9mb2xpbyhmb2xpbywgdm1hX2ZsYWdzKSkge1xuIFx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG4gXHRcdHJldHVybiAtMTtcbiBcdH1cbkBAIC0zNDI2LDggKzM0NDMsOCBAQCBzdGF0aWMgYm9vbCBzdWl0YWJsZV90b19zY2FuKGludCB0b3RhbCwgaW50IHlvdW5nKVxuIFx0cmV0dXJuIHlvdW5nICogbiBcdTAwM2U9IHRvdGFsO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLVx0XHRcdCAgICAgIGludCBuZXdfZ2VuLCBib29sIGRpcnR5KVxuK3N0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgbmV3X2dlbiwgYm9vbCBkaXJ0eSlcbiB7XG4gXHRpbnQgb2xkX2dlbjtcbiBcbkBAIC0zNDQwLDEwICszNDU3LDEwIEBAIHN0YXRpYyB2b2lkIHdhbGtfdXBkYXRlX2ZvbGlvKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdGZvbGlvX21hcmtfZGlydHkoZm9saW8pO1xuIFxuIFx0aWYgKHdhbGspIHtcbi1cdFx0b2xkX2dlbiA9IGZvbGlvX3VwZGF0ZV9nZW4oZm9saW8sIG5ld19nZW4pO1xuK1x0XHRvbGRfZ2VuID0gZm9saW9fdXBkYXRlX2dlbihmb2xpbywgbmV3X2dlbiwgXHUwMDI2dm1hLVx1MDAzZWZsYWdzKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xuLVx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvKSkge1xuK1x0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcdTAwMjZ2bWEtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbiBcdFx0aWYgKG9sZF9nZW4gXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBvbGRfZ2VuICE9IG5ld19nZW4pXG4gXHRcdFx0Zm9saW9fYWN0aXZhdGUoZm9saW8pO1xuQEAgLTM1MTYsNyArMzUzMyw3IEBAIHN0YXRpYyBib29sIHdhbGtfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRpZiAobGFzdCAhPSBmb2xpbykge1xuLVx0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0XHRcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGFyZ3MtXHUwMDNldm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNTI5LDcgKzM1NDYsNyBAQCBzdGF0aWMgYm9vbCB3YWxrX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0d2Fsay1cdTAwM2VtbV9zdGF0c1tNTV9MRUFGX1lPVU5HXSArPSBucjtcbiBcdH1cbiBcbi1cdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIGxhc3QsIGdlbiwgZGlydHkpO1xuK1x0d2Fsa191cGRhdGVfZm9saW8od2FsaywgYXJncy1cdTAwM2V2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFx0bGFzdCA9IE5VTEw7XG4gXG4gXHRpZiAoaSBcdTAwM2MgUFRSU19QRVJfUFRFIFx1MDAyNlx1MDAyNiBnZXRfbmV4dF92bWEoUE1EX01BU0ssIFBBR0VfU0laRSwgYXJncywgXHUwMDI2c3RhcnQsIFx1MDAyNmVuZCkpXG5AQCAtMzYwNyw3ICszNjI0LDcgQEAgc3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHZtX2FyZWFcbiBcdFx0XHRnb3RvIG5leHQ7XG4gXG4gXHRcdGlmIChsYXN0ICE9IGZvbGlvKSB7XG4tXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHRcdFx0d2Fsa191cGRhdGVfZm9saW8od2Fsaywgdm1hLCBsYXN0LCBnZW4sIGRpcnR5KTtcbiBcbiBcdFx0XHRsYXN0ID0gZm9saW87XG4gXHRcdFx0ZGlydHkgPSBmYWxzZTtcbkBAIC0zNjIxLDcgKzM2MzgsNyBAQCBzdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZV9sb2NrZWQocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCBzdHJ1Y3Qgdm1fYXJlYVxuIFx0XHRpID0gaSBcdTAwM2UgTUlOX0xSVV9CQVRDSCA/IDAgOiBmaW5kX25leHRfYml0KGJpdG1hcCwgTUlOX0xSVV9CQVRDSCwgaSkgKyAxO1xuIFx0fSB3aGlsZSAoaSBcdTAwM2M9IE1JTl9MUlVfQkFUQ0gpO1xuIFxuLVx0d2Fsa191cGRhdGVfZm9saW8od2FsaywgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4rXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XG4gXHRzcGluX3VubG9jayhwdGwpO1xuQEAgLTQyNTYsNyArNDI3Myw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0XHRjb250aW51ZTtcbiBcbiBcdFx0aWYgKGxhc3QgIT0gZm9saW8pIHtcbi1cdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdFx0XHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCB2bWEsIGxhc3QsIGdlbiwgZGlydHkpO1xuIFxuIFx0XHRcdGxhc3QgPSBmb2xpbztcbiBcdFx0XHRkaXJ0eSA9IGZhbHNlO1xuQEAgLTQyNjgsNyArNDI4NSw3IEBAIGJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcbiBcdFx0eW91bmcgKz0gbnI7XG4gXHR9XG4gXG4tXHR3YWxrX3VwZGF0ZV9mb2xpbyh3YWxrLCBsYXN0LCBnZW4sIGRpcnR5KTtcbitcdHdhbGtfdXBkYXRlX2ZvbGlvKHdhbGssIHZtYSwgbGFzdCwgZ2VuLCBkaXJ0eSk7XG4gXG4gXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjM0OjU2LjA1MDI0NDcxMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0ODkzMTc1MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFRoaXMgVk0gRmxhZyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCdzIHR3ZWFraW5nIGhvdyB3ZSBoYW5kbGUgdmlydHVhbCBtZW1vcnkgYXJlYSAoVk1BKSBmbGFncywgc3BlY2lmaWNhbGx5IGluIHJlbGF0aW9uIHRvIGBmb2xpb19yZWZlcmVuY2VkYCBhbmQgTFJVIGdlbmVyYXRpb24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2Ugc2VlbXMgdG8gaW52b2x2ZSBob3cgd2UgcmVwcmVzZW50IGFuZCBtYW5pcHVsYXRlIHRoZXNlIGZsYWdzLiBJbml0aWFsbHksIEkgdGhvdWdodCBpdCB3YXMganVzdCBhIHNpbXBsZSB0eXBlIHJlbmFtZSDigJMgYHZtX2ZsYWdzX3RgIHRvIGB2bWFfZmxhZ3NfdGAgb3IgcGVyaGFwcyBldmVuIGp1c3QgYW4gdW5kZXJseWluZyB0eXBlIGNoYW5nZSBsaWtlIGB1bnNpZ25lZCBsb25nYC4gVGhhdCdzIHRoZSBmaXJzdCBhc3N1bXB0aW9uLlxuXG5CdXQgbG9va2luZyBjbG9zZXIgYXQgdGhlIGRpZmYgcmV2ZWFscyB0aGF0IGl0J3MgYWN0dWFsbHkgY2hhbmdpbmcgaG93IHdlIHdvcmsgd2l0aCBwb2ludGVyczogYHZtYV9mbGFnc190ICp2bWFfZmxhZ3NgIGluc3RlYWQgb2YgYHZtX2ZsYWdzX3QgKnZtX2ZsYWdzYC4gT2theSwgdGhhdCdzIG1vcmUgc2lnbmlmaWNhbnQuIFRoaXMgaXMgbm90IGp1c3QgYSB0eXBlIHJlbmFtZSwgd2UgYXJlIGNoYW5naW5nIGhvdyB0aGUgZmxhZ3MgYXJlIHBhc3NlZC5cblxuVGhlIHBhdGNoIGFsc28gaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zOiBgdm1hX2ZsYWdzX2NsZWFyX2FsbGAsIGB2bWFfdGVzdCh2bWEsIFZNQV9MT0NLRURfQklUKWAsIGB2bWFfZmxhZ3Nfc2V0YCwgYHZtYV9mbGFnc19jbGVhcmAsIGFuZCBgdm1hX2ZsYWdzX3NldF9tYXNrYC4gVGhhdCdzIGEgZ29vZCBzaWduOyBtYXliZSB0aGlzIGlzIGEgY2xlYW5lciBBUEksIGFuZCB0aGV5IGFyZSB1c2luZyBoZWxwZXJzIHRvIG1ha2UgdGhpbmdzIG1vcmUgcm9idXN0LlxuXG5IYW5nIG9uIGEgc2Vjb25kLiBJZiB0aGV5J3JlIHVzaW5nIHRob3NlIGhlbHBlciBmdW5jdGlvbnMsIEkgaGF2ZSBhIGZlZWxpbmcgYHZtYV9mbGFnc190YCBpcyBwcm9iYWJseSBtb3JlIHRoYW4ganVzdCBhIHNpbXBsZSBpbnRlZ2VyIHR5cGUuIE15IGd1dCBzYXlzIGl0J3MgbGlrZWx5IGEgYHN0cnVjdGAgb3Igc29tZSBzb3J0IG9mIGN1c3RvbSB0eXBlIHRoYXQgcHJvdmlkZXMgbW9yZSBzdHJ1Y3R1cmUuIElmIHRoaXMgaXMgdGhlIGNhc2UsIGl0IG1ha2VzIHNlbnNlOyB3aXRoIHNvIG1hbnkgZmxhZ3MgaW4gdGhlIHN5c3RlbSwgeW91IG5lZWQgYSB3YXkgdG8gZW5jYXBzdWxhdGUgdGhlbS5cblxuVGltZSB0byBsb29rIGZvciB0aGUgZGVmaW5pdGlvbi4gSSdsbCBjaGVjayBgaW5jbHVkZS9saW51eC9ybWFwLmhgIG9yIG1heWJlIGBtbS9ybWFwLmNgIGZpcnN0LiBUaG9zZSBhcmUgdGhlIG1vc3QgbGlrZWx5IHBsYWNlcyB0byBmaW5kIGEgZGVmaW5pdGlvbiBmb3Igc29tZXRoaW5nIHJlbGF0ZWQgdG8gVk1BcyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQuXG5cblJpZ2h0LCBuZWVkIHRvIGJlIHN1cmU7IGlzIHRoaXMgYSBuZXcgdHlwZT8gTGV0IG1lIGRvIGEgcXVpY2sgc2VhcmNoIHRocm91Z2ggdGhlIGNvZGViYXNlIGZvciBgdm1hX2ZsYWdzX3RgIGp1c3QgdG8gY29uZmlybSBpdCdzIG5vdCBhIHByZS1leGlzdGluZyB0eXBlIHRoYXQgdGhleSBhcmUgbWVyZWx5IHVzaW5nIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNzUsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNTowMi41Mzk1NjM5M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTY4MjYyNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYV9mbGFnc190XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTY3OSBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0PTU4PUV4YW1pbmluZyB0aGUgc3RydWN0IHZtX2FyZWFfZGVzYyB0eXBlOlxcbi0tXFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0LTcxLSAgICAgICAgc3RydWN0IGZpbGUgKnZtX2ZpbGU7XFxuRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9tbWFwX3ByZXBhcmUucnN0OjcyOiAgICAgICAgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvbW1hcF9wcmVwYXJlLnJzdC03My0gICAgICAgIHBncHJvdF90IHBhZ2VfcHJvdDtcXG4tLVxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTE1LVxcbmRyaXZlcnMvZGF4L2RldmljZS5jOjE2OnN0YXRpYyBpbnQgX19jaGVja192bWEoc3RydWN0IGRldl9kYXggKmRldl9kYXgsIHZtYV9mbGFnc190IGZsYWdzLFxcbmRyaXZlcnMvZGF4L2RldmljZS5jLTE3LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yNi1cXHQvKiBwcmV2ZW50IHByaXZhdGUgbWFwcGluZ3MgZnJvbSBiZWluZyBlc3RhYmxpc2hlZCAqL1xcbmRyaXZlcnMvZGF4L2RldmljZS5jOjI3OlxcdGlmICghdm1hX2ZsYWdzX3Rlc3RfYW55KFxcdTAwMjZmbGFncywgVk1BX01BWVNIQVJFX0JJVCkpIHtcXG5kcml2ZXJzL2RheC9kZXZpY2UuYy0yOC1cXHRcXHRkZXZfaW5mb19yYXRlbGltaXRlZChkZXYsXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jPTE4ND1pbnQgZHJtX2dlbV9vYmplY3RfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iaixcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMtMTg4LVxcdHN0cnVjdCBmaWxlICpmaWxwO1xcbmRyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmM6MTg5OlxcdGNvbnN0IHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzKFZNQV9OT1JFU0VSVkVfQklUKTtcXG5kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jLTE5MC1cXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jPTUwMz1zdGF0aWMgaW50IF9fY3JlYXRlX3NobWVtKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1LFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3NobWVtLmMtNTA3LXtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fc2htZW0uYzo1MDg6XFx0Y29uc3Qgdm1hX2ZsYWdzX3Qgc2htZW1fZmxhZ3MgPSBta192bWFfZmxhZ3MoVk1BX05PUkVTRVJWRV9CSVQpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9zaG1lbS5jLTUwOS1cXHRzdHJ1Y3QgdmZzbW91bnQgKmh1Z2VfbW50O1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9OTk9c3RhdGljIGludCBodWdldGxiZnNfZmlsZV9tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNC1cXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2ZpbGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1OlxcdHZtYV9mbGFnc190IHZtYV9mbGFncztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDYtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDk4PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ5OTpcXHRcXHRcXHRcXHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZywgaW50IGNyZWF0X2ZsYWdzLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtXFx0XFx0XFx0XFx0aW50IHBhZ2Vfc2l6ZV9sb2cpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zOTQ9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zOTUtXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mzk2OlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzk3LVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9NjIwPXRocF9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTYyMS1cXHRcXHRcXHQgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjIyOlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjIzLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTE1MT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGZyb20sIGxvbmcgdG8sXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6MTUyOlxcdFxcdFxcdCAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTE1My1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PWV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIwOnN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTIxLVxcdFxcdFxcdFxcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTM1PXN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oOjUzNjpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3RmbGFnLFxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUzNy1cXHRcXHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTgtXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oOjk6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTAte1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaDoxMTpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9IVUdFVExCX0JJVCk7XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2lubGluZS5oLTEyLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9pbmxpbmUuaC0xNS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmg6MTY6c3RhdGljIGlubGluZSBib29sIGlzX3ZtYV9odWdldGxiX2ZsYWdzKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfaW5saW5lLmgtMTcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaD0xOD1pbnQga3NtX21hZHZpc2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuaW5jbHVkZS9saW51eC9rc20uaC0xOS1cXHRcXHR1bnNpZ25lZCBsb25nIGVuZCwgaW50IGFkdmljZSwgdm1fZmxhZ3NfdCAqdm1fZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgva3NtLmg6MjA6dm1hX2ZsYWdzX3Qga3NtX3ZtYV9mbGFncyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgY29uc3Qgc3RydWN0IGZpbGUgKmZpbGUsXFxuaW5jbHVkZS9saW51eC9rc20uaDoyMTpcXHRcXHRcXHQgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9rc20uaC0yMi1pbnQga3NtX2VuYWJsZV9tZXJnZV9hbnkoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaD0xMDI9Ym9vbCBrc21fcHJvY2Vzc19tZXJnZWFibGUoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xcbi0tXFxuaW5jbHVkZS9saW51eC9rc20uaC0xMDUtXFxuaW5jbHVkZS9saW51eC9rc20uaDoxMDY6c3RhdGljIGlubGluZSB2bWFfZmxhZ3NfdCBrc21fdm1hX2ZsYWdzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbmluY2x1ZGUvbGludXgva3NtLmg6MTA3OlxcdFxcdGNvbnN0IHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9rc20uaC0xMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1mZC5oPTExPXN0cnVjdCBmb2xpbyAqbWVtZmRfYWxsb2NfZm9saW8oc3RydWN0IGZpbGUgKm1lbWZkLCBwZ29mZl90IGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWZkLmgtMTgtICovXFxuaW5jbHVkZS9saW51eC9tZW1mZC5oOjE5OmludCBtZW1mZF9jaGVja19zZWFsc19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzX3B0cik7XFxuaW5jbHVkZS9saW51eC9tZW1mZC5oLTIwLXN0cnVjdCBmaWxlICptZW1mZF9hbGxvY19maWxlKGNvbnN0IGNoYXIgKm5hbWUsIHVuc2lnbmVkIGludCBmbGFncyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg9MzI9c3RhdGljIGlubGluZSBpbnQgbWVtZmRfY2hlY2tfc2VhbHNfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSxcXG5pbmNsdWRlL2xpbnV4L21lbWZkLmg6MzM6XFx0XFx0XFx0XFx0XFx0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3NfcHRyKVxcbmluY2x1ZGUvbGludXgvbWVtZmQuaC0zNC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9Mjk0PWVudW0ge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTUxMy0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDo1MTQ6ICogdm1hX2ZsYWdzX3QgbWFza3MgZm9yIHRoZSB1c2VyZmF1bHRmZCBWTUEgZmxhZ3MuIFRoZSB0d28gaGlnaC1iaXQgbW9kZXMgYXJlXFxuaW5jbHVkZS9saW51eC9tbS5oLTUxNS0gKiBnYXRlZCBvbiB0aGUgc2FtZSBjb25maWdzIGFzIHRoZWlyIFZNXyogZmxhZ3MgYWJvdmUgLS0gYm90aCBvZiB3aGljaCBpbXBseVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTU3Ni0vKiBUZW1wb3JhcnkgdW50aWwgVk1BIGZsYWdzIGNvbnZlcnNpb24gY29tcGxldGUuICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjU3NzojZGVmaW5lIFZNX1NUQUNLX0ZMQUdTIHZtYV9mbGFnc190b19sZWdhY3koVk1BX1NUQUNLX0ZMQUdTKVxcbmluY2x1ZGUvbGludXgvbW0uaC01NzgtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNTk0LVxcdFxcdFxcdFxcdCAgICAgICBWTUFfUEZOTUFQX0JJVCwgVk1BX01JWEVETUFQX0JJVClcXG5pbmNsdWRlL2xpbnV4L21tLmg6NTk1OiNkZWZpbmUgVk1fU1BFQ0lBTCB2bWFfZmxhZ3NfdG9fbGVnYWN5KFZNQV9TUEVDSUFMX0ZMQUdTKVxcbmluY2x1ZGUvbGludXgvbW0uaC01OTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTAyMj1zdGF0aWMgaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3Jlc2V0X29uY2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tbS5oOjEwMjM6XFx0XFx0XFx0XFx0XFx0dm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMDI0LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xMTA3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hdG9taWNfZmxhZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTE2LS8qIFNldCBhbiBpbmRpdmlkdWFsIFZNQSBmbGFnIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTExNzpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9mbGFnKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTExOC1cXHRcXHR2bWFfZmxhZ190IGJpdClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTI0LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTI1OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgX19ta192bWFfZmxhZ3Modm1hX2ZsYWdzX3QgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tbS5oLTExMjYtXFx0XFx0c2l6ZV90IGNvdW50LCBjb25zdCB2bWFfZmxhZ190ICpiaXRzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExMzYtICogSGVscGVyIG1hY3JvIHdoaWNoIGJpdHdpc2Utb3IgY29tYmluZXMgdGhlIHNwZWNpZmllZCBpbnB1dCBmbGFncyBpbnRvIGFcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzNzogKiB2bWFfZmxhZ3NfdCBiaXRtYXAgdmFsdWUuIEUuZy46XFxuaW5jbHVkZS9saW51eC9tbS5oLTExMzgtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTEzOTogKiB2bWFfZmxhZ3NfdCBmbGFncyA9IG1rX3ZtYV9mbGFncyhWTUFfSU9fQklULCBWTUFfUEZOTUFQX0JJVCxcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE0MC0gKiAgICAgICAgICAgICAgVk1BX0RPTlRFWFBBTkRfQklULCBWTUFfRE9OVERVTVBfQklUKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTUxLSAqXFxuaW5jbHVkZS9saW51eC9tbS5oOjExNTI6ICogdm1hX2ZsYWdzX3QgZmxhZ3MgPSBhcHBlbmRfdm1hX2ZsYWdzKFZNQV9TVEFDS19ERUZBVUxUX0ZMQUdTLCBWTUFfU1RBQ0tfQklULFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTUzLSAqICAgICAgICAgICAgICBWTUFfQUNDT1VOVF9CSVQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNTgtLyogQ2FsY3VsYXRlcyB0aGUgbnVtYmVyIG9mIHNldCBiaXRzIGluIHRoZSBzcGVjaWZpZWQgVk1BIGZsYWdzLiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMTU5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgaW50IHZtYV9mbGFnc19jb3VudChjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNjAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExNjgtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE2OTogKiBpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9SRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE3MC0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTE3MTpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3QoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMTcyLVxcdFxcdHZtYV9mbGFnX3QgYml0KVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTExODItICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjExODM6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3NfYW5kX21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTg0OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHZtYV9mbGFnc190IHRvX2FuZClcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE4NS17XFxuaW5jbHVkZS9saW51eC9tbS5oOjExODY6XFx0dm1hX2ZsYWdzX3QgZHN0O1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMTg3LVxcdHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9kc3QgPSBkc3QuX192bWFfZmxhZ3M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTE5OC0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxMTk5OiAqIHZtYV9mbGFnc190IHJlYWRfZmxhZ3MgPSB2bWFfZmxhZ3NfYW5kKFxcdTAwMjZmbGFncywgVk1BX1JFQURfQklULFxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjAwLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZNQV9NQVlfUkVBRF9CSVQpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMDUtLyogIFRlc3QgZWFjaCBvZiB0b190ZXN0IGZsYWdzIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIwNjpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjA3OlxcdFxcdHZtYV9mbGFnc190IHRvX3Rlc3QpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMDgte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMTctICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIxODogKiBpZiAodm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfUkVBRF9CSVQsIFZNQV9NQVlSRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIxOS0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyMDojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FueShmbGFncywgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMjE6XFx0dm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soZmxhZ3MsIG1rX3ZtYV9mbGFncyhfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjItXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjMtLyogVGVzdCB0aGF0IEFMTCBvZiB0aGUgdG9fdGVzdCBmbGFncyBhcmUgc2V0LCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIyNDpzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjI1OlxcdFxcdHZtYV9mbGFnc190IHRvX3Rlc3QpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMjYte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyMzUtICpcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzNjogKiBpZiAodm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCBWTUFfUkVBRF9CSVQsIFZNQV9NQVlSRUFEX0JJVCkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTIzNy0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTIzODojZGVmaW5lIHZtYV9mbGFnc190ZXN0X2FsbChmbGFncywgLi4uKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyMzk6XFx0dm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soZmxhZ3MsIG1rX3ZtYV9mbGFncyhfX1ZBX0FSR1NfXykpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDAtXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDEtLypcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI0MjogKiBIZWxwZXIgdG8gdGVzdCB0aGF0IGEgZmxhZyBtYXNrIG9mIHR5cGUgdm1hX2ZsYWdzX3QgaGFzIGEgU0lOR0xFIGZsYWcgc2V0XFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNDMtICogKHJldHVybmluZyBmYWxzZSBpZiBmbGFnbWFzayBoYXMgbm8gZmxhZ3Mgc2V0KS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMjQ3LSAqXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNDg6ICogaWYgKHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKFxcdTAwMjZmbGFncywgVk1BX0RST1BQQUJMRSkpIHsgLi4uIH1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI0OS0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNTItICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNTM6c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9mbGFnc190ZXN0X3NpbmdsZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1NDpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFnbWFzaylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1NS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1Ny1cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI1ODpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soZmxhZ3MsIGZsYWdtYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI1OS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI2MS0vKiBTZXQgZWFjaCBvZiB0aGUgdG9fc2V0IGZsYWdzIGluIGZsYWdzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MjpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX3NldF9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI2MzpcXHRcXHR2bWFfZmxhZ3NfdCB0b19zZXQpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNjQte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyNzgtXFxuaW5jbHVkZS9saW51eC9tbS5oOjEyNzk6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2bWFfZmxhZ3NfdCBfX21rX3ZtYV9mbGFnc19mcm9tX21hc2tzKHNpemVfdCBjb3VudCxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI4MDpcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqbWFza3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyODEte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMjgyOlxcdHZtYV9mbGFnc190IGZsYWdzID0gRU1QVFlfVk1BX0ZMQUdTO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMjgzLVxcdHNpemVfdCBpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEyOTAtLypcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTI5MTogKiBDb21iaW5lIHByZS1jb21wdXRlZCB2bWFfZmxhZ3NfdCBtYXNrcyBpbnRvIG9uZSB2YWx1ZSwgZS5nLjpcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5Mi0gKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxMjkzOiAqIHZtYV9mbGFnc190IGZsYWdzID0gbWtfdm1hX2ZsYWdzX2Zyb21fbWFza3MoVk1BX1VGRkRfV1AsIFZNQV9VRkZEX01JTk9SKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTI5NC0gKlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDAtXFx0X19ta192bWFfZmxhZ3NfZnJvbV9tYXNrcyhDT1VOVF9BUkdTKF9fVkFfQVJHU19fKSxcXHRcXHRcXFxcXFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMDE6XFx0XFx0KGNvbnN0IHZtYV9mbGFnc190IFtdKXtfX1ZBX0FSR1NfX30pXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDItXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzMDMtLyogQ2xlYXIgYWxsIG9mIHRoZSB0by1jbGVhciBmbGFncyBpbiBmbGFncywgbm9uLWF0b21pY2FsbHkuICovXFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMDQ6c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIHZtYV9mbGFnc19jbGVhcl9tYXNrKHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMwNTpcXHRcXHR2bWFfZmxhZ3NfdCB0b19jbGVhcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMwNi17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNC0gKi9cXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMyNTpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZtYV9mbGFnc190IHZtYV9mbGFnc19kaWZmX3BhaXIoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxMzI2OlxcdFxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFnc19vdGhlcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTMyNy17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzMjg6XFx0dm1hX2ZsYWdzX3QgZHN0O1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMzI5LVxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgKmJpdG1hcF9vdGhlciA9IGZsYWdzX290aGVyLVxcdTAwM2VfX3ZtYV9mbGFncztcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xMzM3LS8qIERldGVybWluZSBpZiBmbGFncyBhbmQgZmxhZ3Nfb3RoZXIgaGF2ZSBwcmVjaXNlbHkgdGhlIHNhbWUgZmxhZ3Mgc2V0LiAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMzM4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9wYWlyKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTMzOTpcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCB2bWFfZmxhZ3NfdCAqZmxhZ3Nfb3RoZXIpXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDAte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTEzNDctLyogRGV0ZXJtaW5lIGlmIGZsYWdzIGFuZCBmbGFnc19vdGhlciBoYXZlIHByZWNpc2VseSB0aGUgc2FtZSBmbGFncyBzZXQuICAqL1xcbmluY2x1ZGUvbGludXgvbW0uaDoxMzQ4OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3Nfc2FtZV9tYXNrKGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTM0OTpcXHRcXHRcXHRcXHRcXHRcXHR2bWFfZmxhZ3NfdCBmbGFnc19vdGhlcilcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM1MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTM3MD1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX3Rlc3QoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3Mi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzNzM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzLCBiaXQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xMzc0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xMzc3PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfdGVzdF9hbnlfbWFzayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTM3ODpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTM3OS17XFxuaW5jbHVkZS9saW51eC9tbS5oOjEzODA6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FueV9tYXNrKFxcdTAwMjZ2bWEtXFx1MDAzZWZsYWdzLCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTEzODEtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTEzOTk9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV90ZXN0X2FsbF9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDAwOlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDAxLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQwMjpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsX21hc2soXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MsIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQwMy19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQxMy0vKlxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDE0OiAqIEhlbHBlciB0byB0ZXN0IHRoYXQgYSBmbGFnIG1hc2sgb2YgdHlwZSB2bWFfZmxhZ3NfdCBoYXMgYSBTSU5HTEUgZmxhZyBzZXRcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQxNS0gKiAocmV0dXJuaW5nIGZhbHNlIGlmIGZsYWdtYXNrIGhhcyBubyBmbGFncyBzZXQpLlxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE0MjU9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sXFxuaW5jbHVkZS9saW51eC9tbS5oOjE0MjY6dm1hX3Rlc3Rfc2luZ2xlX21hc2soY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHZtYV9mbGFnc190IGZsYWdtYXNrKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDI3LXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQyODpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soXFx1MDAyNnZtYS1cXHUwMDNlZmxhZ3MsIGZsYWdtYXNrKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQyOS19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQzNz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX3NldF9mbGFnc19tYXNrKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNDM4OlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNDM5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNDU2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTQ1NzpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTQ1OC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTQ3Nj1zdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgdm1hX2Rlc2NfdGVzdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTE0Nzgte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxNDc5OlxcdHJldHVybiB2bWFfZmxhZ3NfdGVzdChcXHUwMDI2ZGVzYy1cXHUwMDNldm1hX2ZsYWdzLCBiaXQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0xNDgwLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNDgzPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZGVzY190ZXN0X2FueV9tYXNrKGNvbnN0IHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXFxuaW5jbHVkZS9saW51eC9tbS5oOjE0ODQ6XFx0XFx0dm1hX2ZsYWdzX3QgZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTE0ODUte1xcbmluY2x1ZGUvbGludXgvbW0uaDoxNDg2OlxcdHJldHVybiB2bWFfZmxhZ3NfdGVzdF9hbnlfbWFzayhcXHUwMDI2ZGVzYy1cXHUwMDNldm1hX2ZsYWdzLCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTE0ODctfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTE1MDA9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHZtYV9kZXNjX3Rlc3RfYWxsX21hc2soY29uc3Qgc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUwMTpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwMi17XFxuaW5jbHVkZS9saW51eC9tbS5oOjE1MDM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0X2FsbF9tYXNrKFxcdTAwMjZkZXNjLVxcdTAwM2V2bWFfZmxhZ3MsIGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUwNC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTUxNj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2Rlc2Nfc2V0X2ZsYWdzX21hc2soc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTUxNzpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTUxOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9MTUzMz1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2Rlc2NfY2xlYXJfZmxhZ3NfbWFzayhzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbmluY2x1ZGUvbGludXgvbW0uaDoxNTM0OlxcdFxcdHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTM1LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNTc4PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfaW5pdGlhbF9zdGFjayhjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTg4LVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNTg5OnN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfZmxhZ3NfY2FuX2dyb3coY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNTkwLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MTpcXHRpZiAodm1hX2ZsYWdzX3Rlc3Rfc2luZ2xlX21hc2soZmxhZ3MsIFZNQV9HUk9XU1VQKSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5Mi1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTU5MzpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoZmxhZ3MsIFZNQV9HUk9XU0RPV05fQklUKSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtMTU5NC1cXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0xNjI3PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfaXNfYWNjZXNzaWJsZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMxLVxcbmluY2x1ZGUvbGludXgvbW0uaDoxNjMyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19zaGFyZWRfbWF5d3JpdGUoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0xNjMzLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MTYzNDpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYWxsKGZsYWdzLCBWTUFfU0hBUkVEX0JJVCwgVk1BX01BWVdSSVRFX0JJVCk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTE2MzUtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTIyNzk9c3RhdGljIGlubGluZSBib29sIHZtYV9kZXNjX2lzX2Nvd19tYXBwaW5nKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpXFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODAte1xcbmluY2x1ZGUvbGludXgvbW0uaDoyMjgxOlxcdGNvbnN0IHZtYV9mbGFnc190ICpmbGFncyA9IFxcdTAwMjZkZXNjLVxcdTAwM2V2bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbS5oLTIyODItXFxuaW5jbHVkZS9saW51eC9tbS5oOjIyODM6XFx0cmV0dXJuIHZtYV9mbGFnc190ZXN0KGZsYWdzLCBWTUFfTUFZV1JJVEVfQklUKSBcXHUwMDI2XFx1MDAyNlxcbmluY2x1ZGUvbGludXgvbW0uaDoyMjg0OlxcdFxcdCF2bWFfZmxhZ3NfdGVzdChmbGFncywgVk1BX1NIQVJFRF9CSVQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMjg1LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD0yMjg4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19ub21tdV9zaGFyZWRfbWFwcGluZyh2bV9mbGFnc190IGZsYWdzKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oLTIzMDAtXFxuaW5jbHVkZS9saW51eC9tbS5oOjIzMDE6c3RhdGljIGlubGluZSBib29sIGlzX25vbW11X3NoYXJlZF92bWFfZmxhZ3MoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC0yMzAyLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6MjMwMzpcXHRyZXR1cm4gdm1hX2ZsYWdzX3Rlc3RfYW55KGZsYWdzLCBWTUFfTUFZU0hBUkVfQklULCBWTUFfTUFZT1ZFUkxBWV9CSVQpO1xcbmluY2x1ZGUvbGludXgvbW0uaC0yMzA0LX1cXG4tLVxcbmluY2x1ZGUvbGludXgvbW0uaD00MTk3PV9fZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXFxuaW5jbHVkZS9saW51eC9tbS5oLTQxOTgtXFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxuaW5jbHVkZS9saW51eC9tbS5oOjQxOTk6XFx0XFx0ICAgIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMDAtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDIwOT11bnNpZ25lZCBsb25nIGRvX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDIxMC1cXHR1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwcm90LCB1bnNpZ25lZCBsb25nIGZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW0uaDo0MjExOlxcdHZtYV9mbGFnc190IHZtYV9mbGFncywgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyAqcG9wdWxhdGUsXFxuaW5jbHVkZS9saW51eC9tbS5oLTQyMTItXFx0c3RydWN0IGxpc3RfaGVhZCAqdWYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MDg9cGdwcm90X3Qgdm1fZ2V0X3BhZ2VfcHJvdCh2bV9mbGFnc190IHZtX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYwOS1cXG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMDpzdGF0aWMgaW5saW5lIHBncHJvdF90IHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW0uaC00NjExLXtcXG5pbmNsdWRlL2xpbnV4L21tLmg6NDYxMjpcXHRjb25zdCB2bV9mbGFnc190IHZtX2ZsYWdzID0gdm1hX2ZsYWdzX3RvX2xlZ2FjeSh2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvbW0uaC00NjEzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MTc9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZ2V0X3BhZ2VfcHJvdChjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYxOC17XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ2MTk6XFx0cmV0dXJuIHZtYV9mbGFnc190b19wYWdlX3Byb3Qodm1hLVxcdTAwM2VmbGFncyk7XFxuaW5jbHVkZS9saW51eC9tbS5oLTQ2MjAtfVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbS5oPTQ2MjQ9c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bV9nZXRfcGFnZV9wcm90KHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyNy19XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ2Mjg6c3RhdGljIGlubGluZSBwZ3Byb3RfdCB2bWFfZmxhZ3NfdG9fcGFnZV9wcm90KHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDYyOS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9ODY5PXR5cGVkZWYgc3RydWN0IHtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODcwLVxcdERFQ0xBUkVfQklUTUFQKF9fdm1hX2ZsYWdzLCBOVU1fVk1BX0ZMQUdfQklUUyk7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjg3MTp9IHZtYV9mbGFnc190O1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzItXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjg3MzojZGVmaW5lIEVNUFRZX1ZNQV9GTEFHUyAoKHZtYV9mbGFnc190KXsgfSlcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtODc0LVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04NzUtLyogQXJlIG5vIGZsYWdzIHNldCBpbiB0aGUgc3BlY2lmaWVkIFZNQSBmbGFncz8gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6ODc2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCB2bWFfZmxhZ3NfZW1wdHkoY29uc3Qgdm1hX2ZsYWdzX3QgKmZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04Nzcte1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oPTg5MD1zdHJ1Y3Qgdm1fYXJlYV9kZXNjIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC04OTktXFx0c3RydWN0IGZpbGUgKnZtX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjkwMDpcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTkwMS1cXHRwZ3Byb3RfdCBwYWdlX3Byb3Q7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9OTIzPXN0cnVjdCB2bV9hcmVhX3N0cnVjdCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTQ5LVxcdFxcdGNvbnN0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oOjk1MDpcXHRcXHR2bWFfZmxhZ3NfdCBmbGFncztcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtOTUxLVxcdH07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA2OC0vKiBDbGVhcnMgYWxsIGJpdHMgaW4gdGhlIFZNQSBmbGFncyBiaXRtYXAsIG5vbi1hdG9taWNhbGx5LiAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDY5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3NfY2xlYXJfYWxsKHZtYV9mbGFnc190ICpmbGFncylcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3MC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3NC0vKlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDc1OiAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBhIHZtYV9mbGFnc190IHZhbHVlIHRvIGEgbGVnYWN5IHZtX2ZsYWdzX3RcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTA3Ni0gKiB2YWx1ZS4gVGhpcyBpcyBvbmx5IHZhbGlkIGlmIHRoZSBpbnB1dCBmbGFncyB2YWx1ZSBjYW4gYmUgZXhwcmVzc2VkIGluIGFcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDgwLSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDgxOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1fZmxhZ3NfdCB2bWFfZmxhZ3NfdG9fbGVnYWN5KHZtYV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDgyLXtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkxLSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMDkyOnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfb3ZlcndyaXRlX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMDkzLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMC0vKlxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTAxOiAqIEhlbHBlciBmdW5jdGlvbiB3aGljaCBjb252ZXJ0cyBhIGxlZ2FjeSB2bV9mbGFnc190IHZhbHVlIHRvIGEgdm1hX2ZsYWdzX3RcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEwMi0gKiB2YWx1ZS5cXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA1LSAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTA2OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm1hX2ZsYWdzX3QgbGVnYWN5X3RvX3ZtYV9mbGFncyh2bV9mbGFnc190IGZsYWdzKVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTA3LXtcXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEwODpcXHR2bWFfZmxhZ3NfdCByZXQgPSBFTVBUWV9WTUFfRkxBR1M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTExMDktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTExOS0gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEyMDpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX292ZXJ3cml0ZV93b3JkX29uY2Uodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTIxLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEyOC0vKiBVcGRhdGUgdGhlIGZpcnN0IHN5c3RlbSB3b3JkIG9mIFZNQSBmbGFncyBzZXR0aW5nIGJpdHMsIG5vbi1hdG9taWNhbGx5LiAqL1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMTI5OnN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB2bWFfZmxhZ3Nfc2V0X3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTMwLVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmgtMTEzNy0vKiBVcGRhdGUgdGhlIGZpcnN0IHN5c3RlbSB3b3JkIG9mIFZNQSBmbGFncyBjbGVhcmluZyBiaXRzLCBub24tYXRvbWljYWxseS4gKi9cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg6MTEzODpzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgdm1hX2ZsYWdzX2NsZWFyX3dvcmQodm1hX2ZsYWdzX3QgKmZsYWdzLFxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMTM5LVxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX3R5cGVzLmg9MTE2Mz1zdHJ1Y3QgbW1fc3RydWN0IHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaC0xMjc5LVxcdFxcdFxcdHZtX2ZsYWdzX3QgZGVmX2ZsYWdzO1xcbmluY2x1ZGUvbGludXgvbW1fdHlwZXMuaDoxMjgwOlxcdFxcdFxcdHZtYV9mbGFnc190IGRlZl92bWFfZmxhZ3M7XFxuaW5jbHVkZS9saW51eC9tbV90eXBlcy5oLTEyODEtXFx0XFx0fTtcXG4tLVxcbmluY2x1ZGUvbGludXgvcm1hcC5oPTg0NT1pbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKiwgaW50IGlzX2xvY2tlZCxcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaDo4NDY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3JtYXAuaC04NDctXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3JtYXAuaD05Nzc9c3RhdGljIGlubGluZSBpbnQgZm9saW9fcmVmZXJlbmNlZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBpbnQgaXNfbG9ja2VkLFxcbmluY2x1ZGUvbGludXgvcm1hcC5oOjk3ODpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuaW5jbHVkZS9saW51eC9ybWFwLmgtOTc5LXtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaD0xOTY9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCxcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMTk3LVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjE5ODpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzLCB2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbW0uaC0xOTktXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmg9MjAxPWdlbmVyaWNfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjAyLVxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwMzpcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwNC11bnNpZ25lZCBsb25nXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oPTIwNT1nZW5lcmljX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL21tLmgtMjA2LVxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oOjIwNzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtYV9mbGFnc190IHZtYV9mbGFncyk7XFxuaW5jbHVkZS9saW51eC9zY2hlZC9tbS5oLTIwOC0jZWxzZVxcbi0tXFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oPTEwMz1leHRlcm4gaW50IHNobWVtX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpO1xcbmluY2x1ZGUvbGludXgvc2htZW1fZnMuaDoxMDQ6c3RydWN0IGZpbGUgKnNobWVtX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgbG9mZl90IHNpemUsIHZtYV9mbGFnc190IGZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTA1OnN0cnVjdCBmaWxlICpzaG1lbV9rZXJuZWxfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBsb2ZmX3Qgc2l6ZSwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKTtcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmgtMTA2LWV4dGVybiBzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cF93aXRoX21udChzdHJ1Y3QgdmZzbW91bnQgKm1udCxcXG5pbmNsdWRlL2xpbnV4L3NobWVtX2ZzLmg6MTA3OlxcdFxcdGNvbnN0IGNoYXIgKm5hbWUsIGxvZmZfdCBzaXplLCB2bWFfZmxhZ3NfdCBmbGFncyk7XFxuaW5jbHVkZS9saW51eC9zaG1lbV9mcy5oLTEwOC1pbnQgc2htZW1femVyb19zZXR1cChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuLS1cXG5pcGMvc2htLmM9NzA0PXN0YXRpYyBpbnQgbmV3c2VnKHN0cnVjdCBpcGNfbmFtZXNwYWNlICpucywgc3RydWN0IGlwY19wYXJhbXMgKnBhcmFtcylcXG4tLVxcbmlwYy9zaG0uYy03MTItXFx0Y29uc3QgYm9vbCBoYXNfbm9fcmVzZXJ2ZSA9IHNobWZsZyBcXHUwMDI2IFNITV9OT1JFU0VSVkU7XFxuaXBjL3NobS5jOjcxMzpcXHR2bWFfZmxhZ3NfdCBhY2N0ZmxhZyA9IEVNUFRZX1ZNQV9GTEFHUztcXG5pcGMvc2htLmMtNzE0LVxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTk0PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fdGhwX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMTk2LVxcdFxcdGxvZmZfdCBvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG5tbS9odWdlX21lbW9yeS5jOjExOTc6XFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE5OC17XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTEyNDA9dW5zaWduZWQgbG9uZyB0aHBfZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3Moc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9odWdlX21lbW9yeS5jLTEyNDEtXFx0XFx0dW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsXFxubW0vaHVnZV9tZW1vcnkuYzoxMjQyOlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5tbS9odWdlX21lbW9yeS5jLTEyNDMte1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2NzI9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02Njc0LVxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL2h1Z2V0bGIuYzo2Njc1OlxcdFxcdHZtYV9mbGFnc190IHZtYV9mbGFncylcXG5tbS9odWdldGxiLmMtNjY3Ni17XFxuLS1cXG5tbS9odWdldGxiLmMtNjcwMS1cXHQgKi9cXG5tbS9odWdldGxiLmM6NjcwMjpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX05PUkVTRVJWRV9CSVQpKVxcbm1tL2h1Z2V0bGIuYy02NzAzLVxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vaW50ZXJuYWwuaD0xNTczPXN0YXRpYyBpbmxpbmUgaW50IGdldF9zeXNjdGxfbWF4X21hcF9jb3VudCh2b2lkKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xNTc3LVxcbm1tL2ludGVybmFsLmg6MTU3ODpib29sIG1heV9leHBhbmRfdm0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MsXFxubW0vaW50ZXJuYWwuaC0xNTc5LVxcdFxcdCAgIHVuc2lnbmVkIGxvbmcgbnBhZ2VzKTtcXG4tLVxcbm1tL2tzbS5jPTY5OD1zdGF0aWMgaW50IGJyZWFrX2tzbShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0va3NtLmMtNzQzLVxcbm1tL2tzbS5jOjc0NDpzdGF0aWMgYm9vbCBrc21fY29tcGF0aWJsZShjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxcbm1tL2tzbS5jLTc0NS17XFxubW0va3NtLmMtNzQ2LVxcdC8qIEp1c3QgaWdub3JlIHRoZSBhZHZpY2UuICovXFxubW0va3NtLmM6NzQ3OlxcdGlmICh2bWFfZmxhZ3NfdGVzdF9hbnkoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NIQVJFRF9CSVQsIFZNQV9NQVlTSEFSRV9CSVQsXFxubW0va3NtLmMtNzQ4LVxcdFxcdFxcdCAgICAgICBWTUFfSFVHRVRMQl9CSVQpKVxcbm1tL2tzbS5jLTc0OS1cXHRcXHRyZXR1cm4gZmFsc2U7XFxubW0va3NtLmM6NzUwOlxcdGlmICh2bWFfZmxhZ3NfdGVzdF9zaW5nbGVfbWFzayhcXHUwMDI2dm1hX2ZsYWdzLCBWTUFfRFJPUFBBQkxFKSlcXG5tbS9rc20uYy03NTEtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbm1tL2tzbS5jOjc1MjpcXHRpZiAodm1hX2ZsYWdzX3Rlc3RfYW55X21hc2soXFx1MDAyNnZtYV9mbGFncywgVk1BX1NQRUNJQUxfRkxBR1MpKVxcbm1tL2tzbS5jLTc1My1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5tbS9rc20uYy03NTYtI2lmZGVmIFZNX1NBT1xcbm1tL2tzbS5jOjc1NzpcXHRpZiAodm1hX2ZsYWdzX3Rlc3QoXFx1MDAyNnZtYV9mbGFncywgVk1BX1NBT19CSVQpKVxcblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNTowNS4xMDc4MzI1MTdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjQ0MjkyOTcxMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGB2bWFfZmxhZ3NfdGAgaXMgdGhlIGtleS4gSXQncyBhIHN0cnVjdHVyZSwgZXNzZW50aWFsbHkgYSBiaXRtYXAsIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvbW1fdHlwZXMuaGAuIFRoaXMgcGF0Y2ggaXMgcmVwbGFjaW5nIGB2bV9mbGFnc190YCB3aXRoIGl0IGluIGBtbS92bXNjYW4uY2AgYW5kIGBtbS9ybWFwLmNgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLlxuXG5Ob3csIGl0J3Mgbm90IGp1c3QgYSBzdHJhaWdodCBzd2FwLiBUaGUgcGF0Y2ggaXMgYWxzbyBpbnRyb2R1Y2luZyBgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFnc2AgYXMgYSBwYXJhbWV0ZXIgdG8gYGxydV9nZW5fc2V0X3JlZnNgIGFuZCBgZm9saW9fdXBkYXRlX2dlbmAuICBJdCdzIGFkZGluZyBhIG5ldyBpbmxpbmUgZnVuY3Rpb24sIGBpc19leGVjX2ZpbGVfZm9saW9gLCB3aGljaCBjaGVja3MgaWYgYSBmb2xpbyBpcyBib3RoIGZpbGUtYmFja2VkIGFuZCBleGVjdXRhYmxlLiAgVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGxvZ2ljIGlzOlxuYGBgY1xuc3RhdGljIGlubGluZSBib29sIGlzX2V4ZWNfZmlsZV9mb2xpbyhjb25zdCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuXHRcdGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG57XG5cdHJldHVybiB2bWFfZmxhZ3NfdGVzdCh2bWFfZmxhZ3MsIFZNQV9FWEVDX0JJVCkgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbn1cbmBgYFxuXG5UaGUgY3J1Y2lhbCBwYXJ0IGlzIGhvdyB0aGlzIG5ldyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBJdCdzIGJlaW5nIGludGVncmF0ZWQgaW50byBgbHJ1X2dlbl9zZXRfcmVmc2AsIHdoaWNoIGlzIGNhbGxlZCBmcm9tIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHdhbGtfdXBkYXRlX2ZvbGlvYC4gTG9va2luZyBhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AsIHRoZSBwcmV2aW91cyBsb2dpYyB3YXMgYSBzaW1wbGUgYCh2bV9mbGFncyBcdTAwMjYgVk1fRVhFQykgXHUwMDI2XHUwMDI2IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKWAuIE5vdywgaXQncyBjYWxsaW5nIGBpc19leGVjX2ZpbGVfZm9saW9gLCBhbmQgaW1wb3J0YW50bHksIGl0IGFjdGl2YXRlcyB0aGVzZSBmb2xpb3MsIHdoaWNoIHdhc24ndCB0aGUgY2FzZSBlYXJsaWVyOlxuYGBgY1xuXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIFx1MDAyNnZtYV9mbGFncykpXG5cdFx0XHRyZXR1cm4gRk9MSU9SRUZfQUNUSVZBVEU7XG5gYGBcblxuSW4gYGxydV9nZW5fc2V0X3JlZnNgLCB3ZSBzZWUgdGhlIHNhbWUgcHJpbmNpcGxlIC0gYWN0aXZhdGUgZmlsZS1iYWNrZWQsIGV4ZWN1dGFibGUgZm9saW9zOlxuYGBgY1xuc3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxue1xuXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cblx0aWYgKCFmb2xpb190ZXN0X3JlZmVyZW5jZWQoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xuXHRcdC8qIEFjdGl2YXRlIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIGZpcnN0IHVzYWdlLiAqL1xuXHRcdGlmIChpc19leGVjX2ZpbGVfZm9saW8oZm9saW8sIHZtYV9mbGFncykpIHtcblx0XHRcdHNldF9tYXNrX2JpdHMoXHUwMDI2Zm9saW8tXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cblx0XHRzZXRfbWFza19iaXRzKFx1MDAyNmZvbGlvLVx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG5gYGBcblxuU28sIHRoaXMgKmlzKiBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBhY3RpdmF0ZXMgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgKGFmdGVyIGZpcnN0IHVzYWdlKSBpbiByZWNsYWltIHBhdGhzLiBUaGUgY29tbWl0IG1lc3NhZ2UgbWVudGlvbnMgdGhpcyBpcyBhIHBhdGNoIGJlaW5nIGFwcGxpZWQgZnJvbSBhIGZ1enppbmcgY2x1c3Rlciwgd2hpY2ggc3VnZ2VzdHMgaXQgdGFyZ2V0cyBhIHN0YWJpbGl0eSBpc3N1ZSwgcHJvYmFibHkgaW52b2x2aW5nIHRoZSBMUlUgYWxnb3JpdGhtLiAgTWVtb3J5IHJlY2xhaW0gaXMgYSBjcml0aWNhbCBwYXJ0IG9mIHRoZSBrZXJuZWwsIGFuZCB0aGlzIHRvdWNoZXMgYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVIGxvZ2ljLCBhcyBzaG93biBmcm9tIHRoZSBtb2RpZmllZCBmdW5jdGlvbnM6IGBscnVfZ2VuX3NldF9yZWZzYCwgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgLiAgU2luY2UgYHNocmlua19hY3RpdmVfbGlzdGAsIGZvciBleGFtcGxlLCBpcyB0aGVyZSwgdGhpcyB0b3VjaGVzIGJvdGggTUdMUlUgYW5kIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0IHJlY2xhaW0uIFdlIHNob3VsZCBiZSBhYmxlIHRvIGdldCB0aGVyZSBieSBydW5uaW5nIG1lbW9yeSBwcmVzc3VyZSwgc28geWVzLCB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLlxuXG5HaXZlbiB0aGF0IGl0IG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50LCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCB0aGUgY29tbWl0IG1lbnRpb25zIFwic3l6LWNsdXN0ZXJcIiBtZWFucyB0aGVyZSdzIHByb2JhYmx5IGEgcmVhbCBidWcuIEknbGwgbmVlZCB0byBjaGVjayBpZiBNR0xSVSAoYENPTkZJR19MUlVfR0VOYCkgaXMgZW5hYmxlZCBvciBuZWVkcyBhIGNvbmZpZywgYnV0IEknbSBleHBlY3RpbmcgdGhpcyB0byBiZSBhbiBhY3RpdmUgcGFydCBvZiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYzNSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMFQxNTozNToxNy41NTA3NjQ3NDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgwNTc1NDM0MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzODk9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xMzk5LSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDAwOmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDAxLVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MDgtXFxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTAtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTQtXFxubW0vS2NvbmZpZzoxNDE1OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDE2LVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyMy1cXG5tbS9LY29uZmlnOjE0MjQ6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI1LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjAuMzU2NTI4NDExWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQxNTUzNjk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIGBMUlVfR0VOYC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucyB1c3VhbGx5IHJlc2lkZSwgYW5kIGl0J3MgaGlnaGx5IGxpa2VseSB0aGF0IGEgZmVhdHVyZSBsaWtlIGBMUlVfR0VOYCB3aWxsIGhhdmUgaXRzIGRlZmluaW5nIG9wdGlvbnMsIGRlcGVuZGVuY2llcywgYW5kIGhlbHAgdGV4dCB0aGVyZS4gSSdtIGdvaW5nIHN0cmFpZ2h0IGZvciB0aGUgc291cmNlIHRvIGdldCB0aGUgZGVmaW5pdGl2ZSBpbmZvcm1hdGlvbiBvbiB0aGlzLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgYG1tL0tjb25maWdgIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzA0LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjMuNzcyMDY3OTI1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkwNjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTM5OSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTM5OTpcXHQjIG11bHRpLWdlbiBMUlUge1xcbjE0MDA6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDAxOlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwMjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDM6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDQ6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwNTpcXHRcXHRoZWxwXFxuMTQwNjpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MDc6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQwODpcXHRcXG4xNDA5OlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDEwOlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTE6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxMjpcXHRcXHRoZWxwXFxuMTQxMzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE0OlxcdFxcbjE0MTU6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDE2OlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDE3OlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTg6XFx0XFx0aGVscFxcbjE0MTk6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG4xNDIwOlxcdFxcdCAgZnJvbSBldmljdGVkIGdlbmVyYXRpb25zIGZvciBkZWJ1Z2dpbmcgcHVycG9zZS5cXG4xNDIxOlxcdFxcbjE0MjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cXG4xNDIzOlxcdFxcbjE0MjQ6XFx0Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxuMTQyNTpcXHRcXHRkZWZfYm9vbCB5XFxuMTQyNjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU4gXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXFxuMTQyNzpcXHQjIH1cXG4xNDI4OlxcdFxcbjE0Mjk6XFx0Y29uZmlnIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLXFxuMTQzMDpcXHQgICAgICAgZGVmX2Jvb2wgblxcbjE0MzE6XFx0XFxuMTQzMjpcXHRjb25maWcgUEVSX1ZNQV9MT0NLXFxuMTQzMzpcXHRcXHRkZWZfYm9vbCB5XFxuMTQzNDpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfUEVSX1ZNQV9MT0NLIFxcdTAwMjZcXHUwMDI2IE1NVSBcXHUwMDI2XFx1MDAyNiBTTVBcXG4xNDM1OlxcdFxcdGhlbHBcXG4xNDM2OlxcdFxcdCAgQWxsb3cgcGVyLXZtYSBsb2NraW5nIGR1cmluZyBwYWdlIGZhdWx0IGhhbmRsaW5nLlxcbjE0Mzc6XFx0XFxuMTQzODpcXHRcXHQgIFRoaXMgZmVhdHVyZSBhbGxvd3MgbG9ja2luZyBlYWNoIHZpcnR1YWwgbWVtb3J5IGFyZWEgc2VwYXJhdGVseSB3aGVuXFxuMTQzOTpcXHRcXHQgIGhhbmRsaW5nIHBhZ2UgZmF1bHRzIGluc3RlYWQgb2YgdGFraW5nIG1tYXBfbG9jay5cXG4xNDQwOlxcdFxcbjE0NDE6XFx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXFxuMTQ0MjpcXHRcXHRib29sXFxuMTQ0MzpcXHRcXHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXFxuMTQ0NDpcXHRcXG4xNDQ1OlxcdGNvbmZpZyBJT01NVV9NTV9EQVRBXFxuMTQ0NjpcXHRcXHRib29sXFxuMTQ0NzpcXHRcXG4xNDQ4OlxcdGNvbmZpZyBFWEVDTUVNXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIwVDE1OjM1OjIzLjc3MjI2MTM4NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzOTA3NTA0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBMUlVfR0VOIGZvciBQcm9wZXIgVGVzdGluZyoqXG5cbk9rYXksIHNvIHRvIHJlYWxseSBwdXQgdGhpcyBuZXcgYExSVV9HRU5gIGZ1bmN0aW9uYWxpdHkgdGhyb3VnaCBpdHMgcGFjZXMsIEkgbmVlZCB0byBlbmFibGUgYm90aCBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGF0IHNlZW1zIG9idmlvdXMuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggdG91Y2hlcyBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgYW5kIGBzaHJpbmtfYWN0aXZlX2xpc3RgLCB3aGljaCwgYXMgSSByZWNhbGwsIGFyZSBhbHNvIGZ1bmRhbWVudGFsIGNvbXBvbmVudHMgb2YgdGhlIHN0YW5kYXJkIExSVSByZWNsYWltIHByb2Nlc3MuIEhtbSwgdGhpcyBpcyBpbnRlcmVzdGluZy4gSSdtIHNlZWluZyB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBnZXRzIGNhbGxlZCB3aXRoaW4gYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLiBUaGF0IHdvdWxkIG1lYW4gdGhhdCB0aGUgbmV3IGBMUlVfR0VOYCBtZWNoYW5pc20gYmxlZWRzIGludG8gdGhlIHN0YW5kYXJkIExSVS4gV2FpdCwgbm8sIGhhbmcgb24sIHRoZSBkZWZpbml0aW9uIG9mIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBjb25kaXRpb25hbCwgZGVwZW5kaW5nIG9uIHRoZSBgQ09ORklHX0xSVV9HRU5gIHNldHRpbmcsIHNvIGl0ICpzaG91bGRuJ3QqIGludGVyZmVyZSB3aGVuIGBMUlVfR0VOYCBpc24ndCBhY3RpdmUuIEp1c3Qgd2FudCB0byBjb25maXJtIHRoYXQgaW4gbXkgaGVhZC4gTGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBpbnRlcmFjdGlvbiBwb2ludCBpbiBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDg0MS4gSXQncyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aGVuIHlvdSdyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNTY5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjguMTYzMDE0NjM3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA4MzA6XFx0XFxuIDgzMTpcXHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xcbiA4MzI6XFx0XFx0Rk9MSU9SRUZfUkVDTEFJTSxcXG4gODMzOlxcdFxcdEZPTElPUkVGX0tFRVAsXFxuIDgzNDpcXHRcXHRGT0xJT1JFRl9BQ1RJVkFURSxcXG4gODM1OlxcdH07XFxuIDgzNjpcXHRcXG4gODM3OlxcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbiA4Mzg6XFx0LypcXG4gODM5OlxcdCAqIE9ubHkgdXNlZCBvbiBhIG1hcHBlZCBmb2xpbyBpbiB0aGUgZXZpY3Rpb24gKHJtYXAgd2FsaykgcGF0aCwgd2hlcmUgcHJvbW90aW9uXFxuIDg0MDpcXHQgKiBuZWVkcyB0byBiZSBkb25lIGJ5IHRha2luZyB0aGUgZm9saW8gb2ZmIHRoZSBMUlUgbGlzdCBhbmQgdGhlbiBhZGRpbmcgaXQgYmFja1xcbiA4NDE6XFx0ICogd2l0aCBQR19hY3RpdmUgc2V0LiBJbiBjb250cmFzdCwgdGhlIGFnaW5nIChwYWdlIHRhYmxlIHdhbGspIHBhdGggdXNlc1xcbiA4NDI6XFx0ICogZm9saW9fdXBkYXRlX2dlbigpLlxcbiA4NDM6XFx0ICovXFxuIDg0NDpcXHRzdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXFxuIDg0NTpcXHR7XFxuIDg0NjpcXHRcXHQvKiBzZWUgdGhlIGNvbW1lbnQgb24gTFJVX1JFRlNfRkxBR1MgKi9cXG4gODQ3OlxcdFxcdGlmICghZm9saW9fdGVzdF9yZWZlcmVuY2VkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF93b3JraW5nc2V0KGZvbGlvKSkge1xcbiA4NDg6XFx0XFx0XFx0LyogQWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgZmlyc3QgdXNhZ2UuICovXFxuIDg0OTpcXHRcXHRcXHRpZiAoaXNfZXhlY19maWxlX2ZvbGlvKGZvbGlvLCB2bWFfZmxhZ3MpKSB7XFxuIDg1MDpcXHRcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuIDg1MTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gODUyOlxcdFxcdFxcdH1cXG4gODUzOlxcdFxcbiA4NTQ6XFx0XFx0XFx0c2V0X21hc2tfYml0cyhcXHUwMDI2Zm9saW8tXFx1MDAzZWZsYWdzLmYsIExSVV9SRUZTX01BU0ssIEJJVChQR19yZWZlcmVuY2VkKSk7XFxuIDg1NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDg1NjpcXHRcXHR9XFxuIDg1NzpcXHRcXG4gODU4OlxcdFxcdC8qIFByb21vdGUgb24gc2Vjb25kIGFjY2VzcyAqL1xcbiA4NTk6XFx0XFx0aWYgKGZvbGlvX2xydV9yZWZzKGZvbGlvKSBcXHUwMDNlIDEpXFxuIDg2MDpcXHRcXHRcXHRzZXRfbWFza19iaXRzKFxcdTAwMjZmb2xpby1cXHUwMDNlZmxhZ3MuZiwgTFJVX1JFRlNfRkxBR1MsIEJJVChQR193b3JraW5nc2V0KSk7XFxuIDg2MTpcXHRcXHRlbHNlXFxuIDg2MjpcXHRcXHRcXHRmb2xpb19tYXJrX2FjY2Vzc2VkKGZvbGlvKTtcXG4gODYzOlxcdFxcdHJldHVybiB0cnVlO1xcbiA4NjQ6XFx0fVxcbiA4NjU6XFx0I2Vsc2VcXG4gODY2OlxcdHN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4gODY3OlxcdHtcXG4gODY4OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gODY5OlxcdH1cXG4gODcwOlxcdCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbiA4NzE6XFx0XFxuIDg3MjpcXHRzdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4gODczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIDg3NDpcXHR7XFxuIDg3NTpcXHRcXHRpbnQgcmVmZXJlbmNlZF9wdGVzLCByZWZlcmVuY2VkX2ZvbGlvO1xcbiA4NzY6XFx0XFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzO1xcbiA4Nzc6XFx0XFxuIDg3ODpcXHRcXHRyZWZlcmVuY2VkX3B0ZXMgPSBmb2xpb19yZWZlcmVuY2VkKGZvbGlvLCAxLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsXFxuIDg3OTpcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2dm1hX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MjguMTYzNDQ5Mjc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwODk2MjcwMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiB0aGlzIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpZ2dpbmcgaW50byB0aGlzIHBhdGNoLiBJIHNlZSB0aGF0IGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHBhcnQgb2YgYENPTkZJR19MUlVfR0VOYCwgd2hpY2ggaXMgTUdMUlUsIGJ1dCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgaXMgYWxzbyB1c2VkIGluIHN0YW5kYXJkIExSVSByZWNsYWltLiBUaGF0J3MgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIFRoZW4gSSBzZWUgdGhhdCBgZm9saW9fY2hlY2tfcmVmZXJlbmNlc2AgZGlyZWN0bHkgY2FsbHMgYGlzX2V4ZWNfZmlsZV9mb2xpb2AsIGFuZCB0aGF0IGBzaHJpbmtfYWN0aXZlX2xpc3RgICphbHNvKiB1dGlsaXplcyBgaXNfZXhlY19maWxlX2ZvbGlvYC4gU28sIHRoaXMgcGF0Y2ggaXNuJ3QganVzdCB0b3VjaGluZyBNR0xSVTsgaXQncyBnb3QgaW1wbGljYXRpb25zIGZvciB0aGUgc3RhbmRhcmQgTFJVIHJlY2xhaW0gcGF0aCBhcyB3ZWxsLiBIbW0sIGRlZmluaXRlbHkgc29tZXRoaW5nIHRvIHByaW9yaXRpemUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gSSd2ZSBnb3Q6IGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYHdhbGtfcHRlX3JhbmdlYCwgYHdhbGtfcG1kX3JhbmdlX2xvY2tlZGAsIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCwgYGZvbGlvX3JlZmVyZW5jZWRgLCBhbmQgYGZvbGlvX3JlZmVyZW5jZWRfb25lYC5cblxuV2FpdCwgbGV0J3MgcmVmaW5lIHRoaXMgbGlzdC4gYGZvbGlvX3JlZmVyZW5jZWRgIGFuZCBgZm9saW9fcmVmZXJlbmNlZF9vbmVgIGFyZSBpbiBgbW0vcm1hcC5jYCwgd2hpbGUgYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgIGFuZCBgc2hyaW5rX2FjdGl2ZV9saXN0YCBhcmUgaW4gYG1tL3Ztc2Nhbi5jYC4gVGhlbiB0aGUgTUdMUlUgY29kZTogYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgd2Fsa19wdGVfcmFuZ2VgLCBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYCwgYGxydV9nZW5fbG9va19hcm91bmRgIGFyZSBhbHNvIGluIGBtbS92bXNjYW4uY2AuXG5cbk9rYXksIGxldCdzIGNoZWNrIGZ1bmN0aW9uIHZpc2liaWxpdHkuIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAgYXJlIHN0YXRpYy4gYGZvbGlvX3JlZmVyZW5jZWRgIGlzIGV4cG9ydGVkL2dsb2JhbC4gYGZvbGlvX3VwZGF0ZV9nZW5gIGlzIHN0YXRpYy4gYHdhbGtfdXBkYXRlX2ZvbGlvYCBpcyBzdGF0aWMuIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBnbG9iYWwuXG5cblNvLCBmb3IgZnV6emluZywgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zLiBTaW5jZSBgRm9jdXNTeW1ib2xzYCBpcyBhYm91dCBmdW5jdGlvbnMgdG8gdGFyZ2V0LCBJIGNhbiBmdXp6IHRoZSBzdGF0aWMgb25lcyBpZiB0aGUgY29kZSBwYXRoIGlzIGhpdC5cblxuKiAgIGBmb2xpb19yZWZlcmVuY2VkYFxuKiAgIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYFxuKiAgIGBzaHJpbmtfYWN0aXZlX2xpc3RgXG4qICAgYGZvbGlvX3VwZGF0ZV9nZW5gXG4qICAgYHdhbGtfdXBkYXRlX2ZvbGlvYFxuKiAgIGBscnVfZ2VuX2xvb2tfYXJvdW5kYFxuKiAgIGB3YWxrX3B0ZV9yYW5nZWBcbiogICBgd2Fsa19wbWRfcmFuZ2VfbG9ja2VkYFxuXG5BcmUgdGhlc2UgaG90IHBhdGhzPyBNZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMgYXJlbid0IG5lY2Vzc2FyaWx5ICpob3QqLCB1bmxlc3MgdGhlcmUncyBtZW1vcnkgcHJlc3N1cmUuIEJ1dCBgZm9saW9fcmVmZXJlbmNlZGAgaXMgY2FsbGVkIGR1cmluZyByZWNsYWltLiBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkIGR1cmluZyBwYWdlIGZhdWx0IChmcm9tIGBkb19zZXRfcHRlYCBvciBzaW1pbGFyKSwgc28gZGVmaW5pdGVseSBjb3VsZCBiZSBmcmVxdWVudGx5IGhpdC4gTGV0IG1lIGRvdWJsZS1jaGVjayB3aGVyZSBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAgaXMgY2FsbGVkLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzk3LCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQ0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6MzkuMDU5NzIxOTg0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjM5NTI0OTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fbG9va19hcm91bmRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE4Nz1jYW4gaW5jdXIgdGhlIGhpZ2hlc3QgQ1BVIGNvc3QgaW4gdGhlIHJlY2xhaW0gcGF0aC5cXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTg4LVxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdDoxODk6YGBscnVfZ2VuX2xvb2tfYXJvdW5kKClgYCBleHBsb2l0cyBzcGF0aWFsIGxvY2FsaXR5IHRvIHJlZHVjZSB0aGVcXG5Eb2N1bWVudGF0aW9uL21tL211bHRpZ2VuX2xydS5yc3QtMTkwLXRyaXBzIGludG8gdGhlIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZFxcbi0tXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0PTE5OT1pbiB0aGUgc2V0LlxcbkRvY3VtZW50YXRpb24vbW0vbXVsdGlnZW5fbHJ1LnJzdC0yMDAtXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0OjIwMTpJbiB0aGUgZXZpY3Rpb24gcGF0aCwgc3BlY2lmaWNhbGx5LCBpbiBgYGxydV9nZW5fbG9va19hcm91bmQoKWBgLCBpZiBhXFxuRG9jdW1lbnRhdGlvbi9tbS9tdWx0aWdlbl9scnUucnN0LTIwMi1QTUQgaGFzIGEgc3VmZmljaWVudCBudW1iZXIgb2YgaG90IHBhZ2VzLCBpdHMgYWRkcmVzcyBpcyBwbGFjZWQgaW4gdGhlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oPTY4OT12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTtcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjY5MDpib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LCB1bnNpZ25lZCBpbnQgbnIpO1xcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNjkxLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaD03MDg9c3RhdGljIGlubGluZSB2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC03MTEtXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaDo3MTI6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fbG9va19hcm91bmQoc3RydWN0IHBhZ2Vfdm1hX21hcHBlZF93YWxrICpwdm13LFxcbmluY2x1ZGUvbGludXgvbW16b25lLmgtNzEzLVxcdFxcdHVuc2lnbmVkIGludCBucilcXG4tLVxcbm1tL3JtYXAuYz05MTc9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3JtYXAuYy05ODEtXFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpIFxcdTAwMjZcXHUwMDI2IHB2bXcucHRlKSB7XFxubW0vcm1hcC5jOjk4MjpcXHRcXHRcXHRpZiAobHJ1X2dlbl9sb29rX2Fyb3VuZChcXHUwMDI2cHZtdywgbnIpKVxcbm1tL3JtYXAuYy05ODMtXFx0XFx0XFx0XFx0cmVmZXJlbmNlZCsrO1xcbi0tXFxubW0vdm1zY2FuLmM9MjcyMD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjc0OS0gKiB3YWxrX3BtZF9yYW5nZSgpOyB0aGUgZXZpY3Rpb24gYWxzbyByZXBvcnQgdGhlbSB3aGVuIHdhbGtpbmcgdGhlIHJtYXBcXG5tbS92bXNjYW4uYzoyNzUwOiAqIGluIGxydV9nZW5fbG9va19hcm91bmQoKS5cXG5tbS92bXNjYW4uYy0yNzUxLSAqXFxuLS1cXG5tbS92bXNjYW4uYz00MDAyPXN0YXRpYyBib29sIHRyeV90b19pbmNfbWF4X3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLFxcbi0tXFxubW0vdm1zY2FuLmMtNDAyMS1cXHQgKiBJZiB0aGUgaGFyZHdhcmUgZG9lc24ndCBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNjZXNzZWQgYml0LCBmYWxsYmFja1xcbm1tL3Ztc2Nhbi5jOjQwMjI6XFx0ICogdG8gbHJ1X2dlbl9sb29rX2Fyb3VuZCgpLCB3aGljaCBvbmx5IGNsZWFycyB0aGUgYWNjZXNzZWQgYml0IGluIGFcXG5tbS92bXNjYW4uYy00MDIzLVxcdCAqIGhhbmRmdWwgb2YgUFRFcy4gU3ByZWFkaW5nIHRoZSB3b3JrIG91dCBvdmVyIGEgcGVyaW9kIG9mIHRpbWUgdXN1YWxseVxcbi0tXFxubW0vdm1zY2FuLmM9NDE0MT1zdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE4Ny0gKi9cXG5tbS92bXNjYW4uYzo0MTg4OmJvb2wgbHJ1X2dlbl9sb29rX2Fyb3VuZChzdHJ1Y3QgcGFnZV92bWFfbWFwcGVkX3dhbGsgKnB2bXcsIHVuc2lnbmVkIGludCBucilcXG5tbS92bXNjYW4uYy00MTg5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NDEuMjk5MjUzMzIyWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcwMjcwMDY5NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyYWNpbmcgdGhlIGNoYW5nZXMuIEl0IHNlZW1zIGBscnVfZ2VuX2xvb2tfYXJvdW5kYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZm9saW9fcmVmZXJlbmNlZF9vbmVgLCB3aGljaCBpcyBpbiBgbW0vcm1hcC5jYC4gUmlnaHQsIHNvIHRoaXMgaXMgZGVmaW5pdGVseSBwYXJ0IG9mIHRoZSBtZW1vcnkgcmVjbGFpbSBwYXRoLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHVwZGF0aW5nIGBmb2xpb19yZWZlcmVuY2VkYCB0byB1c2UgYHZtYV9mbGFnc190YCBhbmQgcGFzcyBpdCBkb3duIHRvIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCBhbmQgYHNocmlua19hY3RpdmVfbGlzdGAuIEludGVyZXN0aW5nLiBBbmQgSSBzZWUgYSBjaGFuZ2UgaW4gYGxydV9nZW5fc2V0X3JlZnNgIHRvbywgd2hpY2ggbm93IGFjdGl2YXRlcyBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBpbml0aWFsIHVzZS5cblxuTGV0J3MgcXVpY2tseSBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHNlZSBgTFJVX0dFTmAgYW5kIGBMUlVfR0VOX0VOQUJMRURgLiBUaGVzZSBhcmUgb2J2aW91c2x5IHJlbGF0ZWQgdG8gdGhlIE1HTFJVIGNvbXBvbmVudCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEhtbSwgYnV0IHdoYXQgYWJvdXQgdGhlIHN0YW5kYXJkIExSVSBmdW5jdGlvbmFsaXR5PyBBaCwgcmlnaHQsIHRoYXQncyBhbHdheXMgb247IGl0IGRvZXNuJ3QgbmVlZCBhbnkgc3BlY2lhbCBjb25maWcuIFNvLCBpbmNsdWRpbmcgdGhvc2UgTUdMUlUtc3BlY2lmaWMgb3B0aW9ucywgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCwgd2lsbCBlbnN1cmUgdGhhdCBib3RoIHBhdGhzIGFyZSBwcm9wZXJseSB0ZXN0ZWQuIFNtYXJ0IG1vdmUuXG5cbk9rYXksIGxldCdzIHZlcmlmeSB0aGF0IGB2bWFfZmxhZ3NfdGAgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9tbV90eXBlcy5oYC4gWWVwLCBpdCdzIHRoZXJlLCBhcyBleHBlY3RlZC4gVGhpcyBwYXRjaCBsb29rcyBmdW5jdGlvbmFsbHkgc291bmQuIEl0J3MgY2xlYXJseSBtb2RpZnlpbmcgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljLCBhZmZlY3RpbmcgdGhpbmdzIGF0IHRoZSBmb2xpbyBsZXZlbC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIGludm9sdmVkLiBJIG5lZWQgdG8ga2VlcCB0aGVzZSBpbiBtaW5kOiBgZm9saW9fcmVmZXJlbmNlZGAsIGBmb2xpb19jaGVja19yZWZlcmVuY2VzYCwgYHNocmlua19hY3RpdmVfbGlzdGAsIGBmb2xpb191cGRhdGVfZ2VuYCwgYHdhbGtfdXBkYXRlX2ZvbGlvYCwgYGxydV9nZW5fbG9va19hcm91bmRgLCBhbmQgYGxydV9nZW5fc2V0X3JlZnNgLlxuXG5XYWl0LCBqdXN0IGEgc2Vjb25kLi4uIGlzIGBscnVfZ2VuX3NldF9yZWZzYCBpbmxpbmUgb3Igc3RhdGljPyBMZXQgbWUgZG91YmxlLWNoZWNrLiBPa2F5LCBpdCdzIHN0YXRpYywgd2hpY2ggZXhwbGFpbnMgd2h5IGl0J3MgZGVmaW5lZCBpbiBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCBsZXQncyB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgYG1tL3Ztc2Nhbi5jYCBhbmQgbWFrZSBzdXJlIEkgZnVsbHkgdW5kZXJzdGFuZCB0aGF0IHN0YXRpYyBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxMTYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NDguMzI2MjY1MjE3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzU3NDg2NTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fc2V0X3JlZnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaD00MjI9ZW51bSBscnV2ZWNfZmxhZ3Mge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbXpvbmUuaC01MDktICogRm9yIGZvbGlvcyBhY2Nlc3NlZCBtdWx0aXBsZSB0aW1lcyB0aHJvdWdoIHBhZ2UgdGFibGVzLCBmb2xpb191cGRhdGVfZ2VuKClcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oOjUxMDogKiBmcm9tIGEgcGFnZSB0YWJsZSB3YWxrIG9yIGxydV9nZW5fc2V0X3JlZnMoKSBmcm9tIGEgcm1hcCB3YWxrIHNldHNcXG5pbmNsdWRlL2xpbnV4L21tem9uZS5oLTUxMS0gKiBQR19yZWZlcmVuY2VkIGFmdGVyIHRoZSBhY2Nlc3NlZCBiaXQgaXMgY2xlYXJlZCBmb3IgdGhlIGZpcnN0IHRpbWUuXFxuLS1cXG5tbS92bXNjYW4uYz04MzE9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg0My0gKi9cXG5tbS92bXNjYW4uYzo4NDQ6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg0NS17XFxuLS1cXG5tbS92bXNjYW4uYy04NjUtI2Vsc2VcXG5tbS92bXNjYW4uYzo4NjY6c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbm1tL3Ztc2Nhbi5jLTg2Ny17XFxuLS1cXG5tbS92bXNjYW4uYz04NzI9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy05MDAtXFxubW0vdm1zY2FuLmM6OTAxOlxcdFxcdHJldHVybiBscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hX2ZsYWdzKSA/IEZPTElPUkVGX0FDVElWQVRFIDogRk9MSU9SRUZfS0VFUDtcXG5tbS92bXNjYW4uYy05MDItXFx0fVxcbi0tXFxubW0vdm1zY2FuLmM9MzQ0Nj1zdGF0aWMgdm9pZCB3YWxrX3VwZGF0ZV9mb2xpbyhzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM0NjItXFx0XFx0XFx0dXBkYXRlX2JhdGNoX3NpemUod2FsaywgZm9saW8sIG9sZF9nZW4sIG5ld19nZW4pO1xcbm1tL3Ztc2Nhbi5jOjM0NjM6XFx0fSBlbHNlIGlmIChscnVfZ2VuX3NldF9yZWZzKGZvbGlvLCBcXHUwMDI2dm1hLVxcdTAwM2VmbGFncykpIHtcXG5tbS92bXNjYW4uYy0zNDY0LVxcdFxcdG9sZF9nZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NTAuNjgzNzU5MzM4WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwODUwMTIxMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoJ3MgUmVhY2ggYW5kIFNpZ25pZmljYW5jZSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBscnVfZ2VuX3NldF9yZWZzYCBpcyBkZWZpbml0ZWx5IHN0YXRpYywgc28gSSBjYW4gc2VlIHdoYXQgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggaXQuIEknbGwgbmVlZCB0byBmb2N1cyBvbjogYGZvbGlvX2NoZWNrX3JlZmVyZW5jZXNgLCBgc2hyaW5rX2FjdGl2ZV9saXN0YCwgYGZvbGlvX3VwZGF0ZV9nZW5gLCBgd2Fsa191cGRhdGVfZm9saW9gLCBgbHJ1X2dlbl9sb29rX2Fyb3VuZGAsIGFuZCBvZiBjb3Vyc2UsIGBscnVfZ2VuX3NldF9yZWZzYCBpdHNlbGYuXG5cbkhvbGQgb24sIEkgc2VlIGBmb2xpb19yZWZlcmVuY2VkYCBpcyBhbHNvIG1vZGlmaWVkLCBJIG5lZWQgdG8gaW5jbHVkZSB0aGF0IGluIHRoZSBsaXN0IGFzIHdlbGwuXG5cbk5vdywgd2hhdCBhYm91dCB0aGUgY29uZmlndXJhdGlvbnM/IFRoaXMgcGF0Y2ggdG91Y2hlcyBgbW0vdm1zY2FuLmNgIGFuZCBgbW0vcm1hcC5jYCwgd2hpY2ggdGVsbHMgbWUgaXQncyBkZWVwbHkgaW52b2x2ZWQgaW4gbWVtb3J5IG1hbmFnZW1lbnQuIE1lbW9yeSByZWNsYWltIGlzIGFsd2F5cyBlbmFibGVkLCBzbyB0aGF0J3MgYSBnaXZlbi4gTUdMUlUsIGhvd2V2ZXIsIGlzIGdhdGVkIGJ5IGBDT05GSUdfTFJVX0dFTmAuIFNvLCBJJ2xsIG5lZWQgdG8gY29uc2lkZXIgYExSVV9HRU5gIGFuZCBgTFJVX0dFTl9FTkFCTEVEYCBhcyB0aGUgY3JpdGljYWwgY29uZmlncyBmb3IgZW5hYmxpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgbXkgbG9naWMuIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBWTUEgZmxhZ3MgYXJlIHBhc3NlZCBhbmQgY2hlY2tlZCBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgYWZmZWN0cyBib3RoIHRoZSBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVLiBUaGUgbWFpbiBwb2ludCBpcyB0byB0cmlnZ2VyIGZpbGUtYmFja2VkIGV4ZWN1dGFibGUgZm9saW9zIGFmdGVyIHRoZWlyIGZpcnN0IHVzZSB0byBwcmV2ZW50IElPIHRocmFzaGluZy4gVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBtYWtlcyBpdCBoaWdobHkgcmVhY2hhYmxlLiBUaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLlxuXG5UaW1lIHRvIGZlZWQgdGhpcyBpbnRvIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTUxNCwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjBUMTU6MzU6NTguNzY4Nzc0MjM2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MzkwMDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCIsXG4gICAgXCJMUlVfR0VOX0VOQUJMRURcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJmb2xpb19yZWZlcmVuY2VkXCIsXG4gICAgXCJmb2xpb19jaGVja19yZWZlcmVuY2VzXCIsXG4gICAgXCJzaHJpbmtfYWN0aXZlX2xpc3RcIixcbiAgICBcImZvbGlvX3VwZGF0ZV9nZW5cIixcbiAgICBcIndhbGtfdXBkYXRlX2ZvbGlvXCIsXG4gICAgXCJscnVfZ2VuX2xvb2tfYXJvdW5kXCIsXG4gICAgXCJscnVfZ2VuX3NldF9yZWZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IHJlY2xhaW0gbG9naWMgKGJvdGggc3RhbmRhcmQgTFJVIGFuZCBNR0xSVSkgdG8gYWN0aXZhdGUgZmlsZS1iYWNrZWQgZXhlY3V0YWJsZSBmb2xpb3MgYWZ0ZXIgdGhlaXIgZmlyc3QgdXNhZ2UsIHByZXZlbnRpbmcgSU8gdGhyYXNoaW5nLiBJdCBhbHNvIGNoYW5nZXMgaG93IFZNQSBmbGFncyBhcmUgcGFzc2VkIGFuZCBldmFsdWF0ZWQgZHVyaW5nIHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBpcyBoaWdobHkgcmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIkxSVV9HRU5fRU5BQkxFRFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImZvbGlvX3JlZmVyZW5jZWRcIixcbiAgICBcImZvbGlvX2NoZWNrX3JlZmVyZW5jZXNcIixcbiAgICBcInNocmlua19hY3RpdmVfbGlzdFwiLFxuICAgIFwiZm9saW9fdXBkYXRlX2dlblwiLFxuICAgIFwid2Fsa191cGRhdGVfZm9saW9cIixcbiAgICBcImxydV9nZW5fbG9va19hcm91bmRcIixcbiAgICBcImxydV9nZW5fc2V0X3JlZnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgcmVjbGFpbSBsb2dpYyAoYm90aCBzdGFuZGFyZCBMUlUgYW5kIE1HTFJVKSB0byBhY3RpdmF0ZSBmaWxlLWJhY2tlZCBleGVjdXRhYmxlIGZvbGlvcyBhZnRlciB0aGVpciBmaXJzdCB1c2FnZSwgcHJldmVudGluZyBJTyB0aHJhc2hpbmcuIEl0IGFsc28gY2hhbmdlcyBob3cgVk1BIGZsYWdzIGFyZSBwYXNzZWQgYW5kIGV2YWx1YXRlZCBkdXJpbmcgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGlzIGhpZ2hseSByZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowxd8d2[1] Phase: Succeeded StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 15:36:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2] Phase: Succeeded StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","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-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 15:36:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-20 15:36:10 +0000 UTC FinishedAt: 2026-07-20 15:36:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1030276858/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-20 15:36:20 +0000 UTC FinishedAt: 2026-07-20 16:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-20 15:36:20 +0000 UTC FinishedAt: 2026-07-20 16:09:43 +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:*d3090d02-42b2-49fa-a074-3602aa09c5f2,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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1030276858/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": "77b4d48b-e625-4897-b62d-3c7ecfaec1e6", "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-workflowxd8d2/series-workflowxd8d2-build-action-3365050280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-20 15:36:20 +0000 UTC FinishedAt: 2026-07-20 16:09:02 +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:*d3090d02-42b2-49fa-a074-3602aa09c5f2,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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1030276858/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": "77b4d48b-e625-4897-b62d-3c7ecfaec1e6", "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-workflowxd8d2/series-workflowxd8d2-build-action-3365050280/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-20 16:09:43 +0000 UTC FinishedAt: 2026-07-20 16:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-20 16:09:43 +0000 UTC FinishedAt: 2026-07-20 16:09:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-20 16:09:43 +0000 UTC FinishedAt: 2026-07-20 16:09:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-20 16:09:43 +0000 UTC FinishedAt: 2026-07-20 16:09:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1617975637/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-20 16:09:59 +0000 UTC FinishedAt: 2026-07-20 16:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-20 16:09:59 +0000 UTC FinishedAt: 2026-07-20 16:12:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77b4d48b-e625-4897-b62d-3c7ecfaec1e6,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-workflowxd8d2/series-workflowxd8d2-build-action-3365050280/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-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-20 16:12:13 +0000 UTC FinishedAt: 2026-07-20 16:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-20 16:12:13 +0000 UTC FinishedAt: 2026-07-20 16:12:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-20 16:12:13 +0000 UTC FinishedAt: 2026-07-20 16:50:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-20 16:12:13 +0000 UTC FinishedAt: 2026-07-20 16:50:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d3090d02-42b2-49fa-a074-3602aa09c5f2,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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1617975637/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": "795435b9-1eec-4c87-8d5e-362cc0fe0d93", "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-workflowxd8d2/series-workflowxd8d2-build-action-3194059489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-20 16:12:13 +0000 UTC FinishedAt: 2026-07-20 16:50:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*d3090d02-42b2-49fa-a074-3602aa09c5f2,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-workflowxd8d2/series-workflowxd8d2-convert-artifact-1617975637/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": "795435b9-1eec-4c87-8d5e-362cc0fe0d93", "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-workflowxd8d2/series-workflowxd8d2-build-action-3194059489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 16:50:21 +0000 UTC FinishedAt: 2026-07-20 16:50:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 16:50:21 +0000 UTC FinishedAt: 2026-07-20 16:50:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 16:50:21 +0000 UTC FinishedAt: 2026-07-20 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 16:50:21 +0000 UTC FinishedAt: 2026-07-20 16:52:08 +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:*795435b9-1eec-4c87-8d5e-362cc0fe0d93,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-workflowxd8d2/series-workflowxd8d2-build-action-3194059489/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-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"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:*77b4d48b-e625-4897-b62d-3c7ecfaec1e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*795435b9-1eec-4c87-8d5e-362cc0fe0d93,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-workflowxd8d2/series-workflowxd8d2-build-action-3365050280/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-workflowxd8d2/series-workflowxd8d2-build-action-3194059489/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 16:52:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 16:52:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"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-workflowxd8d2/series-workflowxd8d2-convert-artifact-2549549882/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 16:52:18 +0000 UTC FinishedAt: 2026-07-20 16:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 16:52:28 +0000 UTC FinishedAt: 2026-07-20 19:55:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxd8d2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["folio_referenced","folio_check_references","shrink_active_list","folio_update_gen","walk_update_folio","lru_gen_look_around","lru_gen_set_refs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"70a23b27c3d8e0ac4bd40845d4f50db701f4555e","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","LRU_GEN_ENABLED"],"series_id":"2bb2b2c1-ab81-4757-aba5-6bf5ed6b5718","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 16:52:28 +0000 UTC FinishedAt: 2026-07-20 19:55:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*77b4d48b-e625-4897-b62d-3c7ecfaec1e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*795435b9-1eec-4c87-8d5e-362cc0fe0d93,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-workflowxd8d2/series-workflowxd8d2-build-action-3365050280/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-workflowxd8d2/series-workflowxd8d2-build-action-3194059489/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-workflowxd8d2/series-workflowxd8d2-convert-artifact-2549549882/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,}