Name: series-workflow7hlmz Phase: Succeeded StartedAt: 2026-07-30 15:03:00 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[0] Phase: Succeeded StartedAt: 2026-07-30 15:03:00 +0000 UTC FinishedAt: 2026-07-30 15:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[0].run-triage Phase: Succeeded StartedAt: 2026-07-30 15:03:00 +0000 UTC FinishedAt: 2026-07-30 15:19:54 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "67b502bada32afb3a8822641066e7bd223778210", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "67b502bada32afb3a8822641066e7bd223778210", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "7f4013c6-6153-4db4-bb06-3abcedff4096" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fallocate", "ext4_convert_unwritten_extents", "ext4_convert_unwritten_io_end_vec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMmIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIGZvciBoYW5kbGluZyBmYWxsb2NhdGUsIHplcm9vdXQsIGFuZCB1bndyaXR0ZW4gZXh0ZW50cyBjb252ZXJzaW9uLiBJdCB1cGRhdGVzIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9uL2NvbnZlcnNpb24gYW5kIG9ycGhhbiBsaXN0IG1hbmFnZW1lbnQsIGFuZCBhZGRzIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGJkYTA0MjNiMThjZWMxMzNiMzJhM2M3MWM3MDIyMDljMDQ5ZGJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTU6MTg6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM5MDEsNyAmIzQzOzM5MDEsOCBAQCBleHRlcm4gdm9pZCBleHQ0X2V4dF9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdFx0ICBsb2ZmX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiYjNDM7XHRcdFx0XHRcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0XHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IGQ1Zjg3YTdmNmMwNTcuLmEzZGRlN2JhMGQyM2UgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTcxLDYgJiM0Mzs0NTcxLDIyIEBAIGludCBleHQ0X2V4dF90cnVuY2F0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFByZS1hbGxvY2F0ZSBibG9ja3MgZm9yIHRoZSByYW5nZSBbQG9mZnNldCwgQG9mZnNldCAmIzQzOyBAbGVuKS4gQWxsb2NhdGVkXG4mIzQzOyAqIGJsb2NrcyBhcmUgbWFya2VkIGFzIHVud3JpdHRlbiBieSBkZWZhdWx0LiBJZiBFWFQ0X0dFVF9CTE9DS1NfWkVSTyBpc1xuJiM0MzsgKiBzZXQsIHRoZSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSB6ZXJvZWQgb24gZGlzayBhbmQgdGhlaXIgZXh0ZW50cyBhcmVcbiYjNDM7ICogY29udmVydGVkIHRvIHdyaXR0ZW4gc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gQG5ld19zaXplIGlzIG5vbnplcm8sIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBleHRlbmQgdGhlIGZpbGUsIGFuZFxuJiM0MzsgKiB0aGUgZmlsZSBzaXplIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBibG9ja3MuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRpb24gbWF5IHBhcnRpYWxseSBzdWNjZWVkIGR1ZSB0byBzb21lIG5vbi1mYXRhbCBpc3N1ZXMuIEluIHRoYXRcbiYjNDM7ICogY2FzZSwgaV9kaXNrc2l6ZSAoYW5kIGlfc2l6ZSkgaXMgYWR2YW5jZWQgdXAgdG8gdGhlIHN1Y2Nlc3NmdWxseVxuJiM0MzsgKiBwcm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgcmFuZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIG9yIHBhcnRpYWxcbiYjNDM7ICogZmFpbHVyZS5cbiYjNDM7ICovXG4gc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbiB7XG5AQCAtNDU4NSw2ICYjNDM7NDYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcdGxvZmZfdCBlcG9zID0gMCwgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xuJiM0MztcdGJvb2wgb3JwaGFuID0gZmFsc2U7XG4gXG4gXHRCVUdfT04oIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKTtcbiBcdG1hcC5tX2xibGsgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG5AQCAtNDY1OSwxOSAmIzQzOzQ2NzYsNDkgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4mIzQzO1x0XHRcdGV4dDRfbGJsa190IGNvbnZlcnRlZDtcbiYjNDM7XG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICYjNDM7IG1hcC5tX2xlbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTtcbiYjNDM7XG4gXHRcdFx0cmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLFxuIFx0XHRcdFx0XHRcdCBtYXAubV9sZW4pO1xuLVx0XHRcdGlmIChsaWtlbHkoIXJldCkpXG4tXHRcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGNyZWRpdHMpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGhhbmRsZSk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXG4gXHRcdFx0XHRcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXHUwMDNjXHUwMDNjIGJsa2JpdHMsXG4tXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzKTtcbiYjNDM7XHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2Y29udmVydGVkKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0bWFwLm1fbGVuID0gY29udmVydGVkO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZFxuJiM0MztcdFx0XHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKG5ld19zaXplIFx1MDAyNlx1MDAyNiBjb252ZXJ0ZWQpIHtcbiYjNDM7XHRcdFx0XHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuJiM0MztcdFx0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDI7XG4mIzQzO1x0XHRcdFx0b3JwaGFuID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDM7XG4gXHRcdH1cbiBcbiBcdFx0bWFwLm1fbGJsayAmIzQzOz0gbWFwLm1fbGVuO1xuIFx0XHRtYXAubV9sZW4gPSBsZW5fbGJsayA9IGxlbl9sYmxrIC0gbWFwLm1fbGVuO1xuIFx0XHRlcG9zID0gRVhUNF9MQkxLX1RPX0IoaW5vZGUsIG1hcC5tX2xibGspO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuQEAgLTQ2ODcsMTEgJiM0Mzs0NzM0LDIzIEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcdGlmIChlcG9zIFx1MDAzZSBuZXdfc2l6ZSlcbiBcdFx0ZXBvcyA9IG5ld19zaXplO1xuIFxuLVx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01JU0MsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKVxuLVx0XHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xuJiM0MztcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgY29udmVyc2lvbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm90IG11Y2ggdG9cbiYjNDM7XHRcdCAqIGRvIHdpdGggdGhlIGVycm9yIGhlcmUgc28ganVzdCBjbGVhbnVwIHRoZSBvcnBoYW4gbGlzdFxuJiM0MztcdFx0ICogYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuJiM0MztcdFx0cmV0MiA9IFBUUl9FUlIoaGFuZGxlKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpO1xuJiM0MztcdGlmIChvcnBoYW4gXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfbmxpbmspXG4mIzQzO1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1xuIFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdGV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpO1xuIFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG5AQCAtNDY5OSw2ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcbiBcdGlmIChlcG9zIFx1MDAzZSBvbGRfc2l6ZSlcbiBcdFx0cGFnZWNhY2hlX2lzaXplX2V4dGVuZGVkKGlub2RlLCBvbGRfc2l6ZSwgZXBvcyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocmV0MilcbiYjNDM7XHRcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVx1MDAzZWlfc2IsIHJldDIpO1xuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHJldDI7XG4gfVxuQEAgLTUwNTEsMjEgJiM0Mzs1MTEzLDI2IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvXG4gICogd3JpdHRlbiBleHRlbnRzLlxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2tcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cbi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0L2J1ZmZlcmVkIEkvTyBlbmQgaW8gY2FsbCBiYWNrXG4mIzQzOyAqIGZ1bmN0aW9uIGFuZCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTLCB0byBjb252ZXJ0IHRoZSBmYWxsb2NhdGVkXG4mIzQzOyAqIHVud3JpdHRlbiBleHRlbnRzIGFmdGVyIGRhdGEgSS9PIGlzIGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIGZ1bGwgc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIHBhcnRpYWxcbiYjNDM7ICogc3VjY2VzcyBvciBmYWlsdXJlLiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBjb252ZXJ0ZWQgaXMgcmV0dXJuZWQgdmlhXG4mIzQzOyAqIEBjb252ZXJ0ZWQuXG4gICovXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pXG4mIzQzO1x0XHRcdFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcztcbiYjNDM7XHRleHQ0X2xibGtfdCBtYXhfYmxvY2tzLCBjb252X2Jsb2NrcyA9IDA7XG4gXHRpbnQgcmV0ID0gMCwgcmV0MiA9IDAsIHJldDMgPSAwO1xuIFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4gXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHVuc2lnbmVkIGludCBjcmVkaXRzID0gMDtcbiBcbiBcdG1hcC5tX2xibGsgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4tXHRtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcbiYjNDM7XHRtYXAubV9sZW4gPSBtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdC8qXG5AQCAtNTA3Myw5ICYjNDM7NTE0MCw4IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICovXG4gXHRcdGNyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7XG4gXHR9XG4tXHR3aGlsZSAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyBtYXhfYmxvY2tzKSB7XG4tXHRcdG1hcC5tX2xibGsgJiM0Mzs9IHJldDtcbi1cdFx0bWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gcmV0KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG1heF9ibG9ja3MpIHtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiBcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG5AQCAtNTA5MiwyMyAmIzQzOzUxNTgsMzQgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLFxuIFx0XHRcdFx0ICAgICAgRVhUNF9HRVRfQkxPQ0tTX0lPX0NPTlZFUlRfRVhUIHxcbiBcdFx0XHRcdCAgICAgIEVYVDRfRVhfTk9DQUNIRSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYixcbi1cdFx0XHRcdCAgICAgXCYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFwmIzM0O1xuLVx0XHRcdFx0ICAgICBcJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi1cdFx0XHRcdCAgICAgbWFwLm1fbGVuLCByZXQpO1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IGV4dDRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGlub2RlLVx1MDAzZWlfaW5vLCBtYXAubV9sYmxrLCBtYXAubV9sZW4sIHJldCk7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShyZXQgPT0gMCkpXG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGNvbnZfYmxvY2tzICYjNDM7PSBtYXAubV9sZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0XHRpZiAoY3JlZGl0cykge1xuIFx0XHRcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0XHRcdGlmICh1bmxpa2VseShyZXQzKSlcbiBcdFx0XHRcdHJldDIgPSByZXQzO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChyZXQgXHUwMDNjPSAwIHx8IHJldDIpXG4mIzQzO1x0XHRyZXQgPSByZXQgXHUwMDNjIDAgPyByZXQgOiByZXQyO1xuJiM0MztcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRtYXAubV9sYmxrICYjNDM7PSBtYXAubV9sZW47XG4mIzQzO1x0XHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSBtYXAubV9sZW4pO1xuIFx0fVxuLVx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IHJldDIgOiByZXQ7XG4mIzQzO1x0LyogQ29udmVydGVkIHNvbWUgb3IgYWxsIGJsb2NrcyBzdWNjZXNzZnVsbHk/ICovXG4mIzQzO1x0aWYgKGNvbnZlcnRlZClcbiYjNDM7XHRcdCpjb252ZXJ0ZWQgPSBjb252X2Jsb2NrcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXG5AQCAtNTEzMSw3ICYjNDM7NTIwOCw3IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCBcdTAwMjZpb19lbmQtXHUwMDNlbGlzdF92ZWMsIGxpc3QpIHtcbiBcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVx1MDAzZWlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICAgaW9fZW5kX3ZlYy1cdTAwM2VvZmZzZXQsXG4tXHRcdFx0XHRcdFx0ICAgICBpb19lbmRfdmVjLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlc2l6ZSwgTlVMTCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuY1xuQEAgLTQzNiw3ICYjNDM7NDM2LDggQEAgc3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4gXHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhOVUxMLCBpbm9kZSwgcG9zLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc2l6ZSk7XG4gXHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDI2XHUwMDI2IGZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVU5XUklUVEVOKVxuLVx0XHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBOVUxMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmRhMDQyM2IxOGNlYzEzM2IzMmEzYzcxYzcwMjIwOWMwNDlkYmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxNToxODoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTM5MDEsNyAmIzQzOzM5MDEsOCBAQCBleHRlcm4gdm9pZCBleHQ0X2V4dF9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTsKJiM0MzsJCQkJCSAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sCiYjNDM7CQkJCQkgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpOwogZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBkNWY4N2E3ZjZjMDU3Li5hM2RkZTdiYTBkMjNlIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtNDU3MSw2ICYjNDM7NDU3MSwyMiBAQCBpbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQcmUtYWxsb2NhdGUgYmxvY2tzIGZvciB0aGUgcmFuZ2UgW0BvZmZzZXQsIEBvZmZzZXQgJiM0MzsgQGxlbikuIEFsbG9jYXRlZAomIzQzOyAqIGJsb2NrcyBhcmUgbWFya2VkIGFzIHVud3JpdHRlbiBieSBkZWZhdWx0LiBJZiBFWFQ0X0dFVF9CTE9DS1NfWkVSTyBpcwomIzQzOyAqIHNldCwgdGhlIGFsbG9jYXRlZCBibG9ja3MgYXJlIHplcm9lZCBvbiBkaXNrIGFuZCB0aGVpciBleHRlbnRzIGFyZQomIzQzOyAqIGNvbnZlcnRlZCB0byB3cml0dGVuIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogV2hlbiBAbmV3X3NpemUgaXMgbm9uemVybywgdGhlIGNhbGxlciBpbnRlbmRzIHRvIGV4dGVuZCB0aGUgZmlsZSwgYW5kCiYjNDM7ICogdGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGlvbiBtYXkgcGFydGlhbGx5IHN1Y2NlZWQgZHVlIHRvIHNvbWUgbm9uLWZhdGFsIGlzc3Vlcy4gSW4gdGhhdAomIzQzOyAqIGNhc2UsIGlfZGlza3NpemUgKGFuZCBpX3NpemUpIGlzIGFkdmFuY2VkIHVwIHRvIHRoZSBzdWNjZXNzZnVsbHkKJiM0MzsgKiBwcm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgcmFuZ2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSBvciBwYXJ0aWFsCiYjNDM7ICogZmFpbHVyZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAkJCQkgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKQogewpAQCAtNDU4NSw2ICYjNDM7NDYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAlsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCXVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAlib29sIGFsbG9jX3plcm8gPSBmYWxzZTsKJiM0MzsJYm9vbCBvcnBoYW4gPSBmYWxzZTsKIAogCUJVR19PTighZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpOwogCW1hcC5tX2xibGsgPSBvZmZzZXQgJmd0OyZndDsgYmxrYml0czsKQEAgLTQ2NTksMTkgJiM0Mzs0Njc2LDQ5IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAogCQlpZiAoYWxsb2NfemVybyAmYW1wOyZhbXA7CiAJCSAgICAobWFwLm1fZmxhZ3MgJmFtcDsgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7CiYjNDM7CQkJZXh0NF9sYmxrX3QgY29udmVydGVkOwomIzQzOwomIzQzOwkJCVdBUk5fT05fT05DRShtYXAubV9sYmxrICYjNDM7IG1hcC5tX2xlbiAmZ3Q7CiYjNDM7CQkJCUVYVDRfQl9UT19MQkxLKGlub2RlLCBuZXdfc2l6ZSA/OiBvbGRfc2l6ZSkpOwomIzQzOwogCQkJcmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLAogCQkJCQkJIG1hcC5tX2xlbik7Ci0JCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLAomIzQzOwkJCWlmICh1bmxpa2VseShyZXQpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUywKJiM0MzsJCQkJCQkgICAgY3JlZGl0cyk7CiYjNDM7CQkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsCiAJCQkJCWlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgJmx0OyZsdDsgYmxrYml0cywKLQkJCQkJKGxvZmZfdCltYXAubV9sZW4gJmx0OyZsdDsgYmxrYml0cyk7CiYjNDM7CQkJCQkobG9mZl90KW1hcC5tX2xlbiAmbHQ7Jmx0OyBibGtiaXRzLAomIzQzOwkJCQkJJmFtcDtjb252ZXJ0ZWQpOwogCQkJaWYgKHJldCkKLQkJCQlicmVhazsKJiM0MzsJCQkJbWFwLm1fbGVuID0gY29udmVydGVkOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZAomIzQzOwkJCSAqIHRoZSBpbm9kZSB0byB0aGUgb3JwaGFuIGxpc3QgYW5kIGFkdmFuY2UgdGhlIGVwb3MuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKG5ld19zaXplICZhbXA7JmFtcDsgY29udmVydGVkKSB7CiYjNDM7CQkJCXJldDIgPSBleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQkJCXJldCA9IHJldCA/IHJldCA6IHJldDI7CiYjNDM7CQkJCW9ycGhhbiA9IHRydWU7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwomIzQzOwkJCXJldCA9IHJldCA/IHJldCA6IHJldDM7CiAJCX0KIAogCQltYXAubV9sYmxrICYjNDM7PSBtYXAubV9sZW47CiAJCW1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47CiAJCWVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChyZXQgPT0gLUVOT1NQQyAmYW1wOyZhbXA7IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLSZndDtpX3NiLCAmYW1wO3JldHJpZXMpKQpAQCAtNDY4NywxMSAmIzQzOzQ3MzQsMjMgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWlmIChlcG9zICZndDsgbmV3X3NpemUpCiAJCWVwb3MgPSBuZXdfc2l6ZTsKIAotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCXJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7CiYjNDM7CWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTsKJiM0MzsJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGNvbnZlcnNpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIE5vdCBtdWNoIHRvCiYjNDM7CQkgKiBkbyB3aXRoIHRoZSBlcnJvciBoZXJlIHNvIGp1c3QgY2xlYW51cCB0aGUgb3JwaGFuIGxpc3QKJiM0MzsJCSAqIGFuZCBob3BlIGZvciB0aGUgYmVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG9ycGhhbiAmYW1wOyZhbXA7IGlub2RlLSZndDtpX25saW5rKQomIzQzOwkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiYjNDM7CQlyZXQyID0gUFRSX0VSUihoYW5kbGUpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpOwomIzQzOwlpZiAob3JwaGFuICZhbXA7JmFtcDsgaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQlleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CiAJcmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAlleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTsKIAlyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKQEAgLTQ2OTksNiAmIzQzOzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sCiAKIAlpZiAoZXBvcyAmZ3Q7IG9sZF9zaXplKQogCQlwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBlcG9zKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChyZXQyKQomIzQzOwkJZXh0NF9zdGRfZXJyb3IoaW5vZGUtJmd0O2lfc2IsIHJldDIpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IHJldDI7CiB9CkBAIC01MDUxLDIxICYjNDM7NTExMywyNiBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvCiAgKiB3cml0dGVuIGV4dGVudHMuCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2sKLSAqIGZ1bmN0aW9uLCB0byBjb252ZXJ0IHRoZSBmYWxsb2NhdGVkIGV4dGVudHMgYWZ0ZXIgSU8gaXMgY29tcGxldGVkLgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0L2J1ZmZlcmVkIEkvTyBlbmQgaW8gY2FsbCBiYWNrCiYjNDM7ICogZnVuY3Rpb24gYW5kIEZBTExPQ19GTF9XUklURV9aRVJPRVMsIHRvIGNvbnZlcnQgdGhlIGZhbGxvY2F0ZWQKJiM0MzsgKiB1bndyaXR0ZW4gZXh0ZW50cyBhZnRlciBkYXRhIEkvTyBpcyBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gZnVsbCBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gcGFydGlhbAomIzQzOyAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gVGhlIG51bWJlciBvZiBibG9ja3MgY29udmVydGVkIGlzIHJldHVybmVkIHZpYQomIzQzOyAqIEBjb252ZXJ0ZWQuCiAgKi8KIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbikKJiM0MzsJCQkJICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sCiYjNDM7CQkJCSAgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpCiB7Ci0JdW5zaWduZWQgaW50IG1heF9ibG9ja3M7CiYjNDM7CWV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDsKIAlpbnQgcmV0ID0gMCwgcmV0MiA9IDAsIHJldDMgPSAwOwogCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwogCXVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQgY3JlZGl0cyA9IDA7CiAKIAltYXAubV9sYmxrID0gb2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHM7Ci0JbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7CiYjNDM7CW1hcC5tX2xlbiA9IG1heF9ibG9ja3MgPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBvZmZzZXQsIGJsa2JpdHMpOwogCiAJaWYgKCFoYW5kbGUpIHsKIAkJLyoKQEAgLTUwNzMsOSAmIzQzOzUxNDAsOCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAqLwogCQljcmVkaXRzID0gZXh0NF9jaHVua190cmFuc19ibG9ja3MoaW5vZGUsIG1heF9ibG9ja3MpOwogCX0KLQl3aGlsZSAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByZXQgJmx0OyBtYXhfYmxvY2tzKSB7Ci0JCW1hcC5tX2xibGsgJiM0Mzs9IHJldDsKLQkJbWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gcmV0KTsKJiM0MzsKJiM0MzsJd2hpbGUgKG1heF9ibG9ja3MpIHsKIAkJaWYgKGNyZWRpdHMpIHsKIAkJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLAogCQkJCQkJICAgIGNyZWRpdHMpOwpAQCAtNTA5MiwyMyAmIzQzOzUxNTgsMzQgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsCiAJCQkJICAgICAgRVhUNF9HRVRfQkxPQ0tTX0lPX0NPTlZFUlRfRVhUIHwKIAkJCQkgICAgICBFWFQ0X0VYX05PQ0FDSEUpOwotCQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWV4dDRfd2FybmluZyhpbm9kZS0mZ3Q7aV9zYiwKLQkJCQkgICAgICYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6ICYjMzQ7Ci0JCQkJICAgICAmIzM0O2V4dDRfZXh0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWQmIzM0OywKLQkJCQkgICAgIGlub2RlLSZndDtpX2lubywgbWFwLm1fbGJsaywKLQkJCQkgICAgIG1hcC5tX2xlbiwgcmV0KTsKJiM0MzsJCQkJICAgICAmIzM0O2lub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWQmIzM0OywKJiM0MzsJCQkJICAgICBpbm9kZS0mZ3Q7aV9pbm8sIG1hcC5tX2xibGssIG1hcC5tX2xlbiwgcmV0KTsKJiM0MzsJCQlpZiAodW5saWtlbHkocmV0ID09IDApKQomIzQzOwkJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljb252X2Jsb2NrcyAmIzQzOz0gbWFwLm1fbGVuOwomIzQzOwkJfQomIzQzOwogCQlyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCQlpZiAoY3JlZGl0cykgewogCQkJcmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCQlpZiAodW5saWtlbHkocmV0MykpCiAJCQkJcmV0MiA9IHJldDM7CiAJCX0KLQotCQlpZiAocmV0ICZsdDs9IDAgfHwgcmV0MikKJiM0MzsJCXJldCA9IHJldCAmbHQ7IDAgPyByZXQgOiByZXQyOwomIzQzOwkJaWYgKHJldCkKIAkJCWJyZWFrOwomIzQzOwomIzQzOwkJbWFwLm1fbGJsayAmIzQzOz0gbWFwLm1fbGVuOwomIzQzOwkJbWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gbWFwLm1fbGVuKTsKIAl9Ci0JcmV0dXJuIHJldCAmZ3Q7IDAgPyByZXQyIDogcmV0OwomIzQzOwkvKiBDb252ZXJ0ZWQgc29tZSBvciBhbGwgYmxvY2tzIHN1Y2Nlc3NmdWxseT8gKi8KJiM0MzsJaWYgKGNvbnZlcnRlZCkKJiM0MzsJCSpjb252ZXJ0ZWQgPSBjb252X2Jsb2NrczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpCkBAIC01MTMxLDcgJiM0Mzs1MjA4LDcgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCAmYW1wO2lvX2VuZC0mZ3Q7bGlzdF92ZWMsIGxpc3QpIHsKIAkJcmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLSZndDtpbm9kZSwKIAkJCQkJCSAgICAgaW9fZW5kX3ZlYy0mZ3Q7b2Zmc2V0LAotCQkJCQkJICAgICBpb19lbmRfdmVjLSZndDtzaXplKTsKJiM0MzsJCQkJCQkgICAgIGlvX2VuZF92ZWMtJmd0O3NpemUsIE5VTEwpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCA5YTE2MDcxYjcxOWQ3Li40NWUxNjc5OWQwYzI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNDM2LDcgJiM0Mzs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwKIAkJZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsCiAJCQkJCQkJICAgICAgc2l6ZSk7CiAJZWxzZSBpZiAoIWVycm9yICZhbXA7JmFtcDsgc2l6ZSAmYW1wOyZhbXA7IGZsYWdzICZhbXA7IElPTUFQX0RJT19VTldSSVRURU4pCi0JCWVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCwgaW5vZGUsIHBvcywgc2l6ZSwKJiM0MzsJCQkJCQkgICAgICAgTlVMTCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBjb2RlOiBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgcGFyYW1ldGVyLCBgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZGAsIGJlaW5nIGFkZGVkIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBsaWtlbHkgZm9yIHRyYWNraW5nIHdoYXQmIzM5O3MgYmVlbiBjb252ZXJ0ZWQuIFRoZSBmYWN0IHRoYXQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9uLCBjb252ZXJzaW9uLCBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCBzdWdnZXN0cyB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWsuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIGZvciBmaWxlc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGFyb3VuZCBmYWxsb2NhdGUsIHplcm9pbmcsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdW53cml0dGVuIGV4dGVudHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5ICpob3cqIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpcyBiZWluZyB1c2VkLiBJIGtub3cgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMsIGxpa2VseSB0aHJvdWdoIGEgY2FsbCBsaWtlIGBleHQ0X3plcm9fcmFuZ2VgLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIG5ldyBgY29udmVydGVkYCBwYXJhbWV0ZXIgbWlnaHQgYWZmZWN0IHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0ZW50cy5jPTQ1NDM9aW50IGV4dDRfZXh0X3RydW5jYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDU4OS0gKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQ1OTA6c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuZnMvZXh0NC9leHRlbnRzLmMtNDU5MS1cdFx0XHRcdCAgbG9mZl90IG5ld19zaXplLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDc3Mj1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDgwMy1cdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDQ6XHRcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNS1cdFx0XHRcdFx0ICAgICBmbGFncyk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg0NS1cdFx0XHRcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4NDY6XHRcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXG5mcy9leHQ0L2V4dGVudHMuYy00ODQ3LVx0XHRcdFx0XHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODkzPXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTctXG5mcy9leHQ0L2V4dGVudHMuYzo0OTE4Olx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG5mcy9leHQ0L2V4dGVudHMuYy00OTE5LVx0XHRcdFx0ICAgICBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGV4dDQgQmxvY2sgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJsb2NrIGFsbG9jYXRpb24gd29ya3MgaW4gZXh0NCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEZyb20gd2hhdCBJJiMzOTt2ZSB0cmFjZWQsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYCwgd2hpY2ggYXJlIHNpZ25pZmljYW50IGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIEkgYWxzbyBzZWUgdGhhdCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBnZXRzIGNhbGxlZCBmcm9tIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYXMgd2VsbCBhcyBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYCwgYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AsIGFuZCBvdGhlciBpbXBvcnRhbnQgcGxhY2VzLiBUaGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IGNsZWFyIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gYGV4dDRfZG9fZmFsbG9jYXRlYCBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBhc3N1bWluZyBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXRzZWxmIGlzIHN0YXRpYywgc28gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgc3VjaCBhcyBgZXh0NF9mYWxsb2NhdGVgLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYGV4dDRfZmFsbG9jYXRlYCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBpbW1lZGlhdGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDA9ZXh0ZXJuIHZvaWQgZXh0NF9leHRfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaDozOTAxOmV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2V4dDQvZXh0NC5oLTM5MDItXHRcdFx0ICBsb2ZmX3QgbGVuKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODkzPXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDAtXG5mcy9leHQ0L2V4dGVudHMuYzo0OTAxOlx0dHJhY2VfZXh0NF9mYWxsb2NhdGVfZW50ZXIoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDItXHRXQVJOX09OX09OQ0UoIWlub2RlX2lzX2xvY2tlZChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5Mjgtb3V0OlxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdHRyYWNlX2V4dDRfZmFsbG9jYXRlX2V4aXQoaW5vZGUsIG9mZnNldCxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MzAtXHRcdFx0RVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX2Jsa2JpdHMpLCByZXQpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NDAtICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTQxOmxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuZnMvZXh0NC9leHRlbnRzLmMtNDk0Mi17XG4tLVxuZnMvZXh0NC9maWxlLmM9MTAzMz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2V4dDQvZmlsZS5jLTEwNDgtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9leHQ0L2ZpbGUuYzoxMDQ5Olx0LmZhbGxvY2F0ZVx0PSBleHQ0X2ZhbGxvY2F0ZSxcbmZzL2V4dDQvZmlsZS5jLTEwNTAtXHQuZm9wX2ZsYWdzXHQ9IEZPUF9NTUFQX1NZTkMgfCBGT1BfQlVGRkVSX1JBU1lOQyB8XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0Mjk9REVDTEFSRV9FVkVOVF9DTEFTUyhleHQ0X19mYWxsb2NhdGVfbW9kZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Ni1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDU3OkRFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9mYWxsb2NhdGVfZW50ZXIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1OC1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg9MTQ3MT1ERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfemVyb19yYW5nZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDc4OlRSQUNFX0VWRU5UKGV4dDRfZmFsbG9jYXRlX2V4aXQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3OS1cdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYGV4dDRfZmFsbG9jYXRlYCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gc28sIGBleHQ0X2ZhbGxvY2F0ZWAgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgKmZhbGxvY2F0ZSogZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgY29udGFjdCwgdGhlIGdhdGV3YXkuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgZm9yIHRoaXMgZXhhbWluYXRpb24/CgpBbmQgdGhlcmUmIzM5O3MgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIEhtbSwgb2theSwgaXQmIzM5O3MgYWxzbyBleHBvc2VkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHByb2JhYmx5IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBob3cgKmZhbGxvY2F0ZSogd29ya3MgaXRzIG1hZ2ljIGluIHVud3JpdHRlbiBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbi4gSXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBtb3JlIHRoYW4ganVzdCB3aXRoaW4gdGhlIGNvcmUgKmZhbGxvY2F0ZSogaW1wbGVtZW50YXRpb24gaXRzZWxmLiBDb3VsZCBiZSB1c2VkIGJ5IG90aGVyIGV4dDQgb3BlcmF0aW9ucyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ5IHJlbGF0ZWQgZmVhdHVyZXMuIEludGVyZXN0aW5nLi4uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB1bndyaXR0ZW4gZXh0ZW50cywgd2hpY2ggaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSB6ZXJvaW5nL3ByZS1hbGxvY2F0aW9uIGFzcGVjdC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyB0aGVzZSB0d28gYXJlIHdvcmtpbmcgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDE9ZXh0ZXJuIGxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuZnMvZXh0NC9leHQ0LmgtMzkwMi1cdFx0XHQgIGxvZmZfdCBsZW4pO1xuZnMvZXh0NC9leHQ0Lmg6MzkwMzpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNC1cdFx0XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcbmZzL2V4dDQvZXh0NC5oLTM5MDUtXHRcdFx0XHRcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XG5mcy9leHQ0L2V4dDQuaDozOTA2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzgwOS0gKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb25cbmZzL2V4dDQvZXh0ZW50cy5jOjM4MTA6ICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLlxuZnMvZXh0NC9leHRlbnRzLmMtMzgxMS0gKlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM5MTM9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpcbmZzL2V4dDQvZXh0ZW50cy5jOjM5MTQ6ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2VuZGlvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy0zOTE1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MDE0LVx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDAxNTpcdFx0cGF0aCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19lbmRpbyhoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNDAxNi1cdFx0XHRcdFx0XHRcdCAgICBtYXAsIHBhdGgsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00NTkwPXN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00Njk1LVxuZnMvZXh0NC9leHRlbnRzLmM6NDY5NjpcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5Ny1cdFx0XHRcdFx0aW5vZGUsIChsb2ZmX3QpbWFwLm1fbGJsayBcdTAwM2NcdTAwM2MgYmxrYml0cyxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUwNDUtICovXG5mcy9leHQ0L2V4dGVudHMuYzo1MDQ2OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ3LVx0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUxMjMtICovXG5mcy9leHQ0L2V4dGVudHMuYzo1MTI0OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTUxMjUtXHRcdFx0XHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MTkxPWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUyMDgtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvX2VuZF92ZWMsIFx1MDAyNmlvX2VuZC1cdTAwM2VsaXN0X3ZlYywgbGlzdCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NTIwOTpcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVx1MDAzZWlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNTIxMC1cdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZmlsZS5jPTQyNz1zdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbi0tXG5mcy9leHQ0L2ZpbGUuYy00MzUtXHRcdFx0KGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfQVRPTUlDKSlcbmZzL2V4dDQvZmlsZS5jOjQzNjpcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXG5mcy9leHQ0L2ZpbGUuYy00MzctXHRcdFx0XHRcdFx0XHQgICAgICBzaXplKTtcbmZzL2V4dDQvZmlsZS5jLTQzOC1cdGVsc2UgaWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXG5mcy9leHQ0L2ZpbGUuYzo0Mzk6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXG5mcy9leHQ0L2ZpbGUuYy00NDAtXHRcdFx0XHRcdFx0ICAgICAgIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgJiMzOTtzIENhbGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYCwgYW5kIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLiBOb3csIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpdHNlbGYgZ2V0cyBpbnZva2VkIGZyb20gYGV4dDRfemVyb19yYW5nZWAgYW5kIGBleHQ0X2RvX2ZhbGxvY2F0ZWAuCgpHaXZlbiB0aGlzLCBmb2N1c2luZyBvbiBgZXh0NF9mYWxsb2NhdGVgIGFuZCBwb3RlbnRpYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2guIFRoZXkmIzM5O3JlIGxpa2VseSBrZXkgZW50cnkgcG9pbnRzIHRoYXQgZnVubmVsIGludG8gdGhhdCBjb252ZXJzaW9uIGZ1bmN0aW9uLiBIb2xkIG9uLCB0aG91Z2guLi4gYGV4dDRfemVyb19yYW5nZWAgaXMgbWFya2VkIGFzIHN0YXRpYy4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB2aXNpYmlsaXR5IGZvciBleHRlcm5hbCBjYWxscywgcmlnaHQ/IFRoYXQgbWFrZXMgYGV4dDRfZmFsbG9jYXRlYCB0aGUgbW9yZSBpbnRlcmVzdGluZyBzeW1ib2wgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcyBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHRoZXJlZm9yZSBwcm9iYWJseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBleHQ0X2ZhbGxvY2F0ZWAgdGhlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF96ZXJvX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0ZW50cy5jPTQ3NzA9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XG5mcy9leHQ0L2V4dGVudHMuYy00NzcxLVxuZnMvZXh0NC9leHRlbnRzLmM6NDc3MjpzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9leHQ0L2V4dGVudHMuYy00NzczLVx0XHRcdCAgICBsb2ZmX3QgbGVuLCBpbnQgbW9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NzgyLVxuZnMvZXh0NC9leHRlbnRzLmM6NDc4MzpcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDc4NC1cdFdBUk5fT05fT05DRSghaW5vZGVfaXNfbG9ja2VkKGlub2RlKSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDk0MT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDA5LVx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxuZnMvZXh0NC9leHRlbnRzLmM6NTAxMDpcdFx0cmV0ID0gZXh0NF96ZXJvX3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTUwMTEtXHRcdGJyZWFrO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTk1PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00MDE2LSAqIEhlcmUgd2UgY2FuJiMzOTt0IHNraXAgYW4gdW53cml0dGVuIGJ1ZmZlciBldmVuIHRob3VnaCBpdCB1c3VhbGx5IHJlYWRzIHplcm9cbmZzL2V4dDQvaW5vZGUuYzo0MDE3OiAqIGJlY2F1c2UgaXQgbWlnaHQgaGF2ZSBkYXRhIGluIHBhZ2VjYWNoZSAoZWcsIGlmIGNhbGxlZCBmcm9tIGV4dDRfemVyb19yYW5nZSxcbmZzL2V4dDQvaW5vZGUuYy00MDE4LSAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDY0PURFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9wdW5jaF9ob2xlLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDcwLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjE0NzE6REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIEV4dDQgRmFsbG9jIGFuZCBaZXJvaW5nIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB6ZXJvaW5nIGFuZCBzcGFjZSBhbGxvY2F0aW9uIHdvcmsgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgc2VlIHRoYXQgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IGNhbGxzIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYC4gVGhpcyBpcyB0aGUgZXhwZWN0ZWQgZGVzaWduLiBJIGtub3cgYGZhbGxvY2F0ZWAgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgdGFza3MgcmVsYXRlZCB0byBmaWxlIHNwYWNlIGFsbG9jYXRpb24sIGFuZCB6ZXJvaW5nIGlzIG9uZSBvZiB0aG9zZSBjcnVjaWFsIG9wZXJhdGlvbnMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpY2luZyB0aGF0IGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgSU8gY29tcGxldGlvbiBwYXRoczogYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AgYW5kIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gKnVud3JpdHRlbiBleHRlbnRzKiBpbiB0aGVzZSBjb250ZXh0cyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyBpbnZva2VkIGR1cmluZyBEaXJlY3QgSU8gYW5kIGJ1ZmZlcmVkIElPIHdpdGggdW53cml0dGVuIGV4dGVudHMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIHRob3NlIHVud3JpdHRlbiBleHRlbnRzIGludG8gc29tZXRoaW5nIHVzYWJsZSwgcG9zc2libHkgYWZ0ZXIgYSB3cml0ZSBvciB3aGVuIHNwYWNlIGlzIG5lZWRlZC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRpdmUgZGVlcGVyIGludG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIEtub3dpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBJL08gdmVjdG9yIGFuZCB3aGF0IHNwZWNpZmljIHRyYW5zZm9ybWF0aW9ucyBpdCYjMzk7cyBwZXJmb3JtaW5nIG9uIHRoZXNlIGV4dGVudHMuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIGNvbnZlcnRpbmcgdW53cml0dGVuIGV4dGVudHMgdG8gYWN0dWFsIGJsb2NrcyBoYXBwZW5zLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDY9ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbmZzL2V4dDQvZXh0NC5oOjM5MDg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvZXh0NC5oLTM5MDktXHRcdFx0XHRcdCAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MTI0PWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MTkwLVxuZnMvZXh0NC9leHRlbnRzLmM6NTE5MTppbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbmZzL2V4dDQvZXh0ZW50cy5jLTUxOTIte1xuLS1cbmZzL2V4dDQvcGFnZS1pby5jPTE2Nz1zdGF0aWMgaW50IGV4dDRfZW5kX2lvX2VuZChleHQ0X2lvX2VuZF90ICppb19lbmQpXG4tLVxuZnMvZXh0NC9wYWdlLWlvLmMtMTkwLVx0fSBlbHNlIHtcbmZzL2V4dDQvcGFnZS1pby5jOjE5MTpcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZSwgaW9fZW5kKTtcbmZzL2V4dDQvcGFnZS1pby5jLTE5Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IEkvTyBDb21wbGV0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbXBsZXRpb24gcGF0aCBmb3IgSS9PIG9wZXJhdGlvbnMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyB3cmFwIHVwIGFmdGVyIGEgd3JpdGUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBleHQ0X2VuZF9pb19lbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGBleHQ0X2VuZF9pb19yc3Zfd29ya2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZTogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyB3aGVyZSB0aGlzIGNvbXBsZXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gQW5kLCBoZXksIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRvIGNoZWNrIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gIGFzIHdlbGwsIGp1c3QgaW4gY2FzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBmaW5hbCBwaWVjZSBvZiB0aGUgcHV6emxlIGxpZXMsIGFzc3VtaW5nIGl0IGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgZXh0NF9kaW9fd3JpdGVfZW5kX2lvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kaW9fd3JpdGVfZW5kX2lvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmlsZS5jPTM5MD1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2V4dGVuc2lvbl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgbmVlZF90cnVuYylcbi0tXG5mcy9leHQ0L2ZpbGUuYy00MjYtXG5mcy9leHQ0L2ZpbGUuYzo0Mjc6c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG5mcy9leHQ0L2ZpbGUuYy00MjgtXHRcdFx0XHQgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9maWxlLmM9NDU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBleHQ0X2Rpb193cml0ZV9vcHMgPSB7XG5mcy9leHQ0L2ZpbGUuYzo0NjA6XHQuZW5kX2lvID0gZXh0NF9kaW9fd3JpdGVfZW5kX2lvLFxuZnMvZXh0NC9maWxlLmMtNDYxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzA3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGFnbmF0aW9uIGluIEV4dDQmIzM5O3MgRmFsbG9jYXRlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoZSBhbmFseXNpcyBpc24mIzM5O3QgcHJvZ3Jlc3NpbmcgYXMgZXhwZWN0ZWQuIEl0IHNlZW1zIG15IGF0dGVudGlvbiBuZWVkcyB0byBmb2N1cyBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBmYWxsb2NhdGUgaW4gZXh0NC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIEkgc3VzcGVjdCB0aGUgaXNzdWUgbGllcyB3aXRoaW4gb25lIG9mIHRoZXNlLCBvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSByZWxldmFudCBzb3VyY2UgY29kZSBzaG91bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBmcy9leHQ0L2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2ssIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgbWV0IGJlZm9yZSBnb2luZyBkZWVwZXIgaW50byB0aGUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHNjZW5hcmlvLCBmb2N1c2luZyBvbiB0aGUgY29yZSBwcm9ibGVtIGFuZCBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggRVhUNCwgYW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNlZW1zIHRvIGJlIGBDT05GSUdfRVhUNF9GU2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhvdWdoLCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaCBvciBkZXBlbmQgb24gaXQuIFRoYXQmIzM5O3MgYWx3YXlzIG15IGZpcnN0IHN0ZXAg4oCTIGV4aGF1c3RpdmVseSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzLgoKTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dDQuaGAsIGFuZCBgZnMvZXh0NC9maWxlLmNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGZpbGVzIGFyZSBjb3JlIHRvIHRoZSBFWFQ0IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBleHRlbnRzLCB0aGUgZmlsZSBzeXN0ZW0gaGVhZGVyLCBhbmQgY29yZSBmaWxlIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZmlsZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqd2hlbiogYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIHRoZSBsaW5rLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIG1pZ2h0IGNoYW5nZSB0aGUgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS4KCk5leHQsIEkgbmVlZCB0byBvcGVuIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncywgb3IgY29uZGl0aW9uYWwgYnVpbGQgcnVsZXMsIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHNwZWNpYWwgYnVpbGRzLiBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHN0ZXAgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcyBpbiBhIGJ1aWxkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBleHQ0LWZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19FWFQ0X0ZTKSAmIzQzOz0gZXh0NC5vXG4gICA3Olx0XG4gICA4Olx0ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuICAgOTpcdFx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG4gIDEwOlx0XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbiAgMTE6XHRcdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4gIDEyOlx0XHRcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXG4gIDEzOlx0XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG4gIDE0Olx0XG4gIDE1Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuICAxNjpcdGV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbiAgMTc6XHRleHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuICAxODpcdFx0XHRcdFx0XHQgICBleHRlbnRzLXRlc3QubyBoYXNoLXRlc3Qub1xuICAxOTpcdG9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVx0XHQmIzQzOz0gZXh0NC10ZXN0Lm9cbiAgMjA6XHRleHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcdFx0JiM0Mzs9IHZlcml0eS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBleHRlbnRzLm9gIGFuZCBgZmlsZS5vYCBhcmUgaW5kZWVkIHBhcnQgb2YgYGV4dDQteWAuIFRoYXQmIzM5O3MgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhlIGNoYW5nZXMgc291bmQgZnVuY3Rpb25hbCwgZGVhbGluZyB3aXRoIHBhcnRpYWwgYWxsb2NhdGlvbiwgY29udmVyc2lvbiBvZiB1bndyaXR0ZW4gZXh0ZW50cywgYW5kIG9ycGhhbiBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgcmlwZSBmb3IgZWRnZSBjYXNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIHNob3VsZCBiZSBgZXh0NF9mYWxsb2NhdGVgLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCwgYW5kIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZW0uCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBmYWxsb2NhdGVgLCB6ZXJvaW5nLCBhbmQgdGhlIGNyaXRpY2FsIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC0tIGFsbCBzaWduYWwgcG90ZW50aWFsIGZvciBpc3N1ZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHJlYWNoYWJsZSBjb2RlLCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGxvb2tzIGxpa2UgYEVYVDRfRlNgIGlzIHRoZSBrZXkgY29uZmlnIG5lZWRlZCBmb3IgdGhpcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4KCkFzIGEgcXVpY2sgc2lkZSBub3RlLCBJIHNob3VsZCBnaXZlIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljYCBhIGN1cnNvcnkgbG9vay1vdmVyIHRvIGNoZWNrIGZvciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkwMz1leHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MDUtXHRcdFx0XHRcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XG5mcy9leHQ0L2V4dDQuaDozOTA2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDk0MT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ1LSAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NTA0NjppbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0Ny1cdFx0XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcbi0tXG5mcy9leHQ0L2ZpbGUuYz00Mjc9c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4tLVxuZnMvZXh0NC9maWxlLmMtNDM1LVx0XHRcdChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0FUT01JQykpXG5mcy9leHQ0L2ZpbGUuYzo0MzY6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhOVUxMLCBpbm9kZSwgcG9zLFxuZnMvZXh0NC9maWxlLmMtNDM3LVx0XHRcdFx0XHRcdFx0ICAgICAgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDg3CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBDb2RlIENoYW5nZXMgYW5kIElkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgd2l0aCBob3cgZXh0ZW50cyBhcmUgYmVpbmcgaGFuZGxlZC4gVGhlIGZhY3QgdGhhdCBhIGZ1bmN0aW9uIGlzIGJvdGggJiMzNDtleHBvcnRlZCBhbmQgbW9kaWZpZWQmIzM0OyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHNlZSB3aGF0IHRoZSBjaGFuZ2VzIGltcGx5LiBXYWl0IGEgbWludXRlLi4uIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pY2AgKndhc24mIzM5O3QqIGFjdHVhbGx5IHRvdWNoZWQsIGl0JiMzOTtzIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIHRoYXQmIzM5O3MgdGhlIG9uZSBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIGRpZmZlcmVuY2UuIEl0IG1pZ2h0IGJlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGZvY3VzIHNoaWZ0ZWQgZnJvbSBvbmUgZnVuY3Rpb24gdG8gdGhlIG90aGVyLiBOb3cgdGhhdCBJIGhhdmUgbXkgZmFjdHMgc3RyYWlnaHQsIEkgY2FuIHNldCBteSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjI2LjI3OTE2MDc0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDEwNjAxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxODoyNi4yNzkxNjY2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwODk2NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGRiZGEwNDIzYjE4Y2VjMTMzYjMyYTNjNzFjNzAyMjA5YzA0OWRiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNToxODoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXFxuQEAgLTM5MDEsNyArMzkwMSw4IEBAIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdFxcdCAgbG9mZl90IGxlbik7XFxuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggZDVmODdhN2Y2YzA1Ny4uYTNkZGU3YmEwZDIzZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTQ1NzEsNiArNDU3MSwyMiBAQCBpbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rLypcXG4rICogUHJlLWFsbG9jYXRlIGJsb2NrcyBmb3IgdGhlIHJhbmdlIFtAb2Zmc2V0LCBAb2Zmc2V0ICsgQGxlbikuIEFsbG9jYXRlZFxcbisgKiBibG9ja3MgYXJlIG1hcmtlZCBhcyB1bndyaXR0ZW4gYnkgZGVmYXVsdC4gSWYgRVhUNF9HRVRfQkxPQ0tTX1pFUk8gaXNcXG4rICogc2V0LCB0aGUgYWxsb2NhdGVkIGJsb2NrcyBhcmUgemVyb2VkIG9uIGRpc2sgYW5kIHRoZWlyIGV4dGVudHMgYXJlXFxuKyAqIGNvbnZlcnRlZCB0byB3cml0dGVuIHN0YXRlLlxcbisgKlxcbisgKiBXaGVuIEBuZXdfc2l6ZSBpcyBub256ZXJvLCB0aGUgY2FsbGVyIGludGVuZHMgdG8gZXh0ZW5kIHRoZSBmaWxlLCBhbmRcXG4rICogdGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLlxcbisgKlxcbisgKiBBbGxvY2F0aW9uIG1heSBwYXJ0aWFsbHkgc3VjY2VlZCBkdWUgdG8gc29tZSBub24tZmF0YWwgaXNzdWVzLiBJbiB0aGF0XFxuKyAqIGNhc2UsIGlfZGlza3NpemUgKGFuZCBpX3NpemUpIGlzIGFkdmFuY2VkIHVwIHRvIHRoZSBzdWNjZXNzZnVsbHlcXG4rICogcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhlIHJhbmdlLlxcbisgKlxcbisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSBvciBwYXJ0aWFsXFxuKyAqIGZhaWx1cmUuXFxuKyAqL1xcbiBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdFxcdFxcdFxcdCAgbG9mZl90IG5ld19zaXplLCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtNDU4NSw2ICs0NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbiBcXHRsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIFxcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xcbitcXHRib29sIG9ycGhhbiA9IGZhbHNlO1xcbiBcXG4gXFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XFxuIFxcdG1hcC5tX2xibGsgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG5AQCAtNDY1OSwxOSArNDY3Niw0OSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRcXHRpZiAoYWxsb2NfemVybyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKG1hcC5tX2ZsYWdzIFxcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XFxuK1xcdFxcdFxcdGV4dDRfbGJsa190IGNvbnZlcnRlZDtcXG4rXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XFxuK1xcbiBcXHRcXHRcXHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBtYXAubV9sZW4pO1xcbi1cXHRcXHRcXHRpZiAobGlrZWx5KCFyZXQpKVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXFx1MDAzY1xcdTAwM2MgYmxrYml0cyxcXG4tXFx0XFx0XFx0XFx0XFx0KGxvZmZfdCltYXAubV9sZW4gXFx1MDAzY1xcdTAwM2MgYmxrYml0cyk7XFxuK1xcdFxcdFxcdFxcdFxcdChsb2ZmX3QpbWFwLm1fbGVuIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb252ZXJ0ZWQpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0bWFwLm1fbGVuID0gY29udmVydGVkO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZFxcbitcXHRcXHRcXHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKG5ld19zaXplIFxcdTAwMjZcXHUwMDI2IGNvbnZlcnRlZCkge1xcbitcXHRcXHRcXHRcXHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRyZXQgPSByZXQgPyByZXQgOiByZXQyO1xcbitcXHRcXHRcXHRcXHRvcnBoYW4gPSB0cnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XFxuIFxcdFxcdG1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47XFxuIFxcdFxcdGVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG5AQCAtNDY4NywxMSArNDczNCwyMyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdGlmIChlcG9zIFxcdTAwM2UgbmV3X3NpemUpXFxuIFxcdFxcdGVwb3MgPSBuZXdfc2l6ZTtcXG4gXFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKVxcbi1cXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xcbitcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XFxuK1xcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgY29udmVyc2lvbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm90IG11Y2ggdG9cXG4rXFx0XFx0ICogZG8gd2l0aCB0aGUgZXJyb3IgaGVyZSBzbyBqdXN0IGNsZWFudXAgdGhlIG9ycGhhbiBsaXN0XFxuK1xcdFxcdCAqIGFuZCBob3BlIGZvciB0aGUgYmVzdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChvcnBoYW4gXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfbmxpbmspXFxuK1xcdFxcdFxcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XFxuK1xcdFxcdHJldDIgPSBQVFJfRVJSKGhhbmRsZSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcXG4rXFx0aWYgKG9ycGhhbiBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xcbitcXG4gXFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4gXFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XFxuIFxcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbkBAIC00Njk5LDYgKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRpZiAoZXBvcyBcXHUwMDNlIG9sZF9zaXplKVxcbiBcXHRcXHRwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBlcG9zKTtcXG4rb3V0OlxcbitcXHRpZiAocmV0MilcXG4rXFx0XFx0ZXh0NF9zdGRfZXJyb3IoaW5vZGUtXFx1MDAzZWlfc2IsIHJldDIpO1xcbiBcXG4gXFx0cmV0dXJuIHJldCA/IHJldCA6IHJldDI7XFxuIH1cXG5AQCAtNTA1MSwyMSArNTExMywyNiBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKiBhbGwgdW53cml0dGVuIGV4dGVudHMgd2l0aGluIHRoaXMgcmFuZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQgdG9cXG4gICogd3JpdHRlbiBleHRlbnRzLlxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QgSU8gZW5kIGlvIGNhbGwgYmFja1xcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cXG4tICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdC9idWZmZXJlZCBJL08gZW5kIGlvIGNhbGwgYmFja1xcbisgKiBmdW5jdGlvbiBhbmQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUywgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZFxcbisgKiB1bndyaXR0ZW4gZXh0ZW50cyBhZnRlciBkYXRhIEkvTyBpcyBjb21wbGV0ZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBmdWxsIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBwYXJ0aWFsXFxuKyAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gVGhlIG51bWJlciBvZiBibG9ja3MgY29udmVydGVkIGlzIHJldHVybmVkIHZpYVxcbisgKiBAY29udmVydGVkLlxcbiAgKi9cXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcXG4rXFx0XFx0XFx0XFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG1heF9ibG9ja3M7XFxuK1xcdGV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDtcXG4gXFx0aW50IHJldCA9IDAsIHJldDIgPSAwLCByZXQzID0gMDtcXG4gXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuIFxcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0dW5zaWduZWQgaW50IGNyZWRpdHMgPSAwO1xcbiBcXG4gXFx0bWFwLm1fbGJsayA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbi1cXHRtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcXG4rXFx0bWFwLm1fbGVuID0gbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7XFxuIFxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHQvKlxcbkBAIC01MDczLDkgKzUxNDAsOCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjcmVkaXRzID0gZXh0NF9jaHVua190cmFuc19ibG9ja3MoaW5vZGUsIG1heF9ibG9ja3MpO1xcbiBcXHR9XFxuLVxcdHdoaWxlIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyBtYXhfYmxvY2tzKSB7XFxuLVxcdFxcdG1hcC5tX2xibGsgKz0gcmV0O1xcbi1cXHRcXHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSByZXQpO1xcbitcXG4rXFx0d2hpbGUgKG1heF9ibG9ja3MpIHtcXG4gXFx0XFx0aWYgKGNyZWRpdHMpIHtcXG4gXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG5AQCAtNTA5MiwyMyArNTE1OCwzNCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLFxcbiBcXHRcXHRcXHRcXHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfSU9fQ09OVkVSVF9FWFQgfFxcbiBcXHRcXHRcXHRcXHQgICAgICBFWFQ0X0VYX05PQ0FDSEUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBcXFwiXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImV4dDRfZXh0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tXFx0XFx0XFx0XFx0ICAgICBtYXAubV9sZW4sIHJldCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsaywgbWFwLm1fbGVuLCByZXQpO1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IDApKVxcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb252X2Jsb2NrcyArPSBtYXAubV9sZW47XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuIFxcdFxcdGlmIChjcmVkaXRzKSB7XFxuIFxcdFxcdFxcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0MykpXFxuIFxcdFxcdFxcdFxcdHJldDIgPSByZXQzO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDAgfHwgcmV0MilcXG4rXFx0XFx0cmV0ID0gcmV0IFxcdTAwM2MgMCA/IHJldCA6IHJldDI7XFxuK1xcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XFxuK1xcdFxcdG1hcC5tX2xlbiA9IChtYXhfYmxvY2tzIC09IG1hcC5tX2xlbik7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyByZXQyIDogcmV0O1xcbitcXHQvKiBDb252ZXJ0ZWQgc29tZSBvciBhbGwgYmxvY2tzIHN1Y2Nlc3NmdWxseT8gKi9cXG4rXFx0aWYgKGNvbnZlcnRlZClcXG4rXFx0XFx0KmNvbnZlcnRlZCA9IGNvbnZfYmxvY2tzO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXFxuQEAgLTUxMzEsNyArNTIwOCw3IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvX2VuZF92ZWMsIFxcdTAwMjZpb19lbmQtXFx1MDAzZWxpc3RfdmVjLCBsaXN0KSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsIGlvX2VuZC1cXHUwMDNlaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW9fZW5kX3ZlYy1cXHUwMDNlb2Zmc2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGlvX2VuZF92ZWMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGlvX2VuZF92ZWMtXFx1MDAzZXNpemUsIE5VTEwpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXFxuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDQvZmlsZS5jXFxuQEAgLTQzNiw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUpO1xcbiBcXHRlbHNlIGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbGFncyBcXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXFxuLVxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpO1xcbitcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTlVMTCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxODoyNi41OTA3Nzk1MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NzA5ODk3MjczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mYWxsb2NhdGVcIixcbiAgICBcImV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGRiZGEwNDIzYjE4Y2VjMTMzYjMyYTNjNzFjNzAyMjA5YzA0OWRiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE1OjE4OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM5MDEsNyArMzkwMSw4IEBAIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0XHQgIGxvZmZfdCBsZW4pO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xuK1x0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxuK1x0XHRcdFx0XHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IGQ1Zjg3YTdmNmMwNTcuLmEzZGRlN2JhMGQyM2UgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTcxLDYgKzQ1NzEsMjIgQEAgaW50IGV4dDRfZXh0X3RydW5jYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKlxuKyAqIFByZS1hbGxvY2F0ZSBibG9ja3MgZm9yIHRoZSByYW5nZSBbQG9mZnNldCwgQG9mZnNldCArIEBsZW4pLiBBbGxvY2F0ZWRcbisgKiBibG9ja3MgYXJlIG1hcmtlZCBhcyB1bndyaXR0ZW4gYnkgZGVmYXVsdC4gSWYgRVhUNF9HRVRfQkxPQ0tTX1pFUk8gaXNcbisgKiBzZXQsIHRoZSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSB6ZXJvZWQgb24gZGlzayBhbmQgdGhlaXIgZXh0ZW50cyBhcmVcbisgKiBjb252ZXJ0ZWQgdG8gd3JpdHRlbiBzdGF0ZS5cbisgKlxuKyAqIFdoZW4gQG5ld19zaXplIGlzIG5vbnplcm8sIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBleHRlbmQgdGhlIGZpbGUsIGFuZFxuKyAqIHRoZSBmaWxlIHNpemUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJsb2Nrcy5cbisgKlxuKyAqIEFsbG9jYXRpb24gbWF5IHBhcnRpYWxseSBzdWNjZWVkIGR1ZSB0byBzb21lIG5vbi1mYXRhbCBpc3N1ZXMuIEluIHRoYXRcbisgKiBjYXNlLCBpX2Rpc2tzaXplIChhbmQgaV9zaXplKSBpcyBhZHZhbmNlZCB1cCB0byB0aGUgc3VjY2Vzc2Z1bGx5XG4rICogcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhlIHJhbmdlLlxuKyAqXG4rICogUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgb3IgcGFydGlhbFxuKyAqIGZhaWx1cmUuXG4rICovXG4gc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbiB7XG5AQCAtNDU4NSw2ICs0NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4rXHRib29sIG9ycGhhbiA9IGZhbHNlO1xuIFxuIFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XG4gXHRtYXAubV9sYmxrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuQEAgLTQ2NTksMTkgKzQ2NzYsNDkgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4rXHRcdFx0ZXh0NF9sYmxrX3QgY29udmVydGVkO1xuK1xuK1x0XHRcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFx1MDAzZVxuK1x0XHRcdFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XG4rXG4gXHRcdFx0cmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLFxuIFx0XHRcdFx0XHRcdCBtYXAubV9sZW4pO1xuLVx0XHRcdGlmIChsaWtlbHkoIXJldCkpXG4tXHRcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcbitcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLFxuK1x0XHRcdFx0XHRcdCAgICBjcmVkaXRzKTtcbitcdFx0XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbitcdFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLFxuIFx0XHRcdFx0XHRpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuLVx0XHRcdFx0XHQobG9mZl90KW1hcC5tX2xlbiBcdTAwM2NcdTAwM2MgYmxrYml0cyk7XG4rXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuK1x0XHRcdFx0XHRcdTAwMjZjb252ZXJ0ZWQpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRicmVhaztcbitcdFx0XHRcdG1hcC5tX2xlbiA9IGNvbnZlcnRlZDtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIGJsb2NrcyBiZXlvbmQgaV9kaXNrc2l6ZSBhcmUgY29udmVydGVkLCBhZGRcbitcdFx0XHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChuZXdfc2l6ZSBcdTAwMjZcdTAwMjYgY29udmVydGVkKSB7XG4rXHRcdFx0XHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuK1x0XHRcdFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcbitcdFx0XHRcdG9ycGhhbiA9IHRydWU7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuK1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDM7XG4gXHRcdH1cbiBcbiBcdFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XG4gXHRcdG1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47XG4gXHRcdGVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuQEAgLTQ2ODcsMTEgKzQ3MzQsMjMgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0aWYgKGVwb3MgXHUwMDNlIG5ld19zaXplKVxuIFx0XHRlcG9zID0gbmV3X3NpemU7XG4gXG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMSk7XG4tXHRpZiAoSVNfRVJSKGhhbmRsZSkpXG4tXHRcdHJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7XG4rXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XG4rXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIGNvbnZlcnNpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIE5vdCBtdWNoIHRvXG4rXHRcdCAqIGRvIHdpdGggdGhlIGVycm9yIGhlcmUgc28ganVzdCBjbGVhbnVwIHRoZSBvcnBoYW4gbGlzdFxuK1x0XHQgKiBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuXG4rXHRcdCAqL1xuK1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4rXHRcdHJldDIgPSBQVFJfRVJSKGhhbmRsZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0ZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgZXBvcyk7XG4rXHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4rXG4gXHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XG4gXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbkBAIC00Njk5LDYgKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXG4gXHRpZiAoZXBvcyBcdTAwM2Ugb2xkX3NpemUpXG4gXHRcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIGVwb3MpO1xuK291dDpcbitcdGlmIChyZXQyKVxuK1x0XHRleHQ0X3N0ZF9lcnJvcihpbm9kZS1cdTAwM2VpX3NiLCByZXQyKTtcbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiByZXQyO1xuIH1cbkBAIC01MDUxLDIxICs1MTEzLDI2IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvXG4gICogd3JpdHRlbiBleHRlbnRzLlxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2tcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cbi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QvYnVmZmVyZWQgSS9PIGVuZCBpbyBjYWxsIGJhY2tcbisgKiBmdW5jdGlvbiBhbmQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUywgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZFxuKyAqIHVud3JpdHRlbiBleHRlbnRzIGFmdGVyIGRhdGEgSS9PIGlzIGNvbXBsZXRlZC5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBmdWxsIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBwYXJ0aWFsXG4rICogc3VjY2VzcyBvciBmYWlsdXJlLiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBjb252ZXJ0ZWQgaXMgcmV0dXJuZWQgdmlhXG4rICogQGNvbnZlcnRlZC5cbiAgKi9cbiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcbitcdFx0XHRcdCAgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcztcbitcdGV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDtcbiBcdGludCByZXQgPSAwLCByZXQyID0gMCwgcmV0MyA9IDA7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgaW50IGNyZWRpdHMgPSAwO1xuIFxuIFx0bWFwLm1fbGJsayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbi1cdG1heF9ibG9ja3MgPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBvZmZzZXQsIGJsa2JpdHMpO1xuK1x0bWFwLm1fbGVuID0gbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7XG4gXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHQvKlxuQEAgLTUwNzMsOSArNTE0MCw4IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICovXG4gXHRcdGNyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7XG4gXHR9XG4tXHR3aGlsZSAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyBtYXhfYmxvY2tzKSB7XG4tXHRcdG1hcC5tX2xibGsgKz0gcmV0O1xuLVx0XHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSByZXQpO1xuK1xuK1x0d2hpbGUgKG1heF9ibG9ja3MpIHtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiBcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG5AQCAtNTA5MiwyMyArNTE1OCwzNCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsXG4gXHRcdFx0XHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfSU9fQ09OVkVSVF9FWFQgfFxuIFx0XHRcdFx0ICAgICAgRVhUNF9FWF9OT0NBQ0hFKTtcbi1cdFx0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHQgICAgIFwiaW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFwiXG4tXHRcdFx0XHQgICAgIFwiZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwiLFxuLVx0XHRcdFx0ICAgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi1cdFx0XHRcdCAgICAgbWFwLm1fbGVuLCByZXQpO1xuK1x0XHRcdFx0ICAgICBcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcIixcbitcdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8sIG1hcC5tX2xibGssIG1hcC5tX2xlbiwgcmV0KTtcbitcdFx0XHRpZiAodW5saWtlbHkocmV0ID09IDApKVxuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb252X2Jsb2NrcyArPSBtYXAubV9sZW47XG4rXHRcdH1cbitcbiBcdFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0MykpXG4gXHRcdFx0XHRyZXQyID0gcmV0MztcbiBcdFx0fVxuLVxuLVx0XHRpZiAocmV0IFx1MDAzYz0gMCB8fCByZXQyKVxuK1x0XHRyZXQgPSByZXQgXHUwMDNjIDAgPyByZXQgOiByZXQyO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRtYXAubV9sYmxrICs9IG1hcC5tX2xlbjtcbitcdFx0bWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gbWFwLm1fbGVuKTtcbiBcdH1cbi1cdHJldHVybiByZXQgXHUwMDNlIDAgPyByZXQyIDogcmV0O1xuK1x0LyogQ29udmVydGVkIHNvbWUgb3IgYWxsIGJsb2NrcyBzdWNjZXNzZnVsbHk/ICovXG4rXHRpZiAoY29udmVydGVkKVxuK1x0XHQqY29udmVydGVkID0gY29udl9ibG9ja3M7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbkBAIC01MTMxLDcgKzUyMDgsNyBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW9fZW5kX3ZlYywgXHUwMDI2aW9fZW5kLVx1MDAzZWxpc3RfdmVjLCBsaXN0KSB7XG4gXHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsIGlvX2VuZC1cdTAwM2Vpbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlb2Zmc2V0LFxuLVx0XHRcdFx0XHRcdCAgICAgaW9fZW5kX3ZlYy1cdTAwM2VzaXplKTtcbitcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlc2l6ZSwgTlVMTCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXG4rKysgYi9mcy9leHQ0L2ZpbGUuY1xuQEAgLTQzNiw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbiBcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzaXplKTtcbiBcdGVsc2UgaWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXG4tXHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpO1xuK1x0XHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplLFxuK1x0XHRcdFx0XHRcdCAgICAgICBOVUxMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjI2LjU5MDc4MDU2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzQ4ODQxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgZnMvZXh0NC9leHRlbnRzLmNgLiBJdCdzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgY29kZTogYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AgYW5kIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYC4gSW1tZWRpYXRlbHksIEkgc2VlIGEgbmV3IHBhcmFtZXRlciwgYGV4dDRfbGJsa190ICpjb252ZXJ0ZWRgLCBiZWluZyBhZGRlZCB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBsaWtlbHkgZm9yIHRyYWNraW5nIHdoYXQncyBiZWVuIGNvbnZlcnRlZC4gVGhlIGZhY3QgdGhhdCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24sIGNvbnZlcnNpb24sIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50IHN1Z2dlc3RzIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBtaW5vciB0d2Vhay4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgZm9yIGZpbGVzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgYXJvdW5kIGZhbGxvY2F0ZSwgemVyb2luZywgYW5kIHRoZSBoYW5kbGluZyBvZiB1bndyaXR0ZW4gZXh0ZW50cywgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MgYXMgZXhwZWN0ZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHByZWNpc2VseSAqaG93KiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXMgYmVpbmcgdXNlZC4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMsIGxpa2VseSB0aHJvdWdoIGEgY2FsbCBsaWtlIGBleHQ0X3plcm9fcmFuZ2VgLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIG5ldyBgY29udmVydGVkYCBwYXJhbWV0ZXIgbWlnaHQgYWZmZWN0IHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjMyLjE2NTY3MDE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDU3MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1ODktICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU5MDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU5MS1cXHRcXHRcXHRcXHQgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDc3Mj1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODAzLVxcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODA0OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDUtXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODQ1LVxcdFxcdFxcdFxcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODQ2OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg0Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4OTM9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTE3LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MTg6XFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkxOS1cXHRcXHRcXHRcXHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjM0LjA0MDczMzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTQ3MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogZXh0NCBCbG9jayBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJsb2NrIGFsbG9jYXRpb24gd29ya3MgaW4gZXh0NCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEZyb20gd2hhdCBJJ3ZlIHRyYWNlZCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGV4dDRfemVyb19yYW5nZWAgYW5kIGBleHQ0X2RvX2ZhbGxvY2F0ZWAsIHdoaWNoIGFyZSBzaWduaWZpY2FudCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBJIGFsc28gc2VlIHRoYXQgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AgZ2V0cyBjYWxsZWQgZnJvbSBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFzIHdlbGwgYXMgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AsIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLCBhbmQgb3RoZXIgaW1wb3J0YW50IHBsYWNlcy4gVGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBjbGVhciBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gYGV4dDRfZG9fZmFsbG9jYXRlYCBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBhc3N1bWluZyBpdCdzIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpdHNlbGYgaXMgc3RhdGljLCBzbyBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBzdWNoIGFzIGBleHQ0X2ZhbGxvY2F0ZWAuXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYGV4dDRfZmFsbG9jYXRlYCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBpbW1lZGlhdGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjM5LjMxNjIwNzUwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE3OTgwNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZmFsbG9jYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MDA9ZXh0ZXJuIHZvaWQgZXh0NF9leHRfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwMTpleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvZXh0NC9leHQ0LmgtMzkwMi1cXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDg5Mz1zdGF0aWMgbG9uZyBleHQ0X2RvX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDAtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkwMTpcXHR0cmFjZV9leHQ0X2ZhbGxvY2F0ZV9lbnRlcihpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDItXFx0V0FSTl9PTl9PTkNFKCFpbm9kZV9pc19sb2NrZWQoaW5vZGUpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5Mjgtb3V0OlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjk6XFx0dHJhY2VfZXh0NF9mYWxsb2NhdGVfZXhpdChpbm9kZSwgb2Zmc2V0LFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MzAtXFx0XFx0XFx0RVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKSwgcmV0KTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NDAtICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDk0MTpsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5mcy9leHQ0L2V4dGVudHMuYy00OTQyLXtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTEwMzM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTEwNDgtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9leHQ0L2ZpbGUuYzoxMDQ5OlxcdC5mYWxsb2NhdGVcXHQ9IGV4dDRfZmFsbG9jYXRlLFxcbmZzL2V4dDQvZmlsZS5jLTEwNTAtXFx0LmZvcF9mbGFnc1xcdD0gRk9QX01NQVBfU1lOQyB8IEZPUF9CVUZGRVJfUkFTWU5DIHxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDI5PURFQ0xBUkVfRVZFTlRfQ0xBU1MoZXh0NF9fZmFsbG9jYXRlX21vZGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Ni1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ1NzpERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfZmFsbG9jYXRlX2VudGVyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDU4LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0NzE9REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Ny1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ3ODpUUkFDRV9FVkVOVChleHQ0X2ZhbGxvY2F0ZV9leGl0LFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDc5LVxcdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjQxLjQzNDE5NDkxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODkwMzEzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZXh0NF9mYWxsb2NhdGVgIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28sIGBleHQ0X2ZhbGxvY2F0ZWAgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgKmZhbGxvY2F0ZSogZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhhdCdzIHdoYXQgSSdkIGV4cGVjdC4gSXQncyB0aGUgcG9pbnQgb2YgY29udGFjdCwgdGhlIGdhdGV3YXkuIFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhpcyBleGFtaW5hdGlvbj9cblxuQW5kIHRoZXJlJ3MgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIEhtbSwgb2theSwgaXQncyBhbHNvIGV4cG9zZWQsIG9yIGF0IGxlYXN0IG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgcHJvYmFibHkgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIGhvdyAqZmFsbG9jYXRlKiB3b3JrcyBpdHMgbWFnaWMgaW4gdW53cml0dGVuIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uLiBJdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbyBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSBtb3JlIHRoYW4ganVzdCB3aXRoaW4gdGhlIGNvcmUgKmZhbGxvY2F0ZSogaW1wbGVtZW50YXRpb24gaXRzZWxmLiBDb3VsZCBiZSB1c2VkIGJ5IG90aGVyIGV4dDQgb3BlcmF0aW9ucyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ5IHJlbGF0ZWQgZmVhdHVyZXMuIEludGVyZXN0aW5nLi4uIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIFRoaXMgY291bGQgaW52b2x2ZSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHVud3JpdHRlbiBleHRlbnRzLCB3aGljaCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIHplcm9pbmcvcHJlLWFsbG9jYXRpb24gYXNwZWN0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaG93IHRoZXNlIHR3byBhcmUgd29ya2luZyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjQ1LjEyMzIyODQ5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1NDM1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTAxPWV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9leHQ0L2V4dDQuaC0zOTAyLVxcdFxcdFxcdCAgbG9mZl90IGxlbik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwMzpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MDQtXFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcXG5mcy9leHQ0L2V4dDQuaC0zOTA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwNjpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzgwOS0gKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb25cXG5mcy9leHQ0L2V4dGVudHMuYzozODEwOiAqIHZpYSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoKS5cXG5mcy9leHQ0L2V4dGVudHMuYy0zODExLSAqXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zOTEzPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXFxuZnMvZXh0NC9leHRlbnRzLmM6MzkxNDpleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZW5kaW8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy0zOTE1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQwMTQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlQpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MDE1OlxcdFxcdHBhdGggPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZW5kaW8oaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy00MDE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtYXAsIHBhdGgsIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ1OTA9c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5NS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0Njk2OlxcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5Ny1cXHRcXHRcXHRcXHRcXHRpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHMsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0NS0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1MDQ2OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0Ny1cXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTEyMy0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1MTI0OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MTI1LVxcdFxcdFxcdFxcdCAgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTE5MT1pbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMDgtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCBcXHUwMDI2aW9fZW5kLVxcdTAwM2VsaXN0X3ZlYywgbGlzdCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjUyMDk6XFx0XFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVxcdTAwM2Vpbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MjEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW9fZW5kX3ZlYy1cXHUwMDNlb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NDI3PXN0YXRpYyBpbnQgZXh0NF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLFxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDM1LVxcdFxcdFxcdChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfQVRPTUlDKSlcXG5mcy9leHQ0L2ZpbGUuYzo0MzY6XFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXFxuZnMvZXh0NC9maWxlLmMtNDM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUpO1xcbmZzL2V4dDQvZmlsZS5jLTQzOC1cXHRlbHNlIGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbGFncyBcXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXFxuZnMvZXh0NC9maWxlLmM6NDM5OlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXFxuZnMvZXh0NC9maWxlLmMtNDQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTg6NDcuMTA4NjY4MDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0MjY0Mjg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AncyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBJdCdzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AsIGFuZCBgZXh0NF9kaW9fd3JpdGVfZW5kX2lvYC4gTm93LCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXRzZWxmIGdldHMgaW52b2tlZCBmcm9tIGBleHQ0X3plcm9fcmFuZ2VgIGFuZCBgZXh0NF9kb19mYWxsb2NhdGVgLlxuXG5HaXZlbiB0aGlzLCBmb2N1c2luZyBvbiBgZXh0NF9mYWxsb2NhdGVgIGFuZCBwb3RlbnRpYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2guIFRoZXkncmUgbGlrZWx5IGtleSBlbnRyeSBwb2ludHMgdGhhdCBmdW5uZWwgaW50byB0aGF0IGNvbnZlcnNpb24gZnVuY3Rpb24uIEhvbGQgb24sIHRob3VnaC4uLiBgZXh0NF96ZXJvX3JhbmdlYCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBpdHMgZGlyZWN0IHZpc2liaWxpdHkgZm9yIGV4dGVybmFsIGNhbGxzLCByaWdodD8gVGhhdCBtYWtlcyBgZXh0NF9mYWxsb2NhdGVgIHRoZSBtb3JlIGludGVyZXN0aW5nIHN5bWJvbCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFzIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB0aGVyZWZvcmUgcHJvYmFibHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byBgZXh0NF9mYWxsb2NhdGVgIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTg6NTQuNjUxMzEzNzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ2MzQ3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF96ZXJvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0ZW50cy5jPTQ3NzA9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDc3MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzcyOnN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG5mcy9leHQ0L2V4dGVudHMuYy00NzczLVxcdFxcdFxcdCAgICBsb2ZmX3QgbGVuLCBpbnQgbW9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3ODItXFxuZnMvZXh0NC9leHRlbnRzLmM6NDc4MzpcXHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00Nzg0LVxcdFdBUk5fT05fT05DRSghaW5vZGVfaXNfbG9ja2VkKGlub2RlKSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTAwOS1cXHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XFxuZnMvZXh0NC9leHRlbnRzLmM6NTAxMDpcXHRcXHRyZXQgPSBleHQ0X3plcm9fcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTUwMTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Mzk5NT12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MDE2LSAqIEhlcmUgd2UgY2FuJ3Qgc2tpcCBhbiB1bndyaXR0ZW4gYnVmZmVyIGV2ZW4gdGhvdWdoIGl0IHVzdWFsbHkgcmVhZHMgemVyb1xcbmZzL2V4dDQvaW5vZGUuYzo0MDE3OiAqIGJlY2F1c2UgaXQgbWlnaHQgaGF2ZSBkYXRhIGluIHBhZ2VjYWNoZSAoZWcsIGlmIGNhbGxlZCBmcm9tIGV4dDRfemVyb19yYW5nZSxcXG5mcy9leHQ0L2lub2RlLmMtNDAxOC0gKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGFcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDY0PURFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9wdW5jaF9ob2xlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NzAtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjE0NzE6REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjU2LjUxNTk1NjAzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDYyNDIwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEV4dDQgRmFsbG9jIGFuZCBaZXJvaW5nIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgemVyb2luZyBhbmQgc3BhY2UgYWxsb2NhdGlvbiB3b3JrIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIHNlZSB0aGF0IGBleHQ0X2ZhbGxvY2F0ZWAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IGNhbGxzIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYC4gVGhpcyBpcyB0aGUgZXhwZWN0ZWQgZGVzaWduLiBJIGtub3cgYGZhbGxvY2F0ZWAgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgdGFza3MgcmVsYXRlZCB0byBmaWxlIHNwYWNlIGFsbG9jYXRpb24sIGFuZCB6ZXJvaW5nIGlzIG9uZSBvZiB0aG9zZSBjcnVjaWFsIG9wZXJhdGlvbnMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gbm90aWNpbmcgdGhhdCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBpcyBjYWxsZWQgZnJvbSB0d28ga2V5IElPIGNvbXBsZXRpb24gcGF0aHM6IGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gKnVud3JpdHRlbiBleHRlbnRzKiBpbiB0aGVzZSBjb250ZXh0cyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCdzIGludm9rZWQgZHVyaW5nIERpcmVjdCBJTyBhbmQgYnVmZmVyZWQgSU8gd2l0aCB1bndyaXR0ZW4gZXh0ZW50cy4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyB0aG9zZSB1bndyaXR0ZW4gZXh0ZW50cyBpbnRvIHNvbWV0aGluZyB1c2FibGUsIHBvc3NpYmx5IGFmdGVyIGEgd3JpdGUgb3Igd2hlbiBzcGFjZSBpcyBuZWVkZWQuXG5cbkknbSBub3cgZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gS25vd2luZyB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGNhbGxlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWFsaW5nIHdpdGggdGhlIEkvTyB2ZWN0b3IgYW5kIHdoYXQgc3BlY2lmaWMgdHJhbnNmb3JtYXRpb25zIGl0J3MgcGVyZm9ybWluZyBvbiB0aGVzZSBleHRlbnRzLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBjb252ZXJ0aW5nIHVud3JpdHRlbiBleHRlbnRzIHRvIGFjdHVhbCBibG9ja3MgaGFwcGVucywgYW5kIGl0J3MgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOTowMi41NzgzNzk4NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjk4MDI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MDY9ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwODpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MDktXFx0XFx0XFx0XFx0XFx0ICAgICBleHQ0X2lvX2VuZF90ICppb19lbmQpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTEyND1pbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01MTkwLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjUxOTE6aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXFxuZnMvZXh0NC9leHRlbnRzLmMtNTE5Mi17XFxuLS1cXG5mcy9leHQ0L3BhZ2UtaW8uYz0xNjc9c3RhdGljIGludCBleHQ0X2VuZF9pb19lbmQoZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxcbi0tXFxuZnMvZXh0NC9wYWdlLWlvLmMtMTkwLVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9wYWdlLWlvLmM6MTkxOlxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGUsIGlvX2VuZCk7XFxuZnMvZXh0NC9wYWdlLWlvLmMtMTkyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MDQuNTA4MTg3Mzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTQxNzg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBleHQ0IEkvTyBDb21wbGV0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb21wbGV0aW9uIHBhdGggZm9yIEkvTyBvcGVyYXRpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3Mgd3JhcCB1cCBhZnRlciBhIHdyaXRlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgZXh0NF9lbmRfaW9fZW5kYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGBleHQ0X2VuZF9pb19yc3Zfd29ya2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZTogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyB3aGVyZSB0aGlzIGNvbXBsZXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gQW5kLCBoZXksIGxldCdzIG5vdCBmb3JnZXQgdG8gY2hlY2sgYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AgYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoYXQncyB3aGVyZSB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBsaWVzLCBhc3N1bWluZyBpdCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToxMC4yMjIzNjkwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODUzNDg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9kaW9fd3JpdGVfZW5kX2lvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTM5MD1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2V4dGVuc2lvbl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgbmVlZF90cnVuYylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTQyNi1cXG5mcy9leHQ0L2ZpbGUuYzo0Mjc6c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuZnMvZXh0NC9maWxlLmMtNDI4LVxcdFxcdFxcdFxcdCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xcbmZzL2V4dDQvZmlsZS5jOjQ2MDpcXHQuZW5kX2lvID0gZXh0NF9kaW9fd3JpdGVfZW5kX2lvLFxcbmZzL2V4dDQvZmlsZS5jLTQ2MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToxMi4zMDc3MjIzMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTg3ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWduYXRpb24gaW4gRXh0NCdzIEZhbGxvY2F0ZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoZSBhbmFseXNpcyBpc24ndCBwcm9ncmVzc2luZyBhcyBleHBlY3RlZC4gSXQgc2VlbXMgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIG9uIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZhbGxvY2F0ZSBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGludG8gYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiBvbmUgb2YgdGhlc2UsIG9yIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVtLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSByZWxldmFudCBzb3VyY2UgY29kZSBzaG91bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBmcy9leHQ0L2AgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBxdWljayBjaGVjaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldCBiZWZvcmUgZ29pbmcgZGVlcGVyIGludG8gdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MTcuNTgzNjAyNTMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUyNzU4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE5OjE5LjUzNjM2NzkyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDM2MzEwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzY2VuYXJpbywgZm9jdXNpbmcgb24gdGhlIGNvcmUgcHJvYmxlbSBhbmQgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIEVYVDQsIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWVtcyB0byBiZSBgQ09ORklHX0VYVDRfRlNgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRob3VnaCwgdGhhdCB0aGVyZSBhcmVuJ3QgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaCBvciBkZXBlbmQgb24gaXQuIFRoYXQncyBhbHdheXMgbXkgZmlyc3Qgc3RlcCDigJMgZXhoYXVzdGl2ZWx5IGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dDQuaGAsIGFuZCBgZnMvZXh0NC9maWxlLmNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGZpbGVzIGFyZSBjb3JlIHRvIHRoZSBFWFQ0IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBleHRlbnRzLCB0aGUgZmlsZSBzeXN0ZW0gaGVhZGVyLCBhbmQgY29yZSBmaWxlIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZmlsZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqd2hlbiogYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIHRoZSBsaW5rLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIG1pZ2h0IGNoYW5nZSB0aGUgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS5cblxuTmV4dCwgSSBuZWVkIHRvIG9wZW4gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSB3aWxsIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzLCBvciBjb25kaXRpb25hbCBidWlsZCBydWxlcywgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIHBhdGNoLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGJ1aWxkcy4gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaW4gYSBidWlsZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToyNC45NzI2ODg0MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggZXh0NC1maWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfRVhUNF9GUykgKz0gZXh0NC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbiAgMTY6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG4gIDE3OlxcdGV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXHRcXHQrPSBleHQ0LXRlc3Qub1xcbiAgMjA6XFx0ZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXFx0XFx0Kz0gdmVyaXR5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MjQuOTcyODA2ODM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjYyMDk0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBleHRlbnRzLm9gIGFuZCBgZmlsZS5vYCBhcmUgaW5kZWVkIHBhcnQgb2YgYGV4dDQteWAuIFRoYXQncyBnb29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBjcml0aWNhbCBmdW5jdGlvbnM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZSBjaGFuZ2VzIHNvdW5kIGZ1bmN0aW9uYWwsIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIGFsbG9jYXRpb24sIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMsIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGJlIHJpcGUgZm9yIGVkZ2UgY2FzZXMgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgc2hvdWxkIGJlIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVtLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBmYWxsb2NhdGVgLCB6ZXJvaW5nLCBhbmQgdGhlIGNyaXRpY2FsIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC0tIGFsbCBzaWduYWwgcG90ZW50aWFsIGZvciBpc3N1ZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHJlYWNoYWJsZSBjb2RlLCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIGtleSBjb25maWcgbmVlZGVkIGZvciB0aGlzLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZC5cblxuQXMgYSBxdWljayBzaWRlIG5vdGUsIEkgc2hvdWxkIGdpdmUgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWNgIGEgY3Vyc29yeSBsb29rLW92ZXIgdG8gY2hlY2sgZm9yIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOTozNC44MzkwMTg5NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDc3NjE5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTAzPWV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zOTA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwNjpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5NDE9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ1LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjUwNDY6aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ3LVxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz00Mjc9c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy00MzUtXFx0XFx0XFx0KGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9BVE9NSUMpKVxcbmZzL2V4dDQvZmlsZS5jOjQzNjpcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoTlVMTCwgaW5vZGUsIHBvcyxcXG5mcy9leHQ0L2ZpbGUuYy00MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE5OjM2LjY0Njc5MDU4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY1MDIwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgQ29kZSBDaGFuZ2VzIGFuZCBJZGVudGlmeWluZyBLZXkgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgc29tZXRoaW5nIHNpZ25pZmljYW50IGlzIGhhcHBlbmluZyB3aXRoIGhvdyBleHRlbnRzIGFyZSBiZWluZyBoYW5kbGVkLiBUaGUgZmFjdCB0aGF0IGEgZnVuY3Rpb24gaXMgYm90aCBcImV4cG9ydGVkIGFuZCBtb2RpZmllZFwiIHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgdG8gc2VlIHdoYXQgdGhlIGNoYW5nZXMgaW1wbHkuIFdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBjbG9zZXIsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljYCAqd2Fzbid0KiBhY3R1YWxseSB0b3VjaGVkLCBpdCdzIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIHRoYXQncyB0aGUgb25lIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIFRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyBkaWZmZXJlbmNlLiBJdCBtaWdodCBiZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZSBmb2N1cyBzaGlmdGVkIGZyb20gb25lIGZ1bmN0aW9uIHRvIHRoZSBvdGhlci4gTm93IHRoYXQgSSBoYXZlIG15IGZhY3RzIHN0cmFpZ2h0LCBJIGNhbiBzZXQgbXkgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwODcsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6NDMuNjExODE0MDc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MzUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-30 15:03:00 +0000 UTC FinishedAt: 2026-07-30 15:19:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "67b502bada32afb3a8822641066e7bd223778210", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "67b502bada32afb3a8822641066e7bd223778210", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "7f4013c6-6153-4db4-bb06-3abcedff4096" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_fallocate", "ext4_convert_unwritten_extents", "ext4_convert_unwritten_io_end_vec" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X2ZhbGxvY2F0ZSYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMmIzM0OywKICAgICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljIGZvciBoYW5kbGluZyBmYWxsb2NhdGUsIHplcm9vdXQsIGFuZCB1bndyaXR0ZW4gZXh0ZW50cyBjb252ZXJzaW9uLiBJdCB1cGRhdGVzIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9uL2NvbnZlcnNpb24gYW5kIG9ycGhhbiBsaXN0IG1hbmFnZW1lbnQsIGFuZCBhZGRzIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29kZSBwYXRocyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4ZGJkYTA0MjNiMThjZWMxMzNiMzJhM2M3MWM3MDIyMDljMDQ5ZGJjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdWwgMzAgMTU6MTg6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM5MDEsNyAmIzQzOzM5MDEsOCBAQCBleHRlcm4gdm9pZCBleHQ0X2V4dF9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcbiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG4gXHRcdFx0ICBsb2ZmX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiYjNDM7XHRcdFx0XHRcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0XHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IGQ1Zjg3YTdmNmMwNTcuLmEzZGRlN2JhMGQyM2UgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTcxLDYgJiM0Mzs0NTcxLDIyIEBAIGludCBleHQ0X2V4dF90cnVuY2F0ZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFByZS1hbGxvY2F0ZSBibG9ja3MgZm9yIHRoZSByYW5nZSBbQG9mZnNldCwgQG9mZnNldCAmIzQzOyBAbGVuKS4gQWxsb2NhdGVkXG4mIzQzOyAqIGJsb2NrcyBhcmUgbWFya2VkIGFzIHVud3JpdHRlbiBieSBkZWZhdWx0LiBJZiBFWFQ0X0dFVF9CTE9DS1NfWkVSTyBpc1xuJiM0MzsgKiBzZXQsIHRoZSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSB6ZXJvZWQgb24gZGlzayBhbmQgdGhlaXIgZXh0ZW50cyBhcmVcbiYjNDM7ICogY29udmVydGVkIHRvIHdyaXR0ZW4gc3RhdGUuXG4mIzQzOyAqXG4mIzQzOyAqIFdoZW4gQG5ld19zaXplIGlzIG5vbnplcm8sIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBleHRlbmQgdGhlIGZpbGUsIGFuZFxuJiM0MzsgKiB0aGUgZmlsZSBzaXplIHNob3VsZCBiZSB1cGRhdGVkIHRvIHRoZSBlbmQgb2YgdGhlIGFsbG9jYXRlZCBibG9ja3MuXG4mIzQzOyAqXG4mIzQzOyAqIEFsbG9jYXRpb24gbWF5IHBhcnRpYWxseSBzdWNjZWVkIGR1ZSB0byBzb21lIG5vbi1mYXRhbCBpc3N1ZXMuIEluIHRoYXRcbiYjNDM7ICogY2FzZSwgaV9kaXNrc2l6ZSAoYW5kIGlfc2l6ZSkgaXMgYWR2YW5jZWQgdXAgdG8gdGhlIHN1Y2Nlc3NmdWxseVxuJiM0MzsgKiBwcm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgcmFuZ2UuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybiAwIG9uIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlIG9yIHBhcnRpYWxcbiYjNDM7ICogZmFpbHVyZS5cbiYjNDM7ICovXG4gc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbiB7XG5AQCAtNDU4NSw2ICYjNDM7NDYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcdGxvZmZfdCBlcG9zID0gMCwgb2xkX3NpemUgPSBpX3NpemVfcmVhZChpbm9kZSk7XG4gXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xuJiM0MztcdGJvb2wgb3JwaGFuID0gZmFsc2U7XG4gXG4gXHRCVUdfT04oIWV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VYVEVOVFMpKTtcbiBcdG1hcC5tX2xibGsgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG5AQCAtNDY1OSwxOSAmIzQzOzQ2NzYsNDkgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4mIzQzO1x0XHRcdGV4dDRfbGJsa190IGNvbnZlcnRlZDtcbiYjNDM7XG4mIzQzO1x0XHRcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICYjNDM7IG1hcC5tX2xlbiBcdTAwM2VcbiYjNDM7XHRcdFx0XHRFWFQ0X0JfVE9fTEJMSyhpbm9kZSwgbmV3X3NpemUgPzogb2xkX3NpemUpKTtcbiYjNDM7XG4gXHRcdFx0cmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLFxuIFx0XHRcdFx0XHRcdCBtYXAubV9sZW4pO1xuLVx0XHRcdGlmIChsaWtlbHkoIXJldCkpXG4tXHRcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcbiYjNDM7XHRcdFx0aWYgKHVubGlrZWx5KHJldCkpXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgIGNyZWRpdHMpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbiYjNDM7XHRcdFx0XHRyZXQgPSBQVFJfRVJSKGhhbmRsZSk7XG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXG4gXHRcdFx0XHRcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXHUwMDNjXHUwMDNjIGJsa2JpdHMsXG4tXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzKTtcbiYjNDM7XHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuJiM0MztcdFx0XHRcdFx0XHUwMDI2Y29udmVydGVkKTtcbiBcdFx0XHRpZiAocmV0KVxuLVx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0bWFwLm1fbGVuID0gY29udmVydGVkO1xuJiM0MztcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZFxuJiM0MztcdFx0XHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKG5ld19zaXplIFx1MDAyNlx1MDAyNiBjb252ZXJ0ZWQpIHtcbiYjNDM7XHRcdFx0XHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuJiM0MztcdFx0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDI7XG4mIzQzO1x0XHRcdFx0b3JwaGFuID0gdHJ1ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcbiYjNDM7XHRcdFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDM7XG4gXHRcdH1cbiBcbiBcdFx0bWFwLm1fbGJsayAmIzQzOz0gbWFwLm1fbGVuO1xuIFx0XHRtYXAubV9sZW4gPSBsZW5fbGJsayA9IGxlbl9sYmxrIC0gbWFwLm1fbGVuO1xuIFx0XHRlcG9zID0gRVhUNF9MQkxLX1RPX0IoaW5vZGUsIG1hcC5tX2xibGspO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuQEAgLTQ2ODcsMTEgJiM0Mzs0NzM0LDIzIEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcdGlmIChlcG9zIFx1MDAzZSBuZXdfc2l6ZSlcbiBcdFx0ZXBvcyA9IG5ld19zaXplO1xuIFxuLVx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01JU0MsIDEpO1xuLVx0aWYgKElTX0VSUihoYW5kbGUpKVxuLVx0XHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xuJiM0MztcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUaGUgY29udmVyc2lvbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm90IG11Y2ggdG9cbiYjNDM7XHRcdCAqIGRvIHdpdGggdGhlIGVycm9yIGhlcmUgc28ganVzdCBjbGVhbnVwIHRoZSBvcnBoYW4gbGlzdFxuJiM0MztcdFx0ICogYW5kIGhvcGUgZm9yIHRoZSBiZXN0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuJiM0MztcdFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuJiM0MztcdFx0cmV0MiA9IFBUUl9FUlIoaGFuZGxlKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiBcbiBcdGV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpO1xuJiM0MztcdGlmIChvcnBoYW4gXHUwMDI2XHUwMDI2IGlub2RlLVx1MDAzZWlfbmxpbmspXG4mIzQzO1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4mIzQzO1xuIFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdGV4dDRfdXBkYXRlX2lub2RlX2ZzeW5jX3RyYW5zKGhhbmRsZSwgaW5vZGUsIDEpO1xuIFx0cmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG5AQCAtNDY5OSw2ICYjNDM7NDc1OCw5IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbiBcbiBcdGlmIChlcG9zIFx1MDAzZSBvbGRfc2l6ZSlcbiBcdFx0cGFnZWNhY2hlX2lzaXplX2V4dGVuZGVkKGlub2RlLCBvbGRfc2l6ZSwgZXBvcyk7XG4mIzQzO291dDpcbiYjNDM7XHRpZiAocmV0MilcbiYjNDM7XHRcdGV4dDRfc3RkX2Vycm9yKGlub2RlLVx1MDAzZWlfc2IsIHJldDIpO1xuIFxuIFx0cmV0dXJuIHJldCA/IHJldCA6IHJldDI7XG4gfVxuQEAgLTUwNTEsMjEgJiM0Mzs1MTEzLDI2IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvXG4gICogd3JpdHRlbiBleHRlbnRzLlxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2tcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cbi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0L2J1ZmZlcmVkIEkvTyBlbmQgaW8gY2FsbCBiYWNrXG4mIzQzOyAqIGZ1bmN0aW9uIGFuZCBGQUxMT0NfRkxfV1JJVEVfWkVST0VTLCB0byBjb252ZXJ0IHRoZSBmYWxsb2NhdGVkXG4mIzQzOyAqIHVud3JpdHRlbiBleHRlbnRzIGFmdGVyIGRhdGEgSS9PIGlzIGNvbXBsZXRlZC5cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJucyAwIG9uIGZ1bGwgc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIHBhcnRpYWxcbiYjNDM7ICogc3VjY2VzcyBvciBmYWlsdXJlLiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBjb252ZXJ0ZWQgaXMgcmV0dXJuZWQgdmlhXG4mIzQzOyAqIEBjb252ZXJ0ZWQuXG4gICovXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pXG4mIzQzO1x0XHRcdFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXG4mIzQzO1x0XHRcdFx0ICAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcztcbiYjNDM7XHRleHQ0X2xibGtfdCBtYXhfYmxvY2tzLCBjb252X2Jsb2NrcyA9IDA7XG4gXHRpbnQgcmV0ID0gMCwgcmV0MiA9IDAsIHJldDMgPSAwO1xuIFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XG4gXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVx1MDAzZWlfYmxrYml0cztcbiBcdHVuc2lnbmVkIGludCBjcmVkaXRzID0gMDtcbiBcbiBcdG1hcC5tX2xibGsgPSBvZmZzZXQgXHUwMDNlXHUwMDNlIGJsa2JpdHM7XG4tXHRtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcbiYjNDM7XHRtYXAubV9sZW4gPSBtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcbiBcbiBcdGlmICghaGFuZGxlKSB7XG4gXHRcdC8qXG5AQCAtNTA3Myw5ICYjNDM7NTE0MCw4IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICovXG4gXHRcdGNyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7XG4gXHR9XG4tXHR3aGlsZSAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyBtYXhfYmxvY2tzKSB7XG4tXHRcdG1hcC5tX2xibGsgJiM0Mzs9IHJldDtcbi1cdFx0bWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gcmV0KTtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKG1heF9ibG9ja3MpIHtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiBcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG5AQCAtNTA5MiwyMyAmIzQzOzUxNTgsMzQgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgXHUwMDI2bWFwLFxuIFx0XHRcdFx0ICAgICAgRVhUNF9HRVRfQkxPQ0tTX0lPX0NPTlZFUlRfRVhUIHxcbiBcdFx0XHRcdCAgICAgIEVYVDRfRVhfTk9DQUNIRSk7XG4tXHRcdGlmIChyZXQgXHUwMDNjPSAwKVxuJiM0MztcdFx0aWYgKHJldCBcdTAwM2M9IDApIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYixcbi1cdFx0XHRcdCAgICAgXCYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFwmIzM0O1xuLVx0XHRcdFx0ICAgICBcJiMzNDtleHQ0X2V4dF9tYXBfYmxvY2tzIHJldHVybmVkICVkXCYjMzQ7LFxuLVx0XHRcdFx0ICAgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi1cdFx0XHRcdCAgICAgbWFwLm1fbGVuLCByZXQpO1xuJiM0MztcdFx0XHRcdCAgICAgXCYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IGV4dDRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICAgIGlub2RlLVx1MDAzZWlfaW5vLCBtYXAubV9sYmxrLCBtYXAubV9sZW4sIHJldCk7XG4mIzQzO1x0XHRcdGlmICh1bmxpa2VseShyZXQgPT0gMCkpXG4mIzQzO1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGNvbnZfYmxvY2tzICYjNDM7PSBtYXAubV9sZW47XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0XHRpZiAoY3JlZGl0cykge1xuIFx0XHRcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0XHRcdGlmICh1bmxpa2VseShyZXQzKSlcbiBcdFx0XHRcdHJldDIgPSByZXQzO1xuIFx0XHR9XG4tXG4tXHRcdGlmIChyZXQgXHUwMDNjPSAwIHx8IHJldDIpXG4mIzQzO1x0XHRyZXQgPSByZXQgXHUwMDNjIDAgPyByZXQgOiByZXQyO1xuJiM0MztcdFx0aWYgKHJldClcbiBcdFx0XHRicmVhaztcbiYjNDM7XG4mIzQzO1x0XHRtYXAubV9sYmxrICYjNDM7PSBtYXAubV9sZW47XG4mIzQzO1x0XHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSBtYXAubV9sZW4pO1xuIFx0fVxuLVx0cmV0dXJuIHJldCBcdTAwM2UgMCA/IHJldDIgOiByZXQ7XG4mIzQzO1x0LyogQ29udmVydGVkIHNvbWUgb3IgYWxsIGJsb2NrcyBzdWNjZXNzZnVsbHk/ICovXG4mIzQzO1x0aWYgKGNvbnZlcnRlZClcbiYjNDM7XHRcdCpjb252ZXJ0ZWQgPSBjb252X2Jsb2NrcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiB9XG4gXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXG5AQCAtNTEzMSw3ICYjNDM7NTIwOCw3IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCBcdTAwMjZpb19lbmQtXHUwMDNlbGlzdF92ZWMsIGxpc3QpIHtcbiBcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVx1MDAzZWlub2RlLFxuIFx0XHRcdFx0XHRcdCAgICAgaW9fZW5kX3ZlYy1cdTAwM2VvZmZzZXQsXG4tXHRcdFx0XHRcdFx0ICAgICBpb19lbmRfdmVjLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlc2l6ZSwgTlVMTCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuY1xuQEAgLTQzNiw3ICYjNDM7NDM2LDggQEAgc3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4gXHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhOVUxMLCBpbm9kZSwgcG9zLFxuIFx0XHRcdFx0XHRcdFx0ICAgICAgc2l6ZSk7XG4gXHRlbHNlIGlmICghZXJyb3IgXHUwMDI2XHUwMDI2IHNpemUgXHUwMDI2XHUwMDI2IGZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVU5XUklUVEVOKVxuLVx0XHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplKTtcbiYjNDM7XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgICBOVUxMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0LypcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDhkYmRhMDQyM2IxOGNlYzEzM2IzMmEzYzcxYzcwMjIwOWMwNDlkYmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAzMCAxNToxODoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDQKLS0tIGEvZnMvZXh0NC9leHQ0LmgKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9leHQ0LmgKQEAgLTM5MDEsNyAmIzQzOzM5MDEsOCBAQCBleHRlcm4gdm9pZCBleHQ0X2V4dF9yZWxlYXNlKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwKIAkJCSAgbG9mZl90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQkgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTsKJiM0MzsJCQkJCSAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sCiYjNDM7CQkJCQkgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpOwogZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7CiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLApkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHRlbnRzLmMgYi9mcy9leHQ0L2V4dGVudHMuYwppbmRleCBkNWY4N2E3ZjZjMDU3Li5hM2RkZTdiYTBkMjNlIDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dGVudHMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dGVudHMuYwpAQCAtNDU3MSw2ICYjNDM7NDU3MSwyMiBAQCBpbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSkKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyoKJiM0MzsgKiBQcmUtYWxsb2NhdGUgYmxvY2tzIGZvciB0aGUgcmFuZ2UgW0BvZmZzZXQsIEBvZmZzZXQgJiM0MzsgQGxlbikuIEFsbG9jYXRlZAomIzQzOyAqIGJsb2NrcyBhcmUgbWFya2VkIGFzIHVud3JpdHRlbiBieSBkZWZhdWx0LiBJZiBFWFQ0X0dFVF9CTE9DS1NfWkVSTyBpcwomIzQzOyAqIHNldCwgdGhlIGFsbG9jYXRlZCBibG9ja3MgYXJlIHplcm9lZCBvbiBkaXNrIGFuZCB0aGVpciBleHRlbnRzIGFyZQomIzQzOyAqIGNvbnZlcnRlZCB0byB3cml0dGVuIHN0YXRlLgomIzQzOyAqCiYjNDM7ICogV2hlbiBAbmV3X3NpemUgaXMgbm9uemVybywgdGhlIGNhbGxlciBpbnRlbmRzIHRvIGV4dGVuZCB0aGUgZmlsZSwgYW5kCiYjNDM7ICogdGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLgomIzQzOyAqCiYjNDM7ICogQWxsb2NhdGlvbiBtYXkgcGFydGlhbGx5IHN1Y2NlZWQgZHVlIHRvIHNvbWUgbm9uLWZhdGFsIGlzc3Vlcy4gSW4gdGhhdAomIzQzOyAqIGNhc2UsIGlfZGlza3NpemUgKGFuZCBpX3NpemUpIGlzIGFkdmFuY2VkIHVwIHRvIHRoZSBzdWNjZXNzZnVsbHkKJiM0MzsgKiBwcm9jZXNzZWQgcG9ydGlvbiBvZiB0aGUgcmFuZ2UuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSBvciBwYXJ0aWFsCiYjNDM7ICogZmFpbHVyZS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAkJCQkgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKQogewpAQCAtNDU4NSw2ICYjNDM7NDYwMSw3IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAlsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpOwogCXVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAlib29sIGFsbG9jX3plcm8gPSBmYWxzZTsKJiM0MzsJYm9vbCBvcnBoYW4gPSBmYWxzZTsKIAogCUJVR19PTighZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRVhURU5UUykpOwogCW1hcC5tX2xibGsgPSBvZmZzZXQgJmd0OyZndDsgYmxrYml0czsKQEAgLTQ2NTksMTkgJiM0Mzs0Njc2LDQ5IEBAIHN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbiwKIAogCQlpZiAoYWxsb2NfemVybyAmYW1wOyZhbXA7CiAJCSAgICAobWFwLm1fZmxhZ3MgJmFtcDsgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7CiYjNDM7CQkJZXh0NF9sYmxrX3QgY29udmVydGVkOwomIzQzOwomIzQzOwkJCVdBUk5fT05fT05DRShtYXAubV9sYmxrICYjNDM7IG1hcC5tX2xlbiAmZ3Q7CiYjNDM7CQkJCUVYVDRfQl9UT19MQkxLKGlub2RlLCBuZXdfc2l6ZSA/OiBvbGRfc2l6ZSkpOwomIzQzOwogCQkJcmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLAogCQkJCQkJIG1hcC5tX2xlbik7Ci0JCQlpZiAobGlrZWx5KCFyZXQpKQotCQkJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLAomIzQzOwkJCWlmICh1bmxpa2VseShyZXQpKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQloYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUywKJiM0MzsJCQkJCQkgICAgY3JlZGl0cyk7CiYjNDM7CQkJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQkJCXJldCA9IFBUUl9FUlIoaGFuZGxlKTsKJiM0MzsJCQkJYnJlYWs7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsCiAJCQkJCWlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgJmx0OyZsdDsgYmxrYml0cywKLQkJCQkJKGxvZmZfdCltYXAubV9sZW4gJmx0OyZsdDsgYmxrYml0cyk7CiYjNDM7CQkJCQkobG9mZl90KW1hcC5tX2xlbiAmbHQ7Jmx0OyBibGtiaXRzLAomIzQzOwkJCQkJJmFtcDtjb252ZXJ0ZWQpOwogCQkJaWYgKHJldCkKLQkJCQlicmVhazsKJiM0MzsJCQkJbWFwLm1fbGVuID0gY29udmVydGVkOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZAomIzQzOwkJCSAqIHRoZSBpbm9kZSB0byB0aGUgb3JwaGFuIGxpc3QgYW5kIGFkdmFuY2UgdGhlIGVwb3MuCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKG5ld19zaXplICZhbXA7JmFtcDsgY29udmVydGVkKSB7CiYjNDM7CQkJCXJldDIgPSBleHQ0X29ycGhhbl9hZGQoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CQkJCXJldCA9IHJldCA/IHJldCA6IHJldDI7CiYjNDM7CQkJCW9ycGhhbiA9IHRydWU7CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpOwomIzQzOwkJCXJldCA9IHJldCA/IHJldCA6IHJldDM7CiAJCX0KIAogCQltYXAubV9sYmxrICYjNDM7PSBtYXAubV9sZW47CiAJCW1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47CiAJCWVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWJyZWFrOwogCX0KIAogCWlmIChyZXQgPT0gLUVOT1NQQyAmYW1wOyZhbXA7IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLSZndDtpX3NiLCAmYW1wO3JldHJpZXMpKQpAQCAtNDY4NywxMSAmIzQzOzQ3MzQsMjMgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLAogCWlmIChlcG9zICZndDsgbmV3X3NpemUpCiAJCWVwb3MgPSBuZXdfc2l6ZTsKIAotCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTsKLQlpZiAoSVNfRVJSKGhhbmRsZSkpCi0JCXJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7CiYjNDM7CWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAyKTsKJiM0MzsJaWYgKElTX0VSUihoYW5kbGUpKSB7CiYjNDM7CQkvKgomIzQzOwkJICogVGhlIGNvbnZlcnNpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIE5vdCBtdWNoIHRvCiYjNDM7CQkgKiBkbyB3aXRoIHRoZSBlcnJvciBoZXJlIHNvIGp1c3QgY2xlYW51cCB0aGUgb3JwaGFuIGxpc3QKJiM0MzsJCSAqIGFuZCBob3BlIGZvciB0aGUgYmVzdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKG9ycGhhbiAmYW1wOyZhbXA7IGlub2RlLSZndDtpX25saW5rKQomIzQzOwkJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiYjNDM7CQlyZXQyID0gUFRSX0VSUihoYW5kbGUpOwomIzQzOwkJZ290byBvdXQ7CiYjNDM7CX0KIAogCWV4dDRfdXBkYXRlX2lub2RlX3NpemUoaW5vZGUsIGVwb3MpOwomIzQzOwlpZiAob3JwaGFuICZhbXA7JmFtcDsgaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQlleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7CiYjNDM7CiAJcmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTsKIAlleHQ0X3VwZGF0ZV9pbm9kZV9mc3luY190cmFucyhoYW5kbGUsIGlub2RlLCAxKTsKIAlyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKQEAgLTQ2OTksNiAmIzQzOzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sCiAKIAlpZiAoZXBvcyAmZ3Q7IG9sZF9zaXplKQogCQlwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBlcG9zKTsKJiM0MztvdXQ6CiYjNDM7CWlmIChyZXQyKQomIzQzOwkJZXh0NF9zdGRfZXJyb3IoaW5vZGUtJmd0O2lfc2IsIHJldDIpOwogCiAJcmV0dXJuIHJldCA/IHJldCA6IHJldDI7CiB9CkBAIC01MDUxLDIxICYjNDM7NTExMywyNiBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvCiAgKiB3cml0dGVuIGV4dGVudHMuCiAgKgotICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2sKLSAqIGZ1bmN0aW9uLCB0byBjb252ZXJ0IHRoZSBmYWxsb2NhdGVkIGV4dGVudHMgYWZ0ZXIgSU8gaXMgY29tcGxldGVkLgotICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuCiYjNDM7ICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0L2J1ZmZlcmVkIEkvTyBlbmQgaW8gY2FsbCBiYWNrCiYjNDM7ICogZnVuY3Rpb24gYW5kIEZBTExPQ19GTF9XUklURV9aRVJPRVMsIHRvIGNvbnZlcnQgdGhlIGZhbGxvY2F0ZWQKJiM0MzsgKiB1bndyaXR0ZW4gZXh0ZW50cyBhZnRlciBkYXRhIEkvTyBpcyBjb21wbGV0ZWQuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIDAgb24gZnVsbCBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gcGFydGlhbAomIzQzOyAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gVGhlIG51bWJlciBvZiBibG9ja3MgY29udmVydGVkIGlzIHJldHVybmVkIHZpYQomIzQzOyAqIEBjb252ZXJ0ZWQuCiAgKi8KIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbikKJiM0MzsJCQkJICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sCiYjNDM7CQkJCSAgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpCiB7Ci0JdW5zaWduZWQgaW50IG1heF9ibG9ja3M7CiYjNDM7CWV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDsKIAlpbnQgcmV0ID0gMCwgcmV0MiA9IDAsIHJldDMgPSAwOwogCXN0cnVjdCBleHQ0X21hcF9ibG9ja3MgbWFwOwogCXVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtJmd0O2lfYmxrYml0czsKIAl1bnNpZ25lZCBpbnQgY3JlZGl0cyA9IDA7CiAKIAltYXAubV9sYmxrID0gb2Zmc2V0ICZndDsmZ3Q7IGJsa2JpdHM7Ci0JbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7CiYjNDM7CW1hcC5tX2xlbiA9IG1heF9ibG9ja3MgPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBvZmZzZXQsIGJsa2JpdHMpOwogCiAJaWYgKCFoYW5kbGUpIHsKIAkJLyoKQEAgLTUwNzMsOSAmIzQzOzUxNDAsOCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCSAqLwogCQljcmVkaXRzID0gZXh0NF9jaHVua190cmFuc19ibG9ja3MoaW5vZGUsIG1heF9ibG9ja3MpOwogCX0KLQl3aGlsZSAocmV0ICZndDs9IDAgJmFtcDsmYW1wOyByZXQgJmx0OyBtYXhfYmxvY2tzKSB7Ci0JCW1hcC5tX2xibGsgJiM0Mzs9IHJldDsKLQkJbWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gcmV0KTsKJiM0MzsKJiM0MzsJd2hpbGUgKG1heF9ibG9ja3MpIHsKIAkJaWYgKGNyZWRpdHMpIHsKIAkJCWhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLAogCQkJCQkJICAgIGNyZWRpdHMpOwpAQCAtNTA5MiwyMyAmIzQzOzUxNTgsMzQgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlyZXQgPSBleHQ0X21hcF9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgJmFtcDttYXAsCiAJCQkJICAgICAgRVhUNF9HRVRfQkxPQ0tTX0lPX0NPTlZFUlRfRVhUIHwKIAkJCQkgICAgICBFWFQ0X0VYX05PQ0FDSEUpOwotCQlpZiAocmV0ICZsdDs9IDApCiYjNDM7CQlpZiAocmV0ICZsdDs9IDApIHsKIAkJCWV4dDRfd2FybmluZyhpbm9kZS0mZ3Q7aV9zYiwKLQkJCQkgICAgICYjMzQ7aW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6ICYjMzQ7Ci0JCQkJICAgICAmIzM0O2V4dDRfZXh0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWQmIzM0OywKLQkJCQkgICAgIGlub2RlLSZndDtpX2lubywgbWFwLm1fbGJsaywKLQkJCQkgICAgIG1hcC5tX2xlbiwgcmV0KTsKJiM0MzsJCQkJICAgICAmIzM0O2lub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWQmIzM0OywKJiM0MzsJCQkJICAgICBpbm9kZS0mZ3Q7aV9pbm8sIG1hcC5tX2xibGssIG1hcC5tX2xlbiwgcmV0KTsKJiM0MzsJCQlpZiAodW5saWtlbHkocmV0ID09IDApKQomIzQzOwkJCQlyZXQgPSAtRUlOVkFMOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQljb252X2Jsb2NrcyAmIzQzOz0gbWFwLm1fbGVuOwomIzQzOwkJfQomIzQzOwogCQlyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpOwogCQlpZiAoY3JlZGl0cykgewogCQkJcmV0MyA9IGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJCQlpZiAodW5saWtlbHkocmV0MykpCiAJCQkJcmV0MiA9IHJldDM7CiAJCX0KLQotCQlpZiAocmV0ICZsdDs9IDAgfHwgcmV0MikKJiM0MzsJCXJldCA9IHJldCAmbHQ7IDAgPyByZXQgOiByZXQyOwomIzQzOwkJaWYgKHJldCkKIAkJCWJyZWFrOwomIzQzOwomIzQzOwkJbWFwLm1fbGJsayAmIzQzOz0gbWFwLm1fbGVuOwomIzQzOwkJbWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gbWFwLm1fbGVuKTsKIAl9Ci0JcmV0dXJuIHJldCAmZ3Q7IDAgPyByZXQyIDogcmV0OwomIzQzOwkvKiBDb252ZXJ0ZWQgc29tZSBvciBhbGwgYmxvY2tzIHN1Y2Nlc3NmdWxseT8gKi8KJiM0MzsJaWYgKGNvbnZlcnRlZCkKJiM0MzsJCSpjb252ZXJ0ZWQgPSBjb252X2Jsb2NrczsKJiM0MzsKJiM0MzsJcmV0dXJuIHJldDsKIH0KIAogaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpCkBAIC01MTMxLDcgJiM0Mzs1MjA4LDcgQEAgaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpCiAJbGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCAmYW1wO2lvX2VuZC0mZ3Q7bGlzdF92ZWMsIGxpc3QpIHsKIAkJcmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLSZndDtpbm9kZSwKIAkJCQkJCSAgICAgaW9fZW5kX3ZlYy0mZ3Q7b2Zmc2V0LAotCQkJCQkJICAgICBpb19lbmRfdmVjLSZndDtzaXplKTsKJiM0MzsJCQkJCQkgICAgIGlvX2VuZF92ZWMtJmd0O3NpemUsIE5VTEwpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuYwppbmRleCA5YTE2MDcxYjcxOWQ3Li40NWUxNjc5OWQwYzI3IDEwMDY0NAotLS0gYS9mcy9leHQ0L2ZpbGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2ZpbGUuYwpAQCAtNDM2LDcgJiM0Mzs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSwKIAkJZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsCiAJCQkJCQkJICAgICAgc2l6ZSk7CiAJZWxzZSBpZiAoIWVycm9yICZhbXA7JmFtcDsgc2l6ZSAmYW1wOyZhbXA7IGZsYWdzICZhbXA7IElPTUFQX0RJT19VTldSSVRURU4pCi0JCWVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpOwomIzQzOwkJZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCwgaW5vZGUsIHBvcywgc2l6ZSwKJiM0MzsJCQkJCQkgICAgICAgTlVMTCk7CiAJaWYgKGVycm9yKQogCQlyZXR1cm4gZXJyb3I7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMyMQoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDIwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEV4dDQgQWxsb2NhdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0YXJnZXRpbmcgYGZzL2V4dDQvZXh0ZW50cy5jYC4gSXQmIzM5O3MgdG91Y2hpbmcgc29tZSBjcml0aWNhbCBjb2RlOiBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBhbmQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLiBJbW1lZGlhdGVseSwgSSBzZWUgYSBuZXcgcGFyYW1ldGVyLCBgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZGAsIGJlaW5nIGFkZGVkIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBsaWtlbHkgZm9yIHRyYWNraW5nIHdoYXQmIzM5O3MgYmVlbiBjb252ZXJ0ZWQuIFRoZSBmYWN0IHRoYXQgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGhhcyBhbHNvIGJlZW4gdXBkYXRlZCB0byBoYW5kbGUgcGFydGlhbCBhbGxvY2F0aW9uLCBjb252ZXJzaW9uLCBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCBzdWdnZXN0cyB0aGlzIGlzIG1vcmUgdGhhbiBqdXN0IGEgbWlub3IgdHdlYWsuIFRoZXNlIGFyZSBjb3JlIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIGZvciBmaWxlc3lzdGVtIGJlaGF2aW9yLCBlc3BlY2lhbGx5IGFyb3VuZCBmYWxsb2NhdGUsIHplcm9pbmcsIGFuZCB0aGUgaGFuZGxpbmcgb2YgdW53cml0dGVuIGV4dGVudHMsIHNvIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBldmVyeXRoaW5nIHdvcmtzIGFzIGV4cGVjdGVkLgoKSSBuZWVkIHRvIGNvbmZpcm0gcHJlY2lzZWx5ICpob3cqIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpcyBiZWluZyB1c2VkLiBJIGtub3cgaXQmIzM5O3MgaW52b2x2ZWQgaW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMsIGxpa2VseSB0aHJvdWdoIGEgY2FsbCBsaWtlIGBleHQ0X3plcm9fcmFuZ2VgLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIG5ldyBgY29udmVydGVkYCBwYXJhbWV0ZXIgbWlnaHQgYWZmZWN0IHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0ZW50cy5jPTQ1NDM9aW50IGV4dDRfZXh0X3RydW5jYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDU4OS0gKi9cbmZzL2V4dDQvZXh0ZW50cy5jOjQ1OTA6c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuZnMvZXh0NC9leHRlbnRzLmMtNDU5MS1cdFx0XHRcdCAgbG9mZl90IG5ld19zaXplLCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDc3Mj1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDgwMy1cdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4MDQ6XHRcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxuZnMvZXh0NC9leHRlbnRzLmMtNDgwNS1cdFx0XHRcdFx0ICAgICBmbGFncyk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtNDg0NS1cdFx0XHRcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcbmZzL2V4dDQvZXh0ZW50cy5jOjQ4NDY6XHRcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXG5mcy9leHQ0L2V4dGVudHMuYy00ODQ3LVx0XHRcdFx0XHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODkzPXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MTctXG5mcy9leHQ0L2V4dGVudHMuYzo0OTE4Olx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXG5mcy9leHQ0L2V4dGVudHMuYy00OTE5LVx0XHRcdFx0ICAgICBFWFQ0X0dFVF9CTE9DS1NfQ1JFQVRFX1VOV1JJVF9FWFQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYzMzQKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGV4dDQgQmxvY2sgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgaG93IGJsb2NrIGFsbG9jYXRpb24gd29ya3MgaW4gZXh0NCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEZyb20gd2hhdCBJJiMzOTt2ZSB0cmFjZWQsIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpcyBkZWZpbml0ZWx5IGEga2V5IGZ1bmN0aW9uLiBJIHNlZSBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYCwgd2hpY2ggYXJlIHNpZ25pZmljYW50IGZpbGUgc3lzdGVtIG9wZXJhdGlvbnMuIEkgYWxzbyBzZWUgdGhhdCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBnZXRzIGNhbGxlZCBmcm9tIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYXMgd2VsbCBhcyBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYCwgYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AsIGFuZCBvdGhlciBpbXBvcnRhbnQgcGxhY2VzLiBUaGVzZSBmdW5jdGlvbnMgcmVwcmVzZW50IGNsZWFyIGVudHJ5IHBvaW50cyBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gYGV4dDRfZG9fZmFsbG9jYXRlYCBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBhc3N1bWluZyBpdCYjMzk7cyBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXRzZWxmIGlzIHN0YXRpYywgc28gSSB3aWxsIGhhdmUgdG8gbG9vayBhdCB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgY2FsbCBpdCwgc3VjaCBhcyBgZXh0NF9mYWxsb2NhdGVgLgoKUmlnaHQsIGxldCYjMzk7cyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYGV4dDRfZmFsbG9jYXRlYCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBpbW1lZGlhdGUgZW50cnkgcG9pbnRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDA9ZXh0ZXJuIHZvaWQgZXh0NF9leHRfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG5mcy9leHQ0L2V4dDQuaDozOTAxOmV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbmZzL2V4dDQvZXh0NC5oLTM5MDItXHRcdFx0ICBsb2ZmX3QgbGVuKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00ODkzPXN0YXRpYyBsb25nIGV4dDRfZG9fZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDAtXG5mcy9leHQ0L2V4dGVudHMuYzo0OTAxOlx0dHJhY2VfZXh0NF9mYWxsb2NhdGVfZW50ZXIoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDItXHRXQVJOX09OX09OQ0UoIWlub2RlX2lzX2xvY2tlZChpbm9kZSkpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5Mjgtb3V0OlxuZnMvZXh0NC9leHRlbnRzLmM6NDkyOTpcdHRyYWNlX2V4dDRfZmFsbG9jYXRlX2V4aXQoaW5vZGUsIG9mZnNldCxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MzAtXHRcdFx0RVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBpbm9kZS1cdTAwM2VpX2Jsa2JpdHMpLCByZXQpO1xuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NDAtICovXG5mcy9leHQ0L2V4dGVudHMuYzo0OTQxOmxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuZnMvZXh0NC9leHRlbnRzLmMtNDk0Mi17XG4tLVxuZnMvZXh0NC9maWxlLmM9MTAzMz1jb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGV4dDRfZmlsZV9vcGVyYXRpb25zID0ge1xuLS1cbmZzL2V4dDQvZmlsZS5jLTEwNDgtXHQuc3BsaWNlX3dyaXRlXHQ9IGl0ZXJfZmlsZV9zcGxpY2Vfd3JpdGUsXG5mcy9leHQ0L2ZpbGUuYzoxMDQ5Olx0LmZhbGxvY2F0ZVx0PSBleHQ0X2ZhbGxvY2F0ZSxcbmZzL2V4dDQvZmlsZS5jLTEwNTAtXHQuZm9wX2ZsYWdzXHQ9IEZPUF9NTUFQX1NZTkMgfCBGT1BfQlVGRkVSX1JBU1lOQyB8XG4tLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0Mjk9REVDTEFSRV9FVkVOVF9DTEFTUyhleHQ0X19mYWxsb2NhdGVfbW9kZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Ni1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDU3OkRFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9mYWxsb2NhdGVfZW50ZXIsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1OC1cbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg9MTQ3MT1ERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfemVyb19yYW5nZSxcbi0tXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Ny1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaDoxNDc4OlRSQUNFX0VWRU5UKGV4dDRfZmFsbG9jYXRlX2V4aXQsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3OS1cdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzYwMgoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW5uZXIgbW9ub2xvZ3VlOgoKKipEaXZpbmcgaW50byB0aGUgYGV4dDRfZmFsbG9jYXRlYCBDb2RlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUuLi4gc28sIGBleHQ0X2ZhbGxvY2F0ZWAgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgKmZhbGxvY2F0ZSogZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2QgZXhwZWN0LiBJdCYjMzk7cyB0aGUgcG9pbnQgb2YgY29udGFjdCwgdGhlIGdhdGV3YXkuIFdoYXQmIzM5O3MgdGhlIGNvbnRleHQgZm9yIHRoaXMgZXhhbWluYXRpb24/CgpBbmQgdGhlcmUmIzM5O3MgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIEhtbSwgb2theSwgaXQmIzM5O3MgYWxzbyBleHBvc2VkLCBvciBhdCBsZWFzdCBub3QgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGlzIHByb2JhYmx5IHBsYXlzIGEgY3JpdGljYWwgcm9sZSBpbiBob3cgKmZhbGxvY2F0ZSogd29ya3MgaXRzIG1hZ2ljIGluIHVud3JpdHRlbiBleHRlbnQtYmFzZWQgYWxsb2NhdGlvbi4gSXQmIzM5O3MgYW4gZXhwb3J0ZWQgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGxpa2VseSBjYWxsZWQgZnJvbSBtb3JlIHRoYW4ganVzdCB3aXRoaW4gdGhlIGNvcmUgKmZhbGxvY2F0ZSogaW1wbGVtZW50YXRpb24gaXRzZWxmLiBDb3VsZCBiZSB1c2VkIGJ5IG90aGVyIGV4dDQgb3BlcmF0aW9ucyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ5IHJlbGF0ZWQgZmVhdHVyZXMuIEludGVyZXN0aW5nLi4uIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGV5IGludGVyYWN0LiBUaGlzIGNvdWxkIGludm9sdmUgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB1bndyaXR0ZW4gZXh0ZW50cywgd2hpY2ggaXMgYXQgdGhlIGhlYXJ0IG9mIHRoZSB6ZXJvaW5nL3ByZS1hbGxvY2F0aW9uIGFzcGVjdC4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGhvdyB0aGVzZSB0d28gYXJlIHdvcmtpbmcgdG9nZXRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDE9ZXh0ZXJuIGxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LFxuZnMvZXh0NC9leHQ0LmgtMzkwMi1cdFx0XHQgIGxvZmZfdCBsZW4pO1xuZnMvZXh0NC9leHQ0Lmg6MzkwMzpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNC1cdFx0XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcbmZzL2V4dDQvZXh0NC5oLTM5MDUtXHRcdFx0XHRcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XG5mcy9leHQ0L2V4dDQuaDozOTA2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MzU1Nz1leHQ0X2V4dF9jb252ZXJ0X3RvX2luaXRpYWxpemVkKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmMtMzgwOS0gKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb25cbmZzL2V4dDQvZXh0ZW50cy5jOjM4MTA6ICogdmlhIGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cygpLlxuZnMvZXh0NC9leHRlbnRzLmMtMzgxMS0gKlxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jPTM5MTM9c3RhdGljIHN0cnVjdCBleHQ0X2V4dF9wYXRoICpcbmZzL2V4dDQvZXh0ZW50cy5jOjM5MTQ6ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2VuZGlvKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy0zOTE1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzICptYXAsXG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00MDE0LVx0aWYgKGZsYWdzIFx1MDAyNiBFWFQ0X0dFVF9CTE9DS1NfQ09OVkVSVCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NDAxNTpcdFx0cGF0aCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19lbmRpbyhoYW5kbGUsIGlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNDAxNi1cdFx0XHRcdFx0XHRcdCAgICBtYXAsIHBhdGgsIGZsYWdzKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00NTkwPXN0YXRpYyBpbnQgZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbixcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00Njk1LVxuZnMvZXh0NC9leHRlbnRzLmM6NDY5NjpcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5Ny1cdFx0XHRcdFx0aW5vZGUsIChsb2ZmX3QpbWFwLm1fbGJsayBcdTAwM2NcdTAwM2MgYmxrYml0cyxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUwNDUtICovXG5mcy9leHQ0L2V4dGVudHMuYzo1MDQ2OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ3LVx0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUxMjMtICovXG5mcy9leHQ0L2V4dGVudHMuYzo1MTI0OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbmZzL2V4dDQvZXh0ZW50cy5jLTUxMjUtXHRcdFx0XHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MTkxPWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTUyMDgtXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvX2VuZF92ZWMsIFx1MDAyNmlvX2VuZC1cdTAwM2VsaXN0X3ZlYywgbGlzdCkge1xuZnMvZXh0NC9leHRlbnRzLmM6NTIwOTpcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVx1MDAzZWlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNTIxMC1cdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlb2Zmc2V0LFxuLS1cbmZzL2V4dDQvZmlsZS5jPTQyNz1zdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbi0tXG5mcy9leHQ0L2ZpbGUuYy00MzUtXHRcdFx0KGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfQVRPTUlDKSlcbmZzL2V4dDQvZmlsZS5jOjQzNjpcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXG5mcy9leHQ0L2ZpbGUuYy00MzctXHRcdFx0XHRcdFx0XHQgICAgICBzaXplKTtcbmZzL2V4dDQvZmlsZS5jLTQzOC1cdGVsc2UgaWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXG5mcy9leHQ0L2ZpbGUuYzo0Mzk6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXG5mcy9leHQ0L2ZpbGUuYy00NDAtXHRcdFx0XHRcdFx0ICAgICAgIE5VTEwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkyNDAKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgJiMzOTtzIENhbGxlcnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBvZiBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gSXQmIzM5O3MgY2FsbGVkIGZyb20gYSBmZXcga2V5IHBsYWNlczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYCwgYW5kIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLiBOb3csIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpdHNlbGYgZ2V0cyBpbnZva2VkIGZyb20gYGV4dDRfemVyb19yYW5nZWAgYW5kIGBleHQ0X2RvX2ZhbGxvY2F0ZWAuCgpHaXZlbiB0aGlzLCBmb2N1c2luZyBvbiBgZXh0NF9mYWxsb2NhdGVgIGFuZCBwb3RlbnRpYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2guIFRoZXkmIzM5O3JlIGxpa2VseSBrZXkgZW50cnkgcG9pbnRzIHRoYXQgZnVubmVsIGludG8gdGhhdCBjb252ZXJzaW9uIGZ1bmN0aW9uLiBIb2xkIG9uLCB0aG91Z2guLi4gYGV4dDRfemVyb19yYW5nZWAgaXMgbWFya2VkIGFzIHN0YXRpYy4gVGhhdCBsaW1pdHMgaXRzIGRpcmVjdCB2aXNpYmlsaXR5IGZvciBleHRlcm5hbCBjYWxscywgcmlnaHQ/IFRoYXQgbWFrZXMgYGV4dDRfZmFsbG9jYXRlYCB0aGUgbW9yZSBpbnRlcmVzdGluZyBzeW1ib2wgZm9yIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBhcyBpdCYjMzk7cyBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHRoZXJlZm9yZSBwcm9iYWJseSBwYXJ0IG9mIHRoZSBleHRlcm5hbCBpbnRlcmZhY2UuIFRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIGBleHQ0X2ZhbGxvY2F0ZWAgdGhlbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF96ZXJvX3JhbmdlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0ZW50cy5jPTQ3NzA9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XG5mcy9leHQ0L2V4dGVudHMuYy00NzcxLVxuZnMvZXh0NC9leHRlbnRzLmM6NDc3MjpzdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9leHQ0L2V4dGVudHMuYy00NzczLVx0XHRcdCAgICBsb2ZmX3QgbGVuLCBpbnQgbW9kZSlcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy00NzgyLVxuZnMvZXh0NC9leHRlbnRzLmM6NDc4MzpcdHRyYWNlX2V4dDRfemVyb19yYW5nZShpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xuZnMvZXh0NC9leHRlbnRzLmMtNDc4NC1cdFdBUk5fT05fT05DRSghaW5vZGVfaXNfbG9ja2VkKGlub2RlKSk7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDk0MT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDA5LVx0Y2FzZSBGQUxMT0NfRkxfV1JJVEVfWkVST0VTOlxuZnMvZXh0NC9leHRlbnRzLmM6NTAxMDpcdFx0cmV0ID0gZXh0NF96ZXJvX3JhbmdlKGZpbGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcbmZzL2V4dDQvZXh0ZW50cy5jLTUwMTEtXHRcdGJyZWFrO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0zOTk1PXZvaWQgZXh0NF9zZXRfYW9wcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvaW5vZGUuYy00MDE2LSAqIEhlcmUgd2UgY2FuJiMzOTt0IHNraXAgYW4gdW53cml0dGVuIGJ1ZmZlciBldmVuIHRob3VnaCBpdCB1c3VhbGx5IHJlYWRzIHplcm9cbmZzL2V4dDQvaW5vZGUuYzo0MDE3OiAqIGJlY2F1c2UgaXQgbWlnaHQgaGF2ZSBkYXRhIGluIHBhZ2VjYWNoZSAoZWcsIGlmIGNhbGxlZCBmcm9tIGV4dDRfemVyb19yYW5nZSxcbmZzL2V4dDQvaW5vZGUuYy00MDE4LSAqIGV4dDRfcHVuY2hfaG9sZSwgZXRjKSB3aGljaCBuZWVkcyB0byBiZSBwcm9wZXJseSB6ZXJvZWQgb3V0LiBPdGhlcndpc2UgYVxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDY0PURFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9wdW5jaF9ob2xlLFxuLS1cbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDcwLVxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjE0NzE6REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAyNDAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgaW5mb3JtYXRpb24sIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgbGlrZSBteXNlbGY6CgoqKlVuZGVyc3RhbmRpbmcgdGhlIEV4dDQgRmFsbG9jIGFuZCBaZXJvaW5nIEZsb3cqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB6ZXJvaW5nIGFuZCBzcGFjZSBhbGxvY2F0aW9uIHdvcmsgd2l0aGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0uIEkgc2VlIHRoYXQgYGV4dDRfZmFsbG9jYXRlYCBpcyB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaGVyZTsgaXQmIzM5O3MgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IGNhbGxzIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYC4gVGhpcyBpcyB0aGUgZXhwZWN0ZWQgZGVzaWduLiBJIGtub3cgYGZhbGxvY2F0ZWAgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgdGFza3MgcmVsYXRlZCB0byBmaWxlIHNwYWNlIGFsbG9jYXRpb24sIGFuZCB6ZXJvaW5nIGlzIG9uZSBvZiB0aG9zZSBjcnVjaWFsIG9wZXJhdGlvbnMuCgpGdXJ0aGVybW9yZSwgSSYjMzk7bSBub3RpY2luZyB0aGF0IGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIGlzIGNhbGxlZCBmcm9tIHR3byBrZXkgSU8gY29tcGxldGlvbiBwYXRoczogYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AgYW5kIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNgLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHJlbGF0ZWQgdG8gKnVud3JpdHRlbiBleHRlbnRzKiBpbiB0aGVzZSBjb250ZXh0cyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCYjMzk7cyBpbnZva2VkIGR1cmluZyBEaXJlY3QgSU8gYW5kIGJ1ZmZlcmVkIElPIHdpdGggdW53cml0dGVuIGV4dGVudHMuIFRoaXMgc3VnZ2VzdHMgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBjb252ZXJ0aW5nIHRob3NlIHVud3JpdHRlbiBleHRlbnRzIGludG8gc29tZXRoaW5nIHVzYWJsZSwgcG9zc2libHkgYWZ0ZXIgYSB3cml0ZSBvciB3aGVuIHNwYWNlIGlzIG5lZWRlZC4KCkkmIzM5O20gbm93IGdvaW5nIHRvIGRpdmUgZGVlcGVyIGludG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIEtub3dpbmcgdGhlIGNvbnRleHQgaW4gd2hpY2ggaXQmIzM5O3MgY2FsbGVkIGlzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVhbGluZyB3aXRoIHRoZSBJL08gdmVjdG9yIGFuZCB3aGF0IHNwZWNpZmljIHRyYW5zZm9ybWF0aW9ucyBpdCYjMzk7cyBwZXJmb3JtaW5nIG9uIHRoZXNlIGV4dGVudHMuIFRoaXMgZmVlbHMgbGlrZSBpdCBtaWdodCBiZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIGNvbnZlcnRpbmcgdW53cml0dGVuIGV4dGVudHMgdG8gYWN0dWFsIGJsb2NrcyBoYXBwZW5zLCBhbmQgaXQmIzM5O3MgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZXh0NC5oPTM5MDY9ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbmZzL2V4dDQvZXh0NC5oOjM5MDg6ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSxcbmZzL2V4dDQvZXh0NC5oLTM5MDktXHRcdFx0XHRcdCAgICAgZXh0NF9pb19lbmRfdCAqaW9fZW5kKTtcbi0tXG5mcy9leHQ0L2V4dGVudHMuYz01MTI0PWludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MTkwLVxuZnMvZXh0NC9leHRlbnRzLmM6NTE5MTppbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbmZzL2V4dDQvZXh0ZW50cy5jLTUxOTIte1xuLS1cbmZzL2V4dDQvcGFnZS1pby5jPTE2Nz1zdGF0aWMgaW50IGV4dDRfZW5kX2lvX2VuZChleHQ0X2lvX2VuZF90ICppb19lbmQpXG4tLVxuZnMvZXh0NC9wYWdlLWlvLmMtMTkwLVx0fSBlbHNlIHtcbmZzL2V4dDQvcGFnZS1pby5jOjE5MTpcdFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZSwgaW9fZW5kKTtcbmZzL2V4dDQvcGFnZS1pby5jLTE5Mi1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExMzIKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAxMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBleHQ0IEkvTyBDb21wbGV0aW9uIFBhdGgqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdHJhY2UgdGhlIGNvbXBsZXRpb24gcGF0aCBmb3IgSS9PIG9wZXJhdGlvbnMgaW4gdGhlIGV4dDQgZmlsZXN5c3RlbSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IHRoaW5ncyB3cmFwIHVwIGFmdGVyIGEgd3JpdGUuIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIGBleHQ0X2VuZF9pb19lbmRgIGlzIHRoZSBjcnVjaWFsIGZ1bmN0aW9uLCBhbmQgaXQmIzM5O3MgYmVpbmcgY2FsbGVkIGJ5IGBleHQ0X2VuZF9pb19yc3Zfd29ya2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZTogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyB3aGVyZSB0aGlzIGNvbXBsZXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gQW5kLCBoZXksIGxldCYjMzk7cyBub3QgZm9yZ2V0IHRvIGNoZWNrIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gIGFzIHdlbGwsIGp1c3QgaW4gY2FzZSB0aGF0JiMzOTtzIHdoZXJlIHRoZSBmaW5hbCBwaWVjZSBvZiB0aGUgcHV6emxlIGxpZXMsIGFzc3VtaW5nIGl0IGlzbiYjMzk7dCBhIHN0YXRpYyBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGhpbiBgZXh0NF9kaW9fd3JpdGVfZW5kX2lvYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF9kaW9fd3JpdGVfZW5kX2lvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2V4dDQvZmlsZS5jPTM5MD1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2V4dGVuc2lvbl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgbmVlZF90cnVuYylcbi0tXG5mcy9leHQ0L2ZpbGUuYy00MjYtXG5mcy9leHQ0L2ZpbGUuYzo0Mjc6c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG5mcy9leHQ0L2ZpbGUuYy00MjgtXHRcdFx0XHQgaW50IGVycm9yLCB1bnNpZ25lZCBpbnQgZmxhZ3MpXG4tLVxuZnMvZXh0NC9maWxlLmM9NDU5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyBleHQ0X2Rpb193cml0ZV9vcHMgPSB7XG5mcy9leHQ0L2ZpbGUuYzo0NjA6XHQuZW5kX2lvID0gZXh0NF9kaW9fd3JpdGVfZW5kX2lvLFxuZnMvZXh0NC9maWxlLmMtNDYxLX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzA3CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTdGFnbmF0aW9uIGluIEV4dDQmIzM5O3MgRmFsbG9jYXRlIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoZSBhbmFseXNpcyBpc24mIzM5O3QgcHJvZ3Jlc3NpbmcgYXMgZXhwZWN0ZWQuIEl0IHNlZW1zIG15IGF0dGVudGlvbiBuZWVkcyB0byBmb2N1cyBvbiBhIGZldyBzcGVjaWZpYyBmdW5jdGlvbnMgcmVsYXRlZCB0byBmYWxsb2NhdGUgaW4gZXh0NC4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gbG9vayBpbnRvIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIEkgc3VzcGVjdCB0aGUgaXNzdWUgbGllcyB3aXRoaW4gb25lIG9mIHRoZXNlLCBvciB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbS4KCkJlZm9yZSBkaXZpbmcgaW50byB0aGUgY29kZSBpdHNlbGYsIEkmIzM5O2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSByZWxldmFudCBzb3VyY2UgY29kZSBzaG91bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBmcy9leHQ0L2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgQ09ORklHX0VYVDRfRlNgIGlzIGVuYWJsZWQuIFRoYXQgc2hvdWxkIGJlIGEgcXVpY2sgY2hlY2ssIGJ1dCBpdCYjMzk7cyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGFsbCB0aGUgbmVjZXNzYXJ5IGRlcGVuZGVuY2llcyBhcmUgbWV0IGJlZm9yZSBnb2luZyBkZWVwZXIgaW50byB0aGUgaW52ZXN0aWdhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xuZnMvZXh0NC9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZz0zNT1jb25maWcgRVhUNF9VU0VfRk9SX0VYVDJcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzAgMTU6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMDUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIHNjZW5hcmlvLCBmb2N1c2luZyBvbiB0aGUgY29yZSBwcm9ibGVtIGFuZCBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggRVhUNCwgYW5kIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uIHNlZW1zIHRvIGJlIGBDT05GSUdfRVhUNF9GU2AuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhvdWdoLCB0aGF0IHRoZXJlIGFyZW4mIzM5O3QgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaCBvciBkZXBlbmQgb24gaXQuIFRoYXQmIzM5O3MgYWx3YXlzIG15IGZpcnN0IHN0ZXAg4oCTIGV4aGF1c3RpdmVseSBjaGVja2luZyBmb3IgZGVwZW5kZW5jaWVzLgoKTm93LCBsb29raW5nIGF0IHRoZSBwYXRjaCBpdHNlbGYsIGl0JiMzOTtzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dDQuaGAsIGFuZCBgZnMvZXh0NC9maWxlLmNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGZpbGVzIGFyZSBjb3JlIHRvIHRoZSBFWFQ0IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBleHRlbnRzLCB0aGUgZmlsZSBzeXN0ZW0gaGVhZGVyLCBhbmQgY29yZSBmaWxlIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZmlsZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqd2hlbiogYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIHRoZSBsaW5rLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIG1pZ2h0IGNoYW5nZSB0aGUgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS4KCk5leHQsIEkgbmVlZCB0byBvcGVuIHRoZSBgZnMvZXh0NC9NYWtlZmlsZWAuIEkgd2lsbCB2ZXJpZnkgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb21waWxhdGlvbiBmbGFncywgb3IgY29uZGl0aW9uYWwgYnVpbGQgcnVsZXMsIHRoYXQgbWlnaHQgYmUgaW5mbHVlbmNlZCBieSB0aGUgcHJlc2VuY2Ugb2YgdGhpcyBwYXRjaC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHNwZWNpYWwgYnVpbGRzLiBUaGlzIGlzIGFsd2F5cyBhIGNyaXRpY2FsIHN0ZXAgZm9yIG1lIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgY2hhbmdlcyBpbiBhIGJ1aWxkIGVudmlyb25tZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2V4dDQvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBsaW51eCBleHQ0LWZpbGVzeXN0ZW0gcm91dGluZXMuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG9iai0kKENPTkZJR19FWFQ0X0ZTKSAmIzQzOz0gZXh0NC5vXG4gICA3Olx0XG4gICA4Olx0ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuICAgOTpcdFx0XHRleHRlbnRzX3N0YXR1cy5vIGZpbGUubyBmc21hcC5vIGZzeW5jLm8gaGFzaC5vIGlhbGxvYy5vIFxcXG4gIDEwOlx0XHRcdGluZGlyZWN0Lm8gaW5saW5lLm8gaW5vZGUubyBpb2N0bC5vIG1iYWxsb2MubyBtaWdyYXRlLm8gXFxcbiAgMTE6XHRcdFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXG4gIDEyOlx0XHRcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXG4gIDEzOlx0XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG4gIDE0Olx0XG4gIDE1Olx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcdCYjNDM7PSBhY2wub1xuICAxNjpcdGV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbiAgMTc6XHRleHQ0LXRlc3Qtb2Jqc1x0XHRcdFx0JiM0Mzs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxuICAxODpcdFx0XHRcdFx0XHQgICBleHRlbnRzLXRlc3QubyBoYXNoLXRlc3Qub1xuICAxOTpcdG9iai0kKENPTkZJR19FWFQ0X0tVTklUX1RFU1RTKVx0XHQmIzQzOz0gZXh0NC10ZXN0Lm9cbiAgMjA6XHRleHQ0LSQoQ09ORklHX0ZTX1ZFUklUWSlcdFx0JiM0Mzs9IHZlcml0eS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBleHRlbnRzLm9gIGFuZCBgZmlsZS5vYCBhcmUgaW5kZWVkIHBhcnQgb2YgYGV4dDQteWAuIFRoYXQmIzM5O3MgZ29vZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhlIGNoYW5nZXMgc291bmQgZnVuY3Rpb25hbCwgZGVhbGluZyB3aXRoIHBhcnRpYWwgYWxsb2NhdGlvbiwgY29udmVyc2lvbiBvZiB1bndyaXR0ZW4gZXh0ZW50cywgYW5kIG9ycGhhbiBsaXN0IG1hbmFnZW1lbnQsIHdoaWNoIG1lYW5zIHRoaXMgY291bGQgYmUgcmlwZSBmb3IgZWRnZSBjYXNlcyBhbmQgdW5leHBlY3RlZCBiZWhhdmlvci4KCkkmIzM5O20gdGhpbmtpbmcgdGhlIGtleSBzeW1ib2xzIHRvIGZvY3VzIG9uIGR1cmluZyBmdXp6aW5nIHNob3VsZCBiZSBgZXh0NF9mYWxsb2NhdGVgLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCwgYW5kIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGltcGFjdGVkIGJ5IHRoZSBjaGFuZ2VzIGluIHRoZSBwYXRjaC4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZW0uCgpUaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBmYWxsb2NhdGVgLCB6ZXJvaW5nLCBhbmQgdGhlIGNyaXRpY2FsIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC0tIGFsbCBzaWduYWwgcG90ZW50aWFsIGZvciBpc3N1ZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHJlYWNoYWJsZSBjb2RlLCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS4KCkkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMsIGxvb2tzIGxpa2UgYEVYVDRfRlNgIGlzIHRoZSBrZXkgY29uZmlnIG5lZWRlZCBmb3IgdGhpcy4gSSYjMzk7bGwgbWFrZSBzdXJlIHRoYXQmIzM5O3MgZW5hYmxlZC4KCkFzIGEgcXVpY2sgc2lkZSBub3RlLCBJIHNob3VsZCBnaXZlIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljYCBhIGN1cnNvcnkgbG9vay1vdmVyIHRvIGNoZWNrIGZvciBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9MzkwMz1leHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQvZXh0NC5oLTM5MDUtXHRcdFx0XHRcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XG5mcy9leHQ0L2V4dDQuaDozOTA2OmV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9NDk0MT1sb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbi0tXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ1LSAqL1xuZnMvZXh0NC9leHRlbnRzLmM6NTA0NjppbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0Ny1cdFx0XHRcdFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcbi0tXG5mcy9leHQ0L2ZpbGUuYz00Mjc9c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXG4tLVxuZnMvZXh0NC9maWxlLmMtNDM1LVx0XHRcdChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX0FUT01JQykpXG5mcy9leHQ0L2ZpbGUuYzo0MzY6XHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhOVUxMLCBpbm9kZSwgcG9zLFxuZnMvZXh0NC9maWxlLmMtNDM3LVx0XHRcdFx0XHRcdFx0ICAgICAgc2l6ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMwIDE1OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDg3CgkJCQkJCQlvdXRwdXQ6IDE1MgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6CgoqKkFuYWx5emluZyBDb2RlIENoYW5nZXMgYW5kIElkZW50aWZ5aW5nIEtleSBGdW5jdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHNvbWV0aGluZyBzaWduaWZpY2FudCBpcyBoYXBwZW5pbmcgd2l0aCBob3cgZXh0ZW50cyBhcmUgYmVpbmcgaGFuZGxlZC4gVGhlIGZhY3QgdGhhdCBhIGZ1bmN0aW9uIGlzIGJvdGggJiMzNDtleHBvcnRlZCBhbmQgbW9kaWZpZWQmIzM0OyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIHRvIHNlZSB3aGF0IHRoZSBjaGFuZ2VzIGltcGx5LiBXYWl0IGEgbWludXRlLi4uIGxvb2tpbmcgY2xvc2VyLCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pY2AgKndhc24mIzM5O3QqIGFjdHVhbGx5IHRvdWNoZWQsIGl0JiMzOTtzIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIHRoYXQmIzM5O3MgdGhlIG9uZSBtb2RpZmllZCBpbiB0aGlzIHBhdGNoLiBUaGF0JiMzOTtzIGNydWNpYWwuIEkgbmVlZCB0byBtYWtlIGEgbm90ZSBvZiB0aGlzIGRpZmZlcmVuY2UuIEl0IG1pZ2h0IGJlIHJlbGF0ZWQsIGJ1dCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhlIGZvY3VzIHNoaWZ0ZWQgZnJvbSBvbmUgZnVuY3Rpb24gdG8gdGhlIG90aGVyLiBOb3cgdGhhdCBJIGhhdmUgbXkgZmFjdHMgc3RyYWlnaHQsIEkgY2FuIHNldCBteSByZXN1bHRzIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMCAxNToxOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfZmFsbG9jYXRlJiMzNDssCiAgICAmIzM0O2V4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyYjMzQ7LAogICAgJiMzNDtleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjI2LjI3OTE2MDc0MVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3NDEwNjAxNzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxODoyNi4yNzkxNjY2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEwODk2NDQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOGRiZGEwNDIzYjE4Y2VjMTMzYjMyYTNjNzFjNzAyMjA5YzA0OWRiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAzMCAxNToxODoyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxcbisrKyBiL2ZzL2V4dDQvZXh0NC5oXFxuQEAgLTM5MDEsNyArMzkwMSw4IEBAIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xcbiBleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuIFxcdFxcdFxcdCAgbG9mZl90IGxlbik7XFxuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xcbitcXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxcbitcXHRcXHRcXHRcXHRcXHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dGVudHMuYyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuaW5kZXggZDVmODdhN2Y2YzA1Ny4uYTNkZGU3YmEwZDIzZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xcbisrKyBiL2ZzL2V4dDQvZXh0ZW50cy5jXFxuQEAgLTQ1NzEsNiArNDU3MSwyMiBAQCBpbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4rLypcXG4rICogUHJlLWFsbG9jYXRlIGJsb2NrcyBmb3IgdGhlIHJhbmdlIFtAb2Zmc2V0LCBAb2Zmc2V0ICsgQGxlbikuIEFsbG9jYXRlZFxcbisgKiBibG9ja3MgYXJlIG1hcmtlZCBhcyB1bndyaXR0ZW4gYnkgZGVmYXVsdC4gSWYgRVhUNF9HRVRfQkxPQ0tTX1pFUk8gaXNcXG4rICogc2V0LCB0aGUgYWxsb2NhdGVkIGJsb2NrcyBhcmUgemVyb2VkIG9uIGRpc2sgYW5kIHRoZWlyIGV4dGVudHMgYXJlXFxuKyAqIGNvbnZlcnRlZCB0byB3cml0dGVuIHN0YXRlLlxcbisgKlxcbisgKiBXaGVuIEBuZXdfc2l6ZSBpcyBub256ZXJvLCB0aGUgY2FsbGVyIGludGVuZHMgdG8gZXh0ZW5kIHRoZSBmaWxlLCBhbmRcXG4rICogdGhlIGZpbGUgc2l6ZSBzaG91bGQgYmUgdXBkYXRlZCB0byB0aGUgZW5kIG9mIHRoZSBhbGxvY2F0ZWQgYmxvY2tzLlxcbisgKlxcbisgKiBBbGxvY2F0aW9uIG1heSBwYXJ0aWFsbHkgc3VjY2VlZCBkdWUgdG8gc29tZSBub24tZmF0YWwgaXNzdWVzLiBJbiB0aGF0XFxuKyAqIGNhc2UsIGlfZGlza3NpemUgKGFuZCBpX3NpemUpIGlzIGFkdmFuY2VkIHVwIHRvIHRoZSBzdWNjZXNzZnVsbHlcXG4rICogcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhlIHJhbmdlLlxcbisgKlxcbisgKiBSZXR1cm4gMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZSBvciBwYXJ0aWFsXFxuKyAqIGZhaWx1cmUuXFxuKyAqL1xcbiBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdFxcdFxcdFxcdCAgbG9mZl90IG5ld19zaXplLCBpbnQgZmxhZ3MpXFxuIHtcXG5AQCAtNDU4NSw2ICs0NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbiBcXHRsb2ZmX3QgZXBvcyA9IDAsIG9sZF9zaXplID0gaV9zaXplX3JlYWQoaW5vZGUpO1xcbiBcXHR1bnNpZ25lZCBpbnQgYmxrYml0cyA9IGlub2RlLVxcdTAwM2VpX2Jsa2JpdHM7XFxuIFxcdGJvb2wgYWxsb2NfemVybyA9IGZhbHNlO1xcbitcXHRib29sIG9ycGhhbiA9IGZhbHNlO1xcbiBcXG4gXFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XFxuIFxcdG1hcC5tX2xibGsgPSBvZmZzZXQgXFx1MDAzZVxcdTAwM2UgYmxrYml0cztcXG5AQCAtNDY1OSwxOSArNDY3Niw0OSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRcXHRpZiAoYWxsb2NfemVybyBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKG1hcC5tX2ZsYWdzIFxcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XFxuK1xcdFxcdFxcdGV4dDRfbGJsa190IGNvbnZlcnRlZDtcXG4rXFxuK1xcdFxcdFxcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFxcdTAwM2VcXG4rXFx0XFx0XFx0XFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XFxuK1xcbiBcXHRcXHRcXHRyZXQgPSBleHQ0X2lzc3VlX3plcm9vdXQoaW5vZGUsIG1hcC5tX2xibGssIG1hcC5tX3BibGssXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCBtYXAubV9sZW4pO1xcbi1cXHRcXHRcXHRpZiAobGlrZWx5KCFyZXQpKVxcbi1cXHRcXHRcXHRcXHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcXG4rXFx0XFx0XFx0aWYgKHVubGlrZWx5KHJldCkpXFxuK1xcdFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihoYW5kbGUpKSB7XFxuK1xcdFxcdFxcdFxcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdFxcdH1cXG4rXFxuK1xcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuIFxcdFxcdFxcdFxcdFxcdGlub2RlLCAobG9mZl90KW1hcC5tX2xibGsgXFx1MDAzY1xcdTAwM2MgYmxrYml0cyxcXG4tXFx0XFx0XFx0XFx0XFx0KGxvZmZfdCltYXAubV9sZW4gXFx1MDAzY1xcdTAwM2MgYmxrYml0cyk7XFxuK1xcdFxcdFxcdFxcdFxcdChsb2ZmX3QpbWFwLm1fbGVuIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdTAwMjZjb252ZXJ0ZWQpO1xcbiBcXHRcXHRcXHRpZiAocmV0KVxcbi1cXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0bWFwLm1fbGVuID0gY29udmVydGVkO1xcbitcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogSWYgYmxvY2tzIGJleW9uZCBpX2Rpc2tzaXplIGFyZSBjb252ZXJ0ZWQsIGFkZFxcbitcXHRcXHRcXHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKG5ld19zaXplIFxcdTAwMjZcXHUwMDI2IGNvbnZlcnRlZCkge1xcbitcXHRcXHRcXHRcXHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRyZXQgPSByZXQgPyByZXQgOiByZXQyO1xcbitcXHRcXHRcXHRcXHRvcnBoYW4gPSB0cnVlO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4rXFx0XFx0XFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MztcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XFxuIFxcdFxcdG1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47XFxuIFxcdFxcdGVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXHR9XFxuIFxcbiBcXHRpZiAocmV0ID09IC1FTk9TUEMgXFx1MDAyNlxcdTAwMjYgZXh0NF9zaG91bGRfcmV0cnlfYWxsb2MoaW5vZGUtXFx1MDAzZWlfc2IsIFxcdTAwMjZyZXRyaWVzKSlcXG5AQCAtNDY4NywxMSArNDczNCwyMyBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcdGlmIChlcG9zIFxcdTAwM2UgbmV3X3NpemUpXFxuIFxcdFxcdGVwb3MgPSBuZXdfc2l6ZTtcXG4gXFxuLVxcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NSVNDLCAxKTtcXG4tXFx0aWYgKElTX0VSUihoYW5kbGUpKVxcbi1cXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogUFRSX0VSUihoYW5kbGUpO1xcbitcXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XFxuK1xcdGlmIChJU19FUlIoaGFuZGxlKSkge1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBUaGUgY29udmVyc2lvbiBoYXMgc3VjY2Vzc2Z1bGx5IGNvbXBsZXRlZC4gTm90IG11Y2ggdG9cXG4rXFx0XFx0ICogZG8gd2l0aCB0aGUgZXJyb3IgaGVyZSBzbyBqdXN0IGNsZWFudXAgdGhlIG9ycGhhbiBsaXN0XFxuK1xcdFxcdCAqIGFuZCBob3BlIGZvciB0aGUgYmVzdC5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmIChvcnBoYW4gXFx1MDAyNlxcdTAwMjYgaW5vZGUtXFx1MDAzZWlfbmxpbmspXFxuK1xcdFxcdFxcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XFxuK1xcdFxcdHJldDIgPSBQVFJfRVJSKGhhbmRsZSk7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRleHQ0X3VwZGF0ZV9pbm9kZV9zaXplKGlub2RlLCBlcG9zKTtcXG4rXFx0aWYgKG9ycGhhbiBcXHUwMDI2XFx1MDAyNiBpbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKGhhbmRsZSwgaW5vZGUpO1xcbitcXG4gXFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcXG4gXFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XFxuIFxcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbkBAIC00Njk5LDYgKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuIFxcbiBcXHRpZiAoZXBvcyBcXHUwMDNlIG9sZF9zaXplKVxcbiBcXHRcXHRwYWdlY2FjaGVfaXNpemVfZXh0ZW5kZWQoaW5vZGUsIG9sZF9zaXplLCBlcG9zKTtcXG4rb3V0OlxcbitcXHRpZiAocmV0MilcXG4rXFx0XFx0ZXh0NF9zdGRfZXJyb3IoaW5vZGUtXFx1MDAzZWlfc2IsIHJldDIpO1xcbiBcXG4gXFx0cmV0dXJuIHJldCA/IHJldCA6IHJldDI7XFxuIH1cXG5AQCAtNTA1MSwyMSArNTExMywyNiBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiAgKiBhbGwgdW53cml0dGVuIGV4dGVudHMgd2l0aGluIHRoaXMgcmFuZ2Ugd2lsbCBiZSBjb252ZXJ0ZWQgdG9cXG4gICogd3JpdHRlbiBleHRlbnRzLlxcbiAgKlxcbi0gKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QgSU8gZW5kIGlvIGNhbGwgYmFja1xcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cXG4tICogUmV0dXJucyAwIG9uIHN1Y2Nlc3MuXFxuKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gdGhlIGRpcmVjdC9idWZmZXJlZCBJL08gZW5kIGlvIGNhbGwgYmFja1xcbisgKiBmdW5jdGlvbiBhbmQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUywgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZFxcbisgKiB1bndyaXR0ZW4gZXh0ZW50cyBhZnRlciBkYXRhIEkvTyBpcyBjb21wbGV0ZWQuXFxuKyAqXFxuKyAqIFJldHVybnMgMCBvbiBmdWxsIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBwYXJ0aWFsXFxuKyAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gVGhlIG51bWJlciBvZiBibG9ja3MgY29udmVydGVkIGlzIHJldHVybmVkIHZpYVxcbisgKiBAY29udmVydGVkLlxcbiAgKi9cXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcXG4rXFx0XFx0XFx0XFx0ICAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4sXFxuK1xcdFxcdFxcdFxcdCAgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IG1heF9ibG9ja3M7XFxuK1xcdGV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDtcXG4gXFx0aW50IHJldCA9IDAsIHJldDIgPSAwLCByZXQzID0gMDtcXG4gXFx0c3RydWN0IGV4dDRfbWFwX2Jsb2NrcyBtYXA7XFxuIFxcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXFx1MDAzZWlfYmxrYml0cztcXG4gXFx0dW5zaWduZWQgaW50IGNyZWRpdHMgPSAwO1xcbiBcXG4gXFx0bWFwLm1fbGJsayA9IG9mZnNldCBcXHUwMDNlXFx1MDAzZSBibGtiaXRzO1xcbi1cXHRtYXhfYmxvY2tzID0gRVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBibGtiaXRzKTtcXG4rXFx0bWFwLm1fbGVuID0gbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7XFxuIFxcbiBcXHRpZiAoIWhhbmRsZSkge1xcbiBcXHRcXHQvKlxcbkBAIC01MDczLDkgKzUxNDAsOCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjcmVkaXRzID0gZXh0NF9jaHVua190cmFuc19ibG9ja3MoaW5vZGUsIG1heF9ibG9ja3MpO1xcbiBcXHR9XFxuLVxcdHdoaWxlIChyZXQgXFx1MDAzZT0gMCBcXHUwMDI2XFx1MDAyNiByZXQgXFx1MDAzYyBtYXhfYmxvY2tzKSB7XFxuLVxcdFxcdG1hcC5tX2xibGsgKz0gcmV0O1xcbi1cXHRcXHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSByZXQpO1xcbitcXG4rXFx0d2hpbGUgKG1heF9ibG9ja3MpIHtcXG4gXFx0XFx0aWYgKGNyZWRpdHMpIHtcXG4gXFx0XFx0XFx0aGFuZGxlID0gZXh0NF9qb3VybmFsX3N0YXJ0KGlub2RlLCBFWFQ0X0hUX01BUF9CTE9DS1MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICBjcmVkaXRzKTtcXG5AQCAtNTA5MiwyMyArNTE1OCwzNCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcXHUwMDI2bWFwLFxcbiBcXHRcXHRcXHRcXHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfSU9fQ09OVkVSVF9FWFQgfFxcbiBcXHRcXHRcXHRcXHQgICAgICBFWFQ0X0VYX05PQ0FDSEUpO1xcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDApXFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYz0gMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBcXFwiXFxuLVxcdFxcdFxcdFxcdCAgICAgXFxcImV4dDRfZXh0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcXFwiLFxcbi1cXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsayxcXG4tXFx0XFx0XFx0XFx0ICAgICBtYXAubV9sZW4sIHJldCk7XFxuK1xcdFxcdFxcdFxcdCAgICAgXFxcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcXFwiLFxcbitcXHRcXHRcXHRcXHQgICAgIGlub2RlLVxcdTAwM2VpX2lubywgbWFwLm1fbGJsaywgbWFwLm1fbGVuLCByZXQpO1xcbitcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0ID09IDApKVxcbitcXHRcXHRcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRjb252X2Jsb2NrcyArPSBtYXAubV9sZW47XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdHJldDIgPSBleHQ0X21hcmtfaW5vZGVfZGlydHkoaGFuZGxlLCBpbm9kZSk7XFxuIFxcdFxcdGlmIChjcmVkaXRzKSB7XFxuIFxcdFxcdFxcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkocmV0MykpXFxuIFxcdFxcdFxcdFxcdHJldDIgPSByZXQzO1xcbiBcXHRcXHR9XFxuLVxcbi1cXHRcXHRpZiAocmV0IFxcdTAwM2M9IDAgfHwgcmV0MilcXG4rXFx0XFx0cmV0ID0gcmV0IFxcdTAwM2MgMCA/IHJldCA6IHJldDI7XFxuK1xcdFxcdGlmIChyZXQpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbitcXG4rXFx0XFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XFxuK1xcdFxcdG1hcC5tX2xlbiA9IChtYXhfYmxvY2tzIC09IG1hcC5tX2xlbik7XFxuIFxcdH1cXG4tXFx0cmV0dXJuIHJldCBcXHUwMDNlIDAgPyByZXQyIDogcmV0O1xcbitcXHQvKiBDb252ZXJ0ZWQgc29tZSBvciBhbGwgYmxvY2tzIHN1Y2Nlc3NmdWxseT8gKi9cXG4rXFx0aWYgKGNvbnZlcnRlZClcXG4rXFx0XFx0KmNvbnZlcnRlZCA9IGNvbnZfYmxvY2tzO1xcbitcXG4rXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXFxuQEAgLTUxMzEsNyArNTIwOCw3IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWMoaGFuZGxlX3QgKmhhbmRsZSwgZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxcbiBcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlvX2VuZF92ZWMsIFxcdTAwMjZpb19lbmQtXFx1MDAzZWxpc3RfdmVjLCBsaXN0KSB7XFxuIFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsIGlvX2VuZC1cXHUwMDNlaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW9fZW5kX3ZlYy1cXHUwMDNlb2Zmc2V0LFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIGlvX2VuZF92ZWMtXFx1MDAzZXNpemUpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGlvX2VuZF92ZWMtXFx1MDAzZXNpemUsIE5VTEwpO1xcbiBcXHRcXHRpZiAocmV0KVxcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2ZpbGUuYyBiL2ZzL2V4dDQvZmlsZS5jXFxuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2ZpbGUuY1xcbisrKyBiL2ZzL2V4dDQvZmlsZS5jXFxuQEAgLTQzNiw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcXG4gXFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUpO1xcbiBcXHRlbHNlIGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbGFncyBcXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXFxuLVxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpO1xcbitcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTlVMTCk7XFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxODoyNi41OTA3Nzk1MTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo3NzA5ODk3MjczMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF9mYWxsb2NhdGVcIixcbiAgICBcImV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c1wiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBleHQ0IGZpbGVzeXN0ZW0gbG9naWMgZm9yIGhhbmRsaW5nIGZhbGxvY2F0ZSwgemVyb291dCwgYW5kIHVud3JpdHRlbiBleHRlbnRzIGNvbnZlcnNpb24uIEl0IHVwZGF0ZXMgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24vY29udmVyc2lvbiBhbmQgb3JwaGFuIGxpc3QgbWFuYWdlbWVudCwgYW5kIGFkZHMgYSBuZXcgcGFyYW1ldGVyIHRvIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgOGRiZGEwNDIzYjE4Y2VjMTMzYjMyYTNjNzFjNzAyMjA5YzA0OWRiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDMwIDE1OjE4OjI1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggNGUzYjMxNjVlZThmMS4uZjM2ZDg0ZmYwZDVlZCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTM5MDEsNyArMzkwMSw4IEBAIGV4dGVybiB2b2lkIGV4dDRfZXh0X3JlbGVhc2Uoc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcbiBcdFx0XHQgIGxvZmZfdCBsZW4pO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHRcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pO1xuK1x0XHRcdFx0XHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxuK1x0XHRcdFx0XHQgIGV4dDRfbGJsa190ICpjb252ZXJ0ZWQpO1xuIGV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pYyhoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcbiBleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0ZW50cy5jIGIvZnMvZXh0NC9leHRlbnRzLmNcbmluZGV4IGQ1Zjg3YTdmNmMwNTcuLmEzZGRlN2JhMGQyM2UgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dGVudHMuY1xuKysrIGIvZnMvZXh0NC9leHRlbnRzLmNcbkBAIC00NTcxLDYgKzQ1NzEsMjIgQEAgaW50IGV4dDRfZXh0X3RydW5jYXRlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbisvKlxuKyAqIFByZS1hbGxvY2F0ZSBibG9ja3MgZm9yIHRoZSByYW5nZSBbQG9mZnNldCwgQG9mZnNldCArIEBsZW4pLiBBbGxvY2F0ZWRcbisgKiBibG9ja3MgYXJlIG1hcmtlZCBhcyB1bndyaXR0ZW4gYnkgZGVmYXVsdC4gSWYgRVhUNF9HRVRfQkxPQ0tTX1pFUk8gaXNcbisgKiBzZXQsIHRoZSBhbGxvY2F0ZWQgYmxvY2tzIGFyZSB6ZXJvZWQgb24gZGlzayBhbmQgdGhlaXIgZXh0ZW50cyBhcmVcbisgKiBjb252ZXJ0ZWQgdG8gd3JpdHRlbiBzdGF0ZS5cbisgKlxuKyAqIFdoZW4gQG5ld19zaXplIGlzIG5vbnplcm8sIHRoZSBjYWxsZXIgaW50ZW5kcyB0byBleHRlbmQgdGhlIGZpbGUsIGFuZFxuKyAqIHRoZSBmaWxlIHNpemUgc2hvdWxkIGJlIHVwZGF0ZWQgdG8gdGhlIGVuZCBvZiB0aGUgYWxsb2NhdGVkIGJsb2Nrcy5cbisgKlxuKyAqIEFsbG9jYXRpb24gbWF5IHBhcnRpYWxseSBzdWNjZWVkIGR1ZSB0byBzb21lIG5vbi1mYXRhbCBpc3N1ZXMuIEluIHRoYXRcbisgKiBjYXNlLCBpX2Rpc2tzaXplIChhbmQgaV9zaXplKSBpcyBhZHZhbmNlZCB1cCB0byB0aGUgc3VjY2Vzc2Z1bGx5XG4rICogcHJvY2Vzc2VkIHBvcnRpb24gb2YgdGhlIHJhbmdlLlxuKyAqXG4rICogUmV0dXJuIDAgb24gc3VjY2Vzcywgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUgb3IgcGFydGlhbFxuKyAqIGZhaWx1cmUuXG4rICovXG4gc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0XHRcdFx0ICBsb2ZmX3QgbmV3X3NpemUsIGludCBmbGFncylcbiB7XG5AQCAtNDU4NSw2ICs0NjAxLDcgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0bG9mZl90IGVwb3MgPSAwLCBvbGRfc2l6ZSA9IGlfc2l6ZV9yZWFkKGlub2RlKTtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0Ym9vbCBhbGxvY196ZXJvID0gZmFsc2U7XG4rXHRib29sIG9ycGhhbiA9IGZhbHNlO1xuIFxuIFx0QlVHX09OKCFleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FWFRFTlRTKSk7XG4gXHRtYXAubV9sYmxrID0gb2Zmc2V0IFx1MDAzZVx1MDAzZSBibGtiaXRzO1xuQEAgLTQ2NTksMTkgKzQ2NzYsNDkgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFxuIFx0XHRpZiAoYWxsb2NfemVybyBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIChtYXAubV9mbGFncyBcdTAwMjYgKEVYVDRfTUFQX01BUFBFRCB8IEVYVDRfTUFQX1VOV1JJVFRFTikpKSB7XG4rXHRcdFx0ZXh0NF9sYmxrX3QgY29udmVydGVkO1xuK1xuK1x0XHRcdFdBUk5fT05fT05DRShtYXAubV9sYmxrICsgbWFwLm1fbGVuIFx1MDAzZVxuK1x0XHRcdFx0RVhUNF9CX1RPX0xCTEsoaW5vZGUsIG5ld19zaXplID86IG9sZF9zaXplKSk7XG4rXG4gXHRcdFx0cmV0ID0gZXh0NF9pc3N1ZV96ZXJvb3V0KGlub2RlLCBtYXAubV9sYmxrLCBtYXAubV9wYmxrLFxuIFx0XHRcdFx0XHRcdCBtYXAubV9sZW4pO1xuLVx0XHRcdGlmIChsaWtlbHkoIXJldCkpXG4tXHRcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoTlVMTCxcbitcdFx0XHRpZiAodW5saWtlbHkocmV0KSlcbitcdFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRcdGhhbmRsZSA9IGV4dDRfam91cm5hbF9zdGFydChpbm9kZSwgRVhUNF9IVF9NQVBfQkxPQ0tTLFxuK1x0XHRcdFx0XHRcdCAgICBjcmVkaXRzKTtcbitcdFx0XHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbitcdFx0XHRcdHJldCA9IFBUUl9FUlIoaGFuZGxlKTtcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRcdH1cbitcbitcdFx0XHRyZXQgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlLFxuIFx0XHRcdFx0XHRpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuLVx0XHRcdFx0XHQobG9mZl90KW1hcC5tX2xlbiBcdTAwM2NcdTAwM2MgYmxrYml0cyk7XG4rXHRcdFx0XHRcdChsb2ZmX3QpbWFwLm1fbGVuIFx1MDAzY1x1MDAzYyBibGtiaXRzLFxuK1x0XHRcdFx0XHRcdTAwMjZjb252ZXJ0ZWQpO1xuIFx0XHRcdGlmIChyZXQpXG4tXHRcdFx0XHRicmVhaztcbitcdFx0XHRcdG1hcC5tX2xlbiA9IGNvbnZlcnRlZDtcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIElmIGJsb2NrcyBiZXlvbmQgaV9kaXNrc2l6ZSBhcmUgY29udmVydGVkLCBhZGRcbitcdFx0XHQgKiB0aGUgaW5vZGUgdG8gdGhlIG9ycGhhbiBsaXN0IGFuZCBhZHZhbmNlIHRoZSBlcG9zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChuZXdfc2l6ZSBcdTAwMjZcdTAwMjYgY29udmVydGVkKSB7XG4rXHRcdFx0XHRyZXQyID0gZXh0NF9vcnBoYW5fYWRkKGhhbmRsZSwgaW5vZGUpO1xuK1x0XHRcdFx0cmV0ID0gcmV0ID8gcmV0IDogcmV0MjtcbitcdFx0XHRcdG9ycGhhbiA9IHRydWU7XG4rXHRcdFx0fVxuK1xuK1x0XHRcdHJldDMgPSBleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuK1x0XHRcdHJldCA9IHJldCA/IHJldCA6IHJldDM7XG4gXHRcdH1cbiBcbiBcdFx0bWFwLm1fbGJsayArPSBtYXAubV9sZW47XG4gXHRcdG1hcC5tX2xlbiA9IGxlbl9sYmxrID0gbGVuX2xibGsgLSBtYXAubV9sZW47XG4gXHRcdGVwb3MgPSBFWFQ0X0xCTEtfVE9fQihpbm9kZSwgbWFwLm1fbGJsayk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0YnJlYWs7XG4gXHR9XG4gXG4gXHRpZiAocmV0ID09IC1FTk9TUEMgXHUwMDI2XHUwMDI2IGV4dDRfc2hvdWxkX3JldHJ5X2FsbG9jKGlub2RlLVx1MDAzZWlfc2IsIFx1MDAyNnJldHJpZXMpKVxuQEAgLTQ2ODcsMTEgKzQ3MzQsMjMgQEAgc3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxuIFx0aWYgKGVwb3MgXHUwMDNlIG5ld19zaXplKVxuIFx0XHRlcG9zID0gbmV3X3NpemU7XG4gXG4tXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMSk7XG4tXHRpZiAoSVNfRVJSKGhhbmRsZSkpXG4tXHRcdHJldHVybiByZXQgPyByZXQgOiBQVFJfRVJSKGhhbmRsZSk7XG4rXHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUlTQywgMik7XG4rXHRpZiAoSVNfRVJSKGhhbmRsZSkpIHtcbitcdFx0LypcbitcdFx0ICogVGhlIGNvbnZlcnNpb24gaGFzIHN1Y2Nlc3NmdWxseSBjb21wbGV0ZWQuIE5vdCBtdWNoIHRvXG4rXHRcdCAqIGRvIHdpdGggdGhlIGVycm9yIGhlcmUgc28ganVzdCBjbGVhbnVwIHRoZSBvcnBoYW4gbGlzdFxuK1x0XHQgKiBhbmQgaG9wZSBmb3IgdGhlIGJlc3QuXG4rXHRcdCAqL1xuK1x0XHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4rXHRcdHJldDIgPSBQVFJfRVJSKGhhbmRsZSk7XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0ZXh0NF91cGRhdGVfaW5vZGVfc2l6ZShpbm9kZSwgZXBvcyk7XG4rXHRpZiAob3JwaGFuIFx1MDAyNlx1MDAyNiBpbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRleHQ0X29ycGhhbl9kZWwoaGFuZGxlLCBpbm9kZSk7XG4rXG4gXHRyZXQyID0gZXh0NF9tYXJrX2lub2RlX2RpcnR5KGhhbmRsZSwgaW5vZGUpO1xuIFx0ZXh0NF91cGRhdGVfaW5vZGVfZnN5bmNfdHJhbnMoaGFuZGxlLCBpbm9kZSwgMSk7XG4gXHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbkBAIC00Njk5LDYgKzQ3NTgsOSBAQCBzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXG4gXG4gXHRpZiAoZXBvcyBcdTAwM2Ugb2xkX3NpemUpXG4gXHRcdHBhZ2VjYWNoZV9pc2l6ZV9leHRlbmRlZChpbm9kZSwgb2xkX3NpemUsIGVwb3MpO1xuK291dDpcbitcdGlmIChyZXQyKVxuK1x0XHRleHQ0X3N0ZF9lcnJvcihpbm9kZS1cdTAwM2VpX3NiLCByZXQyKTtcbiBcbiBcdHJldHVybiByZXQgPyByZXQgOiByZXQyO1xuIH1cbkBAIC01MDUxLDIxICs1MTEzLDI2IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gICogYWxsIHVud3JpdHRlbiBleHRlbnRzIHdpdGhpbiB0aGlzIHJhbmdlIHdpbGwgYmUgY29udmVydGVkIHRvXG4gICogd3JpdHRlbiBleHRlbnRzLlxuICAqXG4tICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgZGlyZWN0IElPIGVuZCBpbyBjYWxsIGJhY2tcbi0gKiBmdW5jdGlvbiwgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZCBleHRlbnRzIGFmdGVyIElPIGlzIGNvbXBsZXRlZC5cbi0gKiBSZXR1cm5zIDAgb24gc3VjY2Vzcy5cbisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHRoZSBkaXJlY3QvYnVmZmVyZWQgSS9PIGVuZCBpbyBjYWxsIGJhY2tcbisgKiBmdW5jdGlvbiBhbmQgRkFMTE9DX0ZMX1dSSVRFX1pFUk9FUywgdG8gY29udmVydCB0aGUgZmFsbG9jYXRlZFxuKyAqIHVud3JpdHRlbiBleHRlbnRzIGFmdGVyIGRhdGEgSS9PIGlzIGNvbXBsZXRlZC5cbisgKlxuKyAqIFJldHVybnMgMCBvbiBmdWxsIHN1Y2Nlc3MsIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBwYXJ0aWFsXG4rICogc3VjY2VzcyBvciBmYWlsdXJlLiBUaGUgbnVtYmVyIG9mIGJsb2NrcyBjb252ZXJ0ZWQgaXMgcmV0dXJuZWQgdmlhXG4rICogQGNvbnZlcnRlZC5cbiAgKi9cbiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0XHQgICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbilcbitcdFx0XHRcdCAgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxuK1x0XHRcdFx0ICAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgbWF4X2Jsb2NrcztcbitcdGV4dDRfbGJsa190IG1heF9ibG9ja3MsIGNvbnZfYmxvY2tzID0gMDtcbiBcdGludCByZXQgPSAwLCByZXQyID0gMCwgcmV0MyA9IDA7XG4gXHRzdHJ1Y3QgZXh0NF9tYXBfYmxvY2tzIG1hcDtcbiBcdHVuc2lnbmVkIGludCBibGtiaXRzID0gaW5vZGUtXHUwMDNlaV9ibGtiaXRzO1xuIFx0dW5zaWduZWQgaW50IGNyZWRpdHMgPSAwO1xuIFxuIFx0bWFwLm1fbGJsayA9IG9mZnNldCBcdTAwM2VcdTAwM2UgYmxrYml0cztcbi1cdG1heF9ibG9ja3MgPSBFWFQ0X01BWF9CTE9DS1MobGVuLCBvZmZzZXQsIGJsa2JpdHMpO1xuK1x0bWFwLm1fbGVuID0gbWF4X2Jsb2NrcyA9IEVYVDRfTUFYX0JMT0NLUyhsZW4sIG9mZnNldCwgYmxrYml0cyk7XG4gXG4gXHRpZiAoIWhhbmRsZSkge1xuIFx0XHQvKlxuQEAgLTUwNzMsOSArNTE0MCw4IEBAIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0ICovXG4gXHRcdGNyZWRpdHMgPSBleHQ0X2NodW5rX3RyYW5zX2Jsb2Nrcyhpbm9kZSwgbWF4X2Jsb2Nrcyk7XG4gXHR9XG4tXHR3aGlsZSAocmV0IFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgcmV0IFx1MDAzYyBtYXhfYmxvY2tzKSB7XG4tXHRcdG1hcC5tX2xibGsgKz0gcmV0O1xuLVx0XHRtYXAubV9sZW4gPSAobWF4X2Jsb2NrcyAtPSByZXQpO1xuK1xuK1x0d2hpbGUgKG1heF9ibG9ja3MpIHtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRoYW5kbGUgPSBleHQ0X2pvdXJuYWxfc3RhcnQoaW5vZGUsIEVYVDRfSFRfTUFQX0JMT0NLUyxcbiBcdFx0XHRcdFx0XHQgICAgY3JlZGl0cyk7XG5AQCAtNTA5MiwyMyArNTE1OCwzNCBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHJldCA9IGV4dDRfbWFwX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBcdTAwMjZtYXAsXG4gXHRcdFx0XHQgICAgICBFWFQ0X0dFVF9CTE9DS1NfSU9fQ09OVkVSVF9FWFQgfFxuIFx0XHRcdFx0ICAgICAgRVhUNF9FWF9OT0NBQ0hFKTtcbi1cdFx0aWYgKHJldCBcdTAwM2M9IDApXG4rXHRcdGlmIChyZXQgXHUwMDNjPSAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsXG4tXHRcdFx0XHQgICAgIFwiaW5vZGUgIyVsbHU6IGJsb2NrICV1OiBsZW4gJXU6IFwiXG4tXHRcdFx0XHQgICAgIFwiZXh0NF9leHRfbWFwX2Jsb2NrcyByZXR1cm5lZCAlZFwiLFxuLVx0XHRcdFx0ICAgICBpbm9kZS1cdTAwM2VpX2lubywgbWFwLm1fbGJsayxcbi1cdFx0XHRcdCAgICAgbWFwLm1fbGVuLCByZXQpO1xuK1x0XHRcdFx0ICAgICBcImlub2RlICMlbGx1OiBibG9jayAldTogbGVuICV1OiBleHQ0X21hcF9ibG9ja3MgcmV0dXJuZWQgJWRcIixcbitcdFx0XHRcdCAgICAgaW5vZGUtXHUwMDNlaV9pbm8sIG1hcC5tX2xibGssIG1hcC5tX2xlbiwgcmV0KTtcbitcdFx0XHRpZiAodW5saWtlbHkocmV0ID09IDApKVxuK1x0XHRcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRjb252X2Jsb2NrcyArPSBtYXAubV9sZW47XG4rXHRcdH1cbitcbiBcdFx0cmV0MiA9IGV4dDRfbWFya19pbm9kZV9kaXJ0eShoYW5kbGUsIGlub2RlKTtcbiBcdFx0aWYgKGNyZWRpdHMpIHtcbiBcdFx0XHRyZXQzID0gZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdFx0XHRpZiAodW5saWtlbHkocmV0MykpXG4gXHRcdFx0XHRyZXQyID0gcmV0MztcbiBcdFx0fVxuLVxuLVx0XHRpZiAocmV0IFx1MDAzYz0gMCB8fCByZXQyKVxuK1x0XHRyZXQgPSByZXQgXHUwMDNjIDAgPyByZXQgOiByZXQyO1xuK1x0XHRpZiAocmV0KVxuIFx0XHRcdGJyZWFrO1xuK1xuK1x0XHRtYXAubV9sYmxrICs9IG1hcC5tX2xlbjtcbitcdFx0bWFwLm1fbGVuID0gKG1heF9ibG9ja3MgLT0gbWFwLm1fbGVuKTtcbiBcdH1cbi1cdHJldHVybiByZXQgXHUwMDNlIDAgPyByZXQyIDogcmV0O1xuK1x0LyogQ29udmVydGVkIHNvbWUgb3IgYWxsIGJsb2NrcyBzdWNjZXNzZnVsbHk/ICovXG4rXHRpZiAoY29udmVydGVkKVxuK1x0XHQqY29udmVydGVkID0gY29udl9ibG9ja3M7XG4rXG4rXHRyZXR1cm4gcmV0O1xuIH1cbiBcbiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbkBAIC01MTMxLDcgKzUyMDgsNyBAQCBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW9fZW5kX3ZlYywgXHUwMDI2aW9fZW5kLVx1MDAzZWxpc3RfdmVjLCBsaXN0KSB7XG4gXHRcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsIGlvX2VuZC1cdTAwM2Vpbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlb2Zmc2V0LFxuLVx0XHRcdFx0XHRcdCAgICAgaW9fZW5kX3ZlYy1cdTAwM2VzaXplKTtcbitcdFx0XHRcdFx0XHQgICAgIGlvX2VuZF92ZWMtXHUwMDNlc2l6ZSwgTlVMTCk7XG4gXHRcdGlmIChyZXQpXG4gXHRcdFx0YnJlYWs7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9maWxlLmMgYi9mcy9leHQ0L2ZpbGUuY1xuaW5kZXggOWExNjA3MWI3MTlkNy4uNDVlMTY3OTlkMGMyNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZmlsZS5jXG4rKysgYi9mcy9leHQ0L2ZpbGUuY1xuQEAgLTQzNiw3ICs0MzYsOCBAQCBzdGF0aWMgaW50IGV4dDRfZGlvX3dyaXRlX2VuZF9pbyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNzaXplX3Qgc2l6ZSxcbiBcdFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXG4gXHRcdFx0XHRcdFx0XHQgICAgICBzaXplKTtcbiBcdGVsc2UgaWYgKCFlcnJvciBcdTAwMjZcdTAwMjYgc2l6ZSBcdTAwMjZcdTAwMjYgZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXG4tXHRcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUpO1xuK1x0XHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhOVUxMLCBpbm9kZSwgcG9zLCBzaXplLFxuK1x0XHRcdFx0XHRcdCAgICAgICBOVUxMKTtcbiBcdGlmIChlcnJvcilcbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjI2LjU5MDc4MDU2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1NzQ4ODQxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBFeHQ0IEFsbG9jYXRpb24gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRhcmdldGluZyBgZnMvZXh0NC9leHRlbnRzLmNgLiBJdCdzIHRvdWNoaW5nIHNvbWUgY3JpdGljYWwgY29kZTogYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AgYW5kIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYC4gSW1tZWRpYXRlbHksIEkgc2VlIGEgbmV3IHBhcmFtZXRlciwgYGV4dDRfbGJsa190ICpjb252ZXJ0ZWRgLCBiZWluZyBhZGRlZCB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gVGhhdCdzIGludGVyZXN0aW5nLCBsaWtlbHkgZm9yIHRyYWNraW5nIHdoYXQncyBiZWVuIGNvbnZlcnRlZC4gVGhlIGZhY3QgdGhhdCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaGFzIGFsc28gYmVlbiB1cGRhdGVkIHRvIGhhbmRsZSBwYXJ0aWFsIGFsbG9jYXRpb24sIGNvbnZlcnNpb24sIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50IHN1Z2dlc3RzIHRoaXMgaXMgbW9yZSB0aGFuIGp1c3QgYSBtaW5vciB0d2Vhay4gVGhlc2UgYXJlIGNvcmUgZnVuY3Rpb25zIHRoYXQgYXJlIGNydWNpYWwgZm9yIGZpbGVzeXN0ZW0gYmVoYXZpb3IsIGVzcGVjaWFsbHkgYXJvdW5kIGZhbGxvY2F0ZSwgemVyb2luZywgYW5kIHRoZSBoYW5kbGluZyBvZiB1bndyaXR0ZW4gZXh0ZW50cywgc28gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV2ZXJ5dGhpbmcgd29ya3MgYXMgZXhwZWN0ZWQuXG5cbkkgbmVlZCB0byBjb25maXJtIHByZWNpc2VseSAqaG93KiBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXMgYmVpbmcgdXNlZC4gSSBrbm93IGl0J3MgaW52b2x2ZWQgaW4gZmFsbG9jYXRlIG9wZXJhdGlvbnMsIGxpa2VseSB0aHJvdWdoIGEgY2FsbCBsaWtlIGBleHQ0X3plcm9fcmFuZ2VgLCBidXQgSSB3YW50IHRvIGJlIGNlcnRhaW4gYWJvdXQgdGhlIGNhbGwgc3RhY2sgYW5kIGhvdyB0aGlzIG5ldyBgY29udmVydGVkYCBwYXJhbWV0ZXIgbWlnaHQgYWZmZWN0IHRoaW5ncy4gTGV0IG1lIHF1aWNrbHkgZ3JlcCBmb3IgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdmlldyBvZiBpdHMgY2FsbCBzaXRlcy4gVGhhdCB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBpbXBhY3Qgb2YgdGhlc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTMyMSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjMyLjE2NTY3MDE4OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODc1MDU3MjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfYWxsb2NfZmlsZV9ibG9ja3NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHRlbnRzLmM9NDU0Mz1pbnQgZXh0NF9leHRfdHJ1bmNhdGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ1ODktICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDU5MDpzdGF0aWMgaW50IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3Moc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4sXFxuZnMvZXh0NC9leHRlbnRzLmMtNDU5MS1cXHRcXHRcXHRcXHQgIGxvZmZfdCBuZXdfc2l6ZSwgaW50IGZsYWdzKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDc3Mj1zdGF0aWMgbG9uZyBleHQ0X3plcm9fcmFuZ2Uoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODAzLVxcdGlmICghSVNfQUxJR05FRChvZmZzZXQgfCBlbmQsIGJsb2Nrc2l6ZSkpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODA0OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgb2Zmc2V0LCBsZW4sIG5ld19zaXplLFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ4MDUtXFx0XFx0XFx0XFx0XFx0ICAgICBmbGFncyk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00ODQ1LVxcdFxcdFxcdFxcdCAgRVhUNF9FWF9OT0NBQ0hFKTtcXG5mcy9leHQ0L2V4dGVudHMuYzo0ODQ2OlxcdFxcdHJldCA9IGV4dDRfYWxsb2NfZmlsZV9ibG9ja3MoZmlsZSwgYWxpZ25fc3RhcnQsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDg0Ny1cXHRcXHRcXHRcXHRcXHQgICAgIGFsaWduX2VuZCAtIGFsaWduX3N0YXJ0LCBuZXdfc2l6ZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ4OTM9c3RhdGljIGxvbmcgZXh0NF9kb19mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBvZmZzZXQsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy00OTE3LVxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5MTg6XFx0cmV0ID0gZXh0NF9hbGxvY19maWxlX2Jsb2NrcyhmaWxlLCBvZmZzZXQsIGxlbiwgbmV3X3NpemUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDkxOS1cXHRcXHRcXHRcXHQgICAgIEVYVDRfR0VUX0JMT0NLU19DUkVBVEVfVU5XUklUX0VYVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjM0LjA0MDczMzgxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTQ3MTI3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogZXh0NCBCbG9jayBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IGJsb2NrIGFsbG9jYXRpb24gd29ya3MgaW4gZXh0NCwgcGFydGljdWxhcmx5IGZvY3VzaW5nIG9uIHBvdGVudGlhbCBmdXp6aW5nIHRhcmdldHMuIEZyb20gd2hhdCBJJ3ZlIHRyYWNlZCwgYGV4dDRfYWxsb2NfZmlsZV9ibG9ja3NgIGlzIGRlZmluaXRlbHkgYSBrZXkgZnVuY3Rpb24uIEkgc2VlIGl0J3MgY2FsbGVkIGZyb20gYGV4dDRfemVyb19yYW5nZWAgYW5kIGBleHQ0X2RvX2ZhbGxvY2F0ZWAsIHdoaWNoIGFyZSBzaWduaWZpY2FudCBmaWxlIHN5c3RlbSBvcGVyYXRpb25zLiBJIGFsc28gc2VlIHRoYXQgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AgZ2V0cyBjYWxsZWQgZnJvbSBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AsIGFzIHdlbGwgYXMgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AsIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLCBhbmQgb3RoZXIgaW1wb3J0YW50IHBsYWNlcy4gVGhlc2UgZnVuY3Rpb25zIHJlcHJlc2VudCBjbGVhciBlbnRyeSBwb2ludHMgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRoZXNlIGNyaXRpY2FsIGZ1bmN0aW9uczogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfemVyb19yYW5nZWAsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC4gYGV4dDRfZG9fZmFsbG9jYXRlYCBhbHNvIHdhcnJhbnRzIHNjcnV0aW55LCBhc3N1bWluZyBpdCdzIG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBpdHNlbGYgaXMgc3RhdGljLCBzbyBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBvdGhlciBmdW5jdGlvbnMgdGhhdCBjYWxsIGl0LCBzdWNoIGFzIGBleHQ0X2ZhbGxvY2F0ZWAuXG5cblJpZ2h0LCBsZXQncyBzdGFydCB3aXRoIGEgZGVlcCBkaXZlIGludG8gYGV4dDRfZmFsbG9jYXRlYCBhbmQgYGV4dDRfemVyb19yYW5nZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBpbW1lZGlhdGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzM0LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjM5LjMxNjIwNzUwOFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTE3OTgwNjA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfZmFsbG9jYXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MDA9ZXh0ZXJuIHZvaWQgZXh0NF9leHRfcmVsZWFzZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwMTpleHRlcm4gbG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvZXh0NC9leHQ0LmgtMzkwMi1cXHRcXHRcXHQgIGxvZmZfdCBsZW4pO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NDg5Mz1zdGF0aWMgbG9uZyBleHQ0X2RvX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDAtXFxuZnMvZXh0NC9leHRlbnRzLmM6NDkwMTpcXHR0cmFjZV9leHQ0X2ZhbGxvY2F0ZV9lbnRlcihpbm9kZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MDItXFx0V0FSTl9PTl9PTkNFKCFpbm9kZV9pc19sb2NrZWQoaW5vZGUpKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5Mjgtb3V0OlxcbmZzL2V4dDQvZXh0ZW50cy5jOjQ5Mjk6XFx0dHJhY2VfZXh0NF9mYWxsb2NhdGVfZXhpdChpbm9kZSwgb2Zmc2V0LFxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5MzAtXFx0XFx0XFx0RVhUNF9NQVhfQkxPQ0tTKGxlbiwgb2Zmc2V0LCBpbm9kZS1cXHUwMDNlaV9ibGtiaXRzKSwgcmV0KTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ5NDAtICovXFxuZnMvZXh0NC9leHRlbnRzLmM6NDk0MTpsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcXG5mcy9leHQ0L2V4dGVudHMuYy00OTQyLXtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTEwMzM9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBleHQ0X2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTEwNDgtXFx0LnNwbGljZV93cml0ZVxcdD0gaXRlcl9maWxlX3NwbGljZV93cml0ZSxcXG5mcy9leHQ0L2ZpbGUuYzoxMDQ5OlxcdC5mYWxsb2NhdGVcXHQ9IGV4dDRfZmFsbG9jYXRlLFxcbmZzL2V4dDQvZmlsZS5jLTEwNTAtXFx0LmZvcF9mbGFnc1xcdD0gRk9QX01NQVBfU1lOQyB8IEZPUF9CVUZGRVJfUkFTWU5DIHxcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDI5PURFQ0xBUkVfRVZFTlRfQ0xBU1MoZXh0NF9fZmFsbG9jYXRlX21vZGUsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ1Ni1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ1NzpERUZJTkVfRVZFTlQoZXh0NF9fZmFsbG9jYXRlX21vZGUsIGV4dDRfZmFsbG9jYXRlX2VudGVyLFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDU4LVxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oPTE0NzE9REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXFxuLS1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0LmgtMTQ3Ny1cXG5pbmNsdWRlL3RyYWNlL2V2ZW50cy9leHQ0Lmg6MTQ3ODpUUkFDRV9FVkVOVChleHQ0X2ZhbGxvY2F0ZV9leGl0LFxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaC0xNDc5LVxcdFRQX1BST1RPKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjQxLjQzNDE5NDkxNVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODkwMzEzMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW5uZXIgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBgZXh0NF9mYWxsb2NhdGVgIENvZGUqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28sIGBleHQ0X2ZhbGxvY2F0ZWAgc2VlbXMgdG8gYmUgdGhlIHByaW1hcnkgZnVuY3Rpb24gb2YgaW50ZXJlc3QsIHRoZSBtYWluIGVudHJ5IHBvaW50IGZvciB0aGUgKmZhbGxvY2F0ZSogZnVuY3Rpb25hbGl0eSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gVGhhdCdzIHdoYXQgSSdkIGV4cGVjdC4gSXQncyB0aGUgcG9pbnQgb2YgY29udGFjdCwgdGhlIGdhdGV3YXkuIFdoYXQncyB0aGUgY29udGV4dCBmb3IgdGhpcyBleGFtaW5hdGlvbj9cblxuQW5kIHRoZXJlJ3MgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIEhtbSwgb2theSwgaXQncyBhbHNvIGV4cG9zZWQsIG9yIGF0IGxlYXN0IG5vdCBkZWNsYXJlZCBhcyBzdGF0aWMuIFRoaXMgcHJvYmFibHkgcGxheXMgYSBjcml0aWNhbCByb2xlIGluIGhvdyAqZmFsbG9jYXRlKiB3b3JrcyBpdHMgbWFnaWMgaW4gdW53cml0dGVuIGV4dGVudC1iYXNlZCBhbGxvY2F0aW9uLiBJdCdzIGFuIGV4cG9ydGVkIGZ1bmN0aW9uLCBzbyBpdCdzIGxpa2VseSBjYWxsZWQgZnJvbSBtb3JlIHRoYW4ganVzdCB3aXRoaW4gdGhlIGNvcmUgKmZhbGxvY2F0ZSogaW1wbGVtZW50YXRpb24gaXRzZWxmLiBDb3VsZCBiZSB1c2VkIGJ5IG90aGVyIGV4dDQgb3BlcmF0aW9ucyBmb3Igb3B0aW1pemF0aW9uIG9yIGJ5IHJlbGF0ZWQgZmVhdHVyZXMuIEludGVyZXN0aW5nLi4uIEknbGwgbmVlZCB0byBzZWUgaG93IHRoZXkgaW50ZXJhY3QuIFRoaXMgY291bGQgaW52b2x2ZSBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHVud3JpdHRlbiBleHRlbnRzLCB3aGljaCBpcyBhdCB0aGUgaGVhcnQgb2YgdGhlIHplcm9pbmcvcHJlLWFsbG9jYXRpb24gYXNwZWN0LiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBzZWUgaG93IHRoZXNlIHR3byBhcmUgd29ya2luZyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NzYwMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjQ1LjEyMzIyODQ5OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTg1NDM1NTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTAxPWV4dGVybiBsb25nIGV4dDRfZmFsbG9jYXRlKHN0cnVjdCBmaWxlICpmaWxlLCBpbnQgbW9kZSwgbG9mZl90IG9mZnNldCxcXG5mcy9leHQ0L2V4dDQuaC0zOTAyLVxcdFxcdFxcdCAgbG9mZl90IGxlbik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwMzpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MDQtXFx0XFx0XFx0XFx0XFx0ICBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbixcXG5mcy9leHQ0L2V4dDQuaC0zOTA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwNjpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTM1NTc9ZXh0NF9leHRfY29udmVydF90b19pbml0aWFsaXplZChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMzgwOS0gKiBiZWluZyBmaWxsZWQgd2lsbCBiZSBjb252ZXJ0IHRvIGluaXRpYWxpemVkIGJ5IHRoZSBlbmRfaW8gY2FsbGJhY2sgZnVuY3Rpb25cXG5mcy9leHQ0L2V4dGVudHMuYzozODEwOiAqIHZpYSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoKS5cXG5mcy9leHQ0L2V4dGVudHMuYy0zODExLSAqXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz0zOTEzPXN0YXRpYyBzdHJ1Y3QgZXh0NF9leHRfcGF0aCAqXFxuZnMvZXh0NC9leHRlbnRzLmM6MzkxNDpleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZW5kaW8oaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy0zOTE1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfbWFwX2Jsb2NrcyAqbWFwLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9Mzk5Mj1leHQ0X2V4dF9oYW5kbGVfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQwMTQtXFx0aWYgKGZsYWdzIFxcdTAwMjYgRVhUNF9HRVRfQkxPQ0tTX0NPTlZFUlQpIHtcXG5mcy9leHQ0L2V4dGVudHMuYzo0MDE1OlxcdFxcdHBhdGggPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfZW5kaW8oaGFuZGxlLCBpbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy00MDE2LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBtYXAsIHBhdGgsIGZsYWdzKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ1OTA9c3RhdGljIGludCBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzKHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5NS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0Njk2OlxcdFxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50cyhoYW5kbGUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNDY5Ny1cXHRcXHRcXHRcXHRcXHRpbm9kZSwgKGxvZmZfdCltYXAubV9sYmxrIFxcdTAwM2NcXHUwMDNjIGJsa2JpdHMsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0NS0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1MDQ2OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuZnMvZXh0NC9leHRlbnRzLmMtNTA0Ny1cXHRcXHRcXHRcXHRcXHQgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTEyMy0gKi9cXG5mcy9leHQ0L2V4dGVudHMuYzo1MTI0OmludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MTI1LVxcdFxcdFxcdFxcdCAgIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuLFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTE5MT1pbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjKGhhbmRsZV90ICpoYW5kbGUsIGV4dDRfaW9fZW5kX3QgKmlvX2VuZClcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTUyMDgtXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShpb19lbmRfdmVjLCBcXHUwMDI2aW9fZW5kLVxcdTAwM2VsaXN0X3ZlYywgbGlzdCkge1xcbmZzL2V4dDQvZXh0ZW50cy5jOjUyMDk6XFx0XFx0cmV0ID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZSwgaW9fZW5kLVxcdTAwM2Vpbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MjEwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgaW9fZW5kX3ZlYy1cXHUwMDNlb2Zmc2V0LFxcbi0tXFxuZnMvZXh0NC9maWxlLmM9NDI3PXN0YXRpYyBpbnQgZXh0NF9kaW9fd3JpdGVfZW5kX2lvKHN0cnVjdCBraW9jYiAqaW9jYiwgc3NpemVfdCBzaXplLFxcbi0tXFxuZnMvZXh0NC9maWxlLmMtNDM1LVxcdFxcdFxcdChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfQVRPTUlDKSlcXG5mcy9leHQ0L2ZpbGUuYzo0MzY6XFx0XFx0ZXJyb3IgPSBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKE5VTEwsIGlub2RlLCBwb3MsXFxuZnMvZXh0NC9maWxlLmMtNDM3LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemUpO1xcbmZzL2V4dDQvZmlsZS5jLTQzOC1cXHRlbHNlIGlmICghZXJyb3IgXFx1MDAyNlxcdTAwMjYgc2l6ZSBcXHUwMDI2XFx1MDAyNiBmbGFncyBcXHUwMDI2IElPTUFQX0RJT19VTldSSVRURU4pXFxuZnMvZXh0NC9maWxlLmM6NDM5OlxcdFxcdGVycm9yID0gZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKE5VTEwsIGlub2RlLCBwb3MsIHNpemUsXFxuZnMvZXh0NC9maWxlLmMtNDQwLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTg6NDcuMTA4NjY4MDA3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0MjY0Mjg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AncyBDYWxsZXJzKipcblxuQWxyaWdodCwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIG9mIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLiBJdCdzIGNhbGxlZCBmcm9tIGEgZmV3IGtleSBwbGFjZXM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AsIGFuZCBgZXh0NF9kaW9fd3JpdGVfZW5kX2lvYC4gTm93LCBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgaXRzZWxmIGdldHMgaW52b2tlZCBmcm9tIGBleHQ0X3plcm9fcmFuZ2VgIGFuZCBgZXh0NF9kb19mYWxsb2NhdGVgLlxuXG5HaXZlbiB0aGlzLCBmb2N1c2luZyBvbiBgZXh0NF9mYWxsb2NhdGVgIGFuZCBwb3RlbnRpYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBzZWVtcyBsaWtlIGEgc2Vuc2libGUgYXBwcm9hY2guIFRoZXkncmUgbGlrZWx5IGtleSBlbnRyeSBwb2ludHMgdGhhdCBmdW5uZWwgaW50byB0aGF0IGNvbnZlcnNpb24gZnVuY3Rpb24uIEhvbGQgb24sIHRob3VnaC4uLiBgZXh0NF96ZXJvX3JhbmdlYCBpcyBtYXJrZWQgYXMgc3RhdGljLiBUaGF0IGxpbWl0cyBpdHMgZGlyZWN0IHZpc2liaWxpdHkgZm9yIGV4dGVybmFsIGNhbGxzLCByaWdodD8gVGhhdCBtYWtlcyBgZXh0NF9mYWxsb2NhdGVgIHRoZSBtb3JlIGludGVyZXN0aW5nIHN5bWJvbCBmb3IgZnVydGhlciBpbnZlc3RpZ2F0aW9uIGFzIGl0J3Mgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB0aGVyZWZvcmUgcHJvYmFibHkgcGFydCBvZiB0aGUgZXh0ZXJuYWwgaW50ZXJmYWNlLiBUaW1lIHRvIGRpZyBkZWVwZXIgaW50byBgZXh0NF9mYWxsb2NhdGVgIHRoZW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyNDAsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTg6NTQuNjUxMzEzNzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ2MzQ3NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF96ZXJvX3JhbmdlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0ZW50cy5jPTQ3NzA9c3RhdGljIGludCBleHQ0X2luc2VydF9yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbik7XFxuZnMvZXh0NC9leHRlbnRzLmMtNDc3MS1cXG5mcy9leHQ0L2V4dGVudHMuYzo0NzcyOnN0YXRpYyBsb25nIGV4dDRfemVyb19yYW5nZShzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCxcXG5mcy9leHQ0L2V4dGVudHMuYy00NzczLVxcdFxcdFxcdCAgICBsb2ZmX3QgbGVuLCBpbnQgbW9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jLTQ3ODItXFxuZnMvZXh0NC9leHRlbnRzLmM6NDc4MzpcXHR0cmFjZV9leHQ0X3plcm9fcmFuZ2UoaW5vZGUsIG9mZnNldCwgbGVuLCBtb2RlKTtcXG5mcy9leHQ0L2V4dGVudHMuYy00Nzg0LVxcdFdBUk5fT05fT05DRSghaW5vZGVfaXNfbG9ja2VkKGlub2RlKSk7XFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYz00OTQxPWxvbmcgZXh0NF9mYWxsb2NhdGUoc3RydWN0IGZpbGUgKmZpbGUsIGludCBtb2RlLCBsb2ZmX3Qgb2Zmc2V0LCBsb2ZmX3QgbGVuKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtNTAwOS1cXHRjYXNlIEZBTExPQ19GTF9XUklURV9aRVJPRVM6XFxuZnMvZXh0NC9leHRlbnRzLmM6NTAxMDpcXHRcXHRyZXQgPSBleHQ0X3plcm9fcmFuZ2UoZmlsZSwgb2Zmc2V0LCBsZW4sIG1vZGUpO1xcbmZzL2V4dDQvZXh0ZW50cy5jLTUwMTEtXFx0XFx0YnJlYWs7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9Mzk5NT12b2lkIGV4dDRfc2V0X2FvcHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00MDE2LSAqIEhlcmUgd2UgY2FuJ3Qgc2tpcCBhbiB1bndyaXR0ZW4gYnVmZmVyIGV2ZW4gdGhvdWdoIGl0IHVzdWFsbHkgcmVhZHMgemVyb1xcbmZzL2V4dDQvaW5vZGUuYzo0MDE3OiAqIGJlY2F1c2UgaXQgbWlnaHQgaGF2ZSBkYXRhIGluIHBhZ2VjYWNoZSAoZWcsIGlmIGNhbGxlZCBmcm9tIGV4dDRfemVyb19yYW5nZSxcXG5mcy9leHQ0L2lub2RlLmMtNDAxOC0gKiBleHQ0X3B1bmNoX2hvbGUsIGV0Yykgd2hpY2ggbmVlZHMgdG8gYmUgcHJvcGVybHkgemVyb2VkIG91dC4gT3RoZXJ3aXNlIGFcXG4tLVxcbmluY2x1ZGUvdHJhY2UvZXZlbnRzL2V4dDQuaD0xNDY0PURFRklORV9FVkVOVChleHQ0X19mYWxsb2NhdGVfbW9kZSwgZXh0NF9wdW5jaF9ob2xlLFxcbi0tXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NzAtXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oOjE0NzE6REVGSU5FX0VWRU5UKGV4dDRfX2ZhbGxvY2F0ZV9tb2RlLCBleHQ0X3plcm9fcmFuZ2UsXFxuaW5jbHVkZS90cmFjZS9ldmVudHMvZXh0NC5oLTE0NzItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE4OjU2LjUxNTk1NjAzMVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MDYyNDIwNjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGxpa2UgbXlzZWxmOlxuXG4qKlVuZGVyc3RhbmRpbmcgdGhlIEV4dDQgRmFsbG9jIGFuZCBaZXJvaW5nIEZsb3cqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgemVyb2luZyBhbmQgc3BhY2UgYWxsb2NhdGlvbiB3b3JrIHdpdGhpbiB0aGUgZXh0NCBmaWxlc3lzdGVtLiBJIHNlZSB0aGF0IGBleHQ0X2ZhbGxvY2F0ZWAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uIGhlcmU7IGl0J3MgdGhlIHRvcC1sZXZlbCBlbnRyeSBwb2ludCB0aGF0IGNhbGxzIHRoZSBsb3dlci1sZXZlbCBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSBgZXh0NF96ZXJvX3JhbmdlYCBhbmQgYGV4dDRfZG9fZmFsbG9jYXRlYC4gVGhpcyBpcyB0aGUgZXhwZWN0ZWQgZGVzaWduLiBJIGtub3cgYGZhbGxvY2F0ZWAgaGFuZGxlcyBhIHdpZGUgcmFuZ2Ugb2YgdGFza3MgcmVsYXRlZCB0byBmaWxlIHNwYWNlIGFsbG9jYXRpb24sIGFuZCB6ZXJvaW5nIGlzIG9uZSBvZiB0aG9zZSBjcnVjaWFsIG9wZXJhdGlvbnMuXG5cbkZ1cnRoZXJtb3JlLCBJJ20gbm90aWNpbmcgdGhhdCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYCBpcyBjYWxsZWQgZnJvbSB0d28ga2V5IElPIGNvbXBsZXRpb24gcGF0aHM6IGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlIGZhY3QgdGhhdCBpdCdzIHJlbGF0ZWQgdG8gKnVud3JpdHRlbiBleHRlbnRzKiBpbiB0aGVzZSBjb250ZXh0cyBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZW4gYW5kIHdoeSBpdCdzIGludm9rZWQgZHVyaW5nIERpcmVjdCBJTyBhbmQgYnVmZmVyZWQgSU8gd2l0aCB1bndyaXR0ZW4gZXh0ZW50cy4gVGhpcyBzdWdnZXN0cyBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgY29udmVydGluZyB0aG9zZSB1bndyaXR0ZW4gZXh0ZW50cyBpbnRvIHNvbWV0aGluZyB1c2FibGUsIHBvc3NpYmx5IGFmdGVyIGEgd3JpdGUgb3Igd2hlbiBzcGFjZSBpcyBuZWVkZWQuXG5cbkknbSBub3cgZ29pbmcgdG8gZGl2ZSBkZWVwZXIgaW50byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gS25vd2luZyB0aGUgY29udGV4dCBpbiB3aGljaCBpdCdzIGNhbGxlZCBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29tcGxldGUgcGljdHVyZS4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBkZWFsaW5nIHdpdGggdGhlIEkvTyB2ZWN0b3IgYW5kIHdoYXQgc3BlY2lmaWMgdHJhbnNmb3JtYXRpb25zIGl0J3MgcGVyZm9ybWluZyBvbiB0aGVzZSBleHRlbnRzLiBUaGlzIGZlZWxzIGxpa2UgaXQgbWlnaHQgYmUgd2hlcmUgdGhlIHJlYWwgd29yayBvZiBjb252ZXJ0aW5nIHVud3JpdHRlbiBleHRlbnRzIHRvIGFjdHVhbCBibG9ja3MgaGFwcGVucywgYW5kIGl0J3MgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyNDAsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOTowMi41NzgzNzk4NTdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5Mjk4MDI5MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZXh0NC5oPTM5MDY9ZXh0ZXJuIGludCBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljKGhhbmRsZV90ICpoYW5kbGUsXFxuZnMvZXh0NC9leHQ0LmgtMzkwNy1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0LCBzc2l6ZV90IGxlbik7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwODpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLFxcbmZzL2V4dDQvZXh0NC5oLTM5MDktXFx0XFx0XFx0XFx0XFx0ICAgICBleHQ0X2lvX2VuZF90ICppb19lbmQpO1xcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9NTEyND1pbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01MTkwLVxcbmZzL2V4dDQvZXh0ZW50cy5jOjUxOTE6aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGVfdCAqaGFuZGxlLCBleHQ0X2lvX2VuZF90ICppb19lbmQpXFxuZnMvZXh0NC9leHRlbnRzLmMtNTE5Mi17XFxuLS1cXG5mcy9leHQ0L3BhZ2UtaW8uYz0xNjc9c3RhdGljIGludCBleHQ0X2VuZF9pb19lbmQoZXh0NF9pb19lbmRfdCAqaW9fZW5kKVxcbi0tXFxuZnMvZXh0NC9wYWdlLWlvLmMtMTkwLVxcdH0gZWxzZSB7XFxuZnMvZXh0NC9wYWdlLWlvLmM6MTkxOlxcdFxcdHJldCA9IGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlYyhoYW5kbGUsIGlvX2VuZCk7XFxuZnMvZXh0NC9wYWdlLWlvLmMtMTkyLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MDQuNTA4MTg3Mzk2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3MTQxNzg2MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBleHQ0IEkvTyBDb21wbGV0aW9uIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gdHJ5aW5nIHRvIHRyYWNlIHRoZSBjb21wbGV0aW9uIHBhdGggZm9yIEkvTyBvcGVyYXRpb25zIGluIHRoZSBleHQ0IGZpbGVzeXN0ZW0sIHNwZWNpZmljYWxseSBsb29raW5nIGF0IGhvdyB0aGluZ3Mgd3JhcCB1cCBhZnRlciBhIHdyaXRlLiBGcm9tIHdoYXQgSSB1bmRlcnN0YW5kLCBgZXh0NF9lbmRfaW9fZW5kYCBpcyB0aGUgY3J1Y2lhbCBmdW5jdGlvbiwgYW5kIGl0J3MgYmVpbmcgY2FsbGVkIGJ5IGBleHQ0X2VuZF9pb19yc3Zfd29ya2Agb3Igc29tZXRoaW5nIHNpbWlsYXIuIFNvLCB0aGUga2V5IGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gcmlnaHQgbm93IGFyZTogYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gVGhlc2UgYXJlIHRoZSBsaWtlbHkgY2FuZGlkYXRlcyB3aGVyZSB0aGlzIGNvbXBsZXRpb24gZnVuY3Rpb24gaXMgaW52b2tlZC4gQW5kLCBoZXksIGxldCdzIG5vdCBmb3JnZXQgdG8gY2hlY2sgYGV4dDRfZGlvX3dyaXRlX2VuZF9pb2AgYXMgd2VsbCwganVzdCBpbiBjYXNlIHRoYXQncyB3aGVyZSB0aGUgZmluYWwgcGllY2Ugb2YgdGhlIHB1enpsZSBsaWVzLCBhc3N1bWluZyBpdCBpc24ndCBhIHN0YXRpYyBmdW5jdGlvbi4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gd2l0aGluIGBleHQ0X2Rpb193cml0ZV9lbmRfaW9gLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTEzMiwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToxMC4yMjIzNjkwNThaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODUzNDg2NzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9kaW9fd3JpdGVfZW5kX2lvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvZmlsZS5jPTM5MD1zdGF0aWMgdm9pZCBleHQ0X2lub2RlX2V4dGVuc2lvbl9jbGVhbnVwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGJvb2wgbmVlZF90cnVuYylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jLTQyNi1cXG5mcy9leHQ0L2ZpbGUuYzo0Mjc6c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuZnMvZXh0NC9maWxlLmMtNDI4LVxcdFxcdFxcdFxcdCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBmbGFncylcXG4tLVxcbmZzL2V4dDQvZmlsZS5jPTQ1OT1zdGF0aWMgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgZXh0NF9kaW9fd3JpdGVfb3BzID0ge1xcbmZzL2V4dDQvZmlsZS5jOjQ2MDpcXHQuZW5kX2lvID0gZXh0NF9kaW9fd3JpdGVfZW5kX2lvLFxcbmZzL2V4dDQvZmlsZS5jLTQ2MS19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToxMi4zMDc3MjIzMDZaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI3NTg3ODAzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN0YWduYXRpb24gaW4gRXh0NCdzIEZhbGxvY2F0ZSBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHRoaXMgZmVlbHMuLi4gc3R1Y2suIFRoZSBhbmFseXNpcyBpc24ndCBwcm9ncmVzc2luZyBhcyBleHBlY3RlZC4gSXQgc2VlbXMgbXkgYXR0ZW50aW9uIG5lZWRzIHRvIGZvY3VzIG9uIGEgZmV3IHNwZWNpZmljIGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZhbGxvY2F0ZSBpbiBleHQ0LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBsb29rIGludG8gYGV4dDRfZmFsbG9jYXRlYCwgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AsIGFuZCBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9pb19lbmRfdmVjYC4gSSBzdXNwZWN0IHRoZSBpc3N1ZSBsaWVzIHdpdGhpbiBvbmUgb2YgdGhlc2UsIG9yIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVtLlxuXG5CZWZvcmUgZGl2aW5nIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJJ2xsIHF1aWNrbHkgdmVyaWZ5IHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMuIFRoZSByZWxldmFudCBzb3VyY2UgY29kZSBzaG91bGQgYmUgbG9jYXRlZCB3aXRoaW4gdGhlIGBmcy9leHQ0L2AgZGlyZWN0b3J5LiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IGBDT05GSUdfRVhUNF9GU2AgaXMgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYSBxdWljayBjaGVjaywgYnV0IGl0J3MgaW1wb3J0YW50IHRvIG1ha2Ugc3VyZSBhbGwgdGhlIG5lY2Vzc2FyeSBkZXBlbmRlbmNpZXMgYXJlIG1ldCBiZWZvcmUgZ29pbmcgZGVlcGVyIGludG8gdGhlIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzA3LCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MTcuNTgzNjAyNTMzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUyNzU4MjY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE5OjE5LjUzNjM2NzkyM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDM2MzEwOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzY2VuYXJpbywgZm9jdXNpbmcgb24gdGhlIGNvcmUgcHJvYmxlbSBhbmQgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkFuYWx5emluZyB0aGUgRVhUNCBGaWxlc3lzdGVtIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgc28gd2UncmUgZGVhbGluZyB3aXRoIEVYVDQsIGFuZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG9wdGlvbiBzZWVtcyB0byBiZSBgQ09ORklHX0VYVDRfRlNgLiBJIG5lZWQgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRob3VnaCwgdGhhdCB0aGVyZSBhcmVuJ3QgKm90aGVyKiByZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBwYXRjaCBvciBkZXBlbmQgb24gaXQuIFRoYXQncyBhbHdheXMgbXkgZmlyc3Qgc3RlcCDigJMgZXhoYXVzdGl2ZWx5IGNoZWNraW5nIGZvciBkZXBlbmRlbmNpZXMuXG5cbk5vdywgbG9va2luZyBhdCB0aGUgcGF0Y2ggaXRzZWxmLCBpdCdzIHRvdWNoaW5nIGBmcy9leHQ0L2V4dGVudHMuY2AsIGBmcy9leHQ0L2V4dDQuaGAsIGFuZCBgZnMvZXh0NC9maWxlLmNgLiBUaGF0IHRlbGxzIG1lIHRoZXNlIGZpbGVzIGFyZSBjb3JlIHRvIHRoZSBFWFQ0IGltcGxlbWVudGF0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBleHRlbnRzLCB0aGUgZmlsZSBzeXN0ZW0gaGVhZGVyLCBhbmQgY29yZSBmaWxlIG9wZXJhdGlvbnMsIHJlc3BlY3RpdmVseS4gVGhlc2UgZmlsZXMgYXJlIHVuY29uZGl0aW9uYWxseSBjb21waWxlZCAqd2hlbiogYENPTkZJR19FWFQ0X0ZTYCBpcyBlbmFibGVkLiBUaGF0IGNvbmZpcm1zIHRoZSBsaW5rLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIHBhdGNoIG1pZ2h0IGNoYW5nZSB0aGUgYnVpbGQgb3B0aW9ucyBmb3IgdGhlIG1vZHVsZS5cblxuTmV4dCwgSSBuZWVkIHRvIG9wZW4gdGhlIGBmcy9leHQ0L01ha2VmaWxlYC4gSSB3aWxsIHZlcmlmeSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbXBpbGF0aW9uIGZsYWdzLCBvciBjb25kaXRpb25hbCBidWlsZCBydWxlcywgdGhhdCBtaWdodCBiZSBpbmZsdWVuY2VkIGJ5IHRoZSBwcmVzZW5jZSBvZiB0aGlzIHBhdGNoLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIGxvb2sgZm9yIGFueSBzcGVjaWFsIGJ1aWxkcy4gVGhpcyBpcyBhbHdheXMgYSBjcml0aWNhbCBzdGVwIGZvciBtZSB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhlIGNoYW5nZXMgaW4gYSBidWlsZCBlbnZpcm9ubWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOToyNC45NzI2ODg0MjlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgbGludXggZXh0NC1maWxlc3lzdGVtIHJvdXRpbmVzLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRvYmotJChDT05GSUdfRVhUNF9GUykgKz0gZXh0NC5vXFxuICAgNzpcXHRcXG4gICA4OlxcdGV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4gICA5OlxcdFxcdFxcdGV4dGVudHNfc3RhdHVzLm8gZmlsZS5vIGZzbWFwLm8gZnN5bmMubyBoYXNoLm8gaWFsbG9jLm8gXFxcXFxcbiAgMTA6XFx0XFx0XFx0aW5kaXJlY3QubyBpbmxpbmUubyBpbm9kZS5vIGlvY3RsLm8gbWJhbGxvYy5vIG1pZ3JhdGUubyBcXFxcXFxuICAxMTpcXHRcXHRcXHRtbXAubyBtb3ZlX2V4dGVudC5vIG5hbWVpLm8gcGFnZS1pby5vIHJlYWRwYWdlLm8gcmVzaXplLm8gXFxcXFxcbiAgMTI6XFx0XFx0XFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcXFxcbiAgMTM6XFx0XFx0XFx0eGF0dHJfdXNlci5vIGZhc3RfY29tbWl0Lm8gb3JwaGFuLm9cXG4gIDE0OlxcdFxcbiAgMTU6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1BPU0lYX0FDTClcXHQrPSBhY2wub1xcbiAgMTY6XFx0ZXh0NC0kKENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZKVxcdFxcdCs9IHhhdHRyX3NlY3VyaXR5Lm9cXG4gIDE3OlxcdGV4dDQtdGVzdC1vYmpzXFx0XFx0XFx0XFx0Kz0gaW5vZGUtdGVzdC5vIG1iYWxsb2MtdGVzdC5vIFxcXFxcXG4gIDE4OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGV4dGVudHMtdGVzdC5vIGhhc2gtdGVzdC5vXFxuICAxOTpcXHRvYmotJChDT05GSUdfRVhUNF9LVU5JVF9URVNUUylcXHRcXHQrPSBleHQ0LXRlc3Qub1xcbiAgMjA6XFx0ZXh0NC0kKENPTkZJR19GU19WRVJJVFkpXFx0XFx0Kz0gdmVyaXR5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6MjQuOTcyODA2ODM5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NjYyMDk0MjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGBleHRlbnRzLm9gIGFuZCBgZmlsZS5vYCBhcmUgaW5kZWVkIHBhcnQgb2YgYGV4dDQteWAuIFRoYXQncyBnb29kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSBhIGdvb2QgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJdCdzIG1vZGlmeWluZyBjcml0aWNhbCBmdW5jdGlvbnM6IGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZSBjaGFuZ2VzIHNvdW5kIGZ1bmN0aW9uYWwsIGRlYWxpbmcgd2l0aCBwYXJ0aWFsIGFsbG9jYXRpb24sIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMsIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCB3aGljaCBtZWFucyB0aGlzIGNvdWxkIGJlIHJpcGUgZm9yIGVkZ2UgY2FzZXMgYW5kIHVuZXhwZWN0ZWQgYmVoYXZpb3IuXG5cbkknbSB0aGlua2luZyB0aGUga2V5IHN5bWJvbHMgdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmcgc2hvdWxkIGJlIGBleHQ0X2ZhbGxvY2F0ZWAsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgLCBhbmQgYGV4dDRfY29udmVydF91bndyaXR0ZW5faW9fZW5kX3ZlY2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW1wYWN0ZWQgYnkgdGhlIGNoYW5nZXMgaW4gdGhlIHBhdGNoLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVtLlxuXG5UaGUgcmVhc29uaW5nIGlzIHByZXR0eSBjbGVhcjogdGhpcyBwYXRjaCBkaXJlY3RseSBpbXBhY3RzIGNvcmUgZXh0NCBmaWxlc3lzdGVtIGxvZ2ljLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGBmYWxsb2NhdGVgLCB6ZXJvaW5nLCBhbmQgdGhlIGNyaXRpY2FsIGNvbnZlcnNpb24gb2YgdW53cml0dGVuIGV4dGVudHMuIFRoZSBtb2RpZmljYXRpb25zIHRvIGBleHQ0X2FsbG9jX2ZpbGVfYmxvY2tzYCwgdGhlIGFkZGl0aW9uIG9mIGEgbmV3IHBhcmFtZXRlciB0byBgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzYC0tIGFsbCBzaWduYWwgcG90ZW50aWFsIGZvciBpc3N1ZXMuIEkgbmVlZCB0byB0cmVhdCB0aGlzIGFzIHJlYWNoYWJsZSBjb2RlLCB3aXRoIGEgaGlnaCBkZWdyZWUgb2YgY29uZmlkZW5jZS5cblxuSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgbG9va3MgbGlrZSBgRVhUNF9GU2AgaXMgdGhlIGtleSBjb25maWcgbmVlZGVkIGZvciB0aGlzLiBJJ2xsIG1ha2Ugc3VyZSB0aGF0J3MgZW5hYmxlZC5cblxuQXMgYSBxdWljayBzaWRlIG5vdGUsIEkgc2hvdWxkIGdpdmUgYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWNgIGEgY3Vyc29yeSBsb29rLW92ZXIgdG8gY2hlY2sgZm9yIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMwNTQsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMFQxNToxOTozNC44MzkwMTg5NjVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MDc3NjE5NDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzX2F0b21pY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD0zOTAzPWV4dGVybiBpbnQgZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0zOTA1LVxcdFxcdFxcdFxcdFxcdCAgZXh0NF9sYmxrX3QgKmNvbnZlcnRlZCk7XFxuZnMvZXh0NC9leHQ0Lmg6MzkwNjpleHRlcm4gaW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSxcXG5mcy9leHQ0L2V4dDQuaC0zOTA3LVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIHNzaXplX3QgbGVuKTtcXG4tLVxcbmZzL2V4dDQvZXh0ZW50cy5jPTQ5NDE9bG9uZyBleHQ0X2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ1LSAqL1xcbmZzL2V4dDQvZXh0ZW50cy5jOjUwNDY6aW50IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L2V4dGVudHMuYy01MDQ3LVxcdFxcdFxcdFxcdFxcdCAgbG9mZl90IG9mZnNldCwgc3NpemVfdCBsZW4pXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYz00Mjc9c3RhdGljIGludCBleHQ0X2Rpb193cml0ZV9lbmRfaW8oc3RydWN0IGtpb2NiICppb2NiLCBzc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9leHQ0L2ZpbGUuYy00MzUtXFx0XFx0XFx0KGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9BVE9NSUMpKVxcbmZzL2V4dDQvZmlsZS5jOjQzNjpcXHRcXHRlcnJvciA9IGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c19hdG9taWMoTlVMTCwgaW5vZGUsIHBvcyxcXG5mcy9leHQ0L2ZpbGUuYy00MzctXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMwVDE1OjE5OjM2LjY0Njc5MDU4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTY1MDIwOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZzpcblxuKipBbmFseXppbmcgQ29kZSBDaGFuZ2VzIGFuZCBJZGVudGlmeWluZyBLZXkgRnVuY3Rpb25zKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgc29tZXRoaW5nIHNpZ25pZmljYW50IGlzIGhhcHBlbmluZyB3aXRoIGhvdyBleHRlbnRzIGFyZSBiZWluZyBoYW5kbGVkLiBUaGUgZmFjdCB0aGF0IGEgZnVuY3Rpb24gaXMgYm90aCBcImV4cG9ydGVkIGFuZCBtb2RpZmllZFwiIHBpcXVlcyBteSBpbnRlcmVzdC4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgdG8gc2VlIHdoYXQgdGhlIGNoYW5nZXMgaW1wbHkuIFdhaXQgYSBtaW51dGUuLi4gbG9va2luZyBjbG9zZXIsIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNfYXRvbWljYCAqd2Fzbid0KiBhY3R1YWxseSB0b3VjaGVkLCBpdCdzIGBleHQ0X2NvbnZlcnRfdW53cml0dGVuX2V4dGVudHNgIHRoYXQncyB0aGUgb25lIG1vZGlmaWVkIGluIHRoaXMgcGF0Y2guIFRoYXQncyBjcnVjaWFsLiBJIG5lZWQgdG8gbWFrZSBhIG5vdGUgb2YgdGhpcyBkaWZmZXJlbmNlLiBJdCBtaWdodCBiZSByZWxhdGVkLCBidXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoZSBmb2N1cyBzaGlmdGVkIGZyb20gb25lIGZ1bmN0aW9uIHRvIHRoZSBvdGhlci4gTm93IHRoYXQgSSBoYXZlIG15IGZhY3RzIHN0cmFpZ2h0LCBJIGNhbiBzZXQgbXkgcmVzdWx0cyBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwODcsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMzBUMTU6MTk6NDMuNjExODE0MDc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5MzUxMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X2ZhbGxvY2F0ZVwiLFxuICAgIFwiZXh0NF9jb252ZXJ0X3Vud3JpdHRlbl9leHRlbnRzXCIsXG4gICAgXCJleHQ0X2NvbnZlcnRfdW53cml0dGVuX2lvX2VuZF92ZWNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBjb3JlIGV4dDQgZmlsZXN5c3RlbSBsb2dpYyBmb3IgaGFuZGxpbmcgZmFsbG9jYXRlLCB6ZXJvb3V0LCBhbmQgdW53cml0dGVuIGV4dGVudHMgY29udmVyc2lvbi4gSXQgdXBkYXRlcyBgZXh0NF9hbGxvY19maWxlX2Jsb2Nrc2AgdG8gaGFuZGxlIHBhcnRpYWwgYWxsb2NhdGlvbi9jb252ZXJzaW9uIGFuZCBvcnBoYW4gbGlzdCBtYW5hZ2VtZW50LCBhbmQgYWRkcyBhIG5ldyBwYXJhbWV0ZXIgdG8gYGV4dDRfY29udmVydF91bndyaXR0ZW5fZXh0ZW50c2AuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[1] Phase: Succeeded StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 15:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 15:19:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2] Phase: Succeeded StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 15:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-30 15:19:54 +0000 UTC FinishedAt: 2026-07-30 15:19:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7hlmz/series-workflow7hlmz-convert-artifact-3034506525/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-30 15:20:04 +0000 UTC FinishedAt: 2026-07-30 15:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-30 15:20:04 +0000 UTC FinishedAt: 2026-07-30 15:35:53 +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:*2321aec4-b771-4321-9bb2-eef2b3d95e48,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-workflow7hlmz/series-workflow7hlmz-convert-artifact-3034506525/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": "75d88797-c3d7-4996-a505-2a8517caf0b1", "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-workflow7hlmz/series-workflow7hlmz-build-action-3046331987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-30 15:20:04 +0000 UTC FinishedAt: 2026-07-30 15:35:42 +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:*2321aec4-b771-4321-9bb2-eef2b3d95e48,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-workflow7hlmz/series-workflow7hlmz-convert-artifact-3034506525/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": "75d88797-c3d7-4996-a505-2a8517caf0b1", "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-workflow7hlmz/series-workflow7hlmz-build-action-3046331987/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-30 15:35:53 +0000 UTC FinishedAt: 2026-07-30 15:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-30 15:35:53 +0000 UTC FinishedAt: 2026-07-30 15:35:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-30 15:35:53 +0000 UTC FinishedAt: 2026-07-30 15:36:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-30 15:35:53 +0000 UTC FinishedAt: 2026-07-30 15:35:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflow7hlmz/series-workflow7hlmz-convert-artifact-4281187064/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-30 15:36:04 +0000 UTC FinishedAt: 2026-07-30 15:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-30 15:36:05 +0000 UTC FinishedAt: 2026-07-30 15:37:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75d88797-c3d7-4996-a505-2a8517caf0b1,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-workflow7hlmz/series-workflow7hlmz-build-action-3046331987/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-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-30 15:37:43 +0000 UTC FinishedAt: 2026-07-30 15:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-30 15:37:43 +0000 UTC FinishedAt: 2026-07-30 15:37:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-30 15:37:43 +0000 UTC FinishedAt: 2026-07-30 15:58:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-30 15:37:43 +0000 UTC FinishedAt: 2026-07-30 15:58:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2321aec4-b771-4321-9bb2-eef2b3d95e48,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-workflow7hlmz/series-workflow7hlmz-convert-artifact-4281187064/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": "e6a6d195-2917-4438-a0d3-7e0a1429a0f0", "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-workflow7hlmz/series-workflow7hlmz-build-action-2295816164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-30 15:37:43 +0000 UTC FinishedAt: 2026-07-30 15:58:16 +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:*2321aec4-b771-4321-9bb2-eef2b3d95e48,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-workflow7hlmz/series-workflow7hlmz-convert-artifact-4281187064/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": "e6a6d195-2917-4438-a0d3-7e0a1429a0f0", "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-workflow7hlmz/series-workflow7hlmz-build-action-2295816164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-30 15:58:28 +0000 UTC FinishedAt: 2026-07-30 15:58:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-30 15:58:28 +0000 UTC FinishedAt: 2026-07-30 15:58:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-30 15:58:28 +0000 UTC FinishedAt: 2026-07-30 16:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-30 15:58:28 +0000 UTC FinishedAt: 2026-07-30 16:00:10 +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:*e6a6d195-2917-4438-a0d3-7e0a1429a0f0,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-workflow7hlmz/series-workflow7hlmz-build-action-2295816164/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-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},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:*75d88797-c3d7-4996-a505-2a8517caf0b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6a6d195-2917-4438-a0d3-7e0a1429a0f0,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-workflow7hlmz/series-workflow7hlmz-build-action-3046331987/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-workflow7hlmz/series-workflow7hlmz-build-action-2295816164/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 16:00:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 16:00:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},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-workflow7hlmz/series-workflow7hlmz-convert-artifact-513856849/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 16:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-30 16:00:21 +0000 UTC FinishedAt: 2026-07-30 16:00:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-30 16:00:22 +0000 UTC FinishedAt: 2026-07-30 16:00:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-30 16:00:33 +0000 UTC FinishedAt: 2026-07-30 19:02:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7hlmz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_fallocate","ext4_convert_unwritten_extents","ext4_convert_unwritten_io_end_vec"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"67b502bada32afb3a8822641066e7bd223778210","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"7f4013c6-6153-4db4-bb06-3abcedff4096","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-30 16:00:33 +0000 UTC FinishedAt: 2026-07-30 19:02:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*75d88797-c3d7-4996-a505-2a8517caf0b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e6a6d195-2917-4438-a0d3-7e0a1429a0f0,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-workflow7hlmz/series-workflow7hlmz-build-action-3046331987/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-workflow7hlmz/series-workflow7hlmz-build-action-2295816164/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-workflow7hlmz/series-workflow7hlmz-convert-artifact-513856849/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,}