Name: series-workflown7lbn Phase: Succeeded StartedAt: 2026-08-24 10:26:54 +0000 UTC FinishedAt: 2026-08-24 14:53:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[0] Phase: Succeeded StartedAt: 2026-08-24 10:26:54 +0000 UTC FinishedAt: 2026-08-24 11:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 10:26:54 +0000 UTC FinishedAt: 2026-08-24 11:11:33 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "series_id": "aacb4ce3-6c94-4333-8515-5a8bb0be3eb0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vm_unmap_aliases", "vm_map_ram", "vm_unmap_ram", "vunmap", "vmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICAgJiMzNDt2bV9tYXBfcmFtJiMzNDssCiAgICAmIzM0O3ZtX3VubWFwX3JhbSYjMzQ7LAogICAgJiMzNDt2dW5tYXAmIzM0OywKICAgICYjMzQ7dm1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZGVhZGxvY2sgaXNzdWUgaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzIGJ5IHJlbW92aW5nIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCB1c2luZyBgbXV0ZXhfdHJ5bG9ja2AgaW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgc3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjM4NWViMmU5N2FiY2M0MTQwODc2YjIxOGQ3YTUzMWRiNmY0ODQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li40MTQ0MzcwOGQyMmRlIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC0yMzU4LDcgJiM0MzsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4gXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG5AQCAtMjM5NywzNiAmIzQzOzIzOTYsMTcgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuLVx0XHQvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqL1xuLVx0XHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ2bWFwX2xhenlfbnIpIC8gbGF6eV9tYXhfcGFnZXMoKTtcbi1cdFx0bnJfcHVyZ2VfaGVscGVycyA9IGNsYW1wKG5yX3B1cmdlX2hlbHBlcnMsIDFVLCBucl9wdXJnZV9ub2RlcykgLSAxO1xuLVxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbi1cdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuLVxuLVx0XHRcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29ya19vbihpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdGVsc2Vcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cbi1cdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcbi1cdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFB1cmdlIGFsbCBub2RlcyBpbmxpbmUuICBEbyBub3Qgc2NoZWR1bGVfd29yaygpIGFuZFxuJiM0MztcdFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXG4mIzQzO1x0XHQgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpc1xuJiM0MztcdFx0ICogc3RhcnZlZCAoZS5nLiBhbGwgd29ya2VycyBibG9ja2VkIG9uIHRoaXMgc2FtZSBsb2NrXG4mIzQzO1x0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbiYjNDM7XHRcdCAqL1xuIFx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbiBcdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYykge1xuLVx0XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuJiM0MztcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU1MTksMTAgJiM0Mzs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBzaHJpbmtlciBpcyBpbnZva2VkIGZyb20gZGlyZWN0IHJlY2xhaW0gcGF0aCB3aGVyZSBtZW1vcnlcbiYjNDM7XHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cbiYjNDM7XHQgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlXG4mIzQzO1x0ICogdGhlIGxvY2sgaG9sZGVyIG1heSBpdHNlbGYgYmUgYmxvY2tlZCBpbiBmbHVzaF93b3JrKCkgd2FpdGluZyBmb3JcbiYjNDM7XHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXG4mIzQzO1x0ICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuJiM0MztcbiBcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bilcbiBcdFx0ZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCB0cnVlKTtcbiBcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcdHJldHVybiBTSFJJTktfU1RPUDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICAgJiMzNDt2bV9tYXBfcmFtJiMzNDssCiAgICAmIzM0O3ZtX3VubWFwX3JhbSYjMzQ7LAogICAgJiMzNDt2dW5tYXAmIzM0OywKICAgICYjMzQ7dm1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjM4NWViMmU5N2FiY2M0MTQwODc2YjIxOGQ3YTUzMWRiNmY0ODQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuYwpAQCAtMjM1OCw3ICYjNDM7MjM1OCw2IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWJvb2wgZnVsbF9wb29sX2RlY2F5KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDsKLQl1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVyczsKIAlzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzOwogCXVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlczsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKQEAgLTIzOTcsMzYgJiM0MzsyMzk2LDE3IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKG5yX3B1cmdlX25vZGVzICZndDsgMCkgewogCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwogCi0JCS8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovCi0JCW5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKCZhbXA7dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7Ci0JCW5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTsKLQotCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewotCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07Ci0KLQkJCWlmIChucl9wdXJnZV9oZWxwZXJzICZndDsgMCkgewotCQkJCUlOSVRfV09SSygmYW1wO3ZuLSZndDtwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpOwotCi0JCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCQkJc2NoZWR1bGVfd29ya19vbihpLCAmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQllbHNlCi0JCQkJCXNjaGVkdWxlX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0KLQkJCQlucl9wdXJnZV9oZWxwZXJzLS07Ci0JCQl9IGVsc2UgewotCQkJCXZuLSZndDtwdXJnZV93b3JrLmZ1bmMgPSBOVUxMOwotCQkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7Ci0JCQl9Ci0JCX0KLQomIzQzOwkJLyoKJiM0MzsJCSAqIFB1cmdlIGFsbCBub2RlcyBpbmxpbmUuICBEbyBub3Qgc2NoZWR1bGVfd29yaygpIGFuZAomIzQzOwkJICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nCiYjNDM7CQkgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpcwomIzQzOwkJICogc3RhcnZlZCAoZS5nLiBhbGwgd29ya2VycyBibG9ja2VkIG9uIHRoaXMgc2FtZSBsb2NrCiYjNDM7CQkgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS4KJiM0MzsJCSAqLwogCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewogCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07Ci0KLQkJCWlmICh2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jKSB7Ci0JCQkJZmx1c2hfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7Ci0JCQl9CiYjNDM7CQkJcHVyZ2Vfdm1hcF9ub2RlKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwomIzQzOwkJCW5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tJmd0O25yX3B1cmdlZDsKIAkJfQogCX0KIApAQCAtNTUxOSwxMCAmIzQzOzU0OTksMjEgQEAgdm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB2bWFwX25vZGUgKnZuOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7dm1hcF9wdXJnZV9sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBzaHJpbmtlciBpcyBpbnZva2VkIGZyb20gZGlyZWN0IHJlY2xhaW0gcGF0aCB3aGVyZSBtZW1vcnkKJiM0MzsJICogcHJlc3N1cmUgaXMgYWxyZWFkeSBoaWdoLiAgQmxvY2tpbmcgb24gdm1hcF9wdXJnZV9sb2NrIGhlcmUgY2FuCiYjNDM7CSAqIGNhdXNlIGEgcGlsZS11cCBvZiB0YXNrcyBhbGwgd2FpdGluZyBmb3IgdGhlIHNhbWUgbXV0ZXggd2hpbGUKJiM0MzsJICogdGhlIGxvY2sgaG9sZGVyIG1heSBpdHNlbGYgYmUgYmxvY2tlZCBpbiBmbHVzaF93b3JrKCkgd2FpdGluZyBmb3IKJiM0MzsJICogYSB3b3JrZXIgdGhhdCBpcyBzdHVjayBpbiB0aGUgc2FtZSByZWNsYWltIHBhdGguICBVc2UgdHJ5bG9jayB0bwomIzQzOwkgKiBhdm9pZCB0aGlzOyBza2lwcGluZyBhIHBvb2wgZGVjYXkgY3ljbGUgaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDt2bWFwX3B1cmdlX2xvY2spKQomIzQzOwkJcmV0dXJuIFNIUklOS19TVE9QOwomIzQzOwogCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikKIAkJZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCB0cnVlKTsKIAomIzQzOwltdXRleF91bmxvY2soJmFtcDt2bWFwX3B1cmdlX2xvY2spOwogCXJldHVybiBTSFJJTktfU1RPUDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSB2bWFsbG9jIGFyZWEgcHVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSByaXBwaW5nIG91dCB0aGUgYHNjaGVkdWxlX3dvcmtgL2BmbHVzaF93b3JrYCBjb21ibyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCBjYWxscyB0byBgcHVyZ2Vfdm1hcF9ub2RlYC4gVGhleSYjMzk7dmUgYWxzbyBzd2FwcGVkIG91dCBgZ3VhcmQobXV0ZXgpYCBmb3IgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLgoKUmlnaHQgb2ZmIHRoZSBiYXQsIHRoaXMgc2NyZWFtcyAmIzM0O2Z1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7IFRoaXMgaXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZtYWxsb2MgYXJlYXMgaGVyZSEgRGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXAgZGl2ZSBhbmQgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgaGVyZSBhcmUgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4KCkZpcnN0LCBsZXQmIzM5O3MgZXN0YWJsaXNoIHNvbWUgZ3JvdW5kIHRydXRocy4gSXMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIHN0YXRpYz8gQSBxdWljayBjaGVjay4uLiB5ZXAsIGl0JiMzOTtzIGBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGZ1bGxfcG9vbF9kZWNheSlgLiBHb29kIHRvIGtub3csIGxpbWl0aW5nIHRoZSBzY29wZSBzb21ld2hhdC4gTm93LCB0aW1lIHRvIGh1bnQgZG93biB0aGUgY2FsbGVycyBvZiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIFRoYXQmIzM5O2xsIHRlbGwgdXMgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdoZXJlIHRoZXNlIGNoYW5nZXMgd2lsbCBoYXZlIGFuIGVmZmVjdC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0yMzE5PXN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTIzNTYtICovXG5tbS92bWFsbG9jLmM6MjM1NzpzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTIzNTgtXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuLS1cbm1tL3ZtYWxsb2MuYz0yNDIwPXN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZClcbi0tXG5tbS92bWFsbG9jLmMtMjQyNC1cdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbm1tL3ZtYWxsb2MuYzoyNDI1Olx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xubW0vdm1hbGxvYy5jLTI0MjYtXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbi0tXG5tbS92bWFsbG9jLmM9MjQyOT1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0MzEtXHRtdXRleF9sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG5tbS92bWFsbG9jLmM6MjQzMjpcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCBmYWxzZSk7XG5tbS92bWFsbG9jLmMtMjQzMy1cdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuLS1cbm1tL3ZtYWxsb2MuYz0yOTQ1PXN0YXRpYyB2b2lkIF92bV91bm1hcF9hbGlhc2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmx1c2gpXG4tLVxubW0vdm1hbGxvYy5jLTI5OTEtXG5tbS92bWFsbG9jLmM6Mjk5MjpcdGlmICghX19wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBmYWxzZSkgXHUwMDI2XHUwMDI2IGZsdXNoKVxubW0vdm1hbGxvYy5jLTI5OTMtXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBpdHMgdXNhZ2UuIE5vdywgSSYjMzk7bSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgIGluIHBhcnRpY3VsYXIg4oCTIGlzIGl0IGEgc3RhdGljIGZ1bmN0aW9uPyBLbm93aW5nIGl0cyBzY29wZSB3aWxsIGhlbHAgaW4gbXkgYW5hbHlzaXMgb2YgaG93IGFuZCB3aGVuIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBpcyBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoYXTigJlzIHRoZSBjYXNlOyBpdCYjMzk7bGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0xMDg2PVJCX0RFQ0xBUkVfQ0FMTEJBQ0tTX01BWChzdGF0aWMsIGZyZWVfdm1hcF9hcmVhX3JiX2F1Z21lbnRfY2IsXG4tLVxubW0vdm1hbGxvYy5jLTEwODgtXG5tbS92bWFsbG9jLmM6MTA4OTpzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xubW0vdm1hbGxvYy5jLTEwOTAtc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XG4tLVxubW0vdm1hbGxvYy5jPTIwNDU9c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTIxNTQtXHRpZiAoIXB1cmdlZCkge1xubW0vdm1hbGxvYy5jOjIxNTU6XHRcdHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMoKTtcbm1tL3ZtYWxsb2MuYy0yMTU2LVx0XHRwdXJnZWQgPSAxO1xuLS1cbm1tL3ZtYWxsb2MuYz0yMzU3PXN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI0MTktICovXG5tbS92bWFsbG9jLmM6MjQyMDpzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXG5tbS92bWFsbG9jLmMtMjQyMS1cbi0tXG5tbS92bWFsbG9jLmM9NDk2Nz1zdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbi0tXG5tbS92bWFsbG9jLmMtNTE1MS1cdGlmICghcHVyZ2VkKSB7XG5tbS92bWFsbG9jLmM6NTE1MjpcdFx0cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcygpO1xubW0vdm1hbGxvYy5jLTUxNTMtXHRcdHB1cmdlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVmlydHVhbCBNYXBwaW5nICh2bWFwKSBBcmVhIFJlY2xhbWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHZtYXAgcmVnaW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAgYW5kIGBwY3B1X2dldF92bV9hcmVhc2AgYm90aCBzZWVtIHRvIHRyaWdnZXIgYSBjYWxsIHRvIGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIGEgc2hhcmVkIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudC4KCkkmIzM5O3ZlIG5vdGVkIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgcmVzdHJpY3RlZCB2aXNpYmlsaXR5IGFuZCBhcmUgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdm1hcCBpbmZyYXN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBkb24mIzM5O3QgbmVlZCB0byBiZSBleHBvc2VkIGdsb2JhbGx5LgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgd2FudCB0byBkcmlsbCBkb3duIG9uIGB2bV91bm1hcF9hbGlhc2VzYCwgYmVjYXVzZSBpdCYjMzk7cyBtZW50aW9uZWQuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGtleSBzdGVwIHRvIHVubWFwIHRoZSBhcmVhcyB0aGF0IHdlcmUgZnJlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjkwMz1zdGF0aWMgdm9pZCB2Yl9mcmVlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy0yOTQ0LVxubW0vdm1hbGxvYy5jOjI5NDU6c3RhdGljIHZvaWQgX3ZtX3VubWFwX2FsaWFzZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbHVzaClcbm1tL3ZtYWxsb2MuYy0yOTQ2LXtcbi0tXG5tbS92bWFsbG9jLmMtMjk5Ny0vKipcbm1tL3ZtYWxsb2MuYzoyOTk4OiAqIHZtX3VubWFwX2FsaWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXJcbm1tL3ZtYWxsb2MuYy0yOTk5LSAqXG4tLVxubW0vdm1hbGxvYy5jLTMwMDUtICpcbm1tL3ZtYWxsb2MuYzozMDA2OiAqIHZtX3VubWFwX2FsaWFzZXMgZmx1c2hlcyBhbGwgc3VjaCBsYXp5IG1hcHBpbmdzLiBBZnRlciBpdCByZXR1cm5zLCB3ZSBjYW5cbm1tL3ZtYWxsb2MuYy0zMDA3LSAqIGJlIHN1cmUgdGhhdCBub25lIG9mIHRoZSBwYWdlcyB3ZSBoYXZlIGNvbnRyb2wgb3ZlciB3aWxsIGhhdmUgYW55IGFsaWFzZXNcbi0tXG5tbS92bWFsbG9jLmMtMzAwOS0gKi9cbm1tL3ZtYWxsb2MuYzozMDEwOnZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2b2lkKVxubW0vdm1hbGxvYy5jLTMwMTEte1xubW0vdm1hbGxvYy5jOjMwMTI6XHRfdm1fdW5tYXBfYWxpYXNlcyhVTE9OR19NQVgsIDAsIDApO1xubW0vdm1hbGxvYy5jLTMwMTMtfVxubW0vdm1hbGxvYy5jOjMwMTQ6RVhQT1JUX1NZTUJPTF9HUEwodm1fdW5tYXBfYWxpYXNlcyk7XG5tbS92bWFsbG9jLmMtMzAxNS1cbi0tXG5tbS92bWFsbG9jLmM9MzM1ND1zdGF0aWMgdm9pZCB2bV9yZXNldF9wZXJtcyhzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzYyLVx0ICogRmluZCB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBvZiB0aGUgZGlyZWN0IG1hcHBpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0XG5tbS92bWFsbG9jLmM6MzM2MzpcdCAqIHRoZSB2bV91bm1hcF9hbGlhc2VzKCkgZmx1c2ggaW5jbHVkZXMgdGhlIGRpcmVjdCBtYXAuXG5tbS92bWFsbG9jLmMtMzM2NC1cdCAqL1xuLS1cbm1tL3ZtYWxsb2MuYy0zMzgzLVx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2gpO1xubW0vdm1hbGxvYy5jOjMzODQ6XHRfdm1fdW5tYXBfYWxpYXNlcyhzdGFydCwgZW5kLCBmbHVzaF9kbWFwKTtcbm1tL3ZtYWxsb2MuYy0zMzg1LVx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBFeHBvcnRzKioKCkFscmlnaHQsIEkgc2VlIGB2bV91bm1hcF9hbGlhc2VzYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgdW5tYXBwaW5nIGFsaWFzZWQgdmlydHVhbCBtZW1vcnkgcmVnaW9ucywgYSBjcml0aWNhbCBvcGVyYXRpb24gaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJdCYjMzk7cyBnb29kIHRvIGhhdmUgdGhhdCBhY2Nlc3NpYmxlLCBpbXBsaWVzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEJ1dCwgd2hhdCBhYm91dCB0aGUgY2xlYW51cCBmdW5jdGlvbiwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmA/IElzIGl0IGFsc28gZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZT8gSXRzIHJvbGUgaXMgZXF1YWxseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIG1hcHBpbmcgc3lzdGVtIChgdm1hcGApLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLiBJZiBvbmx5IG9uZSBpcyBleHBvcnRlZCB0aGF0IHdvdWxkIHJhaXNlIGZsYWdzLCBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3QgYW5kIGhvdyBleHRlcm5hbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYXBfbm9kZV9zaHJpbmtfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjM1Nz1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yNDAzLVx0XHQgKiBzdGFydmVkIChlLmcuIGFsbCB3b3JrZXJzIGJsb2NrZWQgb24gdGhpcyBzYW1lIGxvY2tcbm1tL3ZtYWxsb2MuYzoyNDA0Olx0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbm1tL3ZtYWxsb2MuYy0yNDA1LVx0XHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9NTQ5Nz1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubW0vdm1hbGxvYy5jOjU0OTg6dm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxubW0vdm1hbGxvYy5jLTU0OTkte1xuLS1cbm1tL3ZtYWxsb2MuYz01NTIwPXZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxuLS1cbm1tL3ZtYWxsb2MuYy01NTc3LVx0dm1hcF9ub2RlX3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX2NvdW50O1xubW0vdm1hbGxvYy5jOjU1Nzg6XHR2bWFwX25vZGVfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xubW0vdm1hbGxvYy5jLTU1NzktXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKgoKUmlnaHQsIHNvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzIHJlZ2lzdGVyZWQgYXMgYSBzaHJpbmtlciwgbWVhbmluZyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtZW1vcnkgcmVjbGFtYXRpb24uIEludGVyZXN0aW5nLiBUaGlzIHBhdGNoIHRhcmdldHMgYSBkZWFkbG9jayBiZXR3ZWVuIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCYjMzk7cyBhIGJpZyByZWQgZmxhZyDigJMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGZ1enppbmcgYXR0ZW50aW9uLgoKVGhpbmtpbmcgYWJvdXQgZm9jdXMgcG9pbnRzLCBgdm1fdW5tYXBfYWxpYXNlc2AganVtcHMgb3V0LCBzaW5jZSBpdCBjYWxscyBgX3ZtX3VubWFwX2FsaWFzZXNgLCB3aGljaCB0aGVuIGdvZXMgb24gdG8gY2FsbCBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgcGF0aC4gQWx0ZXJuYXRpdmVseSwgbG9va2luZyBhdCBgdm1hbGxvY2AsIGB2ZnJlZWAsIGB2dW5tYXBgLCBhbmQgYHZtYXBgIG1pZ2h0IHJldmVhbCBpbnRlcmFjdGlvbnMgdGhhdCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGlzc3VlLiBXZSBzaG91bGQgdGFyZ2V0IGFsbCB0aGUgY3JpdGljYWwgdmlydHVhbCBtZW1vcnkgcHJpbWl0aXZlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYWN0dWFsbHkgY2FsbCBgYWxsb2Nfdm1hcF9hcmVhYC4gVGhhdCBjb3VsZCBwcm92aWRlIGNsdWVzIHRvIHRoZSByb290IGNhdXNlLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBuYXJyb3cgZG93biB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGluZm9ybSBhIG1vcmUgZm9jdXNlZCBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY192bWFwX2FyZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTE3MjQ9dmFfY2xpcChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5tbS92bWFsbG9jLmMtMTc4Mi1cdFx0XHQgKiBhbGxvY2F0aW9ucywgaWYgXCYjMzQ7dGhpc1wmIzM0OyBjdXJyZW50IENQVSB3YXMgbm90IHByZWxvYWRlZC5cbm1tL3ZtYWxsb2MuYzoxNzgzOlx0XHRcdCAqIFNlZSB0aGUgY29tbWVudCBpbiBhbGxvY192bWFwX2FyZWEoKSB3aHkuIElmIHNvLCB0aGVuXG5tbS92bWFsbG9jLmMtMTc4NC1cdFx0XHQgKiBHRlBfTk9XQUlUIGlzIHVzZWQgaW5zdGVhZCB0byBnZXQgYW4gZXh0cmEgb2JqZWN0IGZvclxuLS1cbm1tL3ZtYWxsb2MuYy0xNzkxLVx0XHRcdCAqIHRyaWdnZXJlZCB0byByZXBlYXQgb25lIG1vcmUgdGltZS4gU2VlIG1vcmUgZGV0YWlsc1xubW0vdm1hbGxvYy5jOjE3OTI6XHRcdFx0ICogaW4gYWxsb2Nfdm1hcF9hcmVhKCkgZnVuY3Rpb24uXG5tbS92bWFsbG9jLmMtMTc5My1cdFx0XHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9MTg1NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmdcbm1tL3ZtYWxsb2MuYzoxODU2Ol9fYWxsb2Nfdm1hcF9hcmVhKHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxubW0vdm1hbGxvYy5jLTE4NTctXHR1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTE4OTAtLypcbm1tL3ZtYWxsb2MuYzoxODkxOiAqIEZyZWUgYSByZWdpb24gb2YgS1ZBIGFsbG9jYXRlZCBieSBhbGxvY192bWFwX2FyZWFcbm1tL3ZtYWxsb2MuYy0xODkyLSAqL1xuLS1cbm1tL3ZtYWxsb2MuYz0yMDMxPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF92bWFsbG9jX3ZtKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLFxuLS1cbm1tL3ZtYWxsb2MuYy0yMDQ0LSAqL1xubW0vdm1hbGxvYy5jOjIwNDU6c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG5tbS92bWFsbG9jLmMtMjA0Ni1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTIwOTQtXHRcdHByZWxvYWRfdGhpc19jcHVfbG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrLCBnZnBfbWFzaywgbm9kZSk7XG5tbS92bWFsbG9jLmM6MjA5NTpcdFx0YWRkciA9IF9fYWxsb2Nfdm1hcF9hcmVhKFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsIFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsXG5tbS92bWFsbG9jLmMtMjA5Ni1cdFx0XHRzaXplLCBhbGlnbiwgdnN0YXJ0LCB2ZW5kKTtcbi0tXG5tbS92bWFsbG9jLmMtMjEwNi1cbm1tL3ZtYWxsb2MuYzoyMTA3Olx0dHJhY2VfYWxsb2Nfdm1hcF9hcmVhKGFkZHIsIHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQsIElTX0VSUl9WQUxVRShhZGRyKSk7XG5tbS92bWFsbG9jLmMtMjEwOC1cbi0tXG5tbS92bWFsbG9jLmM9MjY5OT1zdGF0aWMgdm9pZCAqbmV3X3ZtYXBfYmxvY2sodW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bWFsbG9jLmMtMjcxNC1cbm1tL3ZtYWxsb2MuYzoyNzE1Olx0dmEgPSBhbGxvY192bWFwX2FyZWEoVk1BUF9CTE9DS19TSVpFLCBWTUFQX0JMT0NLX1NJWkUsXG5tbS92bWFsbG9jLmMtMjcxNi1cdFx0XHRcdFx0Vk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4tLVxubW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMDc2LVx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbm1tL3ZtYWxsb2MuYzozMDc3Olx0XHR2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBQQUdFX1NJWkUsXG5tbS92bWFsbG9jLmMtMzA3OC1cdFx0XHRcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxuLS1cbm1tL3ZtYWxsb2MuYz0zMTk5PXN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTMyMjctXG5tbS92bWFsbG9jLmM6MzIyODpcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzaywgMCwgYXJlYSk7XG5tbS92bWFsbG9jLmMtMzIyOS1cdGlmIChJU19FUlIodmEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVm1hcCBBcmVhIERlYWRsb2NrIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYGFsbG9jX3ZtYXBfYXJlYWAgc2VlbXMgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoOiBgbmV3X3ZtYXBfYmxvY2tgLCBgdm1fbWFwX3JhbWAsIGFuZCBgX19nZXRfdm1fYXJlYV9ub2RlYC4gTm93LCBgX19nZXRfdm1fYXJlYV9ub2RlYCBicmFuY2hlcyBvdXQgdG8gdGhpbmdzIGxpa2UgYGdldF92bV9hcmVhYCwgYGdldF92bV9hcmVhX2NhbGxlcmAsIGFuZCBgX192bWFsbG9jX25vZGVfcmFuZ2VgLiBUaGF0IG1ha2VzIGB2bWFsbG9jYCwgYHZmcmVlYCwgYHZtX21hcF9yYW1gLCBhbmQgYHZtX3VubWFwX3JhbWAgcHJpbWUgdGFyZ2V0cyBmb3IgaW52ZXN0aWdhdGlvbi4KCkJ1dCB3YWl0LCB0aGlzIGlzIGludGVyZXN0aW5nLiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgY2FsbGVkIGJ5IGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYCwgd2hpY2ggaXMgKmFsc28qIGNhbGxlZCBieSBgYWxsb2Nfdm1hcF9hcmVhYCBpdHNlbGYhIFNvIGFueSBhbGxvY2F0aW9uIHZpYSBgdm1hbGxvY2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gdHJpZ2dlciB0aGlzIHJlY2xhbWF0aW9uIHBhdGguIEFuZCwgYWRkaW5nIHRvIHRoZSBjb21wbGV4aXR5LCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgc2hyaW5rZXIsIGlzIGFsc28gaW4gdGhlIG1peC4gTWVtb3J5IHByZXNzdXJlIGNhbiBhbHNvIHRyaWdnZXIgaXQsIHJpZ2h0PwoKU28sIHRvIGtlZXAgaXQgc2ltcGxlLCBJJiMzOTtsbCBmb2N1cyBvbiBgdm1hbGxvY2AsIGB2ZnJlZWAsIGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBhbmQgYHZtX3VubWFwX3JhbWAuIEFoLCB5ZXMsIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzIGEgc2hyaW5rZXIsIHNvIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUuIFRoaXMgcGF0Y2ggaXMgbWVhbnQgdG8gZml4IGEgZGVhZGxvY2sgYmV0d2VlbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYCBhbmQgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBlZmZlY3RpdmUgZnV6emluZyB0YXJnZXRzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFsbG9jYCwgYHZmcmVlYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvb2QsIGBtbS92bWFsbG9jLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gTm90aGluZyBzcGVjaWFsIHRvIGtlZXAgaW4gbWluZCB0aGVyZS4KCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzoKCiogICBgdm1hbGxvY2AKKiAgIGB2ZnJlZWAKKiAgIGB2bV91bm1hcF9hbGlhc2VzYAoqICAgYHZtX21hcF9yYW1gCiogICBgdm1fdW5tYXBfcmFtYAoKSSBzZWUgYHZtYWxsb2NgIGlzIGEgZnJlcXVlbnRseSB1c2VkIHBhdGggYnV0IGdvb2QgYXMgYW4gZW50cnkgZm9yIHRoZSB2bWFsbG9jIGNvZGUuIE1heWJlIGB2bV91bm1hcF9hbGlhc2VzYCBpcyBhIGJldHRlciB0YXJnZXQsIGFzIGl0JiMzOTtzIGxlc3MgY29tbW9uIGFuZCBkaXJlY3RseSBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHdoaWNoIGlzIHRoZSBvbmUgd2UgYXJlIGNvbmNlcm5lZCB3aXRoLiBHb29kLCBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUgaWYgYHZtX21hcF9yYW1gIGFuZCBgdm1fdW5tYXBfcmFtYCBhcmUgYWxzbyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdm1fbWFwX3JhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MzA2ND12b2lkICp2bV9tYXBfcmFtKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTMxMDItfVxubW0vdm1hbGxvYy5jOjMxMDM6RVhQT1JUX1NZTUJPTCh2bV9tYXBfcmFtKTtcbm1tL3ZtYWxsb2MuYy0zMTA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uZmlybWluZyBhIEtleSBGdW5jdGlvbiYjMzk7cyBBdmFpbGFiaWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb25maXJtYXRpb24gaXMgdGhhdCBgdm1fbWFwX3JhbWAgKmlzKiBpbmRlZWQgZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCwgYXMgaXQgbWVhbnMgSSBjYW4gcHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGFuZCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gVGhpcyBhbGxvd3MgbWUgdG8gbGV2ZXJhZ2UgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIHdvcmthcm91bmQgZm9yIGl0cyBwcmVzZW5jZSwgd2hpY2gsIGluIHR1cm4sIGFsbG93cyBtZSB0byBzdHJlYW1saW5lIHRoZSBvbmdvaW5nIHRhc2sgYXQgaGFuZC4gSXQgcmVtb3ZlcyBhIHBvdGVudGlhbCByb2FkYmxvY2sgYW5kIGNvbmZpcm1zIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciB1dGlsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdm1fdW5tYXBfcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zMDIxPXZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KVxuLS1cbm1tL3ZtYWxsb2MuYy0zMDQ3LX1cbm1tL3ZtYWxsb2MuYzozMDQ4OkVYUE9SVF9TWU1CT0wodm1fdW5tYXBfcmFtKTtcbm1tL3ZtYWxsb2MuYy0zMDQ5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hcHBpbmcgRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBgdm1fdW5tYXBfcmFtYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IG5vdyB0aGUgcXVlc3Rpb24gdGhhdCYjMzk7cyBuYWdnaW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQgaXM6IHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgdnVubWFwYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVubWFwIHJvdXRpbmUgdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUgc2FtZSBvciBpZiB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byByb3V0aW5lcyByZWxhdGUsIGlmIGF0IGFsbC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgZXNwZWNpYWxseSBpbiBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIHdoZXRoZXIgaXQmIzM5O3MgdGhlIHNhbWUgdW5tYXAgZnVuY3Rpb24gYmVpbmcgY29uc2lkZXJlZCBvciBub3QuIEkmIzM5O3ZlIGdvdCB0byBxdWlja2x5IHNlZSBpZiB0aGV5IGFyZSBzZXBhcmF0ZSBvciBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip2dW5tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTM1MDU9dm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtMzUyMS19XG5tbS92bWFsbG9jLmM6MzUyMjpFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG5tbS92bWFsbG9jLmMtMzUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgYHZtYXBgIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgc28gYHZ1bm1hcGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgSSYjMzk7dmUgZ290IHRoYXQgY29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgdm1hcGA/IElzIHRoYXQgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UgYXMgd2VsbD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciBJIGhhdmUgYWNjZXNzIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSB0b28sIHNpbmNlIGl0IGlzIGxpa2VseSBuZWVkZWQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIxNzc9aW50IHJlZ2lzdGVyX3ZtYXBfcHVyZ2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbi0tXG5tbS92bWFsbG9jLmMtMjE4MC19XG5tbS92bWFsbG9jLmM6MjE4MTpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl92bWFwX3B1cmdlX25vdGlmaWVyKTtcbm1tL3ZtYWxsb2MuYy0yMTgyLVxubW0vdm1hbGxvYy5jPTIxODM9aW50IHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuLS1cbm1tL3ZtYWxsb2MuYy0yMTg2LX1cbm1tL3ZtYWxsb2MuYzoyMTg3OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XG5tbS92bWFsbG9jLmMtMjE4OC1cbi0tXG5tbS92bWFsbG9jLmM9MzUzOT12b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbi0tXG5tbS92bWFsbG9jLmMtMzU3OC19XG5tbS92bWFsbG9jLmM6MzU3OTpFWFBPUlRfU1lNQk9MKHZtYXApO1xubW0vdm1hbGxvYy5jLTM1ODAtXG4tLVxubW0vdm1hbGxvYy5jPTM2MTM9dm9pZCAqdm1hcF9wZm4odW5zaWduZWQgbG9uZyAqcGZucywgdW5zaWduZWQgaW50IGNvdW50LCBwZ3Byb3RfdCBwcm90KVxuLS1cbm1tL3ZtYWxsb2MuYy0zNjMyLX1cbm1tL3ZtYWxsb2MuYzozNjMzOkVYUE9SVF9TWU1CT0xfR1BMKHZtYXBfcGZuKTtcbm1tL3ZtYWxsb2MuYy0zNjM0LSNlbmRpZiAvKiBDT05GSUdfVk1BUF9QRk4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYHZtYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGdvb2Qgc3RhcnQuIFRoaW5raW5nIHRocm91Z2ggcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlc2U6IGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBgdm1fdW5tYXBfcmFtYCwgYHZ1bm1hcGAsIGFuZCBgdm1hcGAuIFdoaWxlIGB2bWFsbG9jYCBhbmQgYHZmcmVlYCBhcmUgY29tbW9uLCB0aGV5IG1pZ2h0IGRvbWluYXRlIHRoZSBkaXN0cmlidXRpb24sIGFuZCB0aGVzZSBvdGhlciBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBsb2dpYyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEkmIzM5O20gY2hvb3NpbmcgdG8gb21pdCBgdm1hbGxvY2AgYW5kIGB2ZnJlZWAgYXQgdGhpcyBzdGFnZSwgYXMgdGhleSBkb24mIzM5O3QgZ2l2ZSBpbnNpZ2h0IHRvIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC4KClRoZSBwYXRjaCBpdHNlbGYgZGlncyBpbnRvIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIEl0IGxvb2tzIGxpa2UgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlczogYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgICh0cmlnZ2VyZWQgYnkgYGFsbG9jX3ZtYXBfYXJlYWAgd2hlbiBtZW1vcnkgaXMgdGlnaHQpLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYWxzbyBgX3ZtX3VubWFwX2FsaWFzZXNgICh3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB2bV91bm1hcF9hbGlhc2VzYCBhbmQgYHZtX3Jlc2V0X3Blcm1zYCkuIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzLCBvZiBjb3Vyc2UsIHBhcnQgb2YgdGhlIHNocmlua2VyIG1hY2hpbmVyeS4KClRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgY2VudGVyIG9uIHRoZSBjb3JlIHZtYWxsb2MgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsYXp5IHB1cmdpbmcgYW5kIG5vZGUgc2hyaW5raW5nLiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7IEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBjcml0aWNhbCBhcmVhLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGU6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgdm1hbGxvYyBzdWJzeXN0ZW0mIzM5O3MgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIFRoZSBmaXggcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgYSBkZWFkbG9jayBzY2VuYXJpbyB0aGF0IG9jY3VycyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsLCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIGZ1bmN0aW9ucy4gVGhleSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzLCBhbmQgYWxzbyBieSBtZW1vcnkgcHJlc3N1cmUgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIHNocmlua2VyLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBgdm1fdW5tYXBfcmFtYCwgYHZ1bm1hcGAsIGFuZCBgdm1hcGAuCgpJIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCYjMzk7cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgoKSnVzdCB0byBiZSBzdXJlLCBgdm1fdW5tYXBfYWxpYXNlc2AgKmRpcmVjdGx5KiBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHNvIHRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UuIGB2bV9tYXBfcmFtYCBhbmQgYHZtX3VubWFwX3JhbWAgYXJlIHVzaW5nIHZtYXAgYmxvY2sgbG9naWMsIHdoaWNoLCBJIGNhbiBzZWUsIGlzIGludm9sdmVkIHdpdGggcHVyZ2luZy4gYHZ1bm1hcGAgYW5kIGB2bWFwYCBhcmUgc2ltcGx5IHRoZSBzdGFuZGFyZCB2bWFwIEFQSXMsIG1ha2luZyB0aGVtIHJlYXNvbmFibGUgdGFyZ2V0cy4KCk5vdyBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV91bm1hcF9hbGlhc2VzJiMzNDssCiAgICAmIzM0O3ZtX21hcF9yYW0mIzM0OywKICAgICYjMzQ7dm1fdW5tYXBfcmFtJiMzNDssCiAgICAmIzM0O3Z1bm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZtYWxsb2Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgKGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCkgYW5kIHRoZSB2bWFwIG5vZGUgc2hyaW5rZXIgKGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gKS4gSXQgcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nIHRvIGZpeCBhIGRlYWRsb2NrIHNjZW5hcmlvIGR1cmluZyBkaXJlY3QgbWVtb3J5IHJlY2xhaW0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzIGFuZCBtZW1vcnkgcHJlc3N1cmUgKHNocmlua2VycyksIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV91bm1hcF9hbGlhc2VzJiMzNDssCiAgICAmIzM0O3ZtX21hcF9yYW0mIzM0OywKICAgICYjMzQ7dm1fdW5tYXBfcmFtJiMzNDssCiAgICAmIzM0O3Z1bm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZtYWxsb2Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgKGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCkgYW5kIHRoZSB2bWFwIG5vZGUgc2hyaW5rZXIgKGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gKS4gSXQgcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nIHRvIGZpeCBhIGRlYWRsb2NrIHNjZW5hcmlvIGR1cmluZyBkaXJlY3QgbWVtb3J5IHJlY2xhaW0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzIGFuZCBtZW1vcnkgcHJlc3N1cmUgKHNocmlua2VycyksIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIGRlYWRsb2NrIGlzc3VlIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcyBieSByZW1vdmluZyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgdXNpbmcgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmIzODVlYjJlOTdhYmNjNDE0MDg3NmIyMThkN2E1MzFkYjZmNDg0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDExOjEwOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGJlYTlmNzZlZDdlNzQuLjQxNDQzNzA4ZDIyZGUgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTIzNTgsNyAmIzQzOzIzNTgsNiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlib29sIGZ1bGxfcG9vbF9kZWNheSkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7Ci0JdW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7CiAJc3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2RlczsKIAl1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7CiAJc3RydWN0IHZtYXBfbm9kZSAqdm47CkBAIC0yMzk3LDM2ICYjNDM7MjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmIChucl9wdXJnZV9ub2RlcyAmZ3Q7IDApIHsKIAkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKIAotCQkvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqLwotCQlucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO3ZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpOwotCQlucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7Ci0KLQkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKLQkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwotCi0JCQlpZiAobnJfcHVyZ2VfaGVscGVycyAmZ3Q7IDApIHsKLQkJCQlJTklUX1dPUksoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTsKLQotCQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpCi0JCQkJCXNjaGVkdWxlX3dvcmtfb24oaSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJZWxzZQotCQkJCQlzY2hlZHVsZV93b3JrKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCi0JCQkJbnJfcHVyZ2VfaGVscGVycy0tOwotCQkJfSBlbHNlIHsKLQkJCQl2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jID0gTlVMTDsKLQkJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwotCQkJfQotCQl9Ci0KJiM0MzsJCS8qCiYjNDM7CQkgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmQKJiM0MzsJCSAqIGZsdXNoX3dvcmsoKSBoZXJlOiBmbHVzaF93b3JrKCkgd2hpbGUgaG9sZGluZwomIzQzOwkJICogdm1hcF9wdXJnZV9sb2NrIGNhbiBkZWFkbG9jayBpZiB0aGUgd29ya2VyIHBvb2wgaXMKJiM0MzsJCSAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9jawomIzQzOwkJICogaW4gdGhlIGRpcmVjdCByZWNsYWltIHBhdGggdmlhIHZtYXBfbm9kZV9zaHJpbmtfc2NhbikuCiYjNDM7CQkgKi8KIAkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKIAkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwotCi0JCQlpZiAodm4tJmd0O3B1cmdlX3dvcmsuZnVuYykgewotCQkJCWZsdXNoX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwotCQkJfQomIzQzOwkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKJiM0MzsJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiAJCX0KIAl9CiAKQEAgLTU1MTksMTAgJiM0Mzs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAotCWd1YXJkKG11dGV4KSgmYW1wO3ZtYXBfcHVyZ2VfbG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgc2hyaW5rZXIgaXMgaW52b2tlZCBmcm9tIGRpcmVjdCByZWNsYWltIHBhdGggd2hlcmUgbWVtb3J5CiYjNDM7CSAqIHByZXNzdXJlIGlzIGFscmVhZHkgaGlnaC4gIEJsb2NraW5nIG9uIHZtYXBfcHVyZ2VfbG9jayBoZXJlIGNhbgomIzQzOwkgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlCiYjNDM7CSAqIHRoZSBsb2NrIGhvbGRlciBtYXkgaXRzZWxmIGJlIGJsb2NrZWQgaW4gZmx1c2hfd29yaygpIHdhaXRpbmcgZm9yCiYjNDM7CSAqIGEgd29ya2VyIHRoYXQgaXMgc3R1Y2sgaW4gdGhlIHNhbWUgcmVjbGFpbSBwYXRoLiAgVXNlIHRyeWxvY2sgdG8KJiM0MzsJICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7dm1hcF9wdXJnZV9sb2NrKSkKJiM0MzsJCXJldHVybiBTSFJJTktfU1RPUDsKJiM0MzsKIAlmb3JfZWFjaF92bWFwX25vZGUodm4pCiAJCWRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgdHJ1ZSk7CiAKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7dm1hcF9wdXJnZV9sb2NrKTsKIAlyZXR1cm4gU0hSSU5LX1NUT1A7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDIKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHB1cmdpbmcgdmlydHVhbCBtZW1vcnkgbWFwIGFyZWFzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBhc3luY2hyb25vdXMgYHNjaGVkdWxlX3dvcmtgIGFuZCBgZmx1c2hfd29ya2AgYXBwcm9hY2ggaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBvcHRpbmcgdG8gY2FsbCBgcHVyZ2Vfdm1hcF9ub2RlYCBpbmxpbmUgZm9yIGFsbCBub2Rlcy4gVGhhdOKAmXMgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiwgYnV0IHRoZSByZWFzb25pbmcgaXMgbGlrZWx5IGNyaXRpY2FsLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIHdoZXJlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgZ3VhcmRlZCBtdXRleCBhY2Nlc3Mgd2l0aCBgbXV0ZXhfdHJ5bG9ja2AuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBkZWFkbG9jayBwcmV2ZW50aW9uLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSBhbmQgcmVsYXRlZCBsb2NraW5nIGlzc3Vlcy4KClRoaXMgaXMgY2xlYXJseSBmaXhpbmcgYSBkZWFkbG9jayBjb25kaXRpb24gaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzLiBUaGUgZ29vZCBuZXdzIGlzLCBmcm9tIG15IGluaXRpYWwgZ2xhbmNlLCB0aGF0IGl0JiMzOTtzIGEgKmxvY2tpbmcqIGlzc3VlLCBhbmQgbm90IHNvbWV0aGluZyBtb3JlIGluc2lkaW91cyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbWVtb3J5IGxlYWtzLCBvciBjb3JydXB0aW9uLiBUaGUgdXNlIG9mIExPQ0tERVAgaXMgdGhlIGdpdmVhd2F5LiBJZiB0aGUga2VybmVsJiMzOTtzIExPQ0tERVAgaXMgY2F0Y2hpbmcgZGVhZGxvY2tzLCB3ZSBhcmUgaW4gYSBmYXIgYmV0dGVyIHNpdHVhdGlvbiB0aGFuIHRyeWluZyB0byBkZWJ1ZyBkYXRhIGNvcnJ1cHRpb24gdGhhdCBjYW4gYmUgdmVyeSBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIGdpdmVuIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGlzc3VlIGFuZCBub3QgZGF0YSBjb3JydXB0aW9uLCBpdCBzZWVtcyBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIEtBU0FOL0xPQ0tERVAgaXMgc3VmZmljaWVudCB0byBjaGVjayB0aGlzIGNvZGUuIFdlIG9ubHkgbmVlZCB0aGUgZGVhZGxvY2sgZGV0ZWN0aW9uLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBmaXggZm9yIGEga25vd24gZGVhZGxvY2sgc2NlbmFyaW8gYW5kIHRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBwYXJ0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZGVhZGxvY2sgaXNzdWUgaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzIGJ5IHJlbW92aW5nIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCB1c2luZyBgbXV0ZXhfdHJ5bG9ja2AgaW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgc3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjA5LjM0NjYwMjI4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDM5ODcwMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGRlYWRsb2NrIGlzc3VlIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcyBieSByZW1vdmluZyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgdXNpbmcgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjA5LjM0NjYwNjQxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Nzc4ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZiMzg1ZWIyZTk3YWJjYzQxNDA4NzZiMjE4ZDdhNTMxZGI2ZjQ4NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtMjM1OCw3ICsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcXG4gXFx0c3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2RlcztcXG4gXFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xcbiBcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG5AQCAtMjM5NywzNiArMjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuIFxcbi1cXHRcXHQvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqL1xcbi1cXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XFxuLVxcdFxcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcXG4tXFxuLVxcdFxcdGZvcl9lYWNoX2NwdShpLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcXG4tXFx0XFx0XFx0dm4gPSBcXHUwMDI2dm1hcF9ub2Rlc1tpXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChucl9wdXJnZV9oZWxwZXJzIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfd29ya19vbihpLCBcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXHRcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4tXFxuLVxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dm4tXFx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XFxuLVxcdFxcdFxcdFxcdHB1cmdlX3ZtYXBfbm9kZShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXHRcXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmRcXG4rXFx0XFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXFxuK1xcdFxcdCAqIHZtYXBfcHVyZ2VfbG9jayBjYW4gZGVhZGxvY2sgaWYgdGhlIHdvcmtlciBwb29sIGlzXFxuK1xcdFxcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xcbitcXHRcXHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGZvcl9lYWNoX2NwdShpLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcXG4gXFx0XFx0XFx0dm4gPSBcXHUwMDI2dm1hcF9ub2Rlc1tpXTtcXG4tXFxuLVxcdFxcdFxcdGlmICh2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XFxuLVxcdFxcdFxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4tXFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cHVyZ2Vfdm1hcF9ub2RlKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuK1xcdFxcdFxcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cXHUwMDNlbnJfcHVyZ2VkO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTU1MTksMTAgKzU0OTksMjEgQEAgdm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbiBcXG4tXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIHNocmlua2VyIGlzIGludm9rZWQgZnJvbSBkaXJlY3QgcmVjbGFpbSBwYXRoIHdoZXJlIG1lbW9yeVxcbitcXHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cXG4rXFx0ICogY2F1c2UgYSBwaWxlLXVwIG9mIHRhc2tzIGFsbCB3YWl0aW5nIGZvciB0aGUgc2FtZSBtdXRleCB3aGlsZVxcbitcXHQgKiB0aGUgbG9jayBob2xkZXIgbWF5IGl0c2VsZiBiZSBibG9ja2VkIGluIGZsdXNoX3dvcmsoKSB3YWl0aW5nIGZvclxcbitcXHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXFxuK1xcdCAqIGF2b2lkIHRoaXM7IHNraXBwaW5nIGEgcG9vbCBkZWNheSBjeWNsZSBpcyBoYXJtbGVzcy5cXG4rXFx0ICovXFxuK1xcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKSlcXG4rXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbitcXG4gXFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKVxcbiBcXHRcXHRkZWNheV92YV9wb29sX25vZGUodm4sIHRydWUpO1xcbiBcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbiBcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjEwLjY0NDk4MTU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ3MDE2MDU2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1fdW5tYXBfYWxpYXNlc1wiLFxuICAgIFwidm1fbWFwX3JhbVwiLFxuICAgIFwidm1fdW5tYXBfcmFtXCIsXG4gICAgXCJ2dW5tYXBcIixcbiAgICBcInZtYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiMzg1ZWIyZTk3YWJjYzQxNDA4NzZiMjE4ZDdhNTMxZGI2ZjQ4NDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMToxMDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMjM1OCw3ICsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4gXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG5AQCAtMjM5NywzNiArMjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKG5yX3B1cmdlX25vZGVzIFx1MDAzZSAwKSB7XG4gXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4gXG4tXHRcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXG4tXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuLVx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4tXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbi1cbi1cdFx0XHRpZiAobnJfcHVyZ2VfaGVscGVycyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG4tXG4tXHRcdFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrX29uKGksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVxuLVx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMgPSBOVUxMO1xuLVx0XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbitcdFx0LypcbitcdFx0ICogUHVyZ2UgYWxsIG5vZGVzIGlubGluZS4gIERvIG5vdCBzY2hlZHVsZV93b3JrKCkgYW5kXG4rXHRcdCAqIGZsdXNoX3dvcmsoKSBoZXJlOiBmbHVzaF93b3JrKCkgd2hpbGUgaG9sZGluZ1xuK1x0XHQgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpc1xuK1x0XHQgKiBzdGFydmVkIChlLmcuIGFsbCB3b3JrZXJzIGJsb2NrZWQgb24gdGhpcyBzYW1lIGxvY2tcbitcdFx0ICogaW4gdGhlIGRpcmVjdCByZWNsYWltIHBhdGggdmlhIHZtYXBfbm9kZV9zaHJpbmtfc2NhbikuXG4rXHRcdCAqL1xuIFx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbiBcdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYykge1xuLVx0XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4tXHRcdFx0fVxuK1x0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbitcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTUxOSwxMCArNTQ5OSwyMSBAQCB2bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbitcdC8qXG4rXHQgKiBUaGlzIHNocmlua2VyIGlzIGludm9rZWQgZnJvbSBkaXJlY3QgcmVjbGFpbSBwYXRoIHdoZXJlIG1lbW9yeVxuK1x0ICogcHJlc3N1cmUgaXMgYWxyZWFkeSBoaWdoLiAgQmxvY2tpbmcgb24gdm1hcF9wdXJnZV9sb2NrIGhlcmUgY2FuXG4rXHQgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlXG4rXHQgKiB0aGUgbG9jayBob2xkZXIgbWF5IGl0c2VsZiBiZSBibG9ja2VkIGluIGZsdXNoX3dvcmsoKSB3YWl0aW5nIGZvclxuK1x0ICogYSB3b3JrZXIgdGhhdCBpcyBzdHVjayBpbiB0aGUgc2FtZSByZWNsYWltIHBhdGguICBVc2UgdHJ5bG9jayB0b1xuK1x0ICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKSlcbitcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuK1xuIFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKVxuIFx0XHRkZWNheV92YV9wb29sX25vZGUodm4sIHRydWUpO1xuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4gXHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MTAuNjQ0OTgzMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTE3MzMwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSB2bWFsbG9jIGFyZWEgcHVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHJpcHBpbmcgb3V0IHRoZSBgc2NoZWR1bGVfd29ya2AvYGZsdXNoX3dvcmtgIGNvbWJvIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggZGlyZWN0IGNhbGxzIHRvIGBwdXJnZV92bWFwX25vZGVgLiBUaGV5J3ZlIGFsc28gc3dhcHBlZCBvdXQgYGd1YXJkKG11dGV4KWAgZm9yIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIHRoaXMgc2NyZWFtcyBcImZ1bmN0aW9uYWwgaW1wYWN0LlwiIFRoaXMgaXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdm1hbGxvYyBhcmVhcyBoZXJlISBEZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVlcCBkaXZlIGFuZCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gc2NydXRpbml6ZSBoZXJlIGFyZSBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLlxuXG5GaXJzdCwgbGV0J3MgZXN0YWJsaXNoIHNvbWUgZ3JvdW5kIHRydXRocy4gSXMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIHN0YXRpYz8gQSBxdWljayBjaGVjay4uLiB5ZXAsIGl0J3MgYHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgZnVsbF9wb29sX2RlY2F5KWAuIEdvb2QgdG8ga25vdywgbGltaXRpbmcgdGhlIHNjb3BlIHNvbWV3aGF0LiBOb3csIHRpbWUgdG8gaHVudCBkb3duIHRoZSBjYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gVGhhdCdsbCB0ZWxsIHVzIHRoZSBzcGVjaWZpYyBjb250ZXh0cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIHdpbGwgaGF2ZSBhbiBlZmZlY3QuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxNi4xNjIzMTUzNzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTYxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzMTk9c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMzU2LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMzU3OnN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTIzNTgtXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuLS1cXG5tbS92bWFsbG9jLmM9MjQyMD1zdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQyNC1cXHRwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKCk7XFxubW0vdm1hbGxvYy5jOjI0MjU6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbm1tL3ZtYWxsb2MuYy0yNDI2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yNDI5PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDMxLVxcdG11dGV4X2xvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxubW0vdm1hbGxvYy5jOjI0MzI6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG5tbS92bWFsbG9jLmMtMjQzMy1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjk0NT1zdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbi0tXFxubW0vdm1hbGxvYy5jLTI5OTEtXFxubW0vdm1hbGxvYy5jOjI5OTI6XFx0aWYgKCFfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNiBmbHVzaClcXG5tbS92bWFsbG9jLmMtMjk5My1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxNi4yMDY1NTIwMTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjExMzM5NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBpdHMgdXNhZ2UuIE5vdywgSSdtIGdldHRpbmcgY3VyaW91cyBhYm91dCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AgaW4gcGFydGljdWxhciDigJMgaXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24/IEtub3dpbmcgaXRzIHNjb3BlIHdpbGwgaGVscCBpbiBteSBhbmFseXNpcyBvZiBob3cgYW5kIHdoZW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhhdOKAmXMgdGhlIGNhc2U7IGl0J2xsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxOS44MTc4OTQ1ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjkxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTEwODY9UkJfREVDTEFSRV9DQUxMQkFDS1NfTUFYKHN0YXRpYywgZnJlZV92bWFwX2FyZWFfcmJfYXVnbWVudF9jYixcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xMDg4LVxcbm1tL3ZtYWxsb2MuYzoxMDg5OnN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7XFxubW0vdm1hbGxvYy5jLTEwOTAtc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjA0NT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqYWxsb2Nfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMTU0LVxcdGlmICghcHVyZ2VkKSB7XFxubW0vdm1hbGxvYy5jOjIxNTU6XFx0XFx0cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcygpO1xcbm1tL3ZtYWxsb2MuYy0yMTU2LVxcdFxcdHB1cmdlZCA9IDE7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjM1Nz1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTI0MTktICovXFxubW0vdm1hbGxvYy5jOjI0MjA6c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxcbm1tL3ZtYWxsb2MuYy0yNDIxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ5Njc9c3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXFxuLS1cXG5tbS92bWFsbG9jLmMtNTE1MS1cXHRpZiAoIXB1cmdlZCkge1xcbm1tL3ZtYWxsb2MuYzo1MTUyOlxcdFxcdHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMoKTtcXG5tbS92bWFsbG9jLmMtNTE1My1cXHRcXHRwdXJnZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxOS44NjMzNjk5MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTExMTk3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVmlydHVhbCBNYXBwaW5nICh2bWFwKSBBcmVhIFJlY2xhbWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2bWFwIHJlZ2lvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBhbGxvY192bWFwX2FyZWFgIGFuZCBgcGNwdV9nZXRfdm1fYXJlYXNgIGJvdGggc2VlbSB0byB0cmlnZ2VyIGEgY2FsbCB0byBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIGEgc2hhcmVkIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5JJ3ZlIG5vdGVkIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgcmVzdHJpY3RlZCB2aXNpYmlsaXR5IGFuZCBhcmUgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdm1hcCBpbmZyYXN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGJlIGV4cG9zZWQgZ2xvYmFsbHkuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gZHJpbGwgZG93biBvbiBgdm1fdW5tYXBfYWxpYXNlc2AsIGJlY2F1c2UgaXQncyBtZW50aW9uZWQuIExldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyByZWNsYW1hdGlvbiBwcm9jZXNzLiBJdCdzIHByb2JhYmx5IHRoZSBrZXkgc3RlcCB0byB1bm1hcCB0aGUgYXJlYXMgdGhhdCB3ZXJlIGZyZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MjQuMzc0NTcwMjA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY4NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yOTAzPXN0YXRpYyB2b2lkIHZiX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjk0NC1cXG5tbS92bWFsbG9jLmM6Mjk0NTpzdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbm1tL3ZtYWxsb2MuYy0yOTQ2LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yOTk3LS8qKlxcbm1tL3ZtYWxsb2MuYzoyOTk4OiAqIHZtX3VubWFwX2FsaWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXJcXG5tbS92bWFsbG9jLmMtMjk5OS0gKlxcbi0tXFxubW0vdm1hbGxvYy5jLTMwMDUtICpcXG5tbS92bWFsbG9jLmM6MzAwNjogKiB2bV91bm1hcF9hbGlhc2VzIGZsdXNoZXMgYWxsIHN1Y2ggbGF6eSBtYXBwaW5ncy4gQWZ0ZXIgaXQgcmV0dXJucywgd2UgY2FuXFxubW0vdm1hbGxvYy5jLTMwMDctICogYmUgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIHBhZ2VzIHdlIGhhdmUgY29udHJvbCBvdmVyIHdpbGwgaGF2ZSBhbnkgYWxpYXNlc1xcbi0tXFxubW0vdm1hbGxvYy5jLTMwMDktICovXFxubW0vdm1hbGxvYy5jOjMwMTA6dm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpXFxubW0vdm1hbGxvYy5jLTMwMTEte1xcbm1tL3ZtYWxsb2MuYzozMDEyOlxcdF92bV91bm1hcF9hbGlhc2VzKFVMT05HX01BWCwgMCwgMCk7XFxubW0vdm1hbGxvYy5jLTMwMTMtfVxcbm1tL3ZtYWxsb2MuYzozMDE0OkVYUE9SVF9TWU1CT0xfR1BMKHZtX3VubWFwX2FsaWFzZXMpO1xcbm1tL3ZtYWxsb2MuYy0zMDE1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTMzNTQ9c3RhdGljIHZvaWQgdm1fcmVzZXRfcGVybXMoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMzYyLVxcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxcbm1tL3ZtYWxsb2MuYzozMzYzOlxcdCAqIHRoZSB2bV91bm1hcF9hbGlhc2VzKCkgZmx1c2ggaW5jbHVkZXMgdGhlIGRpcmVjdCBtYXAuXFxubW0vdm1hbGxvYy5jLTMzNjQtXFx0ICovXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM4My1cXHRzZXRfYXJlYV9kaXJlY3RfbWFwKGFyZWEsIHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaCk7XFxubW0vdm1hbGxvYy5jOjMzODQ6XFx0X3ZtX3VubWFwX2FsaWFzZXMoc3RhcnQsIGVuZCwgZmx1c2hfZG1hcCk7XFxubW0vdm1hbGxvYy5jLTMzODUtXFx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoyNC40MTgxNDE2MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg4ODM2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBFeHBvcnRzKipcblxuQWxyaWdodCwgSSBzZWUgYHZtX3VubWFwX2FsaWFzZXNgIGlzIGV4cG9ydGVkLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHVubWFwcGluZyBhbGlhc2VkIHZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMsIGEgY3JpdGljYWwgb3BlcmF0aW9uIGluIGEgc3lzdGVtIGxpa2UgdGhpcy4gSXQncyBnb29kIHRvIGhhdmUgdGhhdCBhY2Nlc3NpYmxlLCBpbXBsaWVzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEJ1dCwgd2hhdCBhYm91dCB0aGUgY2xlYW51cCBmdW5jdGlvbiwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmA/IElzIGl0IGFsc28gZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZT8gSXRzIHJvbGUgaXMgZXF1YWxseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWFwcGluZyBzeXN0ZW0gKGB2bWFwYCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCdzIHB1YmxpY2x5IGFjY2Vzc2libGUgZnJvbSB0aGUgb3V0c2lkZS4gSWYgb25seSBvbmUgaXMgZXhwb3J0ZWQgdGhhdCB3b3VsZCByYWlzZSBmbGFncywgSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3QgYW5kIGhvdyBleHRlcm5hbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDozMC42MDY5ODEzOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODA4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfbm9kZV9zaHJpbmtfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzNTc9c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDAzLVxcdFxcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xcbm1tL3ZtYWxsb2MuYzoyNDA0OlxcdFxcdCAqIGluIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoIHZpYSB2bWFwX25vZGVfc2hyaW5rX3NjYW4pLlxcbm1tL3ZtYWxsb2MuYy0yNDA1LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTU0OTc9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS92bWFsbG9jLmM6NTQ5ODp2bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxubW0vdm1hbGxvYy5jLTU0OTkte1xcbi0tXFxubW0vdm1hbGxvYy5jPTU1MjA9dm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtNTU3Ny1cXHR2bWFwX25vZGVfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX2NvdW50O1xcbm1tL3ZtYWxsb2MuYzo1NTc4OlxcdHZtYXBfbm9kZV9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xcbm1tL3ZtYWxsb2MuYy01NTc5LVxcdHNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjMwLjY1MDc5NzQxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI0NzI5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKlxuXG5SaWdodCwgc28gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMgcmVnaXN0ZXJlZCBhcyBhIHNocmlua2VyLCBtZWFuaW5nIGl0J3MgaW52b2x2ZWQgaW4gbWVtb3J5IHJlY2xhbWF0aW9uLiBJbnRlcmVzdGluZy4gVGhpcyBwYXRjaCB0YXJnZXRzIGEgZGVhZGxvY2sgYmV0d2VlbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHRoYXQncyBhIGJpZyByZWQgZmxhZyDigJMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5UaGlua2luZyBhYm91dCBmb2N1cyBwb2ludHMsIGB2bV91bm1hcF9hbGlhc2VzYCBqdW1wcyBvdXQsIHNpbmNlIGl0IGNhbGxzIGBfdm1fdW5tYXBfYWxpYXNlc2AsIHdoaWNoIHRoZW4gZ29lcyBvbiB0byBjYWxsIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gVGhhdCdzIGEgZGlyZWN0IHBhdGguIEFsdGVybmF0aXZlbHksIGxvb2tpbmcgYXQgYHZtYWxsb2NgLCBgdmZyZWVgLCBgdnVubWFwYCwgYW5kIGB2bWFwYCBtaWdodCByZXZlYWwgaW50ZXJhY3Rpb25zIHRoYXQgaW5kaXJlY3RseSB0cmlnZ2VyIHRoZSBpc3N1ZS4gV2Ugc2hvdWxkIHRhcmdldCBhbGwgdGhlIGNyaXRpY2FsIHZpcnR1YWwgbWVtb3J5IHByaW1pdGl2ZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhY3R1YWxseSBjYWxsIGBhbGxvY192bWFwX2FyZWFgLiBUaGF0IGNvdWxkIHByb3ZpZGUgY2x1ZXMgdG8gdGhlIHJvb3QgY2F1c2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIG5hcnJvdyBkb3duIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaW5mb3JtIGEgbW9yZSBmb2N1c2VkIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MzcuMzc1NTI5Mzg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0OTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY192bWFwX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0xNzI0PXZhX2NsaXAoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTc4Mi1cXHRcXHRcXHQgKiBhbGxvY2F0aW9ucywgaWYgXFxcInRoaXNcXFwiIGN1cnJlbnQgQ1BVIHdhcyBub3QgcHJlbG9hZGVkLlxcbm1tL3ZtYWxsb2MuYzoxNzgzOlxcdFxcdFxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiBhbGxvY192bWFwX2FyZWEoKSB3aHkuIElmIHNvLCB0aGVuXFxubW0vdm1hbGxvYy5jLTE3ODQtXFx0XFx0XFx0ICogR0ZQX05PV0FJVCBpcyB1c2VkIGluc3RlYWQgdG8gZ2V0IGFuIGV4dHJhIG9iamVjdCBmb3JcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNzkxLVxcdFxcdFxcdCAqIHRyaWdnZXJlZCB0byByZXBlYXQgb25lIG1vcmUgdGltZS4gU2VlIG1vcmUgZGV0YWlsc1xcbm1tL3ZtYWxsb2MuYzoxNzkyOlxcdFxcdFxcdCAqIGluIGFsbG9jX3ZtYXBfYXJlYSgpIGZ1bmN0aW9uLlxcbm1tL3ZtYWxsb2MuYy0xNzkzLVxcdFxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTE4NTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nXFxubW0vdm1hbGxvYy5jOjE4NTY6X19hbGxvY192bWFwX2FyZWEoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxubW0vdm1hbGxvYy5jLTE4NTctXFx0dW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE4OTAtLypcXG5tbS92bWFsbG9jLmM6MTg5MTogKiBGcmVlIGEgcmVnaW9uIG9mIEtWQSBhbGxvY2F0ZWQgYnkgYWxsb2Nfdm1hcF9hcmVhXFxubW0vdm1hbGxvYy5jLTE4OTItICovXFxuLS1cXG5tbS92bWFsbG9jLmM9MjAzMT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdm1hbGxvY192bShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMDQ0LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMDQ1OnN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICphbGxvY192bWFwX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL3ZtYWxsb2MuYy0yMDQ2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtMjA5NC1cXHRcXHRwcmVsb2FkX3RoaXNfY3B1X2xvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2ssIGdmcF9tYXNrLCBub2RlKTtcXG5tbS92bWFsbG9jLmM6MjA5NTpcXHRcXHRhZGRyID0gX19hbGxvY192bWFwX2FyZWEoXFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsIFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LFxcbm1tL3ZtYWxsb2MuYy0yMDk2LVxcdFxcdFxcdHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTIxMDYtXFxubW0vdm1hbGxvYy5jOjIxMDc6XFx0dHJhY2VfYWxsb2Nfdm1hcF9hcmVhKGFkZHIsIHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQsIElTX0VSUl9WQUxVRShhZGRyKSk7XFxubW0vdm1hbGxvYy5jLTIxMDgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MjY5OT1zdGF0aWMgdm9pZCAqbmV3X3ZtYXBfYmxvY2sodW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNzE0LVxcbm1tL3ZtYWxsb2MuYzoyNzE1OlxcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKFZNQVBfQkxPQ0tfU0laRSwgVk1BUF9CTE9DS19TSVpFLFxcbm1tL3ZtYWxsb2MuYy0yNzE2LVxcdFxcdFxcdFxcdFxcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbi0tXFxubW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMwNzYtXFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxubW0vdm1hbGxvYy5jOjMwNzc6XFx0XFx0dmEgPSBhbGxvY192bWFwX2FyZWEoc2l6ZSwgUEFHRV9TSVpFLFxcbm1tL3ZtYWxsb2MuYy0zMDc4LVxcdFxcdFxcdFxcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbi0tXFxubW0vdm1hbGxvYy5jPTMxOTk9c3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjI3LVxcbm1tL3ZtYWxsb2MuYzozMjI4OlxcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzaywgMCwgYXJlYSk7XFxubW0vdm1hbGxvYy5jLTMyMjktXFx0aWYgKElTX0VSUih2YSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MzcuNDIwNjgwNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4ODExMDMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVm1hcCBBcmVhIERlYWRsb2NrIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQuIGBhbGxvY192bWFwX2FyZWFgIHNlZW1zIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBhbmQgaXQncyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMgSSdtIGZhbWlsaWFyIHdpdGg6IGBuZXdfdm1hcF9ibG9ja2AsIGB2bV9tYXBfcmFtYCwgYW5kIGBfX2dldF92bV9hcmVhX25vZGVgLiBOb3csIGBfX2dldF92bV9hcmVhX25vZGVgIGJyYW5jaGVzIG91dCB0byB0aGluZ3MgbGlrZSBgZ2V0X3ZtX2FyZWFgLCBgZ2V0X3ZtX2FyZWFfY2FsbGVyYCwgYW5kIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAuIFRoYXQgbWFrZXMgYHZtYWxsb2NgLCBgdmZyZWVgLCBgdm1fbWFwX3JhbWAsIGFuZCBgdm1fdW5tYXBfcmFtYCBwcmltZSB0YXJnZXRzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5CdXQgd2FpdCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGNhbGxlZCBieSBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIHdoaWNoIGlzICphbHNvKiBjYWxsZWQgYnkgYGFsbG9jX3ZtYXBfYXJlYWAgaXRzZWxmISBTbyBhbnkgYWxsb2NhdGlvbiB2aWEgYHZtYWxsb2NgIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgdGhpcyByZWNsYW1hdGlvbiBwYXRoLiBBbmQsIGFkZGluZyB0byB0aGUgY29tcGxleGl0eSwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHNocmlua2VyLCBpcyBhbHNvIGluIHRoZSBtaXguIE1lbW9yeSBwcmVzc3VyZSBjYW4gYWxzbyB0cmlnZ2VyIGl0LCByaWdodD9cblxuU28sIHRvIGtlZXAgaXQgc2ltcGxlLCBJJ2xsIGZvY3VzIG9uIGB2bWFsbG9jYCwgYHZmcmVlYCwgYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGFuZCBgdm1fdW5tYXBfcmFtYC4gQWgsIHllcywgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMgYSBzaHJpbmtlciwgc28gaXQncyB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBUaGlzIHBhdGNoIGlzIG1lYW50IHRvIGZpeCBhIGRlYWRsb2NrIGJldHdlZW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgYW5kIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC5cblxuVGhlcmVmb3JlLCB0aGUgbW9zdCBlZmZlY3RpdmUgZnV6emluZyB0YXJnZXRzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFsbG9jYCwgYHZmcmVlYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb29kLCBgbW0vdm1hbGxvYy5jYCBpcyBhbHdheXMgY29tcGlsZWQuIE5vdGhpbmcgc3BlY2lhbCB0byBrZWVwIGluIG1pbmQgdGhlcmUuXG5cbk9rYXksIGxldCdzIHNvbGlkaWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nOlxuXG4qICAgYHZtYWxsb2NgXG4qICAgYHZmcmVlYFxuKiAgIGB2bV91bm1hcF9hbGlhc2VzYFxuKiAgIGB2bV9tYXBfcmFtYFxuKiAgIGB2bV91bm1hcF9yYW1gXG5cbkkgc2VlIGB2bWFsbG9jYCBpcyBhIGZyZXF1ZW50bHkgdXNlZCBwYXRoIGJ1dCBnb29kIGFzIGFuIGVudHJ5IGZvciB0aGUgdm1hbGxvYyBjb2RlLiBNYXliZSBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgYSBiZXR0ZXIgdGFyZ2V0LCBhcyBpdCdzIGxlc3MgY29tbW9uIGFuZCBkaXJlY3RseSBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHdoaWNoIGlzIHRoZSBvbmUgd2UgYXJlIGNvbmNlcm5lZCB3aXRoLiBHb29kLCBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgZXhwb3J0ZWQuIExldCdzIHNlZSBpZiBgdm1fbWFwX3JhbWAgYW5kIGB2bV91bm1hcF9yYW1gIGFyZSBhbHNvIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjQ3LjMwMTc4NjMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjMzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdm1fbWFwX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMxMDItfVxcbm1tL3ZtYWxsb2MuYzozMTAzOkVYUE9SVF9TWU1CT0wodm1fbWFwX3JhbSk7XFxubW0vdm1hbGxvYy5jLTMxMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjQ3LjM0NTk1NDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQyMTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbmZpcm1pbmcgYSBLZXkgRnVuY3Rpb24ncyBBdmFpbGFiaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGNvbmZpcm1hdGlvbiBpcyB0aGF0IGB2bV9tYXBfcmFtYCAqaXMqIGluZGVlZCBleHBvcnRlZC4gVGhpcyBpcyBnb29kLCBhcyBpdCBtZWFucyBJIGNhbiBwcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiB0aGUgY29udGV4dCBJJ20gY3VycmVudGx5IHdvcmtpbmcgaW4uIFRoaXMgYWxsb3dzIG1lIHRvIGxldmVyYWdlIGl0cyBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciB3b3JrYXJvdW5kIGZvciBpdHMgcHJlc2VuY2UsIHdoaWNoLCBpbiB0dXJuLCBhbGxvd3MgbWUgdG8gc3RyZWFtbGluZSB0aGUgb25nb2luZyB0YXNrIGF0IGhhbmQuIEl0IHJlbW92ZXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrIGFuZCBjb25maXJtcyB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdXRpbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1MC41NTAxNjk4NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTUxNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZtX3VubWFwX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMwMjE9dm9pZCB2bV91bm1hcF9yYW0oY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgY291bnQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzA0Ny19XFxubW0vdm1hbGxvYy5jOjMwNDg6RVhQT1JUX1NZTUJPTCh2bV91bm1hcF9yYW0pO1xcbm1tL3ZtYWxsb2MuYy0zMDQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1MC41OTYzMjM5NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODg0NDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hcHBpbmcgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIGB2bV91bm1hcF9yYW1gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgbm93IHRoZSBxdWVzdGlvbiB0aGF0J3MgbmFnZ2luZyBhdCB0aGUgYmFjayBvZiBteSBtaW5kIGlzOiB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgdnVubWFwYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVubWFwIHJvdXRpbmUgdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUgc2FtZSBvciBpZiB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byByb3V0aW5lcyByZWxhdGUsIGlmIGF0IGFsbC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBlc3BlY2lhbGx5IGluIGNvbnRleHQgb2YgdGhlIHNwZWNpZmljIHBsYXRmb3JtIEknbSB3b3JraW5nIHdpdGguIFRoZSBrZXkgaXMgaW4gdW5kZXJzdGFuZGluZyB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgdW5tYXAgZnVuY3Rpb24gYmVpbmcgY29uc2lkZXJlZCBvciBub3QuIEkndmUgZ290IHRvIHF1aWNrbHkgc2VlIGlmIHRoZXkgYXJlIHNlcGFyYXRlIG9yIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1My45OTUxNzEyMjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzcxMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZ1bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM1MDU9dm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTIxLX1cXG5tbS92bWFsbG9jLmM6MzUyMjpFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XFxubW0vdm1hbGxvYy5jLTM1MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjU0LjAzODk0NjU5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyODg3NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBgdm1hcGAgQXZhaWxhYmlsaXR5KipcblxuUmlnaHQsIHNvIGB2dW5tYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIEkndmUgZ290IHRoYXQgY29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgdm1hcGA/IElzIHRoYXQgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UgYXMgd2VsbD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciBJIGhhdmUgYWNjZXNzIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSB0b28sIHNpbmNlIGl0IGlzIGxpa2VseSBuZWVkZWQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMTowNC43Njc4MjM5NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzMyMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yMTc3PWludCByZWdpc3Rlcl92bWFwX3B1cmdlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjE4MC19XFxubW0vdm1hbGxvYy5jOjIxODE6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XFxubW0vdm1hbGxvYy5jLTIxODItXFxubW0vdm1hbGxvYy5jPTIxODM9aW50IHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubW0vdm1hbGxvYy5jLTIxODYtfVxcbm1tL3ZtYWxsb2MuYzoyMTg3OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XFxubW0vdm1hbGxvYy5jLTIxODgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzUzOT12b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTc4LX1cXG5tbS92bWFsbG9jLmM6MzU3OTpFWFBPUlRfU1lNQk9MKHZtYXApO1xcbm1tL3ZtYWxsb2MuYy0zNTgwLVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2MTM9dm9pZCAqdm1hcF9wZm4odW5zaWduZWQgbG9uZyAqcGZucywgdW5zaWduZWQgaW50IGNvdW50LCBwZ3Byb3RfdCBwcm90KVxcbi0tXFxubW0vdm1hbGxvYy5jLTM2MzItfVxcbm1tL3ZtYWxsb2MuYzozNjMzOkVYUE9SVF9TWU1CT0xfR1BMKHZtYXBfcGZuKTtcXG5tbS92bWFsbG9jLmMtMzYzNC0jZW5kaWYgLyogQ09ORklHX1ZNQVBfUEZOICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjExOjA0LjgxMzE1OTA4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDUzMzQwMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYHZtYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGdvb2Qgc3RhcnQuIFRoaW5raW5nIHRocm91Z2ggcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIEknbSBsZWFuaW5nIHRvd2FyZCB0aGVzZTogYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGB2bV91bm1hcF9yYW1gLCBgdnVubWFwYCwgYW5kIGB2bWFwYC4gV2hpbGUgYHZtYWxsb2NgIGFuZCBgdmZyZWVgIGFyZSBjb21tb24sIHRoZXkgbWlnaHQgZG9taW5hdGUgdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIHRoZXNlIG90aGVyIHN5bWJvbHMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjb3JlIGxvZ2ljIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC4gSSdtIGNob29zaW5nIHRvIG9taXQgYHZtYWxsb2NgIGFuZCBgdmZyZWVgIGF0IHRoaXMgc3RhZ2UsIGFzIHRoZXkgZG9uJ3QgZ2l2ZSBpbnNpZ2h0IHRvIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC5cblxuVGhlIHBhdGNoIGl0c2VsZiBkaWdzIGludG8gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gSXQgbG9va3MgbGlrZSBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AgKHRyaWdnZXJlZCBieSBgYWxsb2Nfdm1hcF9hcmVhYCB3aGVuIG1lbW9yeSBpcyB0aWdodCksIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBhbHNvIGBfdm1fdW5tYXBfYWxpYXNlc2AgKHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHZtX3VubWFwX2FsaWFzZXNgIGFuZCBgdm1fcmVzZXRfcGVybXNgKS4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMsIG9mIGNvdXJzZSwgcGFydCBvZiB0aGUgc2hyaW5rZXIgbWFjaGluZXJ5LlxuXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgY29yZSB2bWFsbG9jIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGF6eSBwdXJnaW5nIGFuZCBub2RlIHNocmlua2luZy4gVGhpcyBzY3JlYW1zIFwiZnV6eiBtZSFcIiBJdCdzIGRlZmluaXRlbHkgaW4gYSBjcml0aWNhbCBhcmVhLlxuXG5IZXJlJ3MgbXkgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIHZtYWxsb2Mgc3Vic3lzdGVtJ3MgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIFRoZSBmaXggcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgYSBkZWFkbG9jayBzY2VuYXJpbyB0aGF0IG9jY3VycyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsLCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIGZ1bmN0aW9ucy4gVGhleSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzLCBhbmQgYWxzbyBieSBtZW1vcnkgcHJlc3N1cmUgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIHNocmlua2VyLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGB2bV91bm1hcF9yYW1gLCBgdnVubWFwYCwgYW5kIGB2bWFwYC5cblxuSSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCdzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgdG8gYmUgc3VyZSwgYHZtX3VubWFwX2FsaWFzZXNgICpkaXJlY3RseSogY2FsbHMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBzbyB0aGF0J3MgYSBzb2xpZCBjaG9pY2UuIGB2bV9tYXBfcmFtYCBhbmQgYHZtX3VubWFwX3JhbWAgYXJlIHVzaW5nIHZtYXAgYmxvY2sgbG9naWMsIHdoaWNoLCBJIGNhbiBzZWUsIGlzIGludm9sdmVkIHdpdGggcHVyZ2luZy4gYHZ1bm1hcGAgYW5kIGB2bWFwYCBhcmUgc2ltcGx5IHRoZSBzdGFuZGFyZCB2bWFwIEFQSXMsIG1ha2luZyB0aGVtIHJlYXNvbmFibGUgdGFyZ2V0cy5cblxuTm93IEknbSByZWFkeSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzU3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDY1NjI2MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgdm1hbGxvYyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdGhlIHZtYXAgbm9kZSBzaHJpbmtlciAoYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmApLiBJdCByZXBsYWNlcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIHdpdGggaW5saW5lIHB1cmdpbmcgdG8gZml4IGEgZGVhZGxvY2sgc2NlbmFyaW8gZHVyaW5nIGRpcmVjdCBtZW1vcnkgcmVjbGFpbS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgdm1hbGxvYy92bWFwIEFQSXMgYW5kIG1lbW9yeSBwcmVzc3VyZSAoc2hyaW5rZXJzKSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgdm1hbGxvYyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdGhlIHZtYXAgbm9kZSBzaHJpbmtlciAoYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmApLiBJdCByZXBsYWNlcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIHdpdGggaW5saW5lIHB1cmdpbmcgdG8gZml4IGEgZGVhZGxvY2sgc2NlbmFyaW8gZHVyaW5nIGRpcmVjdCBtZW1vcnkgcmVjbGFpbS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgdm1hbGxvYy92bWFwIEFQSXMgYW5kIG1lbW9yeSBwcmVzc3VyZSAoc2hyaW5rZXJzKSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDY1ODg5OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzk4NzQ3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDcxMzc4MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzAzOTMyMjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmIzODVlYjJlOTdhYmNjNDE0MDg3NmIyMThkN2E1MzFkYjZmNDg0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDExOjEwOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li40MTQ0MzcwOGQyMmRlIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC0yMzU4LDcgKzIzNTgsNiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRib29sIGZ1bGxfcG9vbF9kZWNheSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcbiBcdHN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbkBAIC0yMzk3LDM2ICsyMzk2LDE3IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXHUwMDNlIDApIHtcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdFx0LyogT25lIGV4dHJhIHdvcmtlciBpcyBwZXIgYSBsYXp5X21heF9wYWdlcygpIGZ1bGwgc2V0IG1pbnVzIG9uZS4gKi9cbi1cdFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XG4tXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcbi1cbi1cdFx0Zm9yX2VhY2hfY3B1KGksIFx1MDAyNnB1cmdlX25vZGVzKSB7XG4tXHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuLVxuLVx0XHRcdGlmIChucl9wdXJnZV9oZWxwZXJzIFx1MDAzZSAwKSB7XG4tXHRcdFx0XHRJTklUX1dPUksoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcbi1cbi1cdFx0XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmtfb24oaSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXG4tXHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XG4tXHRcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuK1x0XHQvKlxuK1x0XHQgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmRcbitcdFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXG4rXHRcdCAqIHZtYXBfcHVyZ2VfbG9jayBjYW4gZGVhZGxvY2sgaWYgdGhlIHdvcmtlciBwb29sIGlzXG4rXHRcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xuK1x0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbitcdFx0ICovXG4gXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuIFx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbi1cbi1cdFx0XHRpZiAodm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XG4tXHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbi1cdFx0XHR9XG4rXHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuK1x0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NTE5LDEwICs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuK1x0LypcbitcdCAqIFRoaXMgc2hyaW5rZXIgaXMgaW52b2tlZCBmcm9tIGRpcmVjdCByZWNsYWltIHBhdGggd2hlcmUgbWVtb3J5XG4rXHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cbitcdCAqIGNhdXNlIGEgcGlsZS11cCBvZiB0YXNrcyBhbGwgd2FpdGluZyBmb3IgdGhlIHNhbWUgbXV0ZXggd2hpbGVcbitcdCAqIHRoZSBsb2NrIGhvbGRlciBtYXkgaXRzZWxmIGJlIGJsb2NrZWQgaW4gZmx1c2hfd29yaygpIHdhaXRpbmcgZm9yXG4rXHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXG4rXHQgKiBhdm9pZCB0aGlzOyBza2lwcGluZyBhIHBvb2wgZGVjYXkgY3ljbGUgaXMgaGFybWxlc3MuXG4rXHQgKi9cbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spKVxuK1x0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4rXG4gXHRmb3JfZWFjaF92bWFwX25vZGUodm4pXG4gXHRcdGRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgdHJ1ZSk7XG4gXG4rXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcdHJldHVybiBTSFJJTktfU1RPUDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDcxMzkwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5MzAxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bWFsbG9jLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcHVyZ2luZyB2aXJ0dWFsIG1lbW9yeSBtYXAgYXJlYXMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBkaXRjaGluZyB0aGUgYXN5bmNocm9ub3VzIGBzY2hlZHVsZV93b3JrYCBhbmQgYGZsdXNoX3dvcmtgIGFwcHJvYWNoIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgb3B0aW5nIHRvIGNhbGwgYHB1cmdlX3ZtYXBfbm9kZWAgaW5saW5lIGZvciBhbGwgbm9kZXMuIFRoYXTigJlzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSB0cmFkZS1vZmYsIGJ1dCB0aGUgcmVhc29uaW5nIGlzIGxpa2VseSBjcml0aWNhbC4gQWxzbywgSSdtIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIHdoZXJlIHRoZXkncmUgcmVwbGFjaW5nIHRoZSBndWFyZGVkIG11dGV4IGFjY2VzcyB3aXRoIGBtdXRleF90cnlsb2NrYC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGFib3V0IGRlYWRsb2NrIHByZXZlbnRpb24sIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZtYWxsb2Mgc3Vic3lzdGVtIGFuZCByZWxhdGVkIGxvY2tpbmcgaXNzdWVzLlxuXG5UaGlzIGlzIGNsZWFybHkgZml4aW5nIGEgZGVhZGxvY2sgY29uZGl0aW9uIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcy4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBteSBpbml0aWFsIGdsYW5jZSwgdGhhdCBpdCdzIGEgKmxvY2tpbmcqIGlzc3VlLCBhbmQgbm90IHNvbWV0aGluZyBtb3JlIGluc2lkaW91cyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbWVtb3J5IGxlYWtzLCBvciBjb3JydXB0aW9uLiBUaGUgdXNlIG9mIExPQ0tERVAgaXMgdGhlIGdpdmVhd2F5LiBJZiB0aGUga2VybmVsJ3MgTE9DS0RFUCBpcyBjYXRjaGluZyBkZWFkbG9ja3MsIHdlIGFyZSBpbiBhIGZhciBiZXR0ZXIgc2l0dWF0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGRhdGEgY29ycnVwdGlvbiB0aGF0IGNhbiBiZSB2ZXJ5IGRpZmZpY3VsdCB0byByZXByb2R1Y2UuXG5cbkkndmUgY2hlY2tlZCwgYW5kIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgYW5kIG5vdCBkYXRhIGNvcnJ1cHRpb24sIGl0IHNlZW1zIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBLQVNBTi9MT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gY2hlY2sgdGhpcyBjb2RlLiBXZSBvbmx5IG5lZWQgdGhlIGRlYWRsb2NrIGRldGVjdGlvbi5cblxuU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGZpeCBmb3IgYSBrbm93biBkZWFkbG9jayBzY2VuYXJpbyBhbmQgdGhhdCdzIHRoZSBpbXBvcnRhbnQgcGFydCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAyLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjExOjIyLjM4NjQ0MzgyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflown7lbn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 10:26:54 +0000 UTC FinishedAt: 2026-08-24 11:11:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "series_id": "aacb4ce3-6c94-4333-8515-5a8bb0be3eb0" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vm_unmap_aliases", "vm_map_ram", "vm_unmap_ram", "vunmap", "vmap" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICAgJiMzNDt2bV9tYXBfcmFtJiMzNDssCiAgICAmIzM0O3ZtX3VubWFwX3JhbSYjMzQ7LAogICAgJiMzNDt2dW5tYXAmIzM0OywKICAgICYjMzQ7dm1hcCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZGVhZGxvY2sgaXNzdWUgaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzIGJ5IHJlbW92aW5nIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCB1c2luZyBgbXV0ZXhfdHJ5bG9ja2AgaW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgc3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YjM4NWViMmU5N2FiY2M0MTQwODc2YjIxOGQ3YTUzMWRiNmY0ODQ5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li40MTQ0MzcwOGQyMmRlIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmNcbkBAIC0yMzU4LDcgJiM0MzsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4gXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG5AQCAtMjM5NywzNiAmIzQzOzIzOTYsMTcgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdGlmIChucl9wdXJnZV9ub2RlcyBcdTAwM2UgMCkge1xuIFx0XHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xuIFxuLVx0XHQvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqL1xuLVx0XHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZ2bWFwX2xhenlfbnIpIC8gbGF6eV9tYXhfcGFnZXMoKTtcbi1cdFx0bnJfcHVyZ2VfaGVscGVycyA9IGNsYW1wKG5yX3B1cmdlX2hlbHBlcnMsIDFVLCBucl9wdXJnZV9ub2RlcykgLSAxO1xuLVxuLVx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbi1cdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKG5yX3B1cmdlX2hlbHBlcnMgXHUwMDNlIDApIHtcbi1cdFx0XHRcdElOSVRfV09SSyhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xuLVxuLVx0XHRcdFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29ya19vbihpLCBcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdGVsc2Vcbi1cdFx0XHRcdFx0c2NoZWR1bGVfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cbi1cdFx0XHRcdG5yX3B1cmdlX2hlbHBlcnMtLTtcbi1cdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jID0gTlVMTDtcbi1cdFx0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFB1cmdlIGFsbCBub2RlcyBpbmxpbmUuICBEbyBub3Qgc2NoZWR1bGVfd29yaygpIGFuZFxuJiM0MztcdFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXG4mIzQzO1x0XHQgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpc1xuJiM0MztcdFx0ICogc3RhcnZlZCAoZS5nLiBhbGwgd29ya2VycyBibG9ja2VkIG9uIHRoaXMgc2FtZSBsb2NrXG4mIzQzO1x0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbiYjNDM7XHRcdCAqL1xuIFx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbiBcdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYykge1xuLVx0XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbiYjNDM7XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuJiM0MztcdFx0XHRucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbiBcdFx0fVxuIFx0fVxuIFxuQEAgLTU1MTksMTAgJiM0Mzs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhpcyBzaHJpbmtlciBpcyBpbnZva2VkIGZyb20gZGlyZWN0IHJlY2xhaW0gcGF0aCB3aGVyZSBtZW1vcnlcbiYjNDM7XHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cbiYjNDM7XHQgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlXG4mIzQzO1x0ICogdGhlIGxvY2sgaG9sZGVyIG1heSBpdHNlbGYgYmUgYmxvY2tlZCBpbiBmbHVzaF93b3JrKCkgd2FpdGluZyBmb3JcbiYjNDM7XHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXG4mIzQzO1x0ICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spKVxuJiM0MztcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuJiM0MztcbiBcdGZvcl9lYWNoX3ZtYXBfbm9kZSh2bilcbiBcdFx0ZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCB0cnVlKTtcbiBcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcdHJldHVybiBTSFJJTktfU1RPUDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICAgJiMzNDt2bV9tYXBfcmFtJiMzNDssCiAgICAmIzM0O3ZtX3VubWFwX3JhbSYjMzQ7LAogICAgJiMzNDt2dW5tYXAmIzM0OywKICAgICYjMzQ7dm1hcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA2YjM4NWViMmU5N2FiY2M0MTQwODc2YjIxOGQ3YTUzMWRiNmY0ODQ5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bWFsbG9jLmMgYi9tbS92bWFsbG9jLmMKaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDQKLS0tIGEvbW0vdm1hbGxvYy5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3ZtYWxsb2MuYwpAQCAtMjM1OCw3ICYjNDM7MjM1OCw2IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWJvb2wgZnVsbF9wb29sX2RlY2F5KQogewogCXVuc2lnbmVkIGxvbmcgbnJfcHVyZ2VkX2FyZWFzID0gMDsKLQl1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVyczsKIAlzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzOwogCXVuc2lnbmVkIGludCBucl9wdXJnZV9ub2RlczsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKQEAgLTIzOTcsMzYgJiM0MzsyMzk2LDE3IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJaWYgKG5yX3B1cmdlX25vZGVzICZndDsgMCkgewogCQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpOwogCi0JCS8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovCi0JCW5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKCZhbXA7dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7Ci0JCW5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTsKLQotCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewotCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07Ci0KLQkJCWlmIChucl9wdXJnZV9oZWxwZXJzICZndDsgMCkgewotCQkJCUlOSVRfV09SSygmYW1wO3ZuLSZndDtwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpOwotCi0JCQkJaWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSkKLQkJCQkJc2NoZWR1bGVfd29ya19vbihpLCAmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQllbHNlCi0JCQkJCXNjaGVkdWxlX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0KLQkJCQlucl9wdXJnZV9oZWxwZXJzLS07Ci0JCQl9IGVsc2UgewotCQkJCXZuLSZndDtwdXJnZV93b3JrLmZ1bmMgPSBOVUxMOwotCQkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7Ci0JCQl9Ci0JCX0KLQomIzQzOwkJLyoKJiM0MzsJCSAqIFB1cmdlIGFsbCBub2RlcyBpbmxpbmUuICBEbyBub3Qgc2NoZWR1bGVfd29yaygpIGFuZAomIzQzOwkJICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nCiYjNDM7CQkgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpcwomIzQzOwkJICogc3RhcnZlZCAoZS5nLiBhbGwgd29ya2VycyBibG9ja2VkIG9uIHRoaXMgc2FtZSBsb2NrCiYjNDM7CQkgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS4KJiM0MzsJCSAqLwogCQlmb3JfZWFjaF9jcHUoaSwgJmFtcDtwdXJnZV9ub2RlcykgewogCQkJdm4gPSAmYW1wO3ZtYXBfbm9kZXNbaV07Ci0KLQkJCWlmICh2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jKSB7Ci0JCQkJZmx1c2hfd29yaygmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKLQkJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7Ci0JCQl9CiYjNDM7CQkJcHVyZ2Vfdm1hcF9ub2RlKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwomIzQzOwkJCW5yX3B1cmdlZF9hcmVhcyAmIzQzOz0gdm4tJmd0O25yX3B1cmdlZDsKIAkJfQogCX0KIApAQCAtNTUxOSwxMCAmIzQzOzU0OTksMjEgQEAgdm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKQogewogCXN0cnVjdCB2bWFwX25vZGUgKnZuOwogCi0JZ3VhcmQobXV0ZXgpKCZhbXA7dm1hcF9wdXJnZV9sb2NrKTsKJiM0MzsJLyoKJiM0MzsJICogVGhpcyBzaHJpbmtlciBpcyBpbnZva2VkIGZyb20gZGlyZWN0IHJlY2xhaW0gcGF0aCB3aGVyZSBtZW1vcnkKJiM0MzsJICogcHJlc3N1cmUgaXMgYWxyZWFkeSBoaWdoLiAgQmxvY2tpbmcgb24gdm1hcF9wdXJnZV9sb2NrIGhlcmUgY2FuCiYjNDM7CSAqIGNhdXNlIGEgcGlsZS11cCBvZiB0YXNrcyBhbGwgd2FpdGluZyBmb3IgdGhlIHNhbWUgbXV0ZXggd2hpbGUKJiM0MzsJICogdGhlIGxvY2sgaG9sZGVyIG1heSBpdHNlbGYgYmUgYmxvY2tlZCBpbiBmbHVzaF93b3JrKCkgd2FpdGluZyBmb3IKJiM0MzsJICogYSB3b3JrZXIgdGhhdCBpcyBzdHVjayBpbiB0aGUgc2FtZSByZWNsYWltIHBhdGguICBVc2UgdHJ5bG9jayB0bwomIzQzOwkgKiBhdm9pZCB0aGlzOyBza2lwcGluZyBhIHBvb2wgZGVjYXkgY3ljbGUgaXMgaGFybWxlc3MuCiYjNDM7CSAqLwomIzQzOwlpZiAoIW11dGV4X3RyeWxvY2soJmFtcDt2bWFwX3B1cmdlX2xvY2spKQomIzQzOwkJcmV0dXJuIFNIUklOS19TVE9QOwomIzQzOwogCWZvcl9lYWNoX3ZtYXBfbm9kZSh2bikKIAkJZGVjYXlfdmFfcG9vbF9ub2RlKHZuLCB0cnVlKTsKIAomIzQzOwltdXRleF91bmxvY2soJmFtcDt2bWFwX3B1cmdlX2xvY2spOwogCXJldHVybiBTSFJJTktfU1RPUDsKIH0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODA1CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL3ZtYWxsb2MuY2AuIEludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSB2bWFsbG9jIGFyZWEgcHVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGV5JiMzOTtyZSByaXBwaW5nIG91dCB0aGUgYHNjaGVkdWxlX3dvcmtgL2BmbHVzaF93b3JrYCBjb21ibyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHJlcGxhY2luZyBpdCB3aXRoIGRpcmVjdCBjYWxscyB0byBgcHVyZ2Vfdm1hcF9ub2RlYC4gVGhleSYjMzk7dmUgYWxzbyBzd2FwcGVkIG91dCBgZ3VhcmQobXV0ZXgpYCBmb3IgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLgoKUmlnaHQgb2ZmIHRoZSBiYXQsIHRoaXMgc2NyZWFtcyAmIzM0O2Z1bmN0aW9uYWwgaW1wYWN0LiYjMzQ7IFRoaXMgaXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IHZtYWxsb2MgYXJlYXMgaGVyZSEgRGVmaW5pdGVseSB3YXJyYW50cyBhIGRlZXAgZGl2ZSBhbmQgZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIHNjcnV0aW5pemUgaGVyZSBhcmUgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4KCkZpcnN0LCBsZXQmIzM5O3MgZXN0YWJsaXNoIHNvbWUgZ3JvdW5kIHRydXRocy4gSXMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIHN0YXRpYz8gQSBxdWljayBjaGVjay4uLiB5ZXAsIGl0JiMzOTtzIGBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBib29sIGZ1bGxfcG9vbF9kZWNheSlgLiBHb29kIHRvIGtub3csIGxpbWl0aW5nIHRoZSBzY29wZSBzb21ld2hhdC4gTm93LCB0aW1lIHRvIGh1bnQgZG93biB0aGUgY2FsbGVycyBvZiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIFRoYXQmIzM5O2xsIHRlbGwgdXMgdGhlIHNwZWNpZmljIGNvbnRleHRzIHdoZXJlIHRoZXNlIGNoYW5nZXMgd2lsbCBoYXZlIGFuIGVmZmVjdC4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0yMzE5PXN0YXRpYyB2b2lkIHB1cmdlX3ZtYXBfbm9kZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTIzNTYtICovXG5tbS92bWFsbG9jLmM6MjM1NzpzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1hbGxvYy5jLTIzNTgtXHRcdGJvb2wgZnVsbF9wb29sX2RlY2F5KVxuLS1cbm1tL3ZtYWxsb2MuYz0yNDIwPXN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZClcbi0tXG5tbS92bWFsbG9jLmMtMjQyNC1cdHB1cmdlX2ZyYWdtZW50ZWRfYmxvY2tzX2FsbGNwdXMoKTtcbm1tL3ZtYWxsb2MuYzoyNDI1Olx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xubW0vdm1hbGxvYy5jLTI0MjYtXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbi0tXG5tbS92bWFsbG9jLmM9MjQyOT1zdGF0aWMgdm9pZCBkcmFpbl92bWFwX2FyZWFfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4tLVxubW0vdm1hbGxvYy5jLTI0MzEtXHRtdXRleF9sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG5tbS92bWFsbG9jLmM6MjQzMjpcdF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkoVUxPTkdfTUFYLCAwLCBmYWxzZSk7XG5tbS92bWFsbG9jLmMtMjQzMy1cdG11dGV4X3VubG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuLS1cbm1tL3ZtYWxsb2MuYz0yOTQ1PXN0YXRpYyB2b2lkIF92bV91bm1hcF9hbGlhc2VzKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgZmx1c2gpXG4tLVxubW0vdm1hbGxvYy5jLTI5OTEtXG5tbS92bWFsbG9jLmM6Mjk5MjpcdGlmICghX19wdXJnZV92bWFwX2FyZWFfbGF6eShzdGFydCwgZW5kLCBmYWxzZSkgXHUwMDI2XHUwMDI2IGZsdXNoKVxubW0vdm1hbGxvYy5jLTI5OTMtXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzgzOAoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGlmZWN5Y2xlIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gSSYjMzk7bSBzZWVpbmcgaXQmIzM5O3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBpdHMgdXNhZ2UuIE5vdywgSSYjMzk7bSBnZXR0aW5nIGN1cmlvdXMgYWJvdXQgYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgIGluIHBhcnRpY3VsYXIg4oCTIGlzIGl0IGEgc3RhdGljIGZ1bmN0aW9uPyBLbm93aW5nIGl0cyBzY29wZSB3aWxsIGhlbHAgaW4gbXkgYW5hbHlzaXMgb2YgaG93IGFuZCB3aGVuIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBpcyBhY3R1YWxseSBpbnZva2VkIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIExldCBtZSBxdWlja2x5IGNoZWNrIGlmIHRoYXTigJlzIHRoZSBjYXNlOyBpdCYjMzk7bGwgcHJvdmlkZSBjcnVjaWFsIGNvbnRleHQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0xMDg2PVJCX0RFQ0xBUkVfQ0FMTEJBQ0tTX01BWChzdGF0aWMsIGZyZWVfdm1hcF9hcmVhX3JiX2F1Z21lbnRfY2IsXG4tLVxubW0vdm1hbGxvYy5jLTEwODgtXG5tbS92bWFsbG9jLmM6MTA4OTpzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpO1xubW0vdm1hbGxvYy5jLTEwOTAtc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XG4tLVxubW0vdm1hbGxvYy5jPTIwNDU9c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTIxNTQtXHRpZiAoIXB1cmdlZCkge1xubW0vdm1hbGxvYy5jOjIxNTU6XHRcdHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMoKTtcbm1tL3ZtYWxsb2MuYy0yMTU2LVx0XHRwdXJnZWQgPSAxO1xuLS1cbm1tL3ZtYWxsb2MuYz0yMzU3PXN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1hbGxvYy5jLTI0MTktICovXG5tbS92bWFsbG9jLmM6MjQyMDpzdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXG5tbS92bWFsbG9jLmMtMjQyMS1cbi0tXG5tbS92bWFsbG9jLmM9NDk2Nz1zdHJ1Y3Qgdm1fc3RydWN0ICoqcGNwdV9nZXRfdm1fYXJlYXMoY29uc3QgdW5zaWduZWQgbG9uZyAqb2Zmc2V0cyxcbi0tXG5tbS92bWFsbG9jLmMtNTE1MS1cdGlmICghcHVyZ2VkKSB7XG5tbS92bWFsbG9jLmM6NTE1MjpcdFx0cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcygpO1xubW0vdm1hbGxvYy5jLTUxNTMtXHRcdHB1cmdlZCA9IHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyB0aGUgVmlydHVhbCBNYXBwaW5nICh2bWFwKSBBcmVhIFJlY2xhbWF0aW9uIFByb2Nlc3MqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB2aXJ0dWFsIG1lbW9yeSBtYXBwaW5nIGFuZCB1bm1hcHBpbmcsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHZtYXAgcmVnaW9uLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAgYW5kIGBwY3B1X2dldF92bV9hcmVhc2AgYm90aCBzZWVtIHRvIHRyaWdnZXIgYSBjYWxsIHRvIGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYC4gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIGEgc2hhcmVkIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBtZW1vcnkgbWFuYWdlbWVudC4KCkkmIzM5O3ZlIG5vdGVkIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgcmVzdHJpY3RlZCB2aXNpYmlsaXR5IGFuZCBhcmUgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdm1hcCBpbmZyYXN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBkb24mIzM5O3QgbmVlZCB0byBiZSBleHBvc2VkIGdsb2JhbGx5LgoKR2l2ZW4gdGhlIGNvbnRleHQsIEkgd2FudCB0byBkcmlsbCBkb3duIG9uIGB2bV91bm1hcF9hbGlhc2VzYCwgYmVjYXVzZSBpdCYjMzk7cyBtZW50aW9uZWQuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgZml0cyBpbnRvIHRoaXMgcmVjbGFtYXRpb24gcHJvY2Vzcy4gSXQmIzM5O3MgcHJvYmFibHkgdGhlIGtleSBzdGVwIHRvIHVubWFwIHRoZSBhcmVhcyB0aGF0IHdlcmUgZnJlZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1fdW5tYXBfYWxpYXNlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjkwMz1zdGF0aWMgdm9pZCB2Yl9mcmVlKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplKVxuLS1cbm1tL3ZtYWxsb2MuYy0yOTQ0LVxubW0vdm1hbGxvYy5jOjI5NDU6c3RhdGljIHZvaWQgX3ZtX3VubWFwX2FsaWFzZXModW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGludCBmbHVzaClcbm1tL3ZtYWxsb2MuYy0yOTQ2LXtcbi0tXG5tbS92bWFsbG9jLmMtMjk5Ny0vKipcbm1tL3ZtYWxsb2MuYzoyOTk4OiAqIHZtX3VubWFwX2FsaWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXJcbm1tL3ZtYWxsb2MuYy0yOTk5LSAqXG4tLVxubW0vdm1hbGxvYy5jLTMwMDUtICpcbm1tL3ZtYWxsb2MuYzozMDA2OiAqIHZtX3VubWFwX2FsaWFzZXMgZmx1c2hlcyBhbGwgc3VjaCBsYXp5IG1hcHBpbmdzLiBBZnRlciBpdCByZXR1cm5zLCB3ZSBjYW5cbm1tL3ZtYWxsb2MuYy0zMDA3LSAqIGJlIHN1cmUgdGhhdCBub25lIG9mIHRoZSBwYWdlcyB3ZSBoYXZlIGNvbnRyb2wgb3ZlciB3aWxsIGhhdmUgYW55IGFsaWFzZXNcbi0tXG5tbS92bWFsbG9jLmMtMzAwOS0gKi9cbm1tL3ZtYWxsb2MuYzozMDEwOnZvaWQgdm1fdW5tYXBfYWxpYXNlcyh2b2lkKVxubW0vdm1hbGxvYy5jLTMwMTEte1xubW0vdm1hbGxvYy5jOjMwMTI6XHRfdm1fdW5tYXBfYWxpYXNlcyhVTE9OR19NQVgsIDAsIDApO1xubW0vdm1hbGxvYy5jLTMwMTMtfVxubW0vdm1hbGxvYy5jOjMwMTQ6RVhQT1JUX1NZTUJPTF9HUEwodm1fdW5tYXBfYWxpYXNlcyk7XG5tbS92bWFsbG9jLmMtMzAxNS1cbi0tXG5tbS92bWFsbG9jLmM9MzM1ND1zdGF0aWMgdm9pZCB2bV9yZXNldF9wZXJtcyhzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMzYyLVx0ICogRmluZCB0aGUgc3RhcnQgYW5kIGVuZCByYW5nZSBvZiB0aGUgZGlyZWN0IG1hcHBpbmdzIHRvIG1ha2Ugc3VyZSB0aGF0XG5tbS92bWFsbG9jLmM6MzM2MzpcdCAqIHRoZSB2bV91bm1hcF9hbGlhc2VzKCkgZmx1c2ggaW5jbHVkZXMgdGhlIGRpcmVjdCBtYXAuXG5tbS92bWFsbG9jLmMtMzM2NC1cdCAqL1xuLS1cbm1tL3ZtYWxsb2MuYy0zMzgzLVx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9pbnZhbGlkX25vZmx1c2gpO1xubW0vdm1hbGxvYy5jOjMzODQ6XHRfdm1fdW5tYXBfYWxpYXNlcyhzdGFydCwgZW5kLCBmbHVzaF9kbWFwKTtcbm1tL3ZtYWxsb2MuYy0zMzg1LVx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2gpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0OTgKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OgoKKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBFeHBvcnRzKioKCkFscmlnaHQsIEkgc2VlIGB2bV91bm1hcF9hbGlhc2VzYCBpcyBleHBvcnRlZC4gVGhhdCYjMzk7cyBhIGtleSBmdW5jdGlvbiBmb3IgdW5tYXBwaW5nIGFsaWFzZWQgdmlydHVhbCBtZW1vcnkgcmVnaW9ucywgYSBjcml0aWNhbCBvcGVyYXRpb24gaW4gYSBzeXN0ZW0gbGlrZSB0aGlzLiBJdCYjMzk7cyBnb29kIHRvIGhhdmUgdGhhdCBhY2Nlc3NpYmxlLCBpbXBsaWVzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEJ1dCwgd2hhdCBhYm91dCB0aGUgY2xlYW51cCBmdW5jdGlvbiwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmA/IElzIGl0IGFsc28gZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZT8gSXRzIHJvbGUgaXMgZXF1YWxseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyB2aXJ0dWFsIG1hcHBpbmcgc3lzdGVtIChgdm1hcGApLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgcHVibGljbHkgYWNjZXNzaWJsZSBmcm9tIHRoZSBvdXRzaWRlLiBJZiBvbmx5IG9uZSBpcyBleHBvcnRlZCB0aGF0IHdvdWxkIHJhaXNlIGZsYWdzLCBJJiMzOTtkIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3QgYW5kIGhvdyBleHRlcm5hbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3ZtYXBfbm9kZV9zaHJpbmtfc2NhbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MjM1Nz1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3ZtYWxsb2MuYy0yNDAzLVx0XHQgKiBzdGFydmVkIChlLmcuIGFsbCB3b3JrZXJzIGJsb2NrZWQgb24gdGhpcyBzYW1lIGxvY2tcbm1tL3ZtYWxsb2MuYzoyNDA0Olx0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbm1tL3ZtYWxsb2MuYy0yNDA1LVx0XHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9NTQ5Nz1zdGF0aWMgdW5zaWduZWQgbG9uZ1xubW0vdm1hbGxvYy5jOjU0OTg6dm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxubW0vdm1hbGxvYy5jLTU0OTkte1xuLS1cbm1tL3ZtYWxsb2MuYz01NTIwPXZvaWQgX19pbml0IHZtYWxsb2NfaW5pdCh2b2lkKVxuLS1cbm1tL3ZtYWxsb2MuYy01NTc3LVx0dm1hcF9ub2RlX3Nocmlua2VyLVx1MDAzZWNvdW50X29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX2NvdW50O1xubW0vdm1hbGxvYy5jOjU1Nzg6XHR2bWFwX25vZGVfc2hyaW5rZXItXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xubW0vdm1hbGxvYy5jLTU1NzktXHRzaHJpbmtlcl9yZWdpc3Rlcih2bWFwX25vZGVfc2hyaW5rZXIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2MDQ1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKgoKUmlnaHQsIHNvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzIHJlZ2lzdGVyZWQgYXMgYSBzaHJpbmtlciwgbWVhbmluZyBpdCYjMzk7cyBpbnZvbHZlZCBpbiBtZW1vcnkgcmVjbGFtYXRpb24uIEludGVyZXN0aW5nLiBUaGlzIHBhdGNoIHRhcmdldHMgYSBkZWFkbG9jayBiZXR3ZWVuIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIGRlYWRsb2NrcyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgdGhhdCYjMzk7cyBhIGJpZyByZWQgZmxhZyDigJMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGZ1enppbmcgYXR0ZW50aW9uLgoKVGhpbmtpbmcgYWJvdXQgZm9jdXMgcG9pbnRzLCBgdm1fdW5tYXBfYWxpYXNlc2AganVtcHMgb3V0LCBzaW5jZSBpdCBjYWxscyBgX3ZtX3VubWFwX2FsaWFzZXNgLCB3aGljaCB0aGVuIGdvZXMgb24gdG8gY2FsbCBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAuIFRoYXQmIzM5O3MgYSBkaXJlY3QgcGF0aC4gQWx0ZXJuYXRpdmVseSwgbG9va2luZyBhdCBgdm1hbGxvY2AsIGB2ZnJlZWAsIGB2dW5tYXBgLCBhbmQgYHZtYXBgIG1pZ2h0IHJldmVhbCBpbnRlcmFjdGlvbnMgdGhhdCBpbmRpcmVjdGx5IHRyaWdnZXIgdGhlIGlzc3VlLiBXZSBzaG91bGQgdGFyZ2V0IGFsbCB0aGUgY3JpdGljYWwgdmlydHVhbCBtZW1vcnkgcHJpbWl0aXZlcy4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGljaCBmdW5jdGlvbnMgYWN0dWFsbHkgY2FsbCBgYWxsb2Nfdm1hcF9hcmVhYC4gVGhhdCBjb3VsZCBwcm92aWRlIGNsdWVzIHRvIHRoZSByb290IGNhdXNlLiBUaGlzIGluZm9ybWF0aW9uIHdpbGwgaGVscCBuYXJyb3cgZG93biB0aGUgYXR0YWNrIHN1cmZhY2UgYW5kIGluZm9ybSBhIG1vcmUgZm9jdXNlZCBmdXp6aW5nIHN0cmF0ZWd5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY192bWFwX2FyZWEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTE3MjQ9dmFfY2xpcChzdHJ1Y3QgcmJfcm9vdCAqcm9vdCwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCxcbi0tXG5tbS92bWFsbG9jLmMtMTc4Mi1cdFx0XHQgKiBhbGxvY2F0aW9ucywgaWYgXCYjMzQ7dGhpc1wmIzM0OyBjdXJyZW50IENQVSB3YXMgbm90IHByZWxvYWRlZC5cbm1tL3ZtYWxsb2MuYzoxNzgzOlx0XHRcdCAqIFNlZSB0aGUgY29tbWVudCBpbiBhbGxvY192bWFwX2FyZWEoKSB3aHkuIElmIHNvLCB0aGVuXG5tbS92bWFsbG9jLmMtMTc4NC1cdFx0XHQgKiBHRlBfTk9XQUlUIGlzIHVzZWQgaW5zdGVhZCB0byBnZXQgYW4gZXh0cmEgb2JqZWN0IGZvclxuLS1cbm1tL3ZtYWxsb2MuYy0xNzkxLVx0XHRcdCAqIHRyaWdnZXJlZCB0byByZXBlYXQgb25lIG1vcmUgdGltZS4gU2VlIG1vcmUgZGV0YWlsc1xubW0vdm1hbGxvYy5jOjE3OTI6XHRcdFx0ICogaW4gYWxsb2Nfdm1hcF9hcmVhKCkgZnVuY3Rpb24uXG5tbS92bWFsbG9jLmMtMTc5My1cdFx0XHQgKi9cbi0tXG5tbS92bWFsbG9jLmM9MTg1NT1zdGF0aWMgX19hbHdheXNfaW5saW5lIHVuc2lnbmVkIGxvbmdcbm1tL3ZtYWxsb2MuYzoxODU2Ol9fYWxsb2Nfdm1hcF9hcmVhKHN0cnVjdCByYl9yb290ICpyb290LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkLFxubW0vdm1hbGxvYy5jLTE4NTctXHR1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTE4OTAtLypcbm1tL3ZtYWxsb2MuYzoxODkxOiAqIEZyZWUgYSByZWdpb24gb2YgS1ZBIGFsbG9jYXRlZCBieSBhbGxvY192bWFwX2FyZWFcbm1tL3ZtYWxsb2MuYy0xODkyLSAqL1xuLS1cbm1tL3ZtYWxsb2MuYz0yMDMxPXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF92bWFsbG9jX3ZtKHN0cnVjdCB2bV9zdHJ1Y3QgKnZtLFxuLS1cbm1tL3ZtYWxsb2MuYy0yMDQ0LSAqL1xubW0vdm1hbGxvYy5jOjIwNDU6c3RhdGljIHN0cnVjdCB2bWFwX2FyZWEgKmFsbG9jX3ZtYXBfYXJlYSh1bnNpZ25lZCBsb25nIHNpemUsXG5tbS92bWFsbG9jLmMtMjA0Ni1cdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWxpZ24sXG4tLVxubW0vdm1hbGxvYy5jLTIwOTQtXHRcdHByZWxvYWRfdGhpc19jcHVfbG9jayhcdTAwMjZmcmVlX3ZtYXBfYXJlYV9sb2NrLCBnZnBfbWFzaywgbm9kZSk7XG5tbS92bWFsbG9jLmM6MjA5NTpcdFx0YWRkciA9IF9fYWxsb2Nfdm1hcF9hcmVhKFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsIFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xpc3QsXG5tbS92bWFsbG9jLmMtMjA5Ni1cdFx0XHRzaXplLCBhbGlnbiwgdnN0YXJ0LCB2ZW5kKTtcbi0tXG5tbS92bWFsbG9jLmMtMjEwNi1cbm1tL3ZtYWxsb2MuYzoyMTA3Olx0dHJhY2VfYWxsb2Nfdm1hcF9hcmVhKGFkZHIsIHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQsIElTX0VSUl9WQUxVRShhZGRyKSk7XG5tbS92bWFsbG9jLmMtMjEwOC1cbi0tXG5tbS92bWFsbG9jLmM9MjY5OT1zdGF0aWMgdm9pZCAqbmV3X3ZtYXBfYmxvY2sodW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bWFsbG9jLmMtMjcxNC1cbm1tL3ZtYWxsb2MuYzoyNzE1Olx0dmEgPSBhbGxvY192bWFwX2FyZWEoVk1BUF9CTE9DS19TSVpFLCBWTUFQX0JMT0NLX1NJWkUsXG5tbS92bWFsbG9jLmMtMjcxNi1cdFx0XHRcdFx0Vk1BTExPQ19TVEFSVCwgVk1BTExPQ19FTkQsXG4tLVxubW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxuLS1cbm1tL3ZtYWxsb2MuYy0zMDc2LVx0XHRzdHJ1Y3Qgdm1hcF9hcmVhICp2YTtcbm1tL3ZtYWxsb2MuYzozMDc3Olx0XHR2YSA9IGFsbG9jX3ZtYXBfYXJlYShzaXplLCBQQUdFX1NJWkUsXG5tbS92bWFsbG9jLmMtMzA3OC1cdFx0XHRcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxuLS1cbm1tL3ZtYWxsb2MuYz0zMTk5PXN0cnVjdCB2bV9zdHJ1Y3QgKl9fZ2V0X3ZtX2FyZWFfbm9kZSh1bnNpZ25lZCBsb25nIHNpemUsXG4tLVxubW0vdm1hbGxvYy5jLTMyMjctXG5tbS92bWFsbG9jLmM6MzIyODpcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzaywgMCwgYXJlYSk7XG5tbS92bWFsbG9jLmMtMzIyOS1cdGlmIChJU19FUlIodmEpKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc0MjMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0OTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgVm1hcCBBcmVhIERlYWRsb2NrIFZ1bG5lcmFiaWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYGFsbG9jX3ZtYXBfYXJlYWAgc2VlbXMgdG8gYmUgYXQgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGFuZCBpdCYjMzk7cyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoOiBgbmV3X3ZtYXBfYmxvY2tgLCBgdm1fbWFwX3JhbWAsIGFuZCBgX19nZXRfdm1fYXJlYV9ub2RlYC4gTm93LCBgX19nZXRfdm1fYXJlYV9ub2RlYCBicmFuY2hlcyBvdXQgdG8gdGhpbmdzIGxpa2UgYGdldF92bV9hcmVhYCwgYGdldF92bV9hcmVhX2NhbGxlcmAsIGFuZCBgX192bWFsbG9jX25vZGVfcmFuZ2VgLiBUaGF0IG1ha2VzIGB2bWFsbG9jYCwgYHZmcmVlYCwgYHZtX21hcF9yYW1gLCBhbmQgYHZtX3VubWFwX3JhbWAgcHJpbWUgdGFyZ2V0cyBmb3IgaW52ZXN0aWdhdGlvbi4KCkJ1dCB3YWl0LCB0aGlzIGlzIGludGVyZXN0aW5nLiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgY2FsbGVkIGJ5IGByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzYCwgd2hpY2ggaXMgKmFsc28qIGNhbGxlZCBieSBgYWxsb2Nfdm1hcF9hcmVhYCBpdHNlbGYhIFNvIGFueSBhbGxvY2F0aW9uIHZpYSBgdm1hbGxvY2AgaGFzIHRoZSBwb3RlbnRpYWwgdG8gdHJpZ2dlciB0aGlzIHJlY2xhbWF0aW9uIHBhdGguIEFuZCwgYWRkaW5nIHRvIHRoZSBjb21wbGV4aXR5LCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgc2hyaW5rZXIsIGlzIGFsc28gaW4gdGhlIG1peC4gTWVtb3J5IHByZXNzdXJlIGNhbiBhbHNvIHRyaWdnZXIgaXQsIHJpZ2h0PwoKU28sIHRvIGtlZXAgaXQgc2ltcGxlLCBJJiMzOTtsbCBmb2N1cyBvbiBgdm1hbGxvY2AsIGB2ZnJlZWAsIGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBhbmQgYHZtX3VubWFwX3JhbWAuIEFoLCB5ZXMsIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzIGEgc2hyaW5rZXIsIHNvIGl0JiMzOTtzIHRyaWdnZXJlZCBieSBtZW1vcnkgcHJlc3N1cmUuIFRoaXMgcGF0Y2ggaXMgbWVhbnQgdG8gZml4IGEgZGVhZGxvY2sgYmV0d2VlbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYCBhbmQgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLgoKVGhlcmVmb3JlLCB0aGUgbW9zdCBlZmZlY3RpdmUgZnV6emluZyB0YXJnZXRzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFsbG9jYCwgYHZmcmVlYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9ucyBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuIEdvb2QsIGBtbS92bWFsbG9jLmNgIGlzIGFsd2F5cyBjb21waWxlZC4gTm90aGluZyBzcGVjaWFsIHRvIGtlZXAgaW4gbWluZCB0aGVyZS4KCk9rYXksIGxldCYjMzk7cyBzb2xpZGlmeSB0aGUgZm9jdXMgc3ltYm9scyBmb3IgZnV6emluZzoKCiogICBgdm1hbGxvY2AKKiAgIGB2ZnJlZWAKKiAgIGB2bV91bm1hcF9hbGlhc2VzYAoqICAgYHZtX21hcF9yYW1gCiogICBgdm1fdW5tYXBfcmFtYAoKSSBzZWUgYHZtYWxsb2NgIGlzIGEgZnJlcXVlbnRseSB1c2VkIHBhdGggYnV0IGdvb2QgYXMgYW4gZW50cnkgZm9yIHRoZSB2bWFsbG9jIGNvZGUuIE1heWJlIGB2bV91bm1hcF9hbGlhc2VzYCBpcyBhIGJldHRlciB0YXJnZXQsIGFzIGl0JiMzOTtzIGxlc3MgY29tbW9uIGFuZCBkaXJlY3RseSBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHdoaWNoIGlzIHRoZSBvbmUgd2UgYXJlIGNvbmNlcm5lZCB3aXRoLiBHb29kLCBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgZXhwb3J0ZWQuIExldCYjMzk7cyBzZWUgaWYgYHZtX21hcF9yYW1gIGFuZCBgdm1fdW5tYXBfcmFtYCBhcmUgYWxzbyBleHBvcnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdm1fbWFwX3JhbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bWFsbG9jLmM9MzA2ND12b2lkICp2bV9tYXBfcmFtKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCwgaW50IG5vZGUpXG4tLVxubW0vdm1hbGxvYy5jLTMxMDItfVxubW0vdm1hbGxvYy5jOjMxMDM6RVhQT1JUX1NZTUJPTCh2bV9tYXBfcmFtKTtcbm1tL3ZtYWxsb2MuYy0zMTA0LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NjYzCgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uZmlybWluZyBhIEtleSBGdW5jdGlvbiYjMzk7cyBBdmFpbGFiaWxpdHkqKgoKQWxyaWdodCwgc28gdGhlIGltbWVkaWF0ZSBjb25maXJtYXRpb24gaXMgdGhhdCBgdm1fbWFwX3JhbWAgKmlzKiBpbmRlZWQgZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCwgYXMgaXQgbWVhbnMgSSBjYW4gcHJvY2VlZCB1bmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IHRoaXMgY3J1Y2lhbCBmdW5jdGlvbiBpcyBhY2Nlc3NpYmxlIGFuZCBhdmFpbGFibGUgZm9yIHVzZSB3aXRoaW4gdGhlIGNvbnRleHQgSSYjMzk7bSBjdXJyZW50bHkgd29ya2luZyBpbi4gVGhpcyBhbGxvd3MgbWUgdG8gbGV2ZXJhZ2UgaXRzIGZ1bmN0aW9uYWxpdHkgd2l0aG91dCBhbnkgZnVydGhlciBpbnZlc3RpZ2F0aW9uIG9yIHdvcmthcm91bmQgZm9yIGl0cyBwcmVzZW5jZSwgd2hpY2gsIGluIHR1cm4sIGFsbG93cyBtZSB0byBzdHJlYW1saW5lIHRoZSBvbmdvaW5nIHRhc2sgYXQgaGFuZC4gSXQgcmVtb3ZlcyBhIHBvdGVudGlhbCByb2FkYmxvY2sgYW5kIGNvbmZpcm1zIHRoYXQgdGhlIGNvcmUgZnVuY3Rpb24gaXMgYXZhaWxhYmxlIGZvciB1dGlsaXphdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qdm1fdW5tYXBfcmFtJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3ZtYWxsb2MuYz0zMDIxPXZvaWQgdm1fdW5tYXBfcmFtKGNvbnN0IHZvaWQgKm1lbSwgdW5zaWduZWQgaW50IGNvdW50KVxuLS1cbm1tL3ZtYWxsb2MuYy0zMDQ3LX1cbm1tL3ZtYWxsb2MuYzozMDQ4OkVYUE9SVF9TWU1CT0wodm1fdW5tYXBfcmFtKTtcbm1tL3ZtYWxsb2MuYy0zMDQ5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTI5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTWVtb3J5IE1hcHBpbmcgRGVlcCBEaXZlKioKClJpZ2h0LCBzbyBgdm1fdW5tYXBfcmFtYCBpcyBkZWZpbml0ZWx5IGV4cG9ydGVkIGFuZCBhdmFpbGFibGUuIFRoYXQgbXVjaCBpcyBjbGVhci4gQnV0IG5vdyB0aGUgcXVlc3Rpb24gdGhhdCYjMzk7cyBuYWdnaW5nIGF0IHRoZSBiYWNrIG9mIG15IG1pbmQgaXM6IHdoYXQmIzM5O3MgdGhlIGRlYWwgd2l0aCBgdnVubWFwYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVubWFwIHJvdXRpbmUgdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUgc2FtZSBvciBpZiB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byByb3V0aW5lcyByZWxhdGUsIGlmIGF0IGFsbC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgZXNwZWNpYWxseSBpbiBjb250ZXh0IG9mIHRoZSBzcGVjaWZpYyBwbGF0Zm9ybSBJJiMzOTttIHdvcmtpbmcgd2l0aC4gVGhlIGtleSBpcyBpbiB1bmRlcnN0YW5kaW5nIHdoZXRoZXIgaXQmIzM5O3MgdGhlIHNhbWUgdW5tYXAgZnVuY3Rpb24gYmVpbmcgY29uc2lkZXJlZCBvciBub3QuIEkmIzM5O3ZlIGdvdCB0byBxdWlja2x5IHNlZSBpZiB0aGV5IGFyZSBzZXBhcmF0ZSBvciBmdW5jdGlvbmFsbHkgaWRlbnRpY2FsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MLip2dW5tYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTM1MDU9dm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcbi0tXG5tbS92bWFsbG9jLmMtMzUyMS19XG5tbS92bWFsbG9jLmM6MzUyMjpFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XG5tbS92bWFsbG9jLmMtMzUyMy1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIzOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipDaGVja2luZyB0aGUgYHZtYXBgIEF2YWlsYWJpbGl0eSoqCgpSaWdodCwgc28gYHZ1bm1hcGAgaXMgZGVmaW5pdGVseSBleHBvcnRlZCwgSSYjMzk7dmUgZ290IHRoYXQgY29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgdm1hcGA/IElzIHRoYXQgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UgYXMgd2VsbD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciBJIGhhdmUgYWNjZXNzIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSB0b28sIHNpbmNlIGl0IGlzIGxpa2VseSBuZWVkZWQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VYUE9SVF9TWU1CT0wuKnZtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bWFsbG9jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1hbGxvYy5jPTIxNzc9aW50IHJlZ2lzdGVyX3ZtYXBfcHVyZ2Vfbm90aWZpZXIoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYilcbi0tXG5tbS92bWFsbG9jLmMtMjE4MC19XG5tbS92bWFsbG9jLmM6MjE4MTpFWFBPUlRfU1lNQk9MX0dQTChyZWdpc3Rlcl92bWFwX3B1cmdlX25vdGlmaWVyKTtcbm1tL3ZtYWxsb2MuYy0yMTgyLVxubW0vdm1hbGxvYy5jPTIxODM9aW50IHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxuLS1cbm1tL3ZtYWxsb2MuYy0yMTg2LX1cbm1tL3ZtYWxsb2MuYzoyMTg3OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XG5tbS92bWFsbG9jLmMtMjE4OC1cbi0tXG5tbS92bWFsbG9jLmM9MzUzOT12b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcbi0tXG5tbS92bWFsbG9jLmMtMzU3OC19XG5tbS92bWFsbG9jLmM6MzU3OTpFWFBPUlRfU1lNQk9MKHZtYXApO1xubW0vdm1hbGxvYy5jLTM1ODAtXG4tLVxubW0vdm1hbGxvYy5jPTM2MTM9dm9pZCAqdm1hcF9wZm4odW5zaWduZWQgbG9uZyAqcGZucywgdW5zaWduZWQgaW50IGNvdW50LCBwZ3Byb3RfdCBwcm90KVxuLS1cbm1tL3ZtYWxsb2MuYy0zNjMyLX1cbm1tL3ZtYWxsb2MuYzozNjMzOkVYUE9SVF9TWU1CT0xfR1BMKHZtYXBfcGZuKTtcbm1tL3ZtYWxsb2MuYy0zNjM0LSNlbmRpZiAvKiBDT05GSUdfVk1BUF9QRk4gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc1NwoJCQkJCQkJb3V0cHV0OiAxNTkKCQkJCQkJCXRob3VnaHRzOiA1NDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUGF0Y2gmIzM5O3MgVnVsbmVyYWJpbGl0eSBhbmQgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gYHZtYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGdvb2Qgc3RhcnQuIFRoaW5raW5nIHRocm91Z2ggcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlc2U6IGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBgdm1fdW5tYXBfcmFtYCwgYHZ1bm1hcGAsIGFuZCBgdm1hcGAuIFdoaWxlIGB2bWFsbG9jYCBhbmQgYHZmcmVlYCBhcmUgY29tbW9uLCB0aGV5IG1pZ2h0IGRvbWluYXRlIHRoZSBkaXN0cmlidXRpb24sIGFuZCB0aGVzZSBvdGhlciBzeW1ib2xzIGFyZSBkaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgY29yZSBsb2dpYyBhZmZlY3RlZCBieSB0aGUgcGF0Y2guIEkmIzM5O20gY2hvb3NpbmcgdG8gb21pdCBgdm1hbGxvY2AgYW5kIGB2ZnJlZWAgYXQgdGhpcyBzdGFnZSwgYXMgdGhleSBkb24mIzM5O3QgZ2l2ZSBpbnNpZ2h0IHRvIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC4KClRoZSBwYXRjaCBpdHNlbGYgZGlncyBpbnRvIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIEl0IGxvb2tzIGxpa2UgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGNhbGxlZCBmcm9tIGEgZmV3IHBsYWNlczogYHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXNgICh0cmlnZ2VyZWQgYnkgYGFsbG9jX3ZtYXBfYXJlYWAgd2hlbiBtZW1vcnkgaXMgdGlnaHQpLCBgZHJhaW5fdm1hcF9hcmVhX3dvcmtgLCBhbmQgYWxzbyBgX3ZtX3VubWFwX2FsaWFzZXNgICh3aGljaCBpdHNlbGYgaXMgY2FsbGVkIGJ5IGB2bV91bm1hcF9hbGlhc2VzYCBhbmQgYHZtX3Jlc2V0X3Blcm1zYCkuIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIGlzLCBvZiBjb3Vyc2UsIHBhcnQgb2YgdGhlIHNocmlua2VyIG1hY2hpbmVyeS4KClRoZXJlZm9yZSwgdGhlIGNoYW5nZXMgY2VudGVyIG9uIHRoZSBjb3JlIHZtYWxsb2MgY29kZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsYXp5IHB1cmdpbmcgYW5kIG5vZGUgc2hyaW5raW5nLiBUaGlzIHNjcmVhbXMgJiMzNDtmdXp6IG1lISYjMzQ7IEl0JiMzOTtzIGRlZmluaXRlbHkgaW4gYSBjcml0aWNhbCBhcmVhLgoKSGVyZSYjMzk7cyBteSByYXRpb25hbGU6IHRoZSBwYXRjaCBmdW5kYW1lbnRhbGx5IGFsdGVycyB0aGUgdm1hbGxvYyBzdWJzeXN0ZW0mIzM5O3MgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIFRoZSBmaXggcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgYSBkZWFkbG9jayBzY2VuYXJpbyB0aGF0IG9jY3VycyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsLCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIGZ1bmN0aW9ucy4gVGhleSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzLCBhbmQgYWxzbyBieSBtZW1vcnkgcHJlc3N1cmUgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIHNocmlua2VyLgoKTXkgZm9jdXMgc3ltYm9scyBhcmU6IGB2bV91bm1hcF9hbGlhc2VzYCwgYHZtX21hcF9yYW1gLCBgdm1fdW5tYXBfcmFtYCwgYHZ1bm1hcGAsIGFuZCBgdm1hcGAuCgpJIGRvbiYjMzk7dCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCYjMzk7cyBjb3JlIGtlcm5lbCBmdW5jdGlvbmFsaXR5LgoKSnVzdCB0byBiZSBzdXJlLCBgdm1fdW5tYXBfYWxpYXNlc2AgKmRpcmVjdGx5KiBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHNvIHRoYXQmIzM5O3MgYSBzb2xpZCBjaG9pY2UuIGB2bV9tYXBfcmFtYCBhbmQgYHZtX3VubWFwX3JhbWAgYXJlIHVzaW5nIHZtYXAgYmxvY2sgbG9naWMsIHdoaWNoLCBJIGNhbiBzZWUsIGlzIGludm9sdmVkIHdpdGggcHVyZ2luZy4gYHZ1bm1hcGAgYW5kIGB2bWFwYCBhcmUgc2ltcGx5IHRoZSBzdGFuZGFyZCB2bWFwIEFQSXMsIG1ha2luZyB0aGVtIHJlYXNvbmFibGUgdGFyZ2V0cy4KCk5vdyBJJiMzOTttIHJlYWR5IHRvIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV91bm1hcF9hbGlhc2VzJiMzNDssCiAgICAmIzM0O3ZtX21hcF9yYW0mIzM0OywKICAgICYjMzQ7dm1fdW5tYXBfcmFtJiMzNDssCiAgICAmIzM0O3Z1bm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZtYWxsb2Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgKGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCkgYW5kIHRoZSB2bWFwIG5vZGUgc2hyaW5rZXIgKGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gKS4gSXQgcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nIHRvIGZpeCBhIGRlYWRsb2NrIHNjZW5hcmlvIGR1cmluZyBkaXJlY3QgbWVtb3J5IHJlY2xhaW0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzIGFuZCBtZW1vcnkgcHJlc3N1cmUgKHNocmlua2VycyksIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV91bm1hcF9hbGlhc2VzJiMzNDssCiAgICAmIzM0O3ZtX21hcF9yYW0mIzM0OywKICAgICYjMzQ7dm1fdW5tYXBfcmFtJiMzNDssCiAgICAmIzM0O3Z1bm1hcCYjMzQ7LAogICAgJiMzNDt2bWFwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIHZtYWxsb2Mgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGxhenkgdm1hcCBhcmVhIHB1cmdpbmcgKGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCkgYW5kIHRoZSB2bWFwIG5vZGUgc2hyaW5rZXIgKGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gKS4gSXQgcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nIHRvIGZpeCBhIGRlYWRsb2NrIHNjZW5hcmlvIGR1cmluZyBkaXJlY3QgbWVtb3J5IHJlY2xhaW0uIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzIGFuZCBtZW1vcnkgcHJlc3N1cmUgKHNocmlua2VycyksIG1ha2luZyB0aGVtIGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZXNvbHZlcyBhIGRlYWRsb2NrIGlzc3VlIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcyBieSByZW1vdmluZyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgdXNpbmcgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmIzODVlYjJlOTdhYmNjNDE0MDg3NmIyMThkN2E1MzFkYjZmNDg0OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDExOjEwOjA3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jCmluZGV4IGJlYTlmNzZlZDdlNzQuLjQxNDQzNzA4ZDIyZGUgMTAwNjQ0Ci0tLSBhL21tL3ZtYWxsb2MuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bWFsbG9jLmMKQEAgLTIzNTgsNyAmIzQzOzIzNTgsNiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCQlib29sIGZ1bGxfcG9vbF9kZWNheSkKIHsKIAl1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7Ci0JdW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7CiAJc3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2RlczsKIAl1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7CiAJc3RydWN0IHZtYXBfbm9kZSAqdm47CkBAIC0yMzk3LDM2ICYjNDM7MjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLAogCWlmIChucl9wdXJnZV9ub2RlcyAmZ3Q7IDApIHsKIAkJZmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTsKIAotCQkvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqLwotCQlucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZCgmYW1wO3ZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpOwotCQlucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7Ci0KLQkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKLQkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwotCi0JCQlpZiAobnJfcHVyZ2VfaGVscGVycyAmZ3Q7IDApIHsKLQkJCQlJTklUX1dPUksoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTsKLQotCQkJCWlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpCi0JCQkJCXNjaGVkdWxlX3dvcmtfb24oaSwgJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJZWxzZQotCQkJCQlzY2hlZHVsZV93b3JrKCZhbXA7dm4tJmd0O3B1cmdlX3dvcmspOwotCi0JCQkJbnJfcHVyZ2VfaGVscGVycy0tOwotCQkJfSBlbHNlIHsKLQkJCQl2bi0mZ3Q7cHVyZ2Vfd29yay5mdW5jID0gTlVMTDsKLQkJCQlwdXJnZV92bWFwX25vZGUoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwotCQkJfQotCQl9Ci0KJiM0MzsJCS8qCiYjNDM7CQkgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmQKJiM0MzsJCSAqIGZsdXNoX3dvcmsoKSBoZXJlOiBmbHVzaF93b3JrKCkgd2hpbGUgaG9sZGluZwomIzQzOwkJICogdm1hcF9wdXJnZV9sb2NrIGNhbiBkZWFkbG9jayBpZiB0aGUgd29ya2VyIHBvb2wgaXMKJiM0MzsJCSAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9jawomIzQzOwkJICogaW4gdGhlIGRpcmVjdCByZWNsYWltIHBhdGggdmlhIHZtYXBfbm9kZV9zaHJpbmtfc2NhbikuCiYjNDM7CQkgKi8KIAkJZm9yX2VhY2hfY3B1KGksICZhbXA7cHVyZ2Vfbm9kZXMpIHsKIAkJCXZuID0gJmFtcDt2bWFwX25vZGVzW2ldOwotCi0JCQlpZiAodm4tJmd0O3B1cmdlX3dvcmsuZnVuYykgewotCQkJCWZsdXNoX3dvcmsoJmFtcDt2bi0mZ3Q7cHVyZ2Vfd29yayk7Ci0JCQkJbnJfcHVyZ2VkX2FyZWFzICYjNDM7PSB2bi0mZ3Q7bnJfcHVyZ2VkOwotCQkJfQomIzQzOwkJCXB1cmdlX3ZtYXBfbm9kZSgmYW1wO3ZuLSZndDtwdXJnZV93b3JrKTsKJiM0MzsJCQlucl9wdXJnZWRfYXJlYXMgJiM0Mzs9IHZuLSZndDtucl9wdXJnZWQ7CiAJCX0KIAl9CiAKQEAgLTU1MTksMTAgJiM0Mzs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYykKIHsKIAlzdHJ1Y3Qgdm1hcF9ub2RlICp2bjsKIAotCWd1YXJkKG11dGV4KSgmYW1wO3ZtYXBfcHVyZ2VfbG9jayk7CiYjNDM7CS8qCiYjNDM7CSAqIFRoaXMgc2hyaW5rZXIgaXMgaW52b2tlZCBmcm9tIGRpcmVjdCByZWNsYWltIHBhdGggd2hlcmUgbWVtb3J5CiYjNDM7CSAqIHByZXNzdXJlIGlzIGFscmVhZHkgaGlnaC4gIEJsb2NraW5nIG9uIHZtYXBfcHVyZ2VfbG9jayBoZXJlIGNhbgomIzQzOwkgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlCiYjNDM7CSAqIHRoZSBsb2NrIGhvbGRlciBtYXkgaXRzZWxmIGJlIGJsb2NrZWQgaW4gZmx1c2hfd29yaygpIHdhaXRpbmcgZm9yCiYjNDM7CSAqIGEgd29ya2VyIHRoYXQgaXMgc3R1Y2sgaW4gdGhlIHNhbWUgcmVjbGFpbSBwYXRoLiAgVXNlIHRyeWxvY2sgdG8KJiM0MzsJICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtdXRleF90cnlsb2NrKCZhbXA7dm1hcF9wdXJnZV9sb2NrKSkKJiM0MzsJCXJldHVybiBTSFJJTktfU1RPUDsKJiM0MzsKIAlmb3JfZWFjaF92bWFwX25vZGUodm4pCiAJCWRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgdHJ1ZSk7CiAKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7dm1hcF9wdXJnZV9sb2NrKTsKIAlyZXR1cm4gU0hSSU5LX1NUT1A7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4MDIKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogMjA5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1hbGxvYy5jYCwgc3BlY2lmaWNhbGx5LiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHB1cmdpbmcgdmlydHVhbCBtZW1vcnkgbWFwIGFyZWFzLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBhc3luY2hyb25vdXMgYHNjaGVkdWxlX3dvcmtgIGFuZCBgZmx1c2hfd29ya2AgYXBwcm9hY2ggaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBvcHRpbmcgdG8gY2FsbCBgcHVyZ2Vfdm1hcF9ub2RlYCBpbmxpbmUgZm9yIGFsbCBub2Rlcy4gVGhhdOKAmXMgaW50ZXJlc3RpbmcsIGFuZCBwb3RlbnRpYWxseSBhIHBlcmZvcm1hbmNlIHRyYWRlLW9mZiwgYnV0IHRoZSByZWFzb25pbmcgaXMgbGlrZWx5IGNyaXRpY2FsLiBBbHNvLCBJJiMzOTttIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIHdoZXJlIHRoZXkmIzM5O3JlIHJlcGxhY2luZyB0aGUgZ3VhcmRlZCBtdXRleCBhY2Nlc3Mgd2l0aCBgbXV0ZXhfdHJ5bG9ja2AuIFRoaXMgaXMgYWxtb3N0IGNlcnRhaW5seSBhYm91dCBkZWFkbG9jayBwcmV2ZW50aW9uLCBiYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSB2bWFsbG9jIHN1YnN5c3RlbSBhbmQgcmVsYXRlZCBsb2NraW5nIGlzc3Vlcy4KClRoaXMgaXMgY2xlYXJseSBmaXhpbmcgYSBkZWFkbG9jayBjb25kaXRpb24gaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzLiBUaGUgZ29vZCBuZXdzIGlzLCBmcm9tIG15IGluaXRpYWwgZ2xhbmNlLCB0aGF0IGl0JiMzOTtzIGEgKmxvY2tpbmcqIGlzc3VlLCBhbmQgbm90IHNvbWV0aGluZyBtb3JlIGluc2lkaW91cyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbWVtb3J5IGxlYWtzLCBvciBjb3JydXB0aW9uLiBUaGUgdXNlIG9mIExPQ0tERVAgaXMgdGhlIGdpdmVhd2F5LiBJZiB0aGUga2VybmVsJiMzOTtzIExPQ0tERVAgaXMgY2F0Y2hpbmcgZGVhZGxvY2tzLCB3ZSBhcmUgaW4gYSBmYXIgYmV0dGVyIHNpdHVhdGlvbiB0aGFuIHRyeWluZyB0byBkZWJ1ZyBkYXRhIGNvcnJ1cHRpb24gdGhhdCBjYW4gYmUgdmVyeSBkaWZmaWN1bHQgdG8gcmVwcm9kdWNlLgoKSSYjMzk7dmUgY2hlY2tlZCwgYW5kIHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSBuZXcgbWVtb3J5IGFsbG9jYXRpb25zIG9yIHN0cnVjdHVyZXMgdGhhdCBtaWdodCBiZSB1bmluaXRpYWxpemVkLiBUaGVyZWZvcmUsIGdpdmVuIHRoYXQgdGhpcyBpcyBhIHN0cmFpZ2h0Zm9yd2FyZCBsb2NraW5nIGlzc3VlIGFuZCBub3QgZGF0YSBjb3JydXB0aW9uLCBpdCBzZWVtcyBLTVNBTiBpc24mIzM5O3QgbmVjZXNzYXJ5IGhlcmUuIEtBU0FOL0xPQ0tERVAgaXMgc3VmZmljaWVudCB0byBjaGVjayB0aGlzIGNvZGUuIFdlIG9ubHkgbmVlZCB0aGUgZGVhZGxvY2sgZGV0ZWN0aW9uLgoKU28sIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBOZWVkc0tNU0FOPWZhbHNlYCBmb3IgdGhpcy4gVGhpcyBsb29rcyBsaWtlIGEgcmVhc29uYWJsZSBmaXggZm9yIGEga25vd24gZGVhZGxvY2sgc2NlbmFyaW8gYW5kIHRoYXQmIzM5O3MgdGhlIGltcG9ydGFudCBwYXJ0IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDExOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlc29sdmVzIGEgZGVhZGxvY2sgaXNzdWUgaW52b2x2aW5nIGB2bWFwX3B1cmdlX2xvY2tgIGFuZCB3b3JrcXVldWVzIGJ5IHJlbW92aW5nIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgaW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCB1c2luZyBgbXV0ZXhfdHJ5bG9ja2AgaW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAuIERlYWRsb2NrcyBhbmQgbG9ja2luZyBpc3N1ZXMgYXJlIGRldGVjdGVkIGJ5IExPQ0tERVAsIHdoaWNoIGlzIGFscmVhZHkgZW5hYmxlZCBpbiB0aGUgc3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcy4gVGhlIGNoYW5nZXMgZG8gbm90IGludHJvZHVjZSBvciBleHBvc2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBpbmZvLWxlYWtzLCBvciBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjA5LjM0NjYwMjI4N1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjczMDM5ODcwMjYyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZXNvbHZlcyBhIGRlYWRsb2NrIGlzc3VlIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcyBieSByZW1vdmluZyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgdXNpbmcgYG11dGV4X3RyeWxvY2tgIGluIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBEZWFkbG9ja3MgYW5kIGxvY2tpbmcgaXNzdWVzIGFyZSBkZXRlY3RlZCBieSBMT0NLREVQLCB3aGljaCBpcyBhbHJlYWR5IGVuYWJsZWQgaW4gdGhlIHN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnRyb2R1Y2Ugb3IgZXhwb3NlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgaW5mby1sZWFrcywgb3IgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjA5LjM0NjYwNjQxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5Nzc4ODUxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZiMzg1ZWIyZTk3YWJjYzQxNDA4NzZiMjE4ZDdhNTMxZGI2ZjQ4NDlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTE6MTA6MDcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXFxuaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDRcXG4tLS0gYS9tbS92bWFsbG9jLmNcXG4rKysgYi9tbS92bWFsbG9jLmNcXG5AQCAtMjM1OCw3ICsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcXG4gXFx0c3RhdGljIGNwdW1hc2tfdCBwdXJnZV9ub2RlcztcXG4gXFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xcbiBcXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcXG5AQCAtMjM5NywzNiArMjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiBcXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXFx1MDAzZSAwKSB7XFxuIFxcdFxcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XFxuIFxcbi1cXHRcXHQvKiBPbmUgZXh0cmEgd29ya2VyIGlzIHBlciBhIGxhenlfbWF4X3BhZ2VzKCkgZnVsbCBzZXQgbWludXMgb25lLiAqL1xcbi1cXHRcXHRucl9wdXJnZV9oZWxwZXJzID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XFxuLVxcdFxcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcXG4tXFxuLVxcdFxcdGZvcl9lYWNoX2NwdShpLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcXG4tXFx0XFx0XFx0dm4gPSBcXHUwMDI2dm1hcF9ub2Rlc1tpXTtcXG4tXFxuLVxcdFxcdFxcdGlmIChucl9wdXJnZV9oZWxwZXJzIFxcdTAwM2UgMCkge1xcbi1cXHRcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrLCBwdXJnZV92bWFwX25vZGUpO1xcbi1cXG4tXFx0XFx0XFx0XFx0aWYgKGNwdW1hc2tfdGVzdF9jcHUoaSwgY3B1X29ubGluZV9tYXNrKSlcXG4tXFx0XFx0XFx0XFx0XFx0c2NoZWR1bGVfd29ya19vbihpLCBcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXHRcXHRcXHRcXHRlbHNlXFxuLVxcdFxcdFxcdFxcdFxcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4tXFxuLVxcdFxcdFxcdFxcdG5yX3B1cmdlX2hlbHBlcnMtLTtcXG4tXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dm4tXFx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XFxuLVxcdFxcdFxcdFxcdHB1cmdlX3ZtYXBfbm9kZShcXHUwMDI2dm4tXFx1MDAzZXB1cmdlX3dvcmspO1xcbi1cXHRcXHRcXHRcXHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXFx1MDAzZW5yX3B1cmdlZDtcXG4tXFx0XFx0XFx0fVxcbi1cXHRcXHR9XFxuLVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmRcXG4rXFx0XFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXFxuK1xcdFxcdCAqIHZtYXBfcHVyZ2VfbG9jayBjYW4gZGVhZGxvY2sgaWYgdGhlIHdvcmtlciBwb29sIGlzXFxuK1xcdFxcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xcbitcXHRcXHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGZvcl9lYWNoX2NwdShpLCBcXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcXG4gXFx0XFx0XFx0dm4gPSBcXHUwMDI2dm1hcF9ub2Rlc1tpXTtcXG4tXFxuLVxcdFxcdFxcdGlmICh2bi1cXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XFxuLVxcdFxcdFxcdFxcdGZsdXNoX3dvcmsoXFx1MDAyNnZuLVxcdTAwM2VwdXJnZV93b3JrKTtcXG4tXFx0XFx0XFx0XFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVxcdTAwM2Vucl9wdXJnZWQ7XFxuLVxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cHVyZ2Vfdm1hcF9ub2RlKFxcdTAwMjZ2bi1cXHUwMDNlcHVyZ2Vfd29yayk7XFxuK1xcdFxcdFxcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cXHUwMDNlbnJfcHVyZ2VkO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuQEAgLTU1MTksMTAgKzU0OTksMjEgQEAgdm1hcF9ub2RlX3Nocmlua19zY2FuKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rLCBzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxcbiB7XFxuIFxcdHN0cnVjdCB2bWFwX25vZGUgKnZuO1xcbiBcXG4tXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbitcXHQvKlxcbitcXHQgKiBUaGlzIHNocmlua2VyIGlzIGludm9rZWQgZnJvbSBkaXJlY3QgcmVjbGFpbSBwYXRoIHdoZXJlIG1lbW9yeVxcbitcXHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cXG4rXFx0ICogY2F1c2UgYSBwaWxlLXVwIG9mIHRhc2tzIGFsbCB3YWl0aW5nIGZvciB0aGUgc2FtZSBtdXRleCB3aGlsZVxcbitcXHQgKiB0aGUgbG9jayBob2xkZXIgbWF5IGl0c2VsZiBiZSBibG9ja2VkIGluIGZsdXNoX3dvcmsoKSB3YWl0aW5nIGZvclxcbitcXHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXFxuK1xcdCAqIGF2b2lkIHRoaXM7IHNraXBwaW5nIGEgcG9vbCBkZWNheSBjeWNsZSBpcyBoYXJtbGVzcy5cXG4rXFx0ICovXFxuK1xcdGlmICghbXV0ZXhfdHJ5bG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKSlcXG4rXFx0XFx0cmV0dXJuIFNIUklOS19TVE9QO1xcbitcXG4gXFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKVxcbiBcXHRcXHRkZWNheV92YV9wb29sX25vZGUodm4sIHRydWUpO1xcbiBcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xcbiBcXHRyZXR1cm4gU0hSSU5LX1NUT1A7XFxuIH1cXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjEwLjY0NDk4MTU4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQ3MDE2MDU2NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidm1fdW5tYXBfYWxpYXNlc1wiLFxuICAgIFwidm1fbWFwX3JhbVwiLFxuICAgIFwidm1fdW5tYXBfcmFtXCIsXG4gICAgXCJ2dW5tYXBcIixcbiAgICBcInZtYXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSB2bWFsbG9jIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBsYXp5IHZtYXAgYXJlYSBwdXJnaW5nIChgX19wdXJnZV92bWFwX2FyZWFfbGF6eWApIGFuZCB0aGUgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIEl0IHJlcGxhY2VzIGFzeW5jaHJvbm91cyB3b3JrIHNjaGVkdWxpbmcgd2l0aCBpbmxpbmUgcHVyZ2luZyB0byBmaXggYSBkZWFkbG9jayBzY2VuYXJpbyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBhcmUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCB2bWFsbG9jL3ZtYXAgQVBJcyBhbmQgbWVtb3J5IHByZXNzdXJlIChzaHJpbmtlcnMpLCBtYWtpbmcgdGhlbSBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZiMzg1ZWIyZTk3YWJjYzQxNDA4NzZiMjE4ZDdhNTMxZGI2ZjQ4NDlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxMToxMDowNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3ZtYWxsb2MuYyBiL21tL3ZtYWxsb2MuY1xuaW5kZXggYmVhOWY3NmVkN2U3NC4uNDE0NDM3MDhkMjJkZSAxMDA2NDRcbi0tLSBhL21tL3ZtYWxsb2MuY1xuKysrIGIvbW0vdm1hbGxvYy5jXG5AQCAtMjM1OCw3ICsyMzU4LDYgQEAgc3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbiBcdFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucl9wdXJnZWRfYXJlYXMgPSAwO1xuLVx0dW5zaWduZWQgaW50IG5yX3B1cmdlX2hlbHBlcnM7XG4gXHRzdGF0aWMgY3B1bWFza190IHB1cmdlX25vZGVzO1xuIFx0dW5zaWduZWQgaW50IG5yX3B1cmdlX25vZGVzO1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG5AQCAtMjM5NywzNiArMjM5NiwxNyBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0aWYgKG5yX3B1cmdlX25vZGVzIFx1MDAzZSAwKSB7XG4gXHRcdGZsdXNoX3RsYl9rZXJuZWxfcmFuZ2Uoc3RhcnQsIGVuZCk7XG4gXG4tXHRcdC8qIE9uZSBleHRyYSB3b3JrZXIgaXMgcGVyIGEgbGF6eV9tYXhfcGFnZXMoKSBmdWxsIHNldCBtaW51cyBvbmUuICovXG4tXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBhdG9taWNfbG9uZ19yZWFkKFx1MDAyNnZtYXBfbGF6eV9ucikgLyBsYXp5X21heF9wYWdlcygpO1xuLVx0XHRucl9wdXJnZV9oZWxwZXJzID0gY2xhbXAobnJfcHVyZ2VfaGVscGVycywgMVUsIG5yX3B1cmdlX25vZGVzKSAtIDE7XG4tXG4tXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuLVx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbi1cbi1cdFx0XHRpZiAobnJfcHVyZ2VfaGVscGVycyBcdTAwM2UgMCkge1xuLVx0XHRcdFx0SU5JVF9XT1JLKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmssIHB1cmdlX3ZtYXBfbm9kZSk7XG4tXG4tXHRcdFx0XHRpZiAoY3B1bWFza190ZXN0X2NwdShpLCBjcHVfb25saW5lX21hc2spKVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrX29uKGksIFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0ZWxzZVxuLVx0XHRcdFx0XHRzY2hlZHVsZV93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVxuLVx0XHRcdFx0bnJfcHVyZ2VfaGVscGVycy0tO1xuLVx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2bi1cdTAwM2VwdXJnZV93b3JrLmZ1bmMgPSBOVUxMO1xuLVx0XHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbi1cdFx0XHR9XG4tXHRcdH1cbi1cbitcdFx0LypcbitcdFx0ICogUHVyZ2UgYWxsIG5vZGVzIGlubGluZS4gIERvIG5vdCBzY2hlZHVsZV93b3JrKCkgYW5kXG4rXHRcdCAqIGZsdXNoX3dvcmsoKSBoZXJlOiBmbHVzaF93b3JrKCkgd2hpbGUgaG9sZGluZ1xuK1x0XHQgKiB2bWFwX3B1cmdlX2xvY2sgY2FuIGRlYWRsb2NrIGlmIHRoZSB3b3JrZXIgcG9vbCBpc1xuK1x0XHQgKiBzdGFydmVkIChlLmcuIGFsbCB3b3JrZXJzIGJsb2NrZWQgb24gdGhpcyBzYW1lIGxvY2tcbitcdFx0ICogaW4gdGhlIGRpcmVjdCByZWNsYWltIHBhdGggdmlhIHZtYXBfbm9kZV9zaHJpbmtfc2NhbikuXG4rXHRcdCAqL1xuIFx0XHRmb3JfZWFjaF9jcHUoaSwgXHUwMDI2cHVyZ2Vfbm9kZXMpIHtcbiBcdFx0XHR2biA9IFx1MDAyNnZtYXBfbm9kZXNbaV07XG4tXG4tXHRcdFx0aWYgKHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYykge1xuLVx0XHRcdFx0Zmx1c2hfd29yayhcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbi1cdFx0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4tXHRcdFx0fVxuK1x0XHRcdHB1cmdlX3ZtYXBfbm9kZShcdTAwMjZ2bi1cdTAwM2VwdXJnZV93b3JrKTtcbitcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuIFx0XHR9XG4gXHR9XG4gXG5AQCAtNTUxOSwxMCArNTQ5OSwyMSBAQCB2bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXG4ge1xuIFx0c3RydWN0IHZtYXBfbm9kZSAqdm47XG4gXG4tXHRndWFyZChtdXRleCkoXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbitcdC8qXG4rXHQgKiBUaGlzIHNocmlua2VyIGlzIGludm9rZWQgZnJvbSBkaXJlY3QgcmVjbGFpbSBwYXRoIHdoZXJlIG1lbW9yeVxuK1x0ICogcHJlc3N1cmUgaXMgYWxyZWFkeSBoaWdoLiAgQmxvY2tpbmcgb24gdm1hcF9wdXJnZV9sb2NrIGhlcmUgY2FuXG4rXHQgKiBjYXVzZSBhIHBpbGUtdXAgb2YgdGFza3MgYWxsIHdhaXRpbmcgZm9yIHRoZSBzYW1lIG11dGV4IHdoaWxlXG4rXHQgKiB0aGUgbG9jayBob2xkZXIgbWF5IGl0c2VsZiBiZSBibG9ja2VkIGluIGZsdXNoX3dvcmsoKSB3YWl0aW5nIGZvclxuK1x0ICogYSB3b3JrZXIgdGhhdCBpcyBzdHVjayBpbiB0aGUgc2FtZSByZWNsYWltIHBhdGguICBVc2UgdHJ5bG9jayB0b1xuK1x0ICogYXZvaWQgdGhpczsgc2tpcHBpbmcgYSBwb29sIGRlY2F5IGN5Y2xlIGlzIGhhcm1sZXNzLlxuK1x0ICovXG4rXHRpZiAoIW11dGV4X3RyeWxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKSlcbitcdFx0cmV0dXJuIFNIUklOS19TVE9QO1xuK1xuIFx0Zm9yX2VhY2hfdm1hcF9ub2RlKHZuKVxuIFx0XHRkZWNheV92YV9wb29sX25vZGUodm4sIHRydWUpO1xuIFxuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XG4gXHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MTAuNjQ0OTgzMjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NTE3MzMwMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bWFsbG9jLmNgLiBJbnRlcmVzdGluZy4gSXQgbG9va3MgbGlrZSB0aGV5J3JlIG1ha2luZyBzb21lIHByZXR0eSBmdW5kYW1lbnRhbCBjaGFuZ2VzIHRvIHRoZSB2bWFsbG9jIGFyZWEgcHVyZ2luZyBsb2dpYy4gU3BlY2lmaWNhbGx5LCB0aGV5J3JlIHJpcHBpbmcgb3V0IHRoZSBgc2NoZWR1bGVfd29ya2AvYGZsdXNoX3dvcmtgIGNvbWJvIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgcmVwbGFjaW5nIGl0IHdpdGggZGlyZWN0IGNhbGxzIHRvIGBwdXJnZV92bWFwX25vZGVgLiBUaGV5J3ZlIGFsc28gc3dhcHBlZCBvdXQgYGd1YXJkKG11dGV4KWAgZm9yIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC5cblxuUmlnaHQgb2ZmIHRoZSBiYXQsIHRoaXMgc2NyZWFtcyBcImZ1bmN0aW9uYWwgaW1wYWN0LlwiIFRoaXMgaXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHdlJ3JlIHRhbGtpbmcgYWJvdXQgdm1hbGxvYyBhcmVhcyBoZXJlISBEZWZpbml0ZWx5IHdhcnJhbnRzIGEgZGVlcCBkaXZlIGFuZCBmdXp6aW5nLiBUaGUga2V5IHN5bWJvbHMgdG8gc2NydXRpbml6ZSBoZXJlIGFyZSBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLlxuXG5GaXJzdCwgbGV0J3MgZXN0YWJsaXNoIHNvbWUgZ3JvdW5kIHRydXRocy4gSXMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIHN0YXRpYz8gQSBxdWljayBjaGVjay4uLiB5ZXAsIGl0J3MgYHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsIGJvb2wgZnVsbF9wb29sX2RlY2F5KWAuIEdvb2QgdG8ga25vdywgbGltaXRpbmcgdGhlIHNjb3BlIHNvbWV3aGF0LiBOb3csIHRpbWUgdG8gaHVudCBkb3duIHRoZSBjYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gVGhhdCdsbCB0ZWxsIHVzIHRoZSBzcGVjaWZpYyBjb250ZXh0cyB3aGVyZSB0aGVzZSBjaGFuZ2VzIHdpbGwgaGF2ZSBhbiBlZmZlY3QuIFRoaXMgaXMgd2hlcmUgdGhlIHJlYWwgd29yayBiZWdpbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxNi4xNjIzMTUzNzhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyMTYxNzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19wdXJnZV92bWFwX2FyZWFfbGF6eVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzMTk9c3RhdGljIHZvaWQgcHVyZ2Vfdm1hcF9ub2RlKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMzU2LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMzU3OnN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1hbGxvYy5jLTIzNTgtXFx0XFx0Ym9vbCBmdWxsX3Bvb2xfZGVjYXkpXFxuLS1cXG5tbS92bWFsbG9jLmM9MjQyMD1zdGF0aWMgdm9pZCByZWNsYWltX2FuZF9wdXJnZV92bWFwX2FyZWFzKHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjQyNC1cXHRwdXJnZV9mcmFnbWVudGVkX2Jsb2Nrc19hbGxjcHVzKCk7XFxubW0vdm1hbGxvYy5jOjI0MjU6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIHRydWUpO1xcbm1tL3ZtYWxsb2MuYy0yNDI2LVxcdG11dGV4X3VubG9jayhcXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcXG4tLVxcbm1tL3ZtYWxsb2MuYz0yNDI5PXN0YXRpYyB2b2lkIGRyYWluX3ZtYXBfYXJlYV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDMxLVxcdG11dGV4X2xvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxubW0vdm1hbGxvYy5jOjI0MzI6XFx0X19wdXJnZV92bWFwX2FyZWFfbGF6eShVTE9OR19NQVgsIDAsIGZhbHNlKTtcXG5tbS92bWFsbG9jLmMtMjQzMy1cXHRtdXRleF91bmxvY2soXFx1MDAyNnZtYXBfcHVyZ2VfbG9jayk7XFxuLS1cXG5tbS92bWFsbG9jLmM9Mjk0NT1zdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbi0tXFxubW0vdm1hbGxvYy5jLTI5OTEtXFxubW0vdm1hbGxvYy5jOjI5OTI6XFx0aWYgKCFfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHN0YXJ0LCBlbmQsIGZhbHNlKSBcXHUwMDI2XFx1MDAyNiBmbHVzaClcXG5tbS92bWFsbG9jLmMtMjk5My1cXHRcXHRmbHVzaF90bGJfa2VybmVsX3JhbmdlKHN0YXJ0LCBlbmQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxNi4yMDY1NTIwMTFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjExMzM5NzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBDYWxsZXJzIG9mIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLiBJJ20gc2VlaW5nIGl0J3MgY2FsbGVkIGZyb20gdGhyZWUgZGlzdGluY3QgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdHJhY2luZyBpdHMgdXNhZ2UuIE5vdywgSSdtIGdldHRpbmcgY3VyaW91cyBhYm91dCBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AgaW4gcGFydGljdWxhciDigJMgaXMgaXQgYSBzdGF0aWMgZnVuY3Rpb24/IEtub3dpbmcgaXRzIHNjb3BlIHdpbGwgaGVscCBpbiBteSBhbmFseXNpcyBvZiBob3cgYW5kIHdoZW4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGFjdHVhbGx5IGludm9rZWQgd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgdGhhdOKAmXMgdGhlIGNhc2U7IGl0J2xsIHByb3ZpZGUgY3J1Y2lhbCBjb250ZXh0IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4MzgsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxOS44MTc4OTQ1ODdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU0NjkxMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTEwODY9UkJfREVDTEFSRV9DQUxMQkFDS1NfTUFYKHN0YXRpYywgZnJlZV92bWFwX2FyZWFfcmJfYXVnbWVudF9jYixcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xMDg4LVxcbm1tL3ZtYWxsb2MuYzoxMDg5OnN0YXRpYyB2b2lkIHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXModm9pZCk7XFxubW0vdm1hbGxvYy5jLTEwOTAtc3RhdGljIEJMT0NLSU5HX05PVElGSUVSX0hFQUQodm1hcF9ub3RpZnlfbGlzdCk7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjA0NT1zdGF0aWMgc3RydWN0IHZtYXBfYXJlYSAqYWxsb2Nfdm1hcF9hcmVhKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMTU0LVxcdGlmICghcHVyZ2VkKSB7XFxubW0vdm1hbGxvYy5jOjIxNTU6XFx0XFx0cmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcygpO1xcbm1tL3ZtYWxsb2MuYy0yMTU2LVxcdFxcdHB1cmdlZCA9IDE7XFxuLS1cXG5tbS92bWFsbG9jLmM9MjM1Nz1zdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1hbGxvYy5jLTI0MTktICovXFxubW0vdm1hbGxvYy5jOjI0MjA6c3RhdGljIHZvaWQgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhcyh2b2lkKVxcbm1tL3ZtYWxsb2MuYy0yNDIxLVxcbi0tXFxubW0vdm1hbGxvYy5jPTQ5Njc9c3RydWN0IHZtX3N0cnVjdCAqKnBjcHVfZ2V0X3ZtX2FyZWFzKGNvbnN0IHVuc2lnbmVkIGxvbmcgKm9mZnNldHMsXFxuLS1cXG5tbS92bWFsbG9jLmMtNTE1MS1cXHRpZiAoIXB1cmdlZCkge1xcbm1tL3ZtYWxsb2MuYzo1MTUyOlxcdFxcdHJlY2xhaW1fYW5kX3B1cmdlX3ZtYXBfYXJlYXMoKTtcXG5tbS92bWFsbG9jLmMtNTE1My1cXHRcXHRwdXJnZWQgPSB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoxOS44NjMzNjk5MjFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTExMTk3ODE4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyB0aGUgVmlydHVhbCBNYXBwaW5nICh2bWFwKSBBcmVhIFJlY2xhbWF0aW9uIFByb2Nlc3MqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdmlydHVhbCBtZW1vcnkgbWFwcGluZyBhbmQgdW5tYXBwaW5nLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB2bWFwIHJlZ2lvbi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBhbGxvY192bWFwX2FyZWFgIGFuZCBgcGNwdV9nZXRfdm1fYXJlYXNgIGJvdGggc2VlbSB0byB0cmlnZ2VyIGEgY2FsbCB0byBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AuIFRoYXQncyBpbnRlcmVzdGluZywgYXMgaXQgaW5kaWNhdGVzIGEgc2hhcmVkIHJlc291cmNlIG1hbmFnZW1lbnQgc3RyYXRlZ3kuIEl0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5JJ3ZlIG5vdGVkIHRoYXQgYGFsbG9jX3ZtYXBfYXJlYWAsIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBgX3ZtX3VubWFwX2FsaWFzZXNgIGFyZSBhbGwgc3RhdGljIGZ1bmN0aW9ucywgd2hpY2ggaW1wbGllcyB0aGV5IGhhdmUgcmVzdHJpY3RlZCB2aXNpYmlsaXR5IGFuZCBhcmUgbGlrZWx5IHRpZ2h0bHkgY291cGxlZCB0byB0aGUgdm1hcCBpbmZyYXN0cnVjdHVyZSBpdHNlbGYuIFRoaXMgbWFrZXMgc2Vuc2U7IHRoZXNlIGZ1bmN0aW9ucyBwcm9iYWJseSBkb24ndCBuZWVkIHRvIGJlIGV4cG9zZWQgZ2xvYmFsbHkuXG5cbkdpdmVuIHRoZSBjb250ZXh0LCBJIHdhbnQgdG8gZHJpbGwgZG93biBvbiBgdm1fdW5tYXBfYWxpYXNlc2AsIGJlY2F1c2UgaXQncyBtZW50aW9uZWQuIExldCdzIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyByZWNsYW1hdGlvbiBwcm9jZXNzLiBJdCdzIHByb2JhYmx5IHRoZSBrZXkgc3RlcCB0byB1bm1hcCB0aGUgYXJlYXMgdGhhdCB3ZXJlIGZyZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTYwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MjQuMzc0NTcwMjA5WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTY4NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yOTAzPXN0YXRpYyB2b2lkIHZiX2ZyZWUodW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjk0NC1cXG5tbS92bWFsbG9jLmM6Mjk0NTpzdGF0aWMgdm9pZCBfdm1fdW5tYXBfYWxpYXNlcyh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCwgaW50IGZsdXNoKVxcbm1tL3ZtYWxsb2MuYy0yOTQ2LXtcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yOTk3LS8qKlxcbm1tL3ZtYWxsb2MuYzoyOTk4OiAqIHZtX3VubWFwX2FsaWFzZXMgLSB1bm1hcCBvdXRzdGFuZGluZyBsYXp5IGFsaWFzZXMgaW4gdGhlIHZtYXAgbGF5ZXJcXG5tbS92bWFsbG9jLmMtMjk5OS0gKlxcbi0tXFxubW0vdm1hbGxvYy5jLTMwMDUtICpcXG5tbS92bWFsbG9jLmM6MzAwNjogKiB2bV91bm1hcF9hbGlhc2VzIGZsdXNoZXMgYWxsIHN1Y2ggbGF6eSBtYXBwaW5ncy4gQWZ0ZXIgaXQgcmV0dXJucywgd2UgY2FuXFxubW0vdm1hbGxvYy5jLTMwMDctICogYmUgc3VyZSB0aGF0IG5vbmUgb2YgdGhlIHBhZ2VzIHdlIGhhdmUgY29udHJvbCBvdmVyIHdpbGwgaGF2ZSBhbnkgYWxpYXNlc1xcbi0tXFxubW0vdm1hbGxvYy5jLTMwMDktICovXFxubW0vdm1hbGxvYy5jOjMwMTA6dm9pZCB2bV91bm1hcF9hbGlhc2VzKHZvaWQpXFxubW0vdm1hbGxvYy5jLTMwMTEte1xcbm1tL3ZtYWxsb2MuYzozMDEyOlxcdF92bV91bm1hcF9hbGlhc2VzKFVMT05HX01BWCwgMCwgMCk7XFxubW0vdm1hbGxvYy5jLTMwMTMtfVxcbm1tL3ZtYWxsb2MuYzozMDE0OkVYUE9SVF9TWU1CT0xfR1BMKHZtX3VubWFwX2FsaWFzZXMpO1xcbm1tL3ZtYWxsb2MuYy0zMDE1LVxcbi0tXFxubW0vdm1hbGxvYy5jPTMzNTQ9c3RhdGljIHZvaWQgdm1fcmVzZXRfcGVybXMoc3RydWN0IHZtX3N0cnVjdCAqYXJlYSlcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMzYyLVxcdCAqIEZpbmQgdGhlIHN0YXJ0IGFuZCBlbmQgcmFuZ2Ugb2YgdGhlIGRpcmVjdCBtYXBwaW5ncyB0byBtYWtlIHN1cmUgdGhhdFxcbm1tL3ZtYWxsb2MuYzozMzYzOlxcdCAqIHRoZSB2bV91bm1hcF9hbGlhc2VzKCkgZmx1c2ggaW5jbHVkZXMgdGhlIGRpcmVjdCBtYXAuXFxubW0vdm1hbGxvYy5jLTMzNjQtXFx0ICovXFxuLS1cXG5tbS92bWFsbG9jLmMtMzM4My1cXHRzZXRfYXJlYV9kaXJlY3RfbWFwKGFyZWEsIHNldF9kaXJlY3RfbWFwX2ludmFsaWRfbm9mbHVzaCk7XFxubW0vdm1hbGxvYy5jOjMzODQ6XFx0X3ZtX3VubWFwX2FsaWFzZXMoc3RhcnQsIGVuZCwgZmx1c2hfZG1hcCk7XFxubW0vdm1hbGxvYy5jLTMzODUtXFx0c2V0X2FyZWFfZGlyZWN0X21hcChhcmVhLCBzZXRfZGlyZWN0X21hcF9kZWZhdWx0X25vZmx1c2gpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDoyNC40MTgxNDE2MjJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MTg4ODM2NzAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeTpcblxuKipDb25zaWRlcmluZyBNZW1vcnkgTWFuYWdlbWVudCBFeHBvcnRzKipcblxuQWxyaWdodCwgSSBzZWUgYHZtX3VubWFwX2FsaWFzZXNgIGlzIGV4cG9ydGVkLiBUaGF0J3MgYSBrZXkgZnVuY3Rpb24gZm9yIHVubWFwcGluZyBhbGlhc2VkIHZpcnR1YWwgbWVtb3J5IHJlZ2lvbnMsIGEgY3JpdGljYWwgb3BlcmF0aW9uIGluIGEgc3lzdGVtIGxpa2UgdGhpcy4gSXQncyBnb29kIHRvIGhhdmUgdGhhdCBhY2Nlc3NpYmxlLCBpbXBsaWVzIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEJ1dCwgd2hhdCBhYm91dCB0aGUgY2xlYW51cCBmdW5jdGlvbiwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmA/IElzIGl0IGFsc28gZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZT8gSXRzIHJvbGUgaXMgZXF1YWxseSBpbXBvcnRhbnQgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiB3aXRoaW4gdGhlIGtlcm5lbCdzIHZpcnR1YWwgbWFwcGluZyBzeXN0ZW0gKGB2bWFwYCkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUgb2Ygd2hhdCdzIHB1YmxpY2x5IGFjY2Vzc2libGUgZnJvbSB0aGUgb3V0c2lkZS4gSWYgb25seSBvbmUgaXMgZXhwb3J0ZWQgdGhhdCB3b3VsZCByYWlzZSBmbGFncywgSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgdGhleSBhcmUgaW50ZW5kZWQgdG8gaW50ZXJhY3QgYW5kIGhvdyBleHRlcm5hbCBjb2RlIGlzIGV4cGVjdGVkIHRvIGhhbmRsZSBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU0OTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDozMC42MDY5ODEzOTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzODA4NTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYXBfbm9kZV9zaHJpbmtfc2NhblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTIzNTc9c3RhdGljIGJvb2wgX19wdXJnZV92bWFwX2FyZWFfbGF6eSh1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNDAzLVxcdFxcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xcbm1tL3ZtYWxsb2MuYzoyNDA0OlxcdFxcdCAqIGluIHRoZSBkaXJlY3QgcmVjbGFpbSBwYXRoIHZpYSB2bWFwX25vZGVfc2hyaW5rX3NjYW4pLlxcbm1tL3ZtYWxsb2MuYy0yNDA1LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTU0OTc9c3RhdGljIHVuc2lnbmVkIGxvbmdcXG5tbS92bWFsbG9jLmM6NTQ5ODp2bWFwX25vZGVfc2hyaW5rX3NjYW4oc3RydWN0IHNocmlua2VyICpzaHJpbmssIHN0cnVjdCBzaHJpbmtfY29udHJvbCAqc2MpXFxubW0vdm1hbGxvYy5jLTU0OTkte1xcbi0tXFxubW0vdm1hbGxvYy5jPTU1MjA9dm9pZCBfX2luaXQgdm1hbGxvY19pbml0KHZvaWQpXFxuLS1cXG5tbS92bWFsbG9jLmMtNTU3Ny1cXHR2bWFwX25vZGVfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSB2bWFwX25vZGVfc2hyaW5rX2NvdW50O1xcbm1tL3ZtYWxsb2MuYzo1NTc4OlxcdHZtYXBfbm9kZV9zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gdm1hcF9ub2RlX3Nocmlua19zY2FuO1xcbm1tL3ZtYWxsb2MuYy01NTc5LVxcdHNocmlua2VyX3JlZ2lzdGVyKHZtYXBfbm9kZV9zaHJpbmtlcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjMwLjY1MDc5NzQxNloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzI0NzI5NTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBhIFBvdGVudGlhbCBNZW1vcnkgTGVhayBGaXgqKlxuXG5SaWdodCwgc28gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMgcmVnaXN0ZXJlZCBhcyBhIHNocmlua2VyLCBtZWFuaW5nIGl0J3MgaW52b2x2ZWQgaW4gbWVtb3J5IHJlY2xhbWF0aW9uLiBJbnRlcmVzdGluZy4gVGhpcyBwYXRjaCB0YXJnZXRzIGEgZGVhZGxvY2sgYmV0d2VlbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBkZWFkbG9ja3MgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHRoYXQncyBhIGJpZyByZWQgZmxhZyDigJMgZGVmaW5pdGVseSB3b3J0aCBzb21lIGZ1enppbmcgYXR0ZW50aW9uLlxuXG5UaGlua2luZyBhYm91dCBmb2N1cyBwb2ludHMsIGB2bV91bm1hcF9hbGlhc2VzYCBqdW1wcyBvdXQsIHNpbmNlIGl0IGNhbGxzIGBfdm1fdW5tYXBfYWxpYXNlc2AsIHdoaWNoIHRoZW4gZ29lcyBvbiB0byBjYWxsIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC4gVGhhdCdzIGEgZGlyZWN0IHBhdGguIEFsdGVybmF0aXZlbHksIGxvb2tpbmcgYXQgYHZtYWxsb2NgLCBgdmZyZWVgLCBgdnVubWFwYCwgYW5kIGB2bWFwYCBtaWdodCByZXZlYWwgaW50ZXJhY3Rpb25zIHRoYXQgaW5kaXJlY3RseSB0cmlnZ2VyIHRoZSBpc3N1ZS4gV2Ugc2hvdWxkIHRhcmdldCBhbGwgdGhlIGNyaXRpY2FsIHZpcnR1YWwgbWVtb3J5IHByaW1pdGl2ZXMuXG5cbk5vdywgbGV0J3Mgc2VlIHdoaWNoIGZ1bmN0aW9ucyBhY3R1YWxseSBjYWxsIGBhbGxvY192bWFwX2FyZWFgLiBUaGF0IGNvdWxkIHByb3ZpZGUgY2x1ZXMgdG8gdGhlIHJvb3QgY2F1c2UuIFRoaXMgaW5mb3JtYXRpb24gd2lsbCBoZWxwIG5hcnJvdyBkb3duIHRoZSBhdHRhY2sgc3VyZmFjZSBhbmQgaW5mb3JtIGEgbW9yZSBmb2N1c2VkIGZ1enppbmcgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNDUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MzcuMzc1NTI5Mzg5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTE0OTE2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY192bWFwX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0xNzI0PXZhX2NsaXAoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxuLS1cXG5tbS92bWFsbG9jLmMtMTc4Mi1cXHRcXHRcXHQgKiBhbGxvY2F0aW9ucywgaWYgXFxcInRoaXNcXFwiIGN1cnJlbnQgQ1BVIHdhcyBub3QgcHJlbG9hZGVkLlxcbm1tL3ZtYWxsb2MuYzoxNzgzOlxcdFxcdFxcdCAqIFNlZSB0aGUgY29tbWVudCBpbiBhbGxvY192bWFwX2FyZWEoKSB3aHkuIElmIHNvLCB0aGVuXFxubW0vdm1hbGxvYy5jLTE3ODQtXFx0XFx0XFx0ICogR0ZQX05PV0FJVCBpcyB1c2VkIGluc3RlYWQgdG8gZ2V0IGFuIGV4dHJhIG9iamVjdCBmb3JcXG4tLVxcbm1tL3ZtYWxsb2MuYy0xNzkxLVxcdFxcdFxcdCAqIHRyaWdnZXJlZCB0byByZXBlYXQgb25lIG1vcmUgdGltZS4gU2VlIG1vcmUgZGV0YWlsc1xcbm1tL3ZtYWxsb2MuYzoxNzkyOlxcdFxcdFxcdCAqIGluIGFsbG9jX3ZtYXBfYXJlYSgpIGZ1bmN0aW9uLlxcbm1tL3ZtYWxsb2MuYy0xNzkzLVxcdFxcdFxcdCAqL1xcbi0tXFxubW0vdm1hbGxvYy5jPTE4NTU9c3RhdGljIF9fYWx3YXlzX2lubGluZSB1bnNpZ25lZCBsb25nXFxubW0vdm1hbGxvYy5jOjE4NTY6X19hbGxvY192bWFwX2FyZWEoc3RydWN0IHJiX3Jvb3QgKnJvb3QsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsXFxubW0vdm1hbGxvYy5jLTE4NTctXFx0dW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGFsaWduLFxcbi0tXFxubW0vdm1hbGxvYy5jLTE4OTAtLypcXG5tbS92bWFsbG9jLmM6MTg5MTogKiBGcmVlIGEgcmVnaW9uIG9mIEtWQSBhbGxvY2F0ZWQgYnkgYWxsb2Nfdm1hcF9hcmVhXFxubW0vdm1hbGxvYy5jLTE4OTItICovXFxuLS1cXG5tbS92bWFsbG9jLmM9MjAzMT1zdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdm1hbGxvY192bShzdHJ1Y3Qgdm1fc3RydWN0ICp2bSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yMDQ0LSAqL1xcbm1tL3ZtYWxsb2MuYzoyMDQ1OnN0YXRpYyBzdHJ1Y3Qgdm1hcF9hcmVhICphbGxvY192bWFwX2FyZWEodW5zaWduZWQgbG9uZyBzaXplLFxcbm1tL3ZtYWxsb2MuYy0yMDQ2LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWxpZ24sXFxuLS1cXG5tbS92bWFsbG9jLmMtMjA5NC1cXHRcXHRwcmVsb2FkX3RoaXNfY3B1X2xvY2soXFx1MDAyNmZyZWVfdm1hcF9hcmVhX2xvY2ssIGdmcF9tYXNrLCBub2RlKTtcXG5tbS92bWFsbG9jLmM6MjA5NTpcXHRcXHRhZGRyID0gX19hbGxvY192bWFwX2FyZWEoXFx1MDAyNmZyZWVfdm1hcF9hcmVhX3Jvb3QsIFxcdTAwMjZmcmVlX3ZtYXBfYXJlYV9saXN0LFxcbm1tL3ZtYWxsb2MuYy0yMDk2LVxcdFxcdFxcdHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQpO1xcbi0tXFxubW0vdm1hbGxvYy5jLTIxMDYtXFxubW0vdm1hbGxvYy5jOjIxMDc6XFx0dHJhY2VfYWxsb2Nfdm1hcF9hcmVhKGFkZHIsIHNpemUsIGFsaWduLCB2c3RhcnQsIHZlbmQsIElTX0VSUl9WQUxVRShhZGRyKSk7XFxubW0vdm1hbGxvYy5jLTIxMDgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MjY5OT1zdGF0aWMgdm9pZCAqbmV3X3ZtYXBfYmxvY2sodW5zaWduZWQgaW50IG9yZGVyLCBnZnBfdCBnZnBfbWFzaylcXG4tLVxcbm1tL3ZtYWxsb2MuYy0yNzE0LVxcbm1tL3ZtYWxsb2MuYzoyNzE1OlxcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKFZNQVBfQkxPQ0tfU0laRSwgVk1BUF9CTE9DS19TSVpFLFxcbm1tL3ZtYWxsb2MuYy0yNzE2LVxcdFxcdFxcdFxcdFxcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbi0tXFxubW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMwNzYtXFx0XFx0c3RydWN0IHZtYXBfYXJlYSAqdmE7XFxubW0vdm1hbGxvYy5jOjMwNzc6XFx0XFx0dmEgPSBhbGxvY192bWFwX2FyZWEoc2l6ZSwgUEFHRV9TSVpFLFxcbm1tL3ZtYWxsb2MuYy0zMDc4LVxcdFxcdFxcdFxcdFZNQUxMT0NfU1RBUlQsIFZNQUxMT0NfRU5ELFxcbi0tXFxubW0vdm1hbGxvYy5jPTMxOTk9c3RydWN0IHZtX3N0cnVjdCAqX19nZXRfdm1fYXJlYV9ub2RlKHVuc2lnbmVkIGxvbmcgc2l6ZSxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zMjI3LVxcbm1tL3ZtYWxsb2MuYzozMjI4OlxcdHZhID0gYWxsb2Nfdm1hcF9hcmVhKHNpemUsIGFsaWduLCBzdGFydCwgZW5kLCBub2RlLCBnZnBfbWFzaywgMCwgYXJlYSk7XFxubW0vdm1hbGxvYy5jLTMyMjktXFx0aWYgKElTX0VSUih2YSkpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTE6MTA6MzcuNDIwNjgwNTQzWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4ODExMDMzNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVm1hcCBBcmVhIERlYWRsb2NrIFZ1bG5lcmFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIGlkZW50aWZ5IHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQuIGBhbGxvY192bWFwX2FyZWFgIHNlZW1zIHRvIGJlIGF0IHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLCBhbmQgaXQncyBjYWxsZWQgYnkgc2V2ZXJhbCBmdW5jdGlvbnMgSSdtIGZhbWlsaWFyIHdpdGg6IGBuZXdfdm1hcF9ibG9ja2AsIGB2bV9tYXBfcmFtYCwgYW5kIGBfX2dldF92bV9hcmVhX25vZGVgLiBOb3csIGBfX2dldF92bV9hcmVhX25vZGVgIGJyYW5jaGVzIG91dCB0byB0aGluZ3MgbGlrZSBgZ2V0X3ZtX2FyZWFgLCBgZ2V0X3ZtX2FyZWFfY2FsbGVyYCwgYW5kIGBfX3ZtYWxsb2Nfbm9kZV9yYW5nZWAuIFRoYXQgbWFrZXMgYHZtYWxsb2NgLCBgdmZyZWVgLCBgdm1fbWFwX3JhbWAsIGFuZCBgdm1fdW5tYXBfcmFtYCBwcmltZSB0YXJnZXRzIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5CdXQgd2FpdCwgdGhpcyBpcyBpbnRlcmVzdGluZy4gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGlzIGNhbGxlZCBieSBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AsIHdoaWNoIGlzICphbHNvKiBjYWxsZWQgYnkgYGFsbG9jX3ZtYXBfYXJlYWAgaXRzZWxmISBTbyBhbnkgYWxsb2NhdGlvbiB2aWEgYHZtYWxsb2NgIGhhcyB0aGUgcG90ZW50aWFsIHRvIHRyaWdnZXIgdGhpcyByZWNsYW1hdGlvbiBwYXRoLiBBbmQsIGFkZGluZyB0byB0aGUgY29tcGxleGl0eSwgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIHNocmlua2VyLCBpcyBhbHNvIGluIHRoZSBtaXguIE1lbW9yeSBwcmVzc3VyZSBjYW4gYWxzbyB0cmlnZ2VyIGl0LCByaWdodD9cblxuU28sIHRvIGtlZXAgaXQgc2ltcGxlLCBJJ2xsIGZvY3VzIG9uIGB2bWFsbG9jYCwgYHZmcmVlYCwgYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGFuZCBgdm1fdW5tYXBfcmFtYC4gQWgsIHllcywgYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMgYSBzaHJpbmtlciwgc28gaXQncyB0cmlnZ2VyZWQgYnkgbWVtb3J5IHByZXNzdXJlLiBUaGlzIHBhdGNoIGlzIG1lYW50IHRvIGZpeCBhIGRlYWRsb2NrIGJldHdlZW4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgYW5kIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YC5cblxuVGhlcmVmb3JlLCB0aGUgbW9zdCBlZmZlY3RpdmUgZnV6emluZyB0YXJnZXRzIHNlZW0gdG8gYmUgY2VudGVyZWQgYXJvdW5kIGB2bWFsbG9jYCwgYHZmcmVlYCwgYW5kIGB2bV91bm1hcF9hbGlhc2VzYC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBHb29kLCBgbW0vdm1hbGxvYy5jYCBpcyBhbHdheXMgY29tcGlsZWQuIE5vdGhpbmcgc3BlY2lhbCB0byBrZWVwIGluIG1pbmQgdGhlcmUuXG5cbk9rYXksIGxldCdzIHNvbGlkaWZ5IHRoZSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nOlxuXG4qICAgYHZtYWxsb2NgXG4qICAgYHZmcmVlYFxuKiAgIGB2bV91bm1hcF9hbGlhc2VzYFxuKiAgIGB2bV9tYXBfcmFtYFxuKiAgIGB2bV91bm1hcF9yYW1gXG5cbkkgc2VlIGB2bWFsbG9jYCBpcyBhIGZyZXF1ZW50bHkgdXNlZCBwYXRoIGJ1dCBnb29kIGFzIGFuIGVudHJ5IGZvciB0aGUgdm1hbGxvYyBjb2RlLiBNYXliZSBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgYSBiZXR0ZXIgdGFyZ2V0LCBhcyBpdCdzIGxlc3MgY29tbW9uIGFuZCBkaXJlY3RseSBjYWxscyBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAsIHdoaWNoIGlzIHRoZSBvbmUgd2UgYXJlIGNvbmNlcm5lZCB3aXRoLiBHb29kLCBgdm1fdW5tYXBfYWxpYXNlc2AgaXMgZXhwb3J0ZWQuIExldCdzIHNlZSBpZiBgdm1fbWFwX3JhbWAgYW5kIGB2bV91bm1hcF9yYW1gIGFyZSBhbHNvIGV4cG9ydGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDIzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjQ3LjMwMTc4NjMzN1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQxNjMzNjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qdm1fbWFwX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMwNjQ9dm9pZCAqdm1fbWFwX3JhbShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBpbnQgY291bnQsIGludCBub2RlKVxcbi0tXFxubW0vdm1hbGxvYy5jLTMxMDItfVxcbm1tL3ZtYWxsb2MuYzozMTAzOkVYUE9SVF9TWU1CT0wodm1fbWFwX3JhbSk7XFxubW0vdm1hbGxvYy5jLTMxMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjQ3LjM0NTk1NDg2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMDQyMTI2MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkNvbmZpcm1pbmcgYSBLZXkgRnVuY3Rpb24ncyBBdmFpbGFiaWxpdHkqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgaW1tZWRpYXRlIGNvbmZpcm1hdGlvbiBpcyB0aGF0IGB2bV9tYXBfcmFtYCAqaXMqIGluZGVlZCBleHBvcnRlZC4gVGhpcyBpcyBnb29kLCBhcyBpdCBtZWFucyBJIGNhbiBwcm9jZWVkIHVuZGVyIHRoZSBhc3N1bXB0aW9uIHRoYXQgdGhpcyBjcnVjaWFsIGZ1bmN0aW9uIGlzIGFjY2Vzc2libGUgYW5kIGF2YWlsYWJsZSBmb3IgdXNlIHdpdGhpbiB0aGUgY29udGV4dCBJJ20gY3VycmVudGx5IHdvcmtpbmcgaW4uIFRoaXMgYWxsb3dzIG1lIHRvIGxldmVyYWdlIGl0cyBmdW5jdGlvbmFsaXR5IHdpdGhvdXQgYW55IGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiBvciB3b3JrYXJvdW5kIGZvciBpdHMgcHJlc2VuY2UsIHdoaWNoLCBpbiB0dXJuLCBhbGxvd3MgbWUgdG8gc3RyZWFtbGluZSB0aGUgb25nb2luZyB0YXNrIGF0IGhhbmQuIEl0IHJlbW92ZXMgYSBwb3RlbnRpYWwgcm9hZGJsb2NrIGFuZCBjb25maXJtcyB0aGF0IHRoZSBjb3JlIGZ1bmN0aW9uIGlzIGF2YWlsYWJsZSBmb3IgdXRpbGl6YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2NjMsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1MC41NTAxNjk4NzRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MTUxNzc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZtX3VubWFwX3JhbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTMwMjE9dm9pZCB2bV91bm1hcF9yYW0oY29uc3Qgdm9pZCAqbWVtLCB1bnNpZ25lZCBpbnQgY291bnQpXFxuLS1cXG5tbS92bWFsbG9jLmMtMzA0Ny19XFxubW0vdm1hbGxvYy5jOjMwNDg6RVhQT1JUX1NZTUJPTCh2bV91bm1hcF9yYW0pO1xcbm1tL3ZtYWxsb2MuYy0zMDQ5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1MC41OTYzMjM5NThaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5ODg0NDYwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTWVtb3J5IE1hcHBpbmcgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIGB2bV91bm1hcF9yYW1gIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQgYW5kIGF2YWlsYWJsZS4gVGhhdCBtdWNoIGlzIGNsZWFyLiBCdXQgbm93IHRoZSBxdWVzdGlvbiB0aGF0J3MgbmFnZ2luZyBhdCB0aGUgYmFjayBvZiBteSBtaW5kIGlzOiB3aGF0J3MgdGhlIGRlYWwgd2l0aCBgdnVubWFwYD8gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIHVubWFwIHJvdXRpbmUgdW5kZXIgY29uc2lkZXJhdGlvbiBpcyB0aGUgc2FtZSBvciBpZiB0aGVyZSBpcyBhIGRpc3RpbmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHR3byByb3V0aW5lcyByZWxhdGUsIGlmIGF0IGFsbC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IHN0cmF0ZWd5LCBlc3BlY2lhbGx5IGluIGNvbnRleHQgb2YgdGhlIHNwZWNpZmljIHBsYXRmb3JtIEknbSB3b3JraW5nIHdpdGguIFRoZSBrZXkgaXMgaW4gdW5kZXJzdGFuZGluZyB3aGV0aGVyIGl0J3MgdGhlIHNhbWUgdW5tYXAgZnVuY3Rpb24gYmVpbmcgY29uc2lkZXJlZCBvciBub3QuIEkndmUgZ290IHRvIHF1aWNrbHkgc2VlIGlmIHRoZXkgYXJlIHNlcGFyYXRlIG9yIGZ1bmN0aW9uYWxseSBpZGVudGljYWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5MjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMDo1My45OTUxNzEyMjdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzcxMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZ1bm1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bWFsbG9jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1hbGxvYy5jPTM1MDU9dm9pZCB2dW5tYXAoY29uc3Qgdm9pZCAqYWRkcilcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTIxLX1cXG5tbS92bWFsbG9jLmM6MzUyMjpFWFBPUlRfU1lNQk9MKHZ1bm1hcCk7XFxubW0vdm1hbGxvYy5jLTM1MjMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjEwOjU0LjAzODk0NjU5MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyODg3NTQ2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkNoZWNraW5nIHRoZSBgdm1hcGAgQXZhaWxhYmlsaXR5KipcblxuUmlnaHQsIHNvIGB2dW5tYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIEkndmUgZ290IHRoYXQgY29uZmlybWVkLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgcXVlc3Rpb24gaXMsIHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgdm1hcGA/IElzIHRoYXQgYXZhaWxhYmxlIGZvciBleHRlcm5hbCB1c2UgYXMgd2VsbD8gSSBuZWVkIHRvIGNsYXJpZnkgd2hldGhlciBJIGhhdmUgYWNjZXNzIHRvIHRoYXQgZnVuY3Rpb25hbGl0eSB0b28sIHNpbmNlIGl0IGlzIGxpa2VseSBuZWVkZWQgZm9yIHRoZSB0YXNrIGF0IGhhbmQuIE5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMTowNC43Njc4MjM5NDJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MzMyMDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0wuKnZtYXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1hbGxvYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3ZtYWxsb2MuYz0yMTc3PWludCByZWdpc3Rlcl92bWFwX3B1cmdlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIpXFxuLS1cXG5tbS92bWFsbG9jLmMtMjE4MC19XFxubW0vdm1hbGxvYy5jOjIxODE6RVhQT1JUX1NZTUJPTF9HUEwocmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XFxubW0vdm1hbGxvYy5jLTIxODItXFxubW0vdm1hbGxvYy5jPTIxODM9aW50IHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iKVxcbi0tXFxubW0vdm1hbGxvYy5jLTIxODYtfVxcbm1tL3ZtYWxsb2MuYzoyMTg3OkVYUE9SVF9TWU1CT0xfR1BMKHVucmVnaXN0ZXJfdm1hcF9wdXJnZV9ub3RpZmllcik7XFxubW0vdm1hbGxvYy5jLTIxODgtXFxuLS1cXG5tbS92bWFsbG9jLmM9MzUzOT12b2lkICp2bWFwKHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCxcXG4tLVxcbm1tL3ZtYWxsb2MuYy0zNTc4LX1cXG5tbS92bWFsbG9jLmM6MzU3OTpFWFBPUlRfU1lNQk9MKHZtYXApO1xcbm1tL3ZtYWxsb2MuYy0zNTgwLVxcbi0tXFxubW0vdm1hbGxvYy5jPTM2MTM9dm9pZCAqdm1hcF9wZm4odW5zaWduZWQgbG9uZyAqcGZucywgdW5zaWduZWQgaW50IGNvdW50LCBwZ3Byb3RfdCBwcm90KVxcbi0tXFxubW0vdm1hbGxvYy5jLTM2MzItfVxcbm1tL3ZtYWxsb2MuYzozNjMzOkVYUE9SVF9TWU1CT0xfR1BMKHZtYXBfcGZuKTtcXG5tbS92bWFsbG9jLmMtMzYzNC0jZW5kaWYgLyogQ09ORklHX1ZNQVBfUEZOICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjExOjA0LjgxMzE1OTA4NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDUzMzQwMDk0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIFZ1bG5lcmFiaWxpdHkgYW5kIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gYHZtYXBgIGlzIGRlZmluaXRlbHkgZXhwb3J0ZWQsIGdvb2Qgc3RhcnQuIFRoaW5raW5nIHRocm91Z2ggcG90ZW50aWFsIGZvY3VzIHN5bWJvbHMsIEknbSBsZWFuaW5nIHRvd2FyZCB0aGVzZTogYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGB2bV91bm1hcF9yYW1gLCBgdnVubWFwYCwgYW5kIGB2bWFwYC4gV2hpbGUgYHZtYWxsb2NgIGFuZCBgdmZyZWVgIGFyZSBjb21tb24sIHRoZXkgbWlnaHQgZG9taW5hdGUgdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIHRoZXNlIG90aGVyIHN5bWJvbHMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBjb3JlIGxvZ2ljIGFmZmVjdGVkIGJ5IHRoZSBwYXRjaC4gSSdtIGNob29zaW5nIHRvIG9taXQgYHZtYWxsb2NgIGFuZCBgdmZyZWVgIGF0IHRoaXMgc3RhZ2UsIGFzIHRoZXkgZG9uJ3QgZ2l2ZSBpbnNpZ2h0IHRvIHRoZSBjb3JlIGNoYW5nZXMgd2l0aGluIHRoZSBwYXRjaC5cblxuVGhlIHBhdGNoIGl0c2VsZiBkaWdzIGludG8gYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgIGFuZCBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gSXQgbG9va3MgbGlrZSBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgaXMgY2FsbGVkIGZyb20gYSBmZXcgcGxhY2VzOiBgcmVjbGFpbV9hbmRfcHVyZ2Vfdm1hcF9hcmVhc2AgKHRyaWdnZXJlZCBieSBgYWxsb2Nfdm1hcF9hcmVhYCB3aGVuIG1lbW9yeSBpcyB0aWdodCksIGBkcmFpbl92bWFwX2FyZWFfd29ya2AsIGFuZCBhbHNvIGBfdm1fdW5tYXBfYWxpYXNlc2AgKHdoaWNoIGl0c2VsZiBpcyBjYWxsZWQgYnkgYHZtX3VubWFwX2FsaWFzZXNgIGFuZCBgdm1fcmVzZXRfcGVybXNgKS4gYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmAgaXMsIG9mIGNvdXJzZSwgcGFydCBvZiB0aGUgc2hyaW5rZXIgbWFjaGluZXJ5LlxuXG5UaGVyZWZvcmUsIHRoZSBjaGFuZ2VzIGNlbnRlciBvbiB0aGUgY29yZSB2bWFsbG9jIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGF6eSBwdXJnaW5nIGFuZCBub2RlIHNocmlua2luZy4gVGhpcyBzY3JlYW1zIFwiZnV6eiBtZSFcIiBJdCdzIGRlZmluaXRlbHkgaW4gYSBjcml0aWNhbCBhcmVhLlxuXG5IZXJlJ3MgbXkgcmF0aW9uYWxlOiB0aGUgcGF0Y2ggZnVuZGFtZW50YWxseSBhbHRlcnMgdGhlIHZtYWxsb2Mgc3Vic3lzdGVtJ3MgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdm1hcCBub2RlIHNocmlua2VyIChgdm1hcF9ub2RlX3Nocmlua19zY2FuYCkuIFRoZSBmaXggcmVwbGFjZXMgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyB3aXRoIGlubGluZSBwdXJnaW5nLiBUaGlzIGlzIGRlc2lnbmVkIHRvIHJlc29sdmUgYSBkZWFkbG9jayBzY2VuYXJpbyB0aGF0IG9jY3VycyBkdXJpbmcgZGlyZWN0IG1lbW9yeSByZWNsYWltLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNyaXRpY2FsLCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlIGZ1bmN0aW9ucy4gVGhleSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIHN0YW5kYXJkIHZtYWxsb2Mvdm1hcCBBUElzLCBhbmQgYWxzbyBieSBtZW1vcnkgcHJlc3N1cmUgZXZlbnRzIGhhbmRsZWQgYnkgdGhlIHNocmlua2VyLlxuXG5NeSBmb2N1cyBzeW1ib2xzIGFyZTogYHZtX3VubWFwX2FsaWFzZXNgLCBgdm1fbWFwX3JhbWAsIGB2bV91bm1hcF9yYW1gLCBgdnVubWFwYCwgYW5kIGB2bWFwYC5cblxuSSBkb24ndCBuZWVkIGFueSBzcGVjaWFsIGNvbmZpZ3VyYXRpb25zIGZvciB0aGlzOyBpdCdzIGNvcmUga2VybmVsIGZ1bmN0aW9uYWxpdHkuXG5cbkp1c3QgdG8gYmUgc3VyZSwgYHZtX3VubWFwX2FsaWFzZXNgICpkaXJlY3RseSogY2FsbHMgYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgLCBzbyB0aGF0J3MgYSBzb2xpZCBjaG9pY2UuIGB2bV9tYXBfcmFtYCBhbmQgYHZtX3VubWFwX3JhbWAgYXJlIHVzaW5nIHZtYXAgYmxvY2sgbG9naWMsIHdoaWNoLCBJIGNhbiBzZWUsIGlzIGludm9sdmVkIHdpdGggcHVyZ2luZy4gYHZ1bm1hcGAgYW5kIGB2bWFwYCBhcmUgc2ltcGx5IHRoZSBzdGFuZGFyZCB2bWFwIEFQSXMsIG1ha2luZyB0aGVtIHJlYXNvbmFibGUgdGFyZ2V0cy5cblxuTm93IEknbSByZWFkeSB0byBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzU3LCJPdXRwdXRUb2tlbnMiOjE1OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDY1NjI2MTFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgdm1hbGxvYyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdGhlIHZtYXAgbm9kZSBzaHJpbmtlciAoYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmApLiBJdCByZXBsYWNlcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIHdpdGggaW5saW5lIHB1cmdpbmcgdG8gZml4IGEgZGVhZGxvY2sgc2NlbmFyaW8gZHVyaW5nIGRpcmVjdCBtZW1vcnkgcmVjbGFpbS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgdm1hbGxvYy92bWFwIEFQSXMgYW5kIG1lbW9yeSBwcmVzc3VyZSAoc2hyaW5rZXJzKSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX3VubWFwX2FsaWFzZXNcIixcbiAgICBcInZtX21hcF9yYW1cIixcbiAgICBcInZtX3VubWFwX3JhbVwiLFxuICAgIFwidnVubWFwXCIsXG4gICAgXCJ2bWFwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgdm1hbGxvYyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSB0aGUgbGF6eSB2bWFwIGFyZWEgcHVyZ2luZyAoYF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenlgKSBhbmQgdGhlIHZtYXAgbm9kZSBzaHJpbmtlciAoYHZtYXBfbm9kZV9zaHJpbmtfc2NhbmApLiBJdCByZXBsYWNlcyBhc3luY2hyb25vdXMgd29yayBzY2hlZHVsaW5nIHdpdGggaW5saW5lIHB1cmdpbmcgdG8gZml4IGEgZGVhZGxvY2sgc2NlbmFyaW8gZHVyaW5nIGRpcmVjdCBtZW1vcnkgcmVjbGFpbS4gVGhlc2UgYXJlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgdm1hbGxvYy92bWFwIEFQSXMgYW5kIG1lbW9yeSBwcmVzc3VyZSAoc2hyaW5rZXJzKSwgbWFraW5nIHRoZW0gaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDY1ODg5OTFaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMzk4NzQ3MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDcxMzc4MzFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NzAzOTMyMjA5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmIzODVlYjJlOTdhYmNjNDE0MDg3NmIyMThkN2E1MzFkYjZmNDg0OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDExOjEwOjA3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1hbGxvYy5jIGIvbW0vdm1hbGxvYy5jXG5pbmRleCBiZWE5Zjc2ZWQ3ZTc0Li40MTQ0MzcwOGQyMmRlIDEwMDY0NFxuLS0tIGEvbW0vdm1hbGxvYy5jXG4rKysgYi9tbS92bWFsbG9jLmNcbkBAIC0yMzU4LDcgKzIzNTgsNiBAQCBzdGF0aWMgYm9vbCBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5KHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRib29sIGZ1bGxfcG9vbF9kZWNheSlcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3B1cmdlZF9hcmVhcyA9IDA7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2VfaGVscGVycztcbiBcdHN0YXRpYyBjcHVtYXNrX3QgcHVyZ2Vfbm9kZXM7XG4gXHR1bnNpZ25lZCBpbnQgbnJfcHVyZ2Vfbm9kZXM7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbkBAIC0yMzk3LDM2ICsyMzk2LDE3IEBAIHN0YXRpYyBib29sIF9fcHVyZ2Vfdm1hcF9hcmVhX2xhenkodW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRpZiAobnJfcHVyZ2Vfbm9kZXMgXHUwMDNlIDApIHtcbiBcdFx0Zmx1c2hfdGxiX2tlcm5lbF9yYW5nZShzdGFydCwgZW5kKTtcbiBcbi1cdFx0LyogT25lIGV4dHJhIHdvcmtlciBpcyBwZXIgYSBsYXp5X21heF9wYWdlcygpIGZ1bGwgc2V0IG1pbnVzIG9uZS4gKi9cbi1cdFx0bnJfcHVyZ2VfaGVscGVycyA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2dm1hcF9sYXp5X25yKSAvIGxhenlfbWF4X3BhZ2VzKCk7XG4tXHRcdG5yX3B1cmdlX2hlbHBlcnMgPSBjbGFtcChucl9wdXJnZV9oZWxwZXJzLCAxVSwgbnJfcHVyZ2Vfbm9kZXMpIC0gMTtcbi1cbi1cdFx0Zm9yX2VhY2hfY3B1KGksIFx1MDAyNnB1cmdlX25vZGVzKSB7XG4tXHRcdFx0dm4gPSBcdTAwMjZ2bWFwX25vZGVzW2ldO1xuLVxuLVx0XHRcdGlmIChucl9wdXJnZV9oZWxwZXJzIFx1MDAzZSAwKSB7XG4tXHRcdFx0XHRJTklUX1dPUksoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yaywgcHVyZ2Vfdm1hcF9ub2RlKTtcbi1cbi1cdFx0XHRcdGlmIChjcHVtYXNrX3Rlc3RfY3B1KGksIGNwdV9vbmxpbmVfbWFzaykpXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmtfb24oaSwgXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRlbHNlXG4tXHRcdFx0XHRcdHNjaGVkdWxlX3dvcmsoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXG4tXHRcdFx0XHRucl9wdXJnZV9oZWxwZXJzLS07XG4tXHRcdFx0fSBlbHNlIHtcbi1cdFx0XHRcdHZuLVx1MDAzZXB1cmdlX3dvcmsuZnVuYyA9IE5VTEw7XG4tXHRcdFx0XHRwdXJnZV92bWFwX25vZGUoXHUwMDI2dm4tXHUwMDNlcHVyZ2Vfd29yayk7XG4tXHRcdFx0XHRucl9wdXJnZWRfYXJlYXMgKz0gdm4tXHUwMDNlbnJfcHVyZ2VkO1xuLVx0XHRcdH1cbi1cdFx0fVxuLVxuK1x0XHQvKlxuK1x0XHQgKiBQdXJnZSBhbGwgbm9kZXMgaW5saW5lLiAgRG8gbm90IHNjaGVkdWxlX3dvcmsoKSBhbmRcbitcdFx0ICogZmx1c2hfd29yaygpIGhlcmU6IGZsdXNoX3dvcmsoKSB3aGlsZSBob2xkaW5nXG4rXHRcdCAqIHZtYXBfcHVyZ2VfbG9jayBjYW4gZGVhZGxvY2sgaWYgdGhlIHdvcmtlciBwb29sIGlzXG4rXHRcdCAqIHN0YXJ2ZWQgKGUuZy4gYWxsIHdvcmtlcnMgYmxvY2tlZCBvbiB0aGlzIHNhbWUgbG9ja1xuK1x0XHQgKiBpbiB0aGUgZGlyZWN0IHJlY2xhaW0gcGF0aCB2aWEgdm1hcF9ub2RlX3Nocmlua19zY2FuKS5cbitcdFx0ICovXG4gXHRcdGZvcl9lYWNoX2NwdShpLCBcdTAwMjZwdXJnZV9ub2Rlcykge1xuIFx0XHRcdHZuID0gXHUwMDI2dm1hcF9ub2Rlc1tpXTtcbi1cbi1cdFx0XHRpZiAodm4tXHUwMDNlcHVyZ2Vfd29yay5mdW5jKSB7XG4tXHRcdFx0XHRmbHVzaF93b3JrKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuLVx0XHRcdFx0bnJfcHVyZ2VkX2FyZWFzICs9IHZuLVx1MDAzZW5yX3B1cmdlZDtcbi1cdFx0XHR9XG4rXHRcdFx0cHVyZ2Vfdm1hcF9ub2RlKFx1MDAyNnZuLVx1MDAzZXB1cmdlX3dvcmspO1xuK1x0XHRcdG5yX3B1cmdlZF9hcmVhcyArPSB2bi1cdTAwM2Vucl9wdXJnZWQ7XG4gXHRcdH1cbiBcdH1cbiBcbkBAIC01NTE5LDEwICs1NDk5LDIxIEBAIHZtYXBfbm9kZV9zaHJpbmtfc2NhbihzdHJ1Y3Qgc2hyaW5rZXIgKnNocmluaywgc3RydWN0IHNocmlua19jb250cm9sICpzYylcbiB7XG4gXHRzdHJ1Y3Qgdm1hcF9ub2RlICp2bjtcbiBcbi1cdGd1YXJkKG11dGV4KShcdTAwMjZ2bWFwX3B1cmdlX2xvY2spO1xuK1x0LypcbitcdCAqIFRoaXMgc2hyaW5rZXIgaXMgaW52b2tlZCBmcm9tIGRpcmVjdCByZWNsYWltIHBhdGggd2hlcmUgbWVtb3J5XG4rXHQgKiBwcmVzc3VyZSBpcyBhbHJlYWR5IGhpZ2guICBCbG9ja2luZyBvbiB2bWFwX3B1cmdlX2xvY2sgaGVyZSBjYW5cbitcdCAqIGNhdXNlIGEgcGlsZS11cCBvZiB0YXNrcyBhbGwgd2FpdGluZyBmb3IgdGhlIHNhbWUgbXV0ZXggd2hpbGVcbitcdCAqIHRoZSBsb2NrIGhvbGRlciBtYXkgaXRzZWxmIGJlIGJsb2NrZWQgaW4gZmx1c2hfd29yaygpIHdhaXRpbmcgZm9yXG4rXHQgKiBhIHdvcmtlciB0aGF0IGlzIHN0dWNrIGluIHRoZSBzYW1lIHJlY2xhaW0gcGF0aC4gIFVzZSB0cnlsb2NrIHRvXG4rXHQgKiBhdm9pZCB0aGlzOyBza2lwcGluZyBhIHBvb2wgZGVjYXkgY3ljbGUgaXMgaGFybWxlc3MuXG4rXHQgKi9cbitcdGlmICghbXV0ZXhfdHJ5bG9jayhcdTAwMjZ2bWFwX3B1cmdlX2xvY2spKVxuK1x0XHRyZXR1cm4gU0hSSU5LX1NUT1A7XG4rXG4gXHRmb3JfZWFjaF92bWFwX25vZGUodm4pXG4gXHRcdGRlY2F5X3ZhX3Bvb2xfbm9kZSh2biwgdHJ1ZSk7XG4gXG4rXHRtdXRleF91bmxvY2soXHUwMDI2dm1hcF9wdXJnZV9sb2NrKTtcbiBcdHJldHVybiBTSFJJTktfU1RPUDtcbiB9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxMToxMToxNS4zNDcxMzkwNloiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDM5MzAxNjk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIHZtYWxsb2MgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bWFsbG9jLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcHVyZ2luZyB2aXJ0dWFsIG1lbW9yeSBtYXAgYXJlYXMuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBkaXRjaGluZyB0aGUgYXN5bmNocm9ub3VzIGBzY2hlZHVsZV93b3JrYCBhbmQgYGZsdXNoX3dvcmtgIGFwcHJvYWNoIGluIGBfX3B1cmdlX3ZtYXBfYXJlYV9sYXp5YCBhbmQgb3B0aW5nIHRvIGNhbGwgYHB1cmdlX3ZtYXBfbm9kZWAgaW5saW5lIGZvciBhbGwgbm9kZXMuIFRoYXTigJlzIGludGVyZXN0aW5nLCBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSB0cmFkZS1vZmYsIGJ1dCB0aGUgcmVhc29uaW5nIGlzIGxpa2VseSBjcml0aWNhbC4gQWxzbywgSSdtIG5vdGluZyB0aGUgbW9kaWZpY2F0aW9uIHRvIGB2bWFwX25vZGVfc2hyaW5rX3NjYW5gIHdoZXJlIHRoZXkncmUgcmVwbGFjaW5nIHRoZSBndWFyZGVkIG11dGV4IGFjY2VzcyB3aXRoIGBtdXRleF90cnlsb2NrYC4gVGhpcyBpcyBhbG1vc3QgY2VydGFpbmx5IGFib3V0IGRlYWRsb2NrIHByZXZlbnRpb24sIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHZtYWxsb2Mgc3Vic3lzdGVtIGFuZCByZWxhdGVkIGxvY2tpbmcgaXNzdWVzLlxuXG5UaGlzIGlzIGNsZWFybHkgZml4aW5nIGEgZGVhZGxvY2sgY29uZGl0aW9uIGludm9sdmluZyBgdm1hcF9wdXJnZV9sb2NrYCBhbmQgd29ya3F1ZXVlcy4gVGhlIGdvb2QgbmV3cyBpcywgZnJvbSBteSBpbml0aWFsIGdsYW5jZSwgdGhhdCBpdCdzIGEgKmxvY2tpbmcqIGlzc3VlLCBhbmQgbm90IHNvbWV0aGluZyBtb3JlIGluc2lkaW91cyBsaWtlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2VzcywgbWVtb3J5IGxlYWtzLCBvciBjb3JydXB0aW9uLiBUaGUgdXNlIG9mIExPQ0tERVAgaXMgdGhlIGdpdmVhd2F5LiBJZiB0aGUga2VybmVsJ3MgTE9DS0RFUCBpcyBjYXRjaGluZyBkZWFkbG9ja3MsIHdlIGFyZSBpbiBhIGZhciBiZXR0ZXIgc2l0dWF0aW9uIHRoYW4gdHJ5aW5nIHRvIGRlYnVnIGRhdGEgY29ycnVwdGlvbiB0aGF0IGNhbiBiZSB2ZXJ5IGRpZmZpY3VsdCB0byByZXByb2R1Y2UuXG5cbkkndmUgY2hlY2tlZCwgYW5kIHRoaXMgcGF0Y2ggaXNuJ3QgaW50cm9kdWNpbmcgYW55IG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQuIFRoZXJlZm9yZSwgZ2l2ZW4gdGhhdCB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIGxvY2tpbmcgaXNzdWUgYW5kIG5vdCBkYXRhIGNvcnJ1cHRpb24sIGl0IHNlZW1zIEtNU0FOIGlzbid0IG5lY2Vzc2FyeSBoZXJlLiBLQVNBTi9MT0NLREVQIGlzIHN1ZmZpY2llbnQgdG8gY2hlY2sgdGhpcyBjb2RlLiBXZSBvbmx5IG5lZWQgdGhlIGRlYWRsb2NrIGRldGVjdGlvbi5cblxuU28sIEknbSBnb2luZyB0byBzZXQgYE5lZWRzS01TQU49ZmFsc2VgIGZvciB0aGlzLiBUaGlzIGxvb2tzIGxpa2UgYSByZWFzb25hYmxlIGZpeCBmb3IgYSBrbm93biBkZWFkbG9jayBzY2VuYXJpbyBhbmQgdGhhdCdzIHRoZSBpbXBvcnRhbnQgcGFydCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODAyLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwOSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDExOjExOjIyLjM4NjQ0MzgyOVoiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVzb2x2ZXMgYSBkZWFkbG9jayBpc3N1ZSBpbnZvbHZpbmcgYHZtYXBfcHVyZ2VfbG9ja2AgYW5kIHdvcmtxdWV1ZXMgYnkgcmVtb3ZpbmcgYXN5bmNocm9ub3VzIHdvcmsgc2NoZWR1bGluZyBpbiBgX19wdXJnZV92bWFwX2FyZWFfbGF6eWAgYW5kIHVzaW5nIGBtdXRleF90cnlsb2NrYCBpbiBgdm1hcF9ub2RlX3Nocmlua19zY2FuYC4gRGVhZGxvY2tzIGFuZCBsb2NraW5nIGlzc3VlcyBhcmUgZGV0ZWN0ZWQgYnkgTE9DS0RFUCwgd2hpY2ggaXMgYWxyZWFkeSBlbmFibGVkIGluIHRoZSBzdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzLiBUaGUgY2hhbmdlcyBkbyBub3QgaW50cm9kdWNlIG9yIGV4cG9zZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGluZm8tbGVha3MsIG9yIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTiB0byBkZXRlY3QuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflown7lbn[1] Phase: Succeeded StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 11:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 11:11:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2] Phase: Succeeded StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 14:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 14:53:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 11:11:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 11:11:33 +0000 UTC FinishedAt: 2026-08-24 11:11:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown7lbn/series-workflown7lbn-convert-artifact-3838590467/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 11:11:43 +0000 UTC FinishedAt: 2026-08-24 11:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 11:11:43 +0000 UTC FinishedAt: 2026-08-24 11:27:59 +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:*4ff5be70-afd6-4a0b-b95e-035c4f43727e,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-workflown7lbn/series-workflown7lbn-convert-artifact-3838590467/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": "1eadacbe-ce4b-448f-ad82-44b2474af738", "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-workflown7lbn/series-workflown7lbn-build-action-1929309809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 11:11:43 +0000 UTC FinishedAt: 2026-08-24 11:27:49 +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:*4ff5be70-afd6-4a0b-b95e-035c4f43727e,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-workflown7lbn/series-workflown7lbn-convert-artifact-3838590467/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": "1eadacbe-ce4b-448f-ad82-44b2474af738", "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-workflown7lbn/series-workflown7lbn-build-action-1929309809/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 11:27:59 +0000 UTC FinishedAt: 2026-08-24 11:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 11:27:59 +0000 UTC FinishedAt: 2026-08-24 11:27:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 11:27:59 +0000 UTC FinishedAt: 2026-08-24 11:28:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 11:27:59 +0000 UTC FinishedAt: 2026-08-24 11:28:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown7lbn/series-workflown7lbn-convert-artifact-3898340538/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 11:28:09 +0000 UTC FinishedAt: 2026-08-24 11:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 11:28:09 +0000 UTC FinishedAt: 2026-08-24 11:29:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1eadacbe-ce4b-448f-ad82-44b2474af738,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-workflown7lbn/series-workflown7lbn-build-action-1929309809/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-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 11:30:02 +0000 UTC FinishedAt: 2026-08-24 11:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 11:30:02 +0000 UTC FinishedAt: 2026-08-24 11:30:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 11:30:02 +0000 UTC FinishedAt: 2026-08-24 11:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 11:30:02 +0000 UTC FinishedAt: 2026-08-24 11:46:40 +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:*4ff5be70-afd6-4a0b-b95e-035c4f43727e,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-workflown7lbn/series-workflown7lbn-convert-artifact-3898340538/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": "9597d2aa-b1fd-4ab9-b99f-036c61561a70", "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-workflown7lbn/series-workflown7lbn-build-action-2072683294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 11:30:02 +0000 UTC FinishedAt: 2026-08-24 11:46:30 +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:*4ff5be70-afd6-4a0b-b95e-035c4f43727e,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-workflown7lbn/series-workflown7lbn-convert-artifact-3898340538/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": "9597d2aa-b1fd-4ab9-b99f-036c61561a70", "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-workflown7lbn/series-workflown7lbn-build-action-2072683294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 11:46:40 +0000 UTC FinishedAt: 2026-08-24 11:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 11:46:40 +0000 UTC FinishedAt: 2026-08-24 11:46:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 11:46:40 +0000 UTC FinishedAt: 2026-08-24 11:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 11:46:40 +0000 UTC FinishedAt: 2026-08-24 11:48:34 +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:*9597d2aa-b1fd-4ab9-b99f-036c61561a70,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-workflown7lbn/series-workflown7lbn-build-action-2072683294/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-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 14:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 14:53:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*1eadacbe-ce4b-448f-ad82-44b2474af738,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9597d2aa-b1fd-4ab9-b99f-036c61561a70,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-workflown7lbn/series-workflown7lbn-build-action-1929309809/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-workflown7lbn/series-workflown7lbn-build-action-2072683294/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 11:48:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 11:48:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflown7lbn/series-workflown7lbn-convert-artifact-3639807727/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 11:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 11:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 11:48:44 +0000 UTC FinishedAt: 2026-08-24 11:48:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 11:48:54 +0000 UTC FinishedAt: 2026-08-24 14:53:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflown7lbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_unmap_aliases","vm_map_ram","vm_unmap_ram","vunmap","vmap"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","series_id":"aacb4ce3-6c94-4333-8515-5a8bb0be3eb0","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 11:48:54 +0000 UTC FinishedAt: 2026-08-24 14:52:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1eadacbe-ce4b-448f-ad82-44b2474af738,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*9597d2aa-b1fd-4ab9-b99f-036c61561a70,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-workflown7lbn/series-workflown7lbn-build-action-1929309809/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-workflown7lbn/series-workflown7lbn-build-action-2072683294/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-workflown7lbn/series-workflown7lbn-convert-artifact-3639807727/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,}