Name: series-workflowrw2l6 Phase: Succeeded StartedAt: 2026-08-20 07:38:46 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[0] Phase: Succeeded StartedAt: 2026-08-20 07:38:46 +0000 UTC FinishedAt: 2026-08-20 08:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 07:38:46 +0000 UTC FinishedAt: 2026-08-20 08:10:54 +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": "36f0f67c5c0065f65c0f4ee459cddbfe4045bccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "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": "36f0f67c5c0065f65c0f4ee459cddbfe4045bccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "c93a23cf-8cc4-4336-a353-b310d54701ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHRha2luZyBmb2xpb3MgZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGFkZGluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uIGluIGBmaWxsX2V2aWN0YWJsZSgpYC4gSXQgY2hhbmdlcyB0aGUgbGlzdCBleHRyYWN0aW9uIHRvIHRha2UgZnJvbSB0aGUgaGVhZCBvciB0YWlsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhY3RpdmUsIGFuZCBwYXNzZXMgYCFhY3RpdmVgIHRvIGBscnVfZ2VuX2FkZF9mb2xpbygpYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gbGlzdCBvcmRlcmluZyBhbmQgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgZG8gbm90IHNlbmQgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaWxsX2V2aWN0YWJsZWAgd2hlcmUgZm9saW9zIHdlcmUgdGFrZW4gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0IHdoZW4gbW92aW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChNR0xSVSkgdGhhdCBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIHRvZ2dsaW5nIG9mIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjRlZWEwNmNjMDBjM2ZjMTBjMTk1M2RjMmYzZmIzNmI4YTVlMTlhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA4OjA5OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgJiM0Mzs1MzAyLDIzIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdFx0Ym9vbCBzdWNjZXNzO1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbiYjNDM7XHRcdFx0ICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZVxuJiM0MztcdFx0XHQgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmVcbiYjNDM7XHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZVxuJiM0MztcdFx0XHQgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbiYjNDM7XHRcdFx0ICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZFxuJiM0MztcdFx0XHQgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChhY3RpdmUpXG4mIzQzO1x0XHRcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICYjNDM7NTMyNiwxNiBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7XG4gXG4gXHRcdFx0bHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZFxuJiM0MztcdFx0XHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5faXNfYWN0aXZlKCkgcmVwb3J0cyBhcyBhY3RpdmUsIHNvIGl0cyBpbmFjdGl2ZVxuJiM0MztcdFx0XHQgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvXG4mIzQzO1x0XHRcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcbiYjNDM7XHRcdFx0ICogcmV1c2VzIHJlY2xhaW1pbmcgYmV5b25kIGl0cyBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKVxuJiM0MztcdFx0XHQgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYCB3aGVyZSBmb2xpb3Mgd2VyZSB0YWtlbiBmcm9tIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGxpc3Qgd2hlbiBtb3ZpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1HTFJVKSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgdG9nZ2xpbmcgb2YgTUdMUlUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGVlYTA2Y2MwMGMzZmMxMGMxOTUzZGMyZjNmYjM2YjhhNWUxOWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDg6MDk6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MzAyLDcgJiM0Mzs1MzAyLDIzIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIAogCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJCWJvb2wgc3VjY2VzczsKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZQomIzQzOwkJCSAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGUKJiM0MzsJCQkgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmUKJiM0MzsJCQkgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmQKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2UKJiM0MzsJCQkgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlCiYjNDM7CQkJICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLAomIzQzOwkJCSAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmQKJiM0MzsJCQkgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTsKQEAgLTUzMTAsNyAmIzQzOzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7CiAKIAkJCWxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogV2l0aCByZWNsYWltaW5nPWZhbHNlLCBscnVfZ2VuX2ZvbGlvX3NlcSgpIHdvdWxkIHNlZWQKJiM0MzsJCQkgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoCiYjNDM7CQkJICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlCiYjNDM7CQkJICogcGxhY2VtZW50IHdvdWxkIGJlIGxvc3QuICBQYXNzIHJlY2xhaW1pbmc9IWFjdGl2ZSB0bwomIzQzOwkJCSAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXMKJiM0MzsJCQkgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpCiYjNDM7CQkJICogbWVhbmluZzsgaXQgYWxzbyBwaWNrcyBsaXN0X2FkZF90YWlsKCkgYWJvdmUuCiYjNDM7CQkJICovCiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwogCQkJVk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTsKIAogCQkJaWYgKCEtLXJlbWFpbmluZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgd2hlbiB0aGV5JiMzOTtyZSB0YWtlbiBmcm9tIHRoZSBMUlUgbGlzdCBhbmQgaG93IHRoZXkmIzM5O3JlIGFkZGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoZSBjb2RlIGRpZmYsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CgpgYGBjCi0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQkJaWYgKGFjdGl2ZSkKJiM0MzsJCQkJZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpOwpgYGAKCmFuZAoKYGBgYwotCQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTsKJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CmBgYAoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSAoTUdMUlUvdm1zY2FuKSwgbWVhbmluZyB0aGlzIHdpbGwgYWZmZWN0IGhvdyBtZW1vcnkgaXMgcmVjbGFpbWVkLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIGBmaWxsX2V2aWN0YWJsZWAgYSBzdGF0aWMgZnVuY3Rpb24/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgYnJvYWRseSB0aGUgY2hhbmdlIGNvdWxkIHJpcHBsZSBvdXQuIExldCBtZSBxdWlja2x5IGNoZWNrLi4uIE9rYXksIGdvb2QsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gTm93LCB3aGVyZSBpcyBpdCAqY2FsbGVkKj8gVGhhdCYjMzk7cyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01Mzc4PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDEyLVxubW0vdm1zY2FuLmM6NTQxMzpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQxNC1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqVHJhY2luZyB0aGUgTFJVIEV2aWN0aW9uIFBhdGgqKgoKUmlnaHQsIGBmaWxsX2V2aWN0YWJsZWAgaXMgdHJpZ2dlcmVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFdoYXQmIzM5O3MgZHJpdmluZyAqdGhhdCogc3RhdGUgY2hhbmdlPyBJdCBzZWVtcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBXaGVyZSBhcmUgdGhlIGNhbGwgc2l0ZXMgZm9yICp0aGF0KiBmdW5jdGlvbj8gV2hhdCB0cmlnZ2VycyB0aGUgY2hhbmdlcyB0aGF0ICp0aGVuKiByZXF1aXJlIHRoZSBldmljdGlvbiBtZWNoYW5pc20gdG8gY29tZSBpbnRvIHBsYXk/IEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeSBhbmQgd2hlbiB0aG9zZSB0cmlnZ2VycyBmb3IgZXZpY3Rpb24gaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTM0OT1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNzctXG5tbS92bXNjYW4uYzo1Mzc4OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNzkte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NzY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0OTItXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0OTM6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDk0LVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gdXNlcnNwYWNlIHdyaXRpbmcgdG8gdGhhdCBzeXNmcyBmaWxlLiBTbywgbGlrZWx5IGNoYW5naW5nIHNvbWUgc29ydCBvZiBlbmFibGluZyBzdGF0ZS4gRmluZS4gQnV0LCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcG9pbnRzIG9mIGFjY2VzcyBmb3IgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgbm90IGp1c3QgdGhpcyBvbmUuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBOb3csIGxldCBtZSBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGlzIHNtYWxsIGRldGFpbCBtYXkgYmUgbW9yZSBzaWduaWZpY2FudC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU0NTk9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU0NzY6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vdm1zY2FuLmMtNTQ3Ny1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgZW5hYmxlZF9zdG9yZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYGVuYWJsZWRfc3RvcmVgIHZhcmlhYmxlIChvciByZWxhdGVkIGNvZGUpLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGFydGljdWxhciBtZWNoYW5pc20gbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWluZyBzdG9yZWQsIHdoZW4gaXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aHkqLiBJcyBpdCBhIGZsYWcsIGEgY291bnRlciwgYSBiaXRtYXNrPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB0aHJvdHRsaW5nIG9yIHJlc291cmNlIGxpbWl0aW5nPyBJcyB0aGlzIHdoZXJlIHRoZSBjb250cm9sIG92ZXIgdGhlIHNjYW4gcHJvY2VzcyBpcyByZWFsbHkgaGFwcGVuaW5nPyBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nISBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlLCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSB3cml0ZXMgYW5kIHJlYWRzLCBhbmQgdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTQ1ND1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9lbmFibGVkKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ2MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjItXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBlbmFibGVkX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDkxOlx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Mi1cdC5nZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX2xvYWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM3NT1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxubW0vZGFtb24vcmVjbGFpbS5jOjM4MjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgzLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBlbmFibGVkX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6XHQuc2V0ID0gZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cdC5nZXQgPSBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZCxcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTgtXG5tbS9kYW1vbi9zdGF0LmM6MTk6c3RhdGljIGludCBkYW1vbl9zdGF0X2VuYWJsZWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjAtXHRcdGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApO1xuLS1cbm1tL2RhbW9uL3N0YXQuYz0yNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgZW5hYmxlZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9zdGF0LmM6MjY6XHQuc2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlLFxubW0vZGFtb24vc3RhdC5jLTI3LVx0LmdldCA9IGRhbW9uX3N0YXRfZW5hYmxlZF9sb2FkLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMzI9c3RhdGljIGJvb2wgZGFtb25fc3RhdF9lbmFibGVkKHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIzOC1cbm1tL2RhbW9uL3N0YXQuYzoyMzk6c3RhdGljIGludCBkYW1vbl9zdGF0X2VuYWJsZWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjQwLVx0XHRjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI0PXN0YXRpYyBib29sIHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKGVudW0gZ2xvYmFsX2VuYWJsZWRfbW9kZSBtb2RlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0LVxubW0vaHVnZV9tZW1vcnkuYzo0NDU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2LVx0XHRcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY3OS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjgwOnN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2VfbWVtb3J5LmMtNjgxLVx0XHRcdFx0ICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MDg9c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBhbm9uX2VuYWJsZWRfYXR0ciA9XG5tbS9odWdlX21lbW9yeS5jOjcwOTpcdF9fQVRUUihlbmFibGVkLCAwNjQ0LCBhbm9uX2VuYWJsZWRfc2hvdywgYW5vbl9lbmFibGVkX3N0b3JlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNzEwLVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTk0Mz1zdGF0aWMgc3NpemVfdCBkZW1vdGlvbl9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtOTQ4LVxubW0vbWVtb3J5LXRpZXJzLmM6OTQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90aW9uX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9tZW1vcnktdGllcnMuYy05NTAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vc2htZW0uYz01NDMzPXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jLTU0NTYtXG5tbS9zaG1lbS5jOjU0NTc6c3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL3NobWVtLmMtNTQ1OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9zaG1lbS5jPTU1Mzg9c3RhdGljIGJvb2wgc2V0X3NobWVtX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gaHVnZV9tb2RlIG1vZGUpXG4tLVxubW0vc2htZW0uYy01NTU0LVxubW0vc2htZW0uYzo1NTU1OnN0YXRpYyBzc2l6ZV90IHRocHNpemVfc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL3NobWVtLmMtNTU1Ni1cdFx0XHRcdFx0ICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3NobWVtLmM9NTU4Nz1zdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIgPVxubW0vc2htZW0uYzo1NTg4Olx0X19BVFRSKHNobWVtX2VuYWJsZWQsIDA2NDQsIHRocHNpemVfc2htZW1fZW5hYmxlZF9zaG93LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc3RvcmUpO1xubW0vc2htZW0uYy01NTg5LSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2IENPTkZJR19TWVNGUyAqL1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTEwMzctfVxubW0vc3dhcF9zdGF0ZS5jOjEwMzg6c3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9zd2FwX3N0YXRlLmMtMTAzOS1cdFx0XHRcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vdm1zY2FuLmMtNTQ3NS0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL3Ztc2Nhbi5jLTU0NzctXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSYjMzk7cyBFbmFibGluZyBhbmQgRGlzYWJsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IE1HTFJVJiMzOTtzIHN0YXRlIGlzIGNvbnRyb2xsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgaW4gcmVsYXRpb24gdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byBiZSBjbGVhciBvbiB3aGVyZSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1dGlsaXplZCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhvc2Ugc3RhdGUgY2hhbmdlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgb25seSBnZXQgY2FsbGVkIHdoZW4gTUdMUlUgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzLiBJZiBzbywgdGhlbiBob3csIGluIGRldGFpbCwgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byBhbmFseXplIHRoZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgb2ZmZXIgc29tZSBjbGFyaXR5LiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTM3Ny1cbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxubW0vdm1zY2FuLmMtNTM3OS17XG4tLVxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTQ5Mi1cdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxubW0vdm1zY2FuLmM6NTQ5MzpcdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbm1tL3Ztc2Nhbi5jLTU0OTQtXHRcdGVsc2UgaWYgKGVuYWJsZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gUGFnZSBFdmljdGlvbioqCgpPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGdldHMgdHJpZ2dlcmVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBgZW5hYmxlZF9zdG9yZWAuIEdvdCBpdC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBwYXRoLCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJcyBgZmlsbF9ldmljdGFibGVgICpvbmx5KiBjYWxsZWQgZnJvbSB0aGF0IHNwZWNpZmljIGNhbGwgY2hhaW4/IEkgY2FuJiMzOTt0IGFzc3VtZSB0aGF0LiBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQuCgpSaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtbS92bXNjYW4uY2AuIEEgcXVpY2sgc2VhcmNoIGZvciBgZmlsbF9ldmljdGFibGVgIHNob3VsZCByZXZlYWwgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBHb3R0YSBjaGVjayB0aGUgb3RoZXIgY29kZXBhdGhzIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01Mzc4PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDEyLVxubW0vdm1zY2FuLmM6NTQxMzpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQxNC1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUdMUlUgVG9nZ2xlIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgY29kZSwgdGhlIG9uZSBJJiMzOTttIGxvb2tpbmcgYXQsIGlzIG9ubHkgY2FsbGVkIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgd2hpY2ggaXMgdmVyeSBzcGVjaWZpYy4gVGhhdCBtZWFucyBpdCBvbmx5IGdldHMgZXhlY3V0ZWQgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlIHRvIHR1cm4gTUdMUlUgb24gb3Igb2ZmLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQuIENhbiB0aGlzIGNvZGUgcGF0aCBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8gVGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBiZWNhdXNlIHN5c2ZzIGlzIHVzdWFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gYSBWTS4gU28gdGhhdCYjMzk7cyBvbmUgbGVzcyBiYXJyaWVyIHRvIGVudHJ5LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBNR0xSVSkuIEFueSBjb2RlIHRoYXQgYWx0ZXJzIHRoYXQgY3JpdGljYWwgY29tcG9uZW50IGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgaXMgc2lnbmlmaWNhbnQgaGVyZS4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vdm1zY2FuLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhcm91bmQgYGZpbGxfZXZpY3RhYmxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBibG9ja3MgdGhhdCBtaWdodCBnYXRlIHRoaXMgbG9naWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHJhbmdlIG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHBvc3NpYmxlIGJlZm9yZSBJIHN0YXJ0IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjgwOlx0XHRcdH1cbjUyODE6XHRcdH0gZWxzZSB7XG41MjgyOlx0XHRcdGludCBnZW4sIHR5cGUsIHpvbmU7XG41MjgzOlx0XG41Mjg0Olx0XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKSB7XG41Mjg1Olx0XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSkpXG41Mjg2Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG41Mjg3Olx0XHRcdH1cbjUyODg6XHRcdH1cbjUyODk6XHRcbjUyOTA6XHRcdHJldHVybiB0cnVlO1xuNTI5MTpcdH1cbjUyOTI6XHRcbjUyOTM6XHRzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG41Mjk0Olx0e1xuNTI5NTpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG41Mjk2Olx0XHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbjUyOTc6XHRcbjUyOTg6XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobHJ1KSB7XG41Mjk5Olx0XHRcdGludCB0eXBlID0gaXNfZmlsZV9scnUobHJ1KTtcbjUzMDA6XHRcdFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XG41MzAxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbjUzMDI6XHRcbjUzMDM6XHRcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG41MzA0Olx0XHRcdFx0Ym9vbCBzdWNjZXNzO1xuNTMwNTpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG41MzA2Olx0XG41MzA3Olx0XHRcdFx0LypcbjUzMDg6XHRcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbjUzMDk6XHRcdFx0XHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXG41MzEwOlx0XHRcdFx0ICogdGFpbCwgYW5kIHJlY2xhaW0gdGFrZXMgZnJvbSB0aGUgdGFpbC4gIFRvIHByZXNlcnZlXG41MzExOlx0XHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG41MzEyOlx0XHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXG41MzEzOlx0XHRcdFx0ICogcmVjbGFpbWluZz10cnVlIChsaXN0X2FkZF90YWlsKSwgc28gdGFrZSBmcm9tIHRoZVxuNTMxNDpcdFx0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbjUzMTU6XHRcdFx0XHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXG41MzE2Olx0XHRcdFx0ICogd291bGQgcmV2ZXJzZSBob3QvY29sZCB3aXRoaW4gdGhlIGdlbmVyYXRpb24uXG41MzE3Olx0XHRcdFx0ICovXG41MzE4Olx0XHRcdFx0aWYgKGFjdGl2ZSlcbjUzMTk6XHRcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuNTMyMDpcdFx0XHRcdGVsc2VcbjUzMjE6XHRcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG41MzIyOlx0XG41MzIzOlx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG41MzI0Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbjUzMjU6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbjUzMjY6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbjUzMjc6XHRcbjUzMjg6XHRcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuNTMyOTpcdFx0XHRcdC8qXG41MzMwOlx0XHRcdFx0ICogV2l0aCByZWNsYWltaW5nPWZhbHNlLCBscnVfZ2VuX2ZvbGlvX3NlcSgpIHdvdWxkIHNlZWRcbjUzMzE6XHRcdFx0XHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXG41MzMyOlx0XHRcdFx0ICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlXG41MzMzOlx0XHRcdFx0ICogcGxhY2VtZW50IHdvdWxkIGJlIGxvc3QuICBQYXNzIHJlY2xhaW1pbmc9IWFjdGl2ZSB0b1xuNTMzNDpcdFx0XHRcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcbjUzMzU6XHRcdFx0XHQgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpXG41MzM2Olx0XHRcdFx0ICogbWVhbmluZzsgaXQgYWxzbyBwaWNrcyBsaXN0X2FkZF90YWlsKCkgYWJvdmUuXG41MzM3Olx0XHRcdFx0ICovXG41MzM4Olx0XHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuNTMzOTpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG41MzQwOlx0XG41MzQxOlx0XHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbjUzNDI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbjUzNDM6XHRcdFx0fVxuNTM0NDpcdFx0fVxuNTM0NTpcdFxuNTM0NjpcdFx0cmV0dXJuIHRydWU7XG41MzQ3Olx0fVxuNTM0ODpcdFxuNTM0OTpcdHN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG41MzUwOlx0e1xuNTM1MTpcdFx0aW50IGdlbiwgdHlwZSwgem9uZTtcbjUzNTI6XHRcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xuNTM1MzpcdFxuNTM1NDpcdFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpIHtcbjUzNTU6XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4uZm9saW9zW2dlbl1bdHlwZV1bem9uZV07XG41MzU2Olx0XG41MzU3Olx0XHRcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xuNTM1ODpcdFx0XHRcdGJvb2wgc3VjY2VzcztcbjUzNTk6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuNTM2MDpcdFxuNTM2MTpcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuNTM2MjpcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTtcbjUzNjM6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbjUzNjQ6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pO1xuNTM2NTpcdFxuNTM2NjpcdFx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG41MzY3Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbjUzNjg6XHRcdFx0XHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuNTM2OTpcdFxuNTM3MDpcdFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG41MzcxOlx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzcyOlx0XHRcdH1cbjUzNzM6XHRcdH1cbjUzNzQ6XHRcbjUzNzU6XHRcdHJldHVybiB0cnVlO1xuNTM3NjpcdH1cbjUzNzc6XHRcbjUzNzg6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG41Mzc5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZmlsbF9ldmljdGFibGVgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCwgbGlrZWx5IGJhc2VkIG9uIHNvbWUgZmVhdHVyZSBmbGFnLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaW1wbHlpbmcgaXQgcGxheXMgYSByb2xlIGluIGEgbW9yZSBhZHZhbmNlZCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGltcGxlbWVudGF0aW9uIG9yIHNvbWUgdmFyaWFudCBvZiBwYWdlIGFnaW5nLgoKTXkgZmlyc3QgbW92ZSBpcyB0byBzY2FuIHRoZSBjb2RlIHRvIHZlcmlmeSBpZiB0aGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCBpbmRlZWQgZW5jbG9zZXMgdGhlIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gb2YgYGZpbGxfZXZpY3RhYmxlYC4gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgYSBjbHVlIGFzIHRvIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmN5LiBUaGUgcGxhY2VtZW50IHdpbGwgaW5kaWNhdGUgaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2s7IGl0JiMzOTtsbCBjbGFyaWZ5IHdoZXRoZXIgYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3RpdmVseSB1c2VkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgYW4gb3B0aW9uYWwgY29tcG9uZW50LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkIGJ5IGBMUlVfR0VOYCwgdG8gZ2FpbiBzb21lIGluc2lnaHQgaW50byBgZmlsbF9ldmljdGFibGVgJiMzOTtzIHJvbGUgaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTEtXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjY5My1cbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkwMS1cbi0tXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzctXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwMzktXG4tLVxubW0vdm1zY2FuLmM9NTk2OD1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTY5LVxubW0vdm1zY2FuLmM6NTk3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NzEtXG4tLVxubW0vdm1zY2FuLmM9NTk4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODYtXG5tbS92bXNjYW4uYzo1OTg3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb2RlKioKCk9rYXksIEkmIzM5O20gY2hlY2tpbmcgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gaXMgaW5kZWVkIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGxpbmUgbnVtYmVycywgYGZpbGxfZXZpY3RhYmxlYCBpcyBhcm91bmQgbGluZSA1MjkzLCBhbmQgdGhlIGAjZWxzZWAgZm9yIHRoZSBjb25kaXRpb25hbCBpcyBhcm91bmQgNTk3MCwgc28gaXQgbG9va3MgbGlrZSB0aGF0IGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuCgpOb3csIGEgcXVpY2sgdGhvdWdodDogaXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXM/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgPyBUaGUgZmlyc3Qgb25lIGp1c3QgKmRlZmluZXMqIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIG90aGVyIHBhcmFtZXRlciBtaWdodCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgc3RpbGwgYWxsb3dpbmcgaXQgdG8gYmUgdG9nZ2xlZCB2aWEgc3lzZnMsIHJpZ2h0PwoKVGhpbmtpbmcgYWJvdXQgdGhhdCBzeXNmcyBvcHRpb24sIHdoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIG5hbWU/IEFoIHllcywgYGVuYWJsZWRfc3RvcmVgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpdHNlbGYgaXMgZGVwZW5kZW50IG9uLCBzYXksIGBDT05GSUdfU1lTRlNgIGJlaW5nIGVuYWJsZWQuLi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTQ1OT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NzUtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xubW0vdm1zY2FuLmM6NTQ3NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS92bXNjYW4uYy01NDc3LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGVuYWJsZWRfc3RvcmVgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgZW5hYmxlZF9zdG9yZWAuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIHNjb3BlIGl0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4mIzM0OyBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvIHRha2UgdGhpcyB0ZXJtIGF0IGZhY2UgdmFsdWU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCB1c2VkPyBXaGF0IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIG5lYXIgaXQgaW4gdGhlIGNvZGViYXNlPyBXaGF0JiMzOTtzIHRoZSBnZW5lcmFsIGRlc2lnbiBwYXR0ZXJuIGF0IHBsYXkgYXJvdW5kIGl0PwoKSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiBmbGFnLCBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSwgb3IgcGFydCBvZiBhIGxhcmdlciBzdGF0ZSBtYW5hZ2VtZW50IHN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbG9jYWwgdG8gYSBmdW5jdGlvbiwgb3IgaXMgdGhpcyBhIGdsb2JhbCBvciBzaGFyZWQgcmVzb3VyY2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBpZiBpdCYjMzk7cyBtb2RpZmllZCBpbiBtdWx0aXBsZSBwbGFjZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgb24gdGhpcyBvciBkZXBlbmRlbmNpZXMgaXQgdXNlcz8gSXMgaXQgc2ltcGx5IHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgb3IgbW9yZSBjb21wbGljYXRlZD8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzNDtlbmFibGVkJiMzNDsgbWVhbnMgaW4gKnRoaXMqIGNvbnRleHQuIElzIGl0IGFib3V0IGZlYXR1cmUgZmxhZ3MsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYWNjZXNzIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZG9jdW1lbnRhdGlvbiBtYXkgY2xhcmlmeSwgYnV0IEkgd2FudCB0byBnZXQgYSBwaWN0dXJlIG9mIGl0IGJ5IGludmVzdGlnYXRpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBhbmQgaG93LiBMZXQmIzM5O3Mgc2VlIGhvdyBtdWNoIG9mIHRoZSBjb2RlIEkgY2FuIHF1aWNrbHkgc2NhbiwgZmluZCBhbnkgcXVpY2sgY2x1ZXMsIGFuZCB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgYSBoeXBvdGhlc2lzIGFib3V0IGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NDUxOlx0XG41NDUyOlx0XHRXUklURV9PTkNFKGxydV9nZW5fbWluX3R0bCwgbXNlY3NfdG9famlmZmllcyhtc2VjcykpO1xuNTQ1MzpcdFxuNTQ1NDpcdFx0cmV0dXJuIGxlbjtcbjU0NTU6XHR9XG41NDU2Olx0XG41NDU3Olx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX21pbl90dGxfYXR0ciA9IF9fQVRUUl9SVyhtaW5fdHRsX21zKTtcbjU0NTg6XHRcbjU0NTk6XHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuNTQ2MDpcdHtcbjU0NjE6XHRcdHVuc2lnbmVkIGludCBjYXBzID0gMDtcbjU0NjI6XHRcbjU0NjM6XHRcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXG41NDY0Olx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XG41NDY1Olx0XG41NDY2Olx0XHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXG41NDY3Olx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XG41NDY4Olx0XG41NDY5Olx0XHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxuNTQ3MDpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xuNTQ3MTpcdFxuNTQ3MjpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwNHhcXG5cJiMzNDssIGNhcHMpO1xuNTQ3MzpcdH1cbjU0NzQ6XHRcbjU0NzU6XHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG41NDc2Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuNTQ3NzpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuNTQ3ODpcdHtcbjU0Nzk6XHRcdGludCBpO1xuNTQ4MDpcdFx0dW5zaWduZWQgaW50IGNhcHM7XG41NDgxOlx0XG41NDgyOlx0XHRpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O24mIzM5OylcbjU0ODM6XHRcdFx0Y2FwcyA9IDA7XG41NDg0Olx0XHRlbHNlIGlmICh0b2xvd2VyKCpidWYpID09ICYjMzk7eSYjMzk7KVxuNTQ4NTpcdFx0XHRjYXBzID0gLTE7XG41NDg2Olx0XHRlbHNlIGlmIChrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2Y2FwcykpXG41NDg3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTQ4ODpcdFxuNTQ4OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpJiM0MzsmIzQzOykge1xuNTQ5MDpcdFx0XHRib29sIGVuYWJsZWQgPSBjYXBzIFx1MDAyNiBCSVQoaSk7XG41NDkxOlx0XG41NDkyOlx0XHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbjU0OTM6XHRcdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbjU0OTQ6XHRcdFx0ZWxzZSBpZiAoZW5hYmxlZClcbjU0OTU6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTQ5NjpcdFx0XHRlbHNlXG41NDk3Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XG41NDk4Olx0XHR9XG41NDk5Olx0XG41NTAwOlx0XHRyZXR1cm4gbGVuO1xuNTUwMTpcdH1cbjU1MDI6XHRcbjU1MDM6XHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xuNTUwNDpcdFxuNTUwNTpcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XG41NTA2Olx0XHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxuNTUwNzpcdFx0XHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcbjU1MDg6XHRcdE5VTExcbjU1MDk6XHR9O1xuNTUxMDpcdFxuNTUxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcbjU1MTI6XHRcdC5uYW1lID0gXCYjMzQ7bHJ1X2dlblwmIzM0OyxcbjU1MTM6XHRcdC5hdHRycyA9IGxydV9nZW5fYXR0cnMsXG41NTE0Olx0fTtcbjU1MTU6XHRcbjU1MTY6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG41NTE3Olx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZnMgaW50ZXJmYWNlXG41NTE4Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjU1MTk6XHRcbjU1MjA6XHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbjU1MjE6XHR7XG41NTIyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NTIzOlx0XHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XG41NTI0Olx0XG41NTI1Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XG41NTI2Olx0XHRpZiAoIW0tXHUwMDNlcHJpdmF0ZSlcbjU1Mjc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG41NTI4Olx0XG41NTI5Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjU1MzA6XHRcdGRvIHtcbjU1MzE6XHRcdFx0aW50IG5pZDtcbjU1MzI6XHRcbjU1MzM6XHRcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG41NTM0Olx0XHRcdFx0aWYgKCFucl90b19za2lwLS0pXG41NTM1Olx0XHRcdFx0XHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU1MzY6XHRcdFx0fVxuNTUzNzpcdFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xuNTUzODpcdFxuNTUzOTpcdFx0cmV0dXJuIE5VTEw7XG41NTQwOlx0fVxuNTU0MTpcdFxuNTU0MjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTU0MzpcdHtcbjU1NDQ6XHRcdGlmICghSVNfRVJSX09SX05VTEwodikpXG41NTQ1Olx0XHRcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhOVUxMLCBscnV2ZWNfbWVtY2codikpO1xuNTU0NjpcdFxuNTU0NzpcdFx0a3ZmcmVlKG0tXHUwMDNlcHJpdmF0ZSk7XG41NTQ4Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBOVUxMO1xuNTU0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTUdMUlUgU3RhdGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgd3JpdGVzIHRvIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgaXMgc3RhdGljLCB3aGljaCBJIGV4cGVjdGVkLCBidXQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIGZ1enppbmcgdGhpcyBpcyBhY3R1YWxseSB3b3J0aHdoaWxlLCB5ZXMsIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gTUdMUlUgdGhhdCBjb3VsZCBiZSB2dWxuZXJhYmxlLgoKTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpdHNlbGYsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYy4gSG1tLCBhbmQgYGVuYWJsZWRfc3RvcmVgIHdoaWNoIGNhbGxzIGl0IGlzIGFsc28gc3RhdGljLCBzbyBteSBnb2FsIG9mIGRpcmVjdGx5IGZ1enppbmcgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBwcm9iYWJseSBub3QgZ29pbmcgdG8gd29yay4KCkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZW50cnkgcG9pbnRzLiBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2YgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgY2FsbGVyIGlzIGBlbmFibGVkX3N0b3JlYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBmcm9tIGBscnVfZ2VuX2luaXRfbWVtY2dgIG9yIHNpbWlsYXIsIGJ1dCBpdCYjMzk7cyBvbmx5IGBlbmFibGVkX3N0b3JlYC4KClRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGVudGlyZSBgbW0vdm1zY2FuLmNgIGZpbGUgdG8gY2hlY2sgaWYgaXQmIzM5O3MgcmVmZXJlbmNlZCBhbnl3aGVyZSBlbHNlLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0byBzZWUgaWYgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBhY3R1YWxseSB1c2VkIHNvbWV3aGVyZSBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUzNDk9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01Mzc3LVxubW0vdm1zY2FuLmM6NTM3ODpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG5tbS92bXNjYW4uYy01Mzc5LXtcbi0tXG5tbS92bXNjYW4uYz01NDc2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDkyLVx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYzo1NDkzOlx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ5NC1cdFx0ZWxzZSBpZiAoZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBQYXRoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBlbmFibGVkX3N0b3JlYCB3b3JrcyB3aXRoaW4gdGhpcyBzeXNmcyBzZXR1cC4gU2luY2UgaXQmIzM5O3MgaW52b2tlZCB0aHJvdWdoIHRoZSBgc3lzZnNfa2Zfd3JpdGVgIHBhdGgsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGEgZGlyZWN0IGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdz8gVGhhdCBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzIHRlbXB0aW5nLCBidXQgc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGFyZW4mIzM5O3QgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBhIGJyb2FkIG92ZXJ2aWV3LgoKSW5zdGVhZCwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCB0cnkgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGNoZWNraW5nIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgZ2l2ZW4gdGhhdCBNR0xSVSBoYXMgc3Ryb25nIHRpZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBgdm1zY2FuYC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBzb21lIHB1YmxpY2x5IHZpc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHJlbGF0ZWQgdG8gTUdMUlUmIzM5O3MgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyBNR0xSVSBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG1haW4gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBscnVfZ2VuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI5MjM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMjk0MS1cbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5NDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NjgtXG5tbS92bXNjYW4uYzoyOTY5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTcwLXtcbi0tXG5tbS92bXNjYW4uYy0zMDA4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMDk6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDEwLXtcbi0tXG5tbS92bXNjYW4uYz00MzgyPXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0MjktXG5tbS92bXNjYW4uYzo0NDMwOnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQzMS17XG4tLVxubW0vdm1zY2FuLmMtNDQ1NC1cbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ1Ni17XG4tLVxubW0vdm1zY2FuLmMtNDQ2NS1cbm1tL3Ztc2Nhbi5jOjQ0NjY6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ2Ny17XG4tLVxubW0vdm1zY2FuLmMtNDQ5MS1cbm1tL3Ztc2Nhbi5jOjQ0OTI6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NDkzLXtcbi0tXG5tbS92bXNjYW4uYz00NTg5PXN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDYxOS1cbm1tL3Ztc2Nhbi5jOjQ2MjA6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xuLS1cbm1tL3Ztc2Nhbi5jPTU4Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTU4NzgtXG5tbS92bXNjYW4uYzo1ODc5OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG5tbS92bXNjYW4uYy01ODgwLXtcbi0tXG5tbS92bXNjYW4uYy01ODkwLVxubW0vdm1zY2FuLmM6NTg5MTp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTg5Mi17XG4tLVxubW0vdm1zY2FuLmMtNTkxMi1cbm1tL3Ztc2Nhbi5jOjU5MTM6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNTkxNC17XG4tLVxubW0vdm1zY2FuLmMtNTkyMy1cbm1tL3Ztc2Nhbi5jOjU5MjQ6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNTkyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgTW9kaWZpZWQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgZ2V0dGluZyBleGVjdXRlZC4gSSBzZWUgdGhpcyBtb2RpZmllZCBzZWN0aW9uLCBidXQgaXQgb25seSBzZWVtcyB0byBiZSBhY2Nlc3NpYmxlIHdoZW4gSSB0b2dnbGUgTUdMUlUgb24gb3Igb2ZmLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZHluYW1pY2FsbHkgbGlua2VkIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBwYXRoLiBBaCwgYGVuYWJsZWRfc3RvcmVgIGlzIGFuIGF0dHJpYnV0ZSBzdG9yZSBmdW5jdGlvbi4gUmlnaHQsIGF0dHJpYnV0ZSBzdG9yZXMgYXJlIG9mdGVuIGR5bmFtaWNhbGx5IGNhbGxlZCBvciBhY2Nlc3NlZCB2aWEgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IC0geWVzLCBgZW5hYmxlZF9zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGxydV9nZW5fYXR0cl9ncm91cGAuIE9rYXksIHNvIGBscnVfZ2VuX2F0dHJfZ3JvdXBgIGlzIHRoZSBpbXBvcnRhbnQgYml0IGhlcmUuIE5vdyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgKnRoYXQqIGlzIHVzZWQgdG8gc2VlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGdyb3VwaW5nIGdldHMgY2FsbGVkLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fYXR0cl9ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU1MDU9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbi0tXG5tbS92bXNjYW4uYy01NTEwLVxubW0vdm1zY2FuLmM6NTUxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG5tbS92bXNjYW4uYy01NTEyLVx0Lm5hbWUgPSBcJiMzNDtscnVfZ2VuXCYjMzQ7LFxuLS1cbm1tL3Ztc2Nhbi5jPTU5NTM9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtNTk1Ny1cbm1tL3Ztc2Nhbi5jOjU5NTg6XHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFx1MDAyNmxydV9nZW5fYXR0cl9ncm91cCkpXG5tbS92bXNjYW4uYy01OTU5LVx0XHRwcl9lcnIoXCYjMzQ7bHJ1X2dlbjogZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBncm91cFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXNmcyBTdG9yZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGBzeXNmc2Agc3RvcmUsIG5vdGhpbmcgdG9vIGNvbXBsaWNhdGVkLiBJIGNhbiBlaXRoZXIgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkgb3IgcHJvdmlkZSBgZW5hYmxlZF9zdG9yZWAsIGJ1dCBzaW5jZSB0aGF0JiMzOTtzIHN0YXRpYywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGl0IGVtcHR5IGZvciBub3cuIEhtbSwgbG9va3MgbGlrZSBgZmlsbF9ldmljdGFibGVgLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIGFyZSBhbGwgc3RhdGljLiBFbXB0eSBgRm9jdXNTeW1ib2xzYCBpdCBpcy4gTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBsb29rIG5leHQuIEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgcmVxdWlyZW1lbnQuIE9rYXksIG1vdmluZyBvbiwgbGV0JiMzOTtzIHNlZSBpZiBgQ09ORklHX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkLiBJIHNlZSB0aGF0IGBzeXNmc19jcmVhdGVfZ3JvdXBgIGlzIGp1c3QgYSBzdHViIGlmIGBDT05GSUdfU1lTRlNgIGlzbiYjMzk7dCBzZXQsIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJiMzOTt0IG1lYW4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgYmUgY29tcGlsZWQgaWYgU1lTRlMgaXNuJiMzOTt0IGVuYWJsZWQuIEJldHRlciBkb3VibGUtY2hlY2sgaWYgYGVuYWJsZWRfc3RvcmVgIGlzIGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1lTRlNgLiBOZWVkIHRvIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MTI4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbm1tL3Ztc2Nhbi5jLTgxMjktXG5tbS92bXNjYW4uYzo4MTMwOiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYy04MTMxLXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBlbmFibGVkX3N0b3JlYCBWYXJpYWJsZSoqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCB0aGUgYGVuYWJsZWRfc3RvcmVgIHZhcmlhYmxlLCByZWxhdGVkIHRvIHRoZSB2bXNjYW4gc3Vic3lzdGVtLCB3YXMgcHJvdGVjdGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrLiBCdXQgYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGRvZXNuJiMzOTt0IHNlZW0gdG8gY29uZmlybSB0aGF0LiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgY29uZmluZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBtbS92bXNjYW4uY2Agc291cmNlIGZpbGUuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhcm91bmQgd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBhbmQgZGV0ZXJtaW5lIGlmIG15IG9yaWdpbmFsIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY3kgb24gYFNZU0ZTYCB3YXMgaW5hY2N1cmF0ZSwgb3IgaWYgSSYjMzk7bSBzaW1wbHkgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmFyaWFibGUmIzM5O3MgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU0NTE6XHRcbjU0NTI6XHRcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XG41NDUzOlx0XG41NDU0Olx0XHRyZXR1cm4gbGVuO1xuNTQ1NTpcdH1cbjU0NTY6XHRcbjU0NTc6XHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fbWluX3R0bF9hdHRyID0gX19BVFRSX1JXKG1pbl90dGxfbXMpO1xuNTQ1ODpcdFxuNTQ1OTpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG41NDYwOlx0e1xuNTQ2MTpcdFx0dW5zaWduZWQgaW50IGNhcHMgPSAwO1xuNTQ2MjpcdFxuNTQ2MzpcdFx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcbjU0NjQ6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9DT1JFKTtcbjU0NjU6XHRcbjU0NjY6XHRcdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcbjU0Njc6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9NTV9XQUxLKTtcbjU0Njg6XHRcbjU0Njk6XHRcdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXG41NDcwOlx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XG41NDcxOlx0XG41NDcyOlx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OzB4JTA0eFxcblwmIzM0OywgY2Fwcyk7XG41NDczOlx0fVxuNTQ3NDpcdFxuNTQ3NTpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU0NzY6XHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG41NDc3Olx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG41NDc4Olx0e1xuNTQ3OTpcdFx0aW50IGk7XG41NDgwOlx0XHR1bnNpZ25lZCBpbnQgY2FwcztcbjU0ODE6XHRcbjU0ODI6XHRcdGlmICh0b2xvd2VyKCpidWYpID09ICYjMzk7biYjMzk7KVxuNTQ4MzpcdFx0XHRjYXBzID0gMDtcbjU0ODQ6XHRcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTt5JiMzOTspXG41NDg1Olx0XHRcdGNhcHMgPSAtMTtcbjU0ODY6XHRcdGVsc2UgaWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZjYXBzKSlcbjU0ODc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NDg4Olx0XG41NDg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkmIzQzOyYjNDM7KSB7XG41NDkwOlx0XHRcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXHUwMDI2IEJJVChpKTtcbjU0OTE6XHRcbjU0OTI6XHRcdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxuNTQ5MzpcdFx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xuNTQ5NDpcdFx0XHRlbHNlIGlmIChlbmFibGVkKVxuNTQ5NTpcdFx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XG41NDk2Olx0XHRcdGVsc2VcbjU0OTc6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU0OTg6XHRcdH1cbjU0OTk6XHRcbjU1MDA6XHRcdHJldHVybiBsZW47XG41NTAxOlx0fVxuNTUwMjpcdFxuNTUwMzpcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XG41NTA0Olx0XG41NTA1Olx0c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbjU1MDY6XHRcdFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXG41NTA3Olx0XHRcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxuNTUwODpcdFx0TlVMTFxuNTUwOTpcdH07XG41NTEwOlx0XG41NTExOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xuNTUxMjpcdFx0Lm5hbWUgPSBcJiMzNDtscnVfZ2VuXCYjMzQ7LFxuNTUxMzpcdFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcbjU1MTQ6XHR9O1xuNTUxNTpcdFxuNTUxNjpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbjU1MTc6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmcyBpbnRlcmZhY2VcbjU1MTg6XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuNTUxOTpcdFxuNTUyMDpcdHN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxuNTUyMTpcdHtcbjU1MjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjU1MjM6XHRcdGxvZmZfdCBucl90b19za2lwID0gKnBvcztcbjU1MjQ6XHRcbjU1MjU6XHRcdG0tXHUwMDNlcHJpdmF0ZSA9IGt2bWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbjU1MjY6XHRcdGlmICghbS1cdTAwM2Vwcml2YXRlKVxuNTUyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjU1Mjg6XHRcbjU1Mjk6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNTUzMDpcdFx0ZG8ge1xuNTUzMTpcdFx0XHRpbnQgbmlkO1xuNTUzMjpcdFxuNTUzMzpcdFx0XHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcbjU1MzQ6XHRcdFx0XHRpZiAoIW5yX3RvX3NraXAtLSlcbjU1MzU6XHRcdFx0XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTUzNjpcdFx0XHR9XG41NTM3Olx0XHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XG41NTM4Olx0XG41NTM5Olx0XHRyZXR1cm4gTlVMTDtcbjU1NDA6XHR9XG41NTQxOlx0XG41NTQyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41NTQzOlx0e1xuNTU0NDpcdFx0aWYgKCFJU19FUlJfT1JfTlVMTCh2KSlcbjU1NDU6XHRcdFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XG41NTQ2Olx0XG41NTQ3Olx0XHRrdmZyZWUobS1cdTAwM2Vwcml2YXRlKTtcbjU1NDg6XHRcdG0tXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XG41NTQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI2MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIExSVSBnZW5lcmF0aW9uLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzICpub3QqIHVuZGVyIGAjaWZkZWYgQ09ORklHX1NZU0ZTYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gYSBiaXQuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQsIHRoYXQmIzM5O3MganVzdCB0aGUgZmlyc3QgcGFzcywgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBldmVuIGJlICpyZXF1aXJlZCogZm9yIGBMUlVfR0VOYCB0byBiZSBhY3RpdmU/IEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uc3VsdCBgbW0vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGhhdmUgYSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgdG8gYExSVV9HRU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA1LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc2MgoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24gYW5kIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgc3RlcCBpcyB0byBlbmFibGUgaXQsIHNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFsmIzM0O0xSVV9HRU4mIzM0O11gLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBmaXhpbmcgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYC4gSXQgYXBwZWFycyB0aGVyZSB3YXMgYW4gaXNzdWUgd2l0aCBob3cgYGZpbGxfZXZpY3RhYmxlYCB3YXMgaGFuZGxpbmcgZm9saW9zIGR1cmluZyB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgcGlja2luZyB0aGVtIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGF0dGVudGlvbi4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGNvbnRyb2xsYWJsZSB0aHJvdWdoIHN5c2ZzLCBzcGVjaWZpY2FsbHkgYnkgdG9nZ2xpbmcgTUdMUlUsIHdoaWNoIGlzIGltcG9ydGFudC4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuCgpBcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O20gZ29pbmcgdG8gbGVhdmUgdGhhdCBlbXB0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgZmlsbF9ldmljdGFibGVgLCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpdHNlbGYgYSBzeXNmcyBzdG9yZSBjYWxsYmFjay4gVGhlcmUmIzM5O3Mgbm8gc2Vuc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBJIGNvdWxkIGZvY3VzIG9uIHRvIG5hcnJvdyB0aGUgc2NvcGUuCgpJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBMZXQgbWUgcmV2aWV3IHRoZSBjYWxsIGdyYXBoIGFuZCBzZWUgaWYgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gY291bGQgcG9zc2libHkgdHJpZ2dlciBgZmlsbF9ldmljdGFibGVgLiBPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGlzIGNhbGxlZCBvbmx5IGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFRoZW4sIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYGVuYWJsZWRfc3RvcmVgLiBBbmQgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24uIE5vcGUsIHRoYXQmIzM5O3MgaXQuIEl04oCZcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc3lzZnMgcGF0aC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gY29tZm9ydGFibGUgdXNpbmcgYHNldC1yZXN1bHRzYCB0byBmaW5hbGl6ZSB0aGUgb3V0cHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHRha2luZyBmb2xpb3MgZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGFkZGluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uIGluIGBmaWxsX2V2aWN0YWJsZSgpYC4gSXQgY2hhbmdlcyB0aGUgbGlzdCBleHRyYWN0aW9uIHRvIHRha2UgZnJvbSB0aGUgaGVhZCBvciB0YWlsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhY3RpdmUsIGFuZCBwYXNzZXMgYCFhY3RpdmVgIHRvIGBscnVfZ2VuX2FkZF9mb2xpbygpYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gbGlzdCBvcmRlcmluZyBhbmQgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgZG8gbm90IHNlbmQgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwODowOToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uYjlhMTVmYWEyZmVhMSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUzMDIsNyAmIzQzOzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQkJYm9vbCBzdWNjZXNzOwotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQm90aCB0aGUgbGVnYWN5IExSVSBhbmQgYSBNR0xSVSBnZW5lcmF0aW9uIGtlZXAgdGhlCiYjNDM7CQkJICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZQomIzQzOwkJCSAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZQomIzQzOwkJCSAqIHRoYXQgb3JkZXIsIHRoZSBlbmQgd2UgdGFrZSBmcm9tIG11c3QgbWF0Y2ggdGhlIGVuZAomIzQzOwkJCSAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZQomIzQzOwkJCSAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGUKJiM0MzsJCQkgKiBoZWFkOyBhY3RpdmUgZm9saW9zIHVzZSByZWNsYWltaW5nPWZhbHNlIChsaXN0X2FkZCksCiYjNDM7CQkJICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZAomIzQzOwkJCSAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChhY3RpdmUpCiYjNDM7CQkJCWZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTsKIAogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pOwpAQCAtNTMxMCw3ICYjNDM7NTMyNiwxNiBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTsKIAogCQkJbHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTsKLQkJCXN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZAomIzQzOwkJCSAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2gKJiM0MzsJCQkgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmUKJiM0MzsJCQkgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvCiYjNDM7CQkJICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpcwomIzQzOwkJCSAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkKJiM0MzsJCQkgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CiAJCQlWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpOwogCiAJCQlpZiAoIS0tcmVtYWluaW5nKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MwoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgTGlzdCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbGxfZXZpY3RhYmxlYCBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgb24gdGhlIExSVSBsaXN0cy4gSW5pdGlhbGx5LCBJIG5vdGljZWQgdGhlIGNoYW5nZSBpbiBob3cgZm9saW9zIGFyZSBwdWxsZWQgZnJvbSB0aGUgYGhlYWRgIGxpc3QuIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBgYWN0aXZlYCBzdGF0ZSwgd2UmIzM5O3JlIGVpdGhlciB0YWtpbmcgZnJvbSB0aGUgdGFpbCAodXNpbmcgYGxydV90b19mb2xpbyhoZWFkKWApIG9yIHRoZSBoZWFkIChgbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgKS4gSSBoYWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3RvX2ZvbGlvYCBpcyBpbmRlZWQgYGxpc3RfbGFzdF9lbnRyeWAsIGFuZCBpdCBpcywgc28gdGhhdCYjMzk7cyBnb29kLiBUaGUgY2hhbmdlIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29uc2lkZXI6IHdlJiMzOTtyZSBub3cgcGFzc2luZyBgIWFjdGl2ZWAgaW5zdGVhZCBvZiBgZmFsc2VgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBsb2dpYyBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgTFJVIGxpc3QgbWFuYWdlbWVudC4gSSBxdWlja2x5IHJhbiB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIG9mIGJ1Z3MuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gaGVyZSB0aGF0IGxvb2tzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxpc3QgbWFuaXB1bGF0aW9uIGFuZCB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMsIHNvIGJ1Z3MgaGVyZSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsaXN0IGNvcnJ1cHRpb24uIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggYSB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24gc2NlbmFyaW8uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgdGhlIHRvb2wgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzbiYjMzk7dCBhcHBsaWNhYmxlIGhlcmUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0IG1lIGNvbmZpcm0gdGhlIGNvZGU6CmBgYGMKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZQomIzQzOwkJCSAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGUKJiM0MzsJCQkgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmUKJiM0MzsJCQkgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmQKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2UKJiM0MzsJCQkgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlCiYjNDM7CQkJICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLAomIzQzOwkJCSAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmQKJiM0MzsJCQkgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CmBgYApBbmQ6CmBgYGMKLQkJCXN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwpgYGAKCk9rYXksIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXQgaXMgcHVyZWx5IGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLCBhbmQgbm8gZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMS45OTg0NzA0OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTMwODEzMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaWxsX2V2aWN0YWJsZWAgd2hlcmUgZm9saW9zIHdlcmUgdGFrZW4gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0IHdoZW4gbW92aW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChNR0xSVSkgdGhhdCBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIHRvZ2dsaW5nIG9mIE1HTFJVLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMS45OTg0NzcwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjU3NTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MDk6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MzAyLDcgKzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XFxuIFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZVxcbitcXHRcXHRcXHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXFxuK1xcdFxcdFxcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxcbitcXHRcXHRcXHQgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmRcXG4rXFx0XFx0XFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXFxuK1xcdFxcdFxcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLFxcbitcXHRcXHRcXHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXFxuK1xcdFxcdFxcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGFjdGl2ZSlcXG4rXFx0XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcXG4gXFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pO1xcbkBAIC01MzEwLDcgKzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcXG4gXFxuIFxcdFxcdFxcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XFxuLVxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXFxuK1xcdFxcdFxcdCAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2hcXG4rXFx0XFx0XFx0ICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlXFxuK1xcdFxcdFxcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cXG4rXFx0XFx0XFx0ICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpc1xcbitcXHRcXHRcXHQgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpXFxuK1xcdFxcdFxcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MTIuNTg2MTE5MjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk2NjIxNDc1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjRlZWEwNmNjMDBjM2ZjMTBjMTk1M2RjMmYzZmIzNmI4YTVlMTlhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA4OjA5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uYjlhMTVmYWEyZmVhMSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTUzMDIsNyArNTMwMiwyMyBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXG4gXHRcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xuIFx0XHRcdGJvb2wgc3VjY2Vzcztcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbitcdFx0XHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXG4rXHRcdFx0ICogdGFpbCwgYW5kIHJlY2xhaW0gdGFrZXMgZnJvbSB0aGUgdGFpbC4gIFRvIHByZXNlcnZlXG4rXHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG4rXHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXG4rXHRcdFx0ICogcmVjbGFpbWluZz10cnVlIChsaXN0X2FkZF90YWlsKSwgc28gdGFrZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbitcdFx0XHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXG4rXHRcdFx0ICogd291bGQgcmV2ZXJzZSBob3QvY29sZCB3aXRoaW4gdGhlIGdlbmVyYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbkBAIC01MzEwLDcgKzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXG4rXHRcdFx0ICogYW4gaW5hY3RpdmUgZm9saW8gbmVhciBtYXhfc2VxLCB3aGljaFxuK1x0XHRcdCAqIGxydV9nZW5faXNfYWN0aXZlKCkgcmVwb3J0cyBhcyBhY3RpdmUsIHNvIGl0cyBpbmFjdGl2ZVxuK1x0XHRcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cbitcdFx0XHQgKiBzZWVkIGl0IGludG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGluc3RlYWQuICBUaGlzXG4rXHRcdFx0ICogcmV1c2VzIHJlY2xhaW1pbmcgYmV5b25kIGl0cyBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKVxuK1x0XHRcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMi41ODYxMjI0ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUyNTQ4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aGVuIHRoZXkncmUgdGFrZW4gZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGhvdyB0aGV5J3JlIGFkZGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoZSBjb2RlIGRpZmYsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbmBgYGNcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG5gYGBcblxuYW5kXG5cbmBgYGNcbi1cdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpO1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbmBgYFxuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gKE1HTFJVL3Ztc2NhbiksIG1lYW5pbmcgdGhpcyB3aWxsIGFmZmVjdCBob3cgbWVtb3J5IGlzIHJlY2xhaW1lZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBgZmlsbF9ldmljdGFibGVgIGEgc3RhdGljIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGJyb2FkbHkgdGhlIGNoYW5nZSBjb3VsZCByaXBwbGUgb3V0LiBMZXQgbWUgcXVpY2tseSBjaGVjay4uLiBPa2F5LCBnb29kLCBpdCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIE5vdywgd2hlcmUgaXMgaXQgKmNhbGxlZCo/IFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxNy43Mzg2NzM2NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MzE2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9ldmljdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01MjkyLVxcbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTUyOTQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM3OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDEyLVxcbm1tL3Ztc2Nhbi5jOjU0MTM6XFx0XFx0XFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcXG5tbS92bXNjYW4uYy01NDE0LVxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjE3Ljc5MDExMjkwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzYzNDMwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqVHJhY2luZyB0aGUgTFJVIEV2aWN0aW9uIFBhdGgqKlxuXG5SaWdodCwgYGZpbGxfZXZpY3RhYmxlYCBpcyB0cmlnZ2VyZWQgYnkgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gV2hhdCdzIGRyaXZpbmcgKnRoYXQqIHN0YXRlIGNoYW5nZT8gSXQgc2VlbXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHByb2Nlc3MuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gV2hlcmUgYXJlIHRoZSBjYWxsIHNpdGVzIGZvciAqdGhhdCogZnVuY3Rpb24/IFdoYXQgdHJpZ2dlcnMgdGhlIGNoYW5nZXMgdGhhdCAqdGhlbiogcmVxdWlyZSB0aGUgZXZpY3Rpb24gbWVjaGFuaXNtIHRvIGNvbWUgaW50byBwbGF5PyBLbm93aW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeSBhbmQgd2hlbiB0aG9zZSB0cmlnZ2VycyBmb3IgZXZpY3Rpb24gaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjAuODI2NDU5MDI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzUyNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUzNDk9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzNzctXFxubW0vdm1zY2FuLmM6NTM3ODpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxubW0vdm1zY2FuLmMtNTM3OS17XFxuLS1cXG5tbS92bXNjYW4uYz01NDc2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0OTItXFx0XFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxcbm1tL3Ztc2Nhbi5jOjU0OTM6XFx0XFx0XFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ5NC1cXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyMC44Nzg4MTc1NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NDMxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGVuYWJsZWRfc3RvcmVgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgaG93IHRoZSBrZXJuZWwgcmVhY3RzIHRvIHVzZXJzcGFjZSB3cml0aW5nIHRvIHRoYXQgc3lzZnMgZmlsZS4gU28sIGxpa2VseSBjaGFuZ2luZyBzb21lIHNvcnQgb2YgZW5hYmxpbmcgc3RhdGUuIEZpbmUuIEJ1dCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHBvaW50cyBvZiBhY2Nlc3MgZm9yIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIG5vdCBqdXN0IHRoaXMgb25lLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmdW5jdGlvbi4gTm93LCBsZXQgbWUgZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCwgYmVjYXVzZSBJIHN1c3BlY3QgdGhpcyBzbWFsbCBkZXRhaWwgbWF5IGJlIG1vcmUgc2lnbmlmaWNhbnQuIExldCdzIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyNC4wMTUyNTE3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDI1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS92bXNjYW4uYy01NDc3LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyNC4wNjQwMDAwMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMyMzQzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIGBlbmFibGVkX3N0b3JlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHdvcmtpbmcuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgKG9yIHJlbGF0ZWQgY29kZSkuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGFydGljdWxhciBtZWNoYW5pc20gbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGJlaW5nIHN0b3JlZCwgd2hlbiBpdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5Ki4gSXMgaXQgYSBmbGFnLCBhIGNvdW50ZXIsIGEgYml0bWFzaz8gSXMgaXQgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgdGhyb3R0bGluZyBvciByZXNvdXJjZSBsaW1pdGluZz8gSXMgdGhpcyB3aGVyZSB0aGUgY29udHJvbCBvdmVyIHRoZSBzY2FuIHByb2Nlc3MgaXMgcmVhbGx5IGhhcHBlbmluZz8gTGV0J3MgZ2V0IGNyYWNraW5nISBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlLCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSB3cml0ZXMgYW5kIHJlYWRzLCBhbmQgdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjcuODk2MzQ3MTA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY5OTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVkX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jPTQ1ND1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ2MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ2MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYyLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGVuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDkxOlxcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkyLVxcdC5nZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX2xvYWQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mzc1PXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4MS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzgyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgzLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgZW5hYmxlZF9wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjQxMjpcXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXFx0LmdldCA9IGRhbW9uX3JlY2xhaW1fZW5hYmxlZF9sb2FkLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE4LVxcbm1tL2RhbW9uL3N0YXQuYzoxOTpzdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcXG5tbS9kYW1vbi9zdGF0LmMtMjAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7XFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGVuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL3N0YXQuYzoyNjpcXHQuc2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL3N0YXQuYy0yNy1cXHQuZ2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX2xvYWQsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjMyPXN0YXRpYyBib29sIGRhbW9uX3N0YXRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTIzOC1cXG5tbS9kYW1vbi9zdGF0LmM6MjM5OnN0YXRpYyBpbnQgZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlKFxcbm1tL2RhbW9uL3N0YXQuYy0yNDAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0PXN0YXRpYyBib29sIHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKGVudW0gZ2xvYmFsX2VuYWJsZWRfbW9kZSBtb2RlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDQtXFxubW0vaHVnZV9tZW1vcnkuYzo0NDU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdlX21lbW9yeS5jLTQ0Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjc5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjgwOnN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdlX21lbW9yeS5jLTY4MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzA4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgYW5vbl9lbmFibGVkX2F0dHIgPVxcbm1tL2h1Z2VfbWVtb3J5LmM6NzA5OlxcdF9fQVRUUihlbmFibGVkLCAwNjQ0LCBhbm9uX2VuYWJsZWRfc2hvdywgYW5vbl9lbmFibGVkX3N0b3JlKTtcXG5tbS9odWdlX21lbW9yeS5jLTcxMC1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTk0Mz1zdGF0aWMgc3NpemVfdCBkZW1vdGlvbl9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy05NDgtXFxubW0vbWVtb3J5LXRpZXJzLmM6OTQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90aW9uX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vbWVtb3J5LXRpZXJzLmMtOTUwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NTQzMz1zdGF0aWMgc3NpemVfdCBzaG1lbV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zaG1lbS5jLTU0NTYtXFxubW0vc2htZW0uYzo1NDU3OnN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vc2htZW0uYy01NDU4LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9zaG1lbS5jPTU1Mzg9c3RhdGljIGJvb2wgc2V0X3NobWVtX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gaHVnZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9zaG1lbS5jLTU1NTQtXFxubW0vc2htZW0uYzo1NTU1OnN0YXRpYyBzc2l6ZV90IHRocHNpemVfc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9zaG1lbS5jLTU1NTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vc2htZW0uYz01NTg3PXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ciA9XFxubW0vc2htZW0uYzo1NTg4OlxcdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcXG5tbS9zaG1lbS5jLTU1ODktI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgKi9cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTAzNy19XFxubW0vc3dhcF9zdGF0ZS5jOjEwMzg6c3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vc3dhcF9zdGF0ZS5jLTEwMzktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmM9NTQ1OT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ3NS0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ3NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ3Ny1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjcuOTQ3MDUyNDMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTEzNjc0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTUdMUlUncyBFbmFibGluZyBhbmQgRGlzYWJsaW5nKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBNR0xSVSdzIHN0YXRlIGlzIGNvbnRyb2xsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgaW4gcmVsYXRpb24gdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gSSBuZWVkIHRvIGJlIGNsZWFyIG9uIHdoZXJlIHRoZSBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHV0aWxpemVkLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYXNzb2NpYXRlZCB3aXRoIHRob3NlIHN0YXRlIGNoYW5nZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgb25seSBnZXQgY2FsbGVkIHdoZW4gTUdMUlUgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMuIElmIHNvLCB0aGVuIGhvdywgaW4gZGV0YWlsLCBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHN5c3RlbT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24uIFRoYXQgd2lsbCBvZmZlciBzb21lIGNsYXJpdHkuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozMS43Mzg0MjMxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcyODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jLTUzNzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NDkyLVxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYzo1NDkzOlxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU0OTQtXFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MzEuNzkwNjAxODAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjYzNDA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBQYWdlIEV2aWN0aW9uKipcblxuT2theSwgc28gYGZpbGxfZXZpY3RhYmxlYCBnZXRzIHRyaWdnZXJlZCBieSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgYGVuYWJsZWRfc3RvcmVgLiBHb3QgaXQuIFRoYXQncyB0aGUgcHJpbWFyeSBwYXRoLCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIElzIGBmaWxsX2V2aWN0YWJsZWAgKm9ubHkqIGNhbGxlZCBmcm9tIHRoYXQgc3BlY2lmaWMgY2FsbCBjaGFpbj8gSSBjYW4ndCBhc3N1bWUgdGhhdC4gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtbS92bXNjYW4uY2AuIEEgcXVpY2sgc2VhcmNoIGZvciBgZmlsbF9ldmljdGFibGVgIHNob3VsZCByZXZlYWwgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBHb3R0YSBjaGVjayB0aGUgb3RoZXIgY29kZXBhdGhzIHRvIGNvbmZpcm0gdGhlcmUncyBubyB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozNS4yNTY5NDU4MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjY5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZXZpY3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUyNzA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5Mi1cXG5tbS92bXNjYW4uYzo1MjkzOnN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01Mjk0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQxMi1cXG5tbS92bXNjYW4uYzo1NDEzOlxcdFxcdFxcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XFxubW0vdm1zY2FuLmMtNTQxNC1cXHRcXHRcXHRcXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozNS4zMTA2MjA5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI1NDAyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIFRvZ2dsZSBMb2dpYyoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSwgdGhlIG9uZSBJJ20gbG9va2luZyBhdCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCB3aGljaCBpcyB2ZXJ5IHNwZWNpZmljLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBleGVjdXRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdHVybiBNR0xSVSBvbiBvciBvZmYuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBjb2RlIHBhdGggYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYmVjYXVzZSBzeXNmcyBpcyB1c3VhbGx5IGFjY2Vzc2libGUgd2l0aGluIGEgVk0uIFNvIHRoYXQncyBvbmUgbGVzcyBiYXJyaWVyIHRvIGVudHJ5LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IE1HTFJVKS4gQW55IGNvZGUgdGhhdCBhbHRlcnMgdGhhdCBjcml0aWNhbCBjb21wb25lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwb3RlbnRpYWwgZm9yIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSBpcyBzaWduaWZpY2FudCBoZXJlLlxuXG5GaW5hbGx5LCBsZXQncyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGFyb3VuZCBgZmlsbF9ldmljdGFibGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGJsb2NrcyB0aGF0IG1pZ2h0IGdhdGUgdGhpcyBsb2dpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcmFuZ2Ugb2YgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgYmVmb3JlIEkgc3RhcnQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozOS41MzYwMjczNDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjgwOlxcdFxcdFxcdH1cXG41MjgxOlxcdFxcdH0gZWxzZSB7XFxuNTI4MjpcXHRcXHRcXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xcbjUyODM6XFx0XFxuNTI4NDpcXHRcXHRcXHRmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSkge1xcbjUyODU6XFx0XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcXG41Mjg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41Mjg3OlxcdFxcdFxcdH1cXG41Mjg4OlxcdFxcdH1cXG41Mjg5OlxcdFxcbjUyOTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTI5MTpcXHR9XFxuNTI5MjpcXHRcXG41MjkzOlxcdHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG41Mjk0OlxcdHtcXG41Mjk1OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcbjUyOTY6XFx0XFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxuNTI5NzpcXHRcXG41Mjk4OlxcdFxcdGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobHJ1KSB7XFxuNTI5OTpcXHRcXHRcXHRpbnQgdHlwZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XFxuNTMwMDpcXHRcXHRcXHRib29sIGFjdGl2ZSA9IGlzX2FjdGl2ZV9scnUobHJ1KTtcXG41MzAxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbjUzMDI6XFx0XFxuNTMwMzpcXHRcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcXG41MzA0OlxcdFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG41MzA1OlxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNTMwNjpcXHRcXG41MzA3OlxcdFxcdFxcdFxcdC8qXFxuNTMwODpcXHRcXHRcXHRcXHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcXG41MzA5OlxcdFxcdFxcdFxcdCAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGVcXG41MzEwOlxcdFxcdFxcdFxcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxcbjUzMTE6XFx0XFx0XFx0XFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXFxuNTMxMjpcXHRcXHRcXHRcXHQgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2VcXG41MzEzOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcXG41MzE0OlxcdFxcdFxcdFxcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcXG41MzE1OlxcdFxcdFxcdFxcdCAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmRcXG41MzE2OlxcdFxcdFxcdFxcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxcbjUzMTc6XFx0XFx0XFx0XFx0ICovXFxuNTMxODpcXHRcXHRcXHRcXHRpZiAoYWN0aXZlKVxcbjUzMTk6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XFxuNTMyMDpcXHRcXHRcXHRcXHRlbHNlXFxuNTMyMTpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xcbjUzMjI6XFx0XFxuNTMyMzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG41MzI0OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XFxuNTMyNTpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG41MzI2OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xcbjUzMjc6XFx0XFxuNTMyODpcXHRcXHRcXHRcXHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xcbjUzMjk6XFx0XFx0XFx0XFx0LypcXG41MzMwOlxcdFxcdFxcdFxcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXFxuNTMzMTpcXHRcXHRcXHRcXHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXFxuNTMzMjpcXHRcXHRcXHRcXHQgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmVcXG41MzMzOlxcdFxcdFxcdFxcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cXG41MzM0OlxcdFxcdFxcdFxcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcXG41MzM1OlxcdFxcdFxcdFxcdCAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClcXG41MzM2OlxcdFxcdFxcdFxcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxcbjUzMzc6XFx0XFx0XFx0XFx0ICovXFxuNTMzODpcXHRcXHRcXHRcXHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XFxuNTMzOTpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbjUzNDA6XFx0XFxuNTM0MTpcXHRcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcbjUzNDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzNDM6XFx0XFx0XFx0fVxcbjUzNDQ6XFx0XFx0fVxcbjUzNDU6XFx0XFxuNTM0NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzQ3OlxcdH1cXG41MzQ4OlxcdFxcbjUzNDk6XFx0c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG41MzUwOlxcdHtcXG41MzUxOlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNTM1MjpcXHRcXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG41MzUzOlxcdFxcbjUzNTQ6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpIHtcXG41MzU1OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4uZm9saW9zW2dlbl1bdHlwZV1bem9uZV07XFxuNTM1NjpcXHRcXG41MzU3OlxcdFxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbjUzNTg6XFx0XFx0XFx0XFx0Ym9vbCBzdWNjZXNzO1xcbjUzNTk6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG41MzYwOlxcdFxcbjUzNjE6XFx0XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XFxuNTM2MjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XFxuNTM2MzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG41MzY0OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb196b25lbnVtKGZvbGlvKSAhPSB6b25lLCBmb2xpbyk7XFxuNTM2NTpcXHRcXG41MzY2OlxcdFxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XFxuNTM2NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbjUzNjg6XFx0XFx0XFx0XFx0bHJ1dmVjX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG41MzY5OlxcdFxcbjUzNzA6XFx0XFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG41MzcxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzcyOlxcdFxcdFxcdH1cXG41MzczOlxcdFxcdH1cXG41Mzc0OlxcdFxcbjUzNzU6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTM3NjpcXHR9XFxuNTM3NzpcXHRcXG41Mzc4OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41Mzc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MzkuNTM2NTAwMTU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTEzNTAzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGZpbGxfZXZpY3RhYmxlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dCBvZiB0aGlzIGBmaWxsX2V2aWN0YWJsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGxpa2VseSBiYXNlZCBvbiBzb21lIGZlYXR1cmUgZmxhZy4gU3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaW1wbHlpbmcgaXQgcGxheXMgYSByb2xlIGluIGEgbW9yZSBhZHZhbmNlZCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGltcGxlbWVudGF0aW9uIG9yIHNvbWUgdmFyaWFudCBvZiBwYWdlIGFnaW5nLlxuXG5NeSBmaXJzdCBtb3ZlIGlzIHRvIHNjYW4gdGhlIGNvZGUgdG8gdmVyaWZ5IGlmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAsIGluZGVlZCBlbmNsb3NlcyB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiBgZmlsbF9ldmljdGFibGVgLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY3kuIFRoZSBwbGFjZW1lbnQgd2lsbCBpbmRpY2F0ZSBpZiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyBpdCdsbCBjbGFyaWZ5IHdoZXRoZXIgYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3RpdmVseSB1c2VkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgYW4gb3B0aW9uYWwgY29tcG9uZW50LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYWZmZWN0ZWQgYnkgYExSVV9HRU5gLCB0byBnYWluIHNvbWUgaW5zaWdodCBpbnRvIGBmaWxsX2V2aWN0YWJsZWAncyByb2xlIGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQzLjc0Nzg1NDU1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMDE1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTEtXFxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjkzLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9MzAwOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzctXFxubW0vdm1zY2FuLmM6MzAzODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAzOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5Njg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5NjktXFxubW0vdm1zY2FuLmM6NTk3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTcxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTk4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk4Ni1cXG5tbS92bXNjYW4uYzo1OTg3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQzLjc5NTA2MTM3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQxMzY1NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29kZSoqXG5cbk9rYXksIEknbSBjaGVja2luZyB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiBpcyBpbmRlZWQgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2suIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBsaW5lIG51bWJlcnMsIGBmaWxsX2V2aWN0YWJsZWAgaXMgYXJvdW5kIGxpbmUgNTI5MywgYW5kIHRoZSBgI2Vsc2VgIGZvciB0aGUgY29uZGl0aW9uYWwgaXMgYXJvdW5kIDU5NzAsIHNvIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSBlbmFibGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbmVkLlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogaXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXM/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgPyBUaGUgZmlyc3Qgb25lIGp1c3QgKmRlZmluZXMqIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIG90aGVyIHBhcmFtZXRlciBtaWdodCBkZXRlcm1pbmUgaWYgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBzdGlsbCBhbGxvd2luZyBpdCB0byBiZSB0b2dnbGVkIHZpYSBzeXNmcywgcmlnaHQ/XG5cblRoaW5raW5nIGFib3V0IHRoYXQgc3lzZnMgb3B0aW9uLCB3aGF0J3MgdGhlIGZ1bmN0aW9uIG5hbWU/IEFoIHllcywgYGVuYWJsZWRfc3RvcmVgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpdHNlbGYgaXMgZGVwZW5kZW50IG9uLCBzYXksIGBDT05GSUdfU1lTRlNgIGJlaW5nIGVuYWJsZWQuLi4gSSdsbCBjaGVjayB0aGF0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQ4LjczNjQyOTk5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzU2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS92bXNjYW4uYy01NDc3LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo0OC43ODQ4NzE4NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTAwMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGVuYWJsZWRfc3RvcmVgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBzY29wZSBpdC4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLlwiIEknbSBub3QganVzdCBnb2luZyB0byB0YWtlIHRoaXMgdGVybSBhdCBmYWNlIHZhbHVlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGFyZSBuZWFyIGl0IGluIHRoZSBjb2RlYmFzZT8gV2hhdCdzIHRoZSBnZW5lcmFsIGRlc2lnbiBwYXR0ZXJuIGF0IHBsYXkgYXJvdW5kIGl0P1xuXG5JIHdhbnQgdG8ga25vdyBpZiBpdCdzIGEgc2ltcGxlIGJvb2xlYW4gZmxhZywgYSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUsIG9yIHBhcnQgb2YgYSBsYXJnZXIgc3RhdGUgbWFuYWdlbWVudCBzeXN0ZW0uIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxvY2FsIHRvIGEgZnVuY3Rpb24sIG9yIGlzIHRoaXMgYSBnbG9iYWwgb3Igc2hhcmVkIHJlc291cmNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgaWYgaXQncyBtb2RpZmllZCBpbiBtdWx0aXBsZSBwbGFjZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgb24gdGhpcyBvciBkZXBlbmRlbmNpZXMgaXQgdXNlcz8gSXMgaXQgc2ltcGx5IHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgb3IgbW9yZSBjb21wbGljYXRlZD9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBcImVuYWJsZWRcIiBtZWFucyBpbiAqdGhpcyogY29udGV4dC4gSXMgaXQgYWJvdXQgZmVhdHVyZSBmbGFncywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhY2Nlc3MgY29udHJvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBkb2N1bWVudGF0aW9uIG1heSBjbGFyaWZ5LCBidXQgSSB3YW50IHRvIGdldCBhIHBpY3R1cmUgb2YgaXQgYnkgaW52ZXN0aWdhdGluZyB3aGVyZSBpdCdzIHVzZWQgYW5kIGhvdy4gTGV0J3Mgc2VlIGhvdyBtdWNoIG9mIHRoZSBjb2RlIEkgY2FuIHF1aWNrbHkgc2NhbiwgZmluZCBhbnkgcXVpY2sgY2x1ZXMsIGFuZCB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgYSBoeXBvdGhlc2lzIGFib3V0IGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo1NC4xNjM4NzgyNjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU0NTE6XFx0XFxuNTQ1MjpcXHRcXHRXUklURV9PTkNFKGxydV9nZW5fbWluX3R0bCwgbXNlY3NfdG9famlmZmllcyhtc2VjcykpO1xcbjU0NTM6XFx0XFxuNTQ1NDpcXHRcXHRyZXR1cm4gbGVuO1xcbjU0NTU6XFx0fVxcbjU0NTY6XFx0XFxuNTQ1NzpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fbWluX3R0bF9hdHRyID0gX19BVFRSX1JXKG1pbl90dGxfbXMpO1xcbjU0NTg6XFx0XFxuNTQ1OTpcXHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbjU0NjA6XFx0e1xcbjU0NjE6XFx0XFx0dW5zaWduZWQgaW50IGNhcHMgPSAwO1xcbjU0NjI6XFx0XFxuNTQ2MzpcXHRcXHRpZiAoZ2V0X2NhcChMUlVfR0VOX0NPUkUpKVxcbjU0NjQ6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9DT1JFKTtcXG41NDY1OlxcdFxcbjU0NjY6XFx0XFx0aWYgKHNob3VsZF93YWxrX21tdSgpKVxcbjU0Njc6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9NTV9XQUxLKTtcXG41NDY4OlxcdFxcbjU0Njk6XFx0XFx0aWYgKHNob3VsZF9jbGVhcl9wbWRfeW91bmcoKSlcXG41NDcwOlxcdFxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XFxuNTQ3MTpcXHRcXG41NDcyOlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIjB4JTA0eFxcXFxuXFxcIiwgY2Fwcyk7XFxuNTQ3MzpcXHR9XFxuNTQ3NDpcXHRcXG41NDc1OlxcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG41NDc2OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG41NDc3OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjU0Nzg6XFx0e1xcbjU0Nzk6XFx0XFx0aW50IGk7XFxuNTQ4MDpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcztcXG41NDgxOlxcdFxcbjU0ODI6XFx0XFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ24nKVxcbjU0ODM6XFx0XFx0XFx0Y2FwcyA9IDA7XFxuNTQ4NDpcXHRcXHRlbHNlIGlmICh0b2xvd2VyKCpidWYpID09ICd5JylcXG41NDg1OlxcdFxcdFxcdGNhcHMgPSAtMTtcXG41NDg2OlxcdFxcdGVsc2UgaWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2Y2FwcykpXFxuNTQ4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41NDg4OlxcdFxcbjU0ODk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSsrKSB7XFxuNTQ5MDpcXHRcXHRcXHRib29sIGVuYWJsZWQgPSBjYXBzIFxcdTAwMjYgQklUKGkpO1xcbjU0OTE6XFx0XFxuNTQ5MjpcXHRcXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxuNTQ5MzpcXHRcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG41NDk0OlxcdFxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuNTQ5NTpcXHRcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcXG41NDk2OlxcdFxcdFxcdGVsc2VcXG41NDk3OlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcXG41NDk4OlxcdFxcdH1cXG41NDk5OlxcdFxcbjU1MDA6XFx0XFx0cmV0dXJuIGxlbjtcXG41NTAxOlxcdH1cXG41NTAyOlxcdFxcbjU1MDM6XFx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG41NTA2OlxcdFxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbjU1MDc6XFx0XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxuNTUwODpcXHRcXHROVUxMXFxuNTUwOTpcXHR9O1xcbjU1MTA6XFx0XFxuNTUxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XFxuNTUxMjpcXHRcXHQubmFtZSA9IFxcXCJscnVfZ2VuXFxcIixcXG41NTEzOlxcdFxcdC5hdHRycyA9IGxydV9nZW5fYXR0cnMsXFxuNTUxNDpcXHR9O1xcbjU1MTU6XFx0XFxuNTUxNjpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNTUxNzpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmcyBpbnRlcmZhY2VcXG41NTE4OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNTUxOTpcXHRcXG41NTIwOlxcdHN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxcbjU1MjE6XFx0e1xcbjU1MjI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjU1MjM6XFx0XFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xcbjU1MjQ6XFx0XFxuNTUyNTpcXHRcXHRtLVxcdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbjU1MjY6XFx0XFx0aWYgKCFtLVxcdTAwM2Vwcml2YXRlKVxcbjU1Mjc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNTUyODpcXHRcXG41NTI5OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjU1MzA6XFx0XFx0ZG8ge1xcbjU1MzE6XFx0XFx0XFx0aW50IG5pZDtcXG41NTMyOlxcdFxcbjU1MzM6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuNTUzNDpcXHRcXHRcXHRcXHRpZiAoIW5yX3RvX3NraXAtLSlcXG41NTM1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbjU1MzY6XFx0XFx0XFx0fVxcbjU1Mzc6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU1Mzg6XFx0XFxuNTUzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG41NTQwOlxcdH1cXG41NTQxOlxcdFxcbjU1NDI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTU0MzpcXHR7XFxuNTU0NDpcXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHYpKVxcbjU1NDU6XFx0XFx0XFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XFxuNTU0NjpcXHRcXG41NTQ3OlxcdFxcdGt2ZnJlZShtLVxcdTAwM2Vwcml2YXRlKTtcXG41NTQ4OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbjU1NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo1NC4xNjQyMjUxMjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwMjUzODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNR0xSVSBTdGF0ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBpdCdzIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAuIEkgc2VlIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIEkgZXhwZWN0ZWQsIGJ1dCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgZnV6emluZyB0aGlzIGlzIGFjdHVhbGx5IHdvcnRod2hpbGUsIHllcywgdGhhdCdzIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGluIE1HTFJVIHRoYXQgY291bGQgYmUgdnVsbmVyYWJsZS5cblxuTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpdHNlbGYsIGJ1dCB0aGF0J3Mgc3RhdGljLiBIbW0sIGFuZCBgZW5hYmxlZF9zdG9yZWAgd2hpY2ggY2FsbHMgaXQgaXMgYWxzbyBzdGF0aWMsIHNvIG15IGdvYWwgb2YgZGlyZWN0bHkgZnV6emluZyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byB3b3JrLlxuXG5JIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGVudHJ5IHBvaW50cy4gSSBjaGVja2VkIHRoZSBjYWxsZXJzIG9mIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBvbmx5IGNhbGxlciBpcyBgZW5hYmxlZF9zdG9yZWAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnJvbSBgbHJ1X2dlbl9pbml0X21lbWNnYCBvciBzaW1pbGFyLCBidXQgaXQncyBvbmx5IGBlbmFibGVkX3N0b3JlYC5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBlbnRpcmUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHRvIGNoZWNrIGlmIGl0J3MgcmVmZXJlbmNlZCBhbnl3aGVyZSBlbHNlLCBpdCdzIHdvcnRoIGNoZWNraW5nIHRvIHNlZSBpZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGFjdHVhbGx5IHVzZWQgc29tZXdoZXJlIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MDAuMTY2NzY3MDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk3NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jLTUzNzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NDkyLVxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYzo1NDkzOlxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU0OTQtXFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MDAuMjE1NzQ5OTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDYxMjM5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBlbmFibGVkX3N0b3JlYCB3b3JrcyB3aXRoaW4gdGhpcyBzeXNmcyBzZXR1cC4gU2luY2UgaXQncyBpbnZva2VkIHRocm91Z2ggdGhlIGBzeXNmc19rZl93cml0ZWAgcGF0aCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGEgZGlyZWN0IGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdz8gVGhhdCBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzIHRlbXB0aW5nLCBidXQgc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGFyZW4ndCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGEgYnJvYWQgb3ZlcnZpZXcuXG5cbkluc3RlYWQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB0cnkgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGNoZWNraW5nIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgZ2l2ZW4gdGhhdCBNR0xSVSBoYXMgc3Ryb25nIHRpZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBgdm1zY2FuYC4gSSdtIGhvcGluZyB0byBmaW5kIHNvbWUgcHVibGljbHkgdmlzaWJsZSwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS92bXNjYW4uY2AgcmVsYXRlZCB0byBNR0xSVSdzIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgTUdMUlUgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMDowNi4yNjE4Nzc3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTAwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI5MjM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQxLVxcbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxubW0vdm1zY2FuLmM6Mjk2OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAwOC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAwOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzODI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDI5LVxcbm1tL3Ztc2Nhbi5jOjQ0MzA6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQzMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDU0LVxcbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ0NTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ2NS1cXG5tbS92bXNjYW4uYzo0NDY2OnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0OTEtXFxubW0vdm1zY2FuLmM6NDQ5Mjp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NDkzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1ODk9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MTktXFxubW0vdm1zY2FuLmM6NDYyMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTg2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy01ODc4LVxcbm1tL3Ztc2Nhbi5jOjU4Nzk6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG5tbS92bXNjYW4uYy01ODgwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4OTAtXFxubW0vdm1zY2FuLmM6NTg5MTp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTU4OTIte1xcbi0tXFxubW0vdm1zY2FuLmMtNTkxMi1cXG5tbS92bXNjYW4uYzo1OTEzOnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy01OTE0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MjMtXFxubW0vdm1zY2FuLmM6NTkyNDp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNTkyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjA2LjMxMDM5NTc3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk2MjcwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIE1vZGlmaWVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGFjdHVhbGx5IGdldHRpbmcgZXhlY3V0ZWQuIEkgc2VlIHRoaXMgbW9kaWZpZWQgc2VjdGlvbiwgYnV0IGl0IG9ubHkgc2VlbXMgdG8gYmUgYWNjZXNzaWJsZSB3aGVuIEkgdG9nZ2xlIE1HTFJVIG9uIG9yIG9mZi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4gSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCdzIGR5bmFtaWNhbGx5IGxpbmtlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgc2VlbXMgbGlrZSBpdCdzIG5vdCBhIHN0YXRpYyBwYXRoLiBBaCwgYGVuYWJsZWRfc3RvcmVgIGlzIGFuIGF0dHJpYnV0ZSBzdG9yZSBmdW5jdGlvbi4gUmlnaHQsIGF0dHJpYnV0ZSBzdG9yZXMgYXJlIG9mdGVuIGR5bmFtaWNhbGx5IGNhbGxlZCBvciBhY2Nlc3NlZCB2aWEgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IC0geWVzLCBgZW5hYmxlZF9zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGxydV9nZW5fYXR0cl9ncm91cGAuIE9rYXksIHNvIGBscnVfZ2VuX2F0dHJfZ3JvdXBgIGlzIHRoZSBpbXBvcnRhbnQgYml0IGhlcmUuIE5vdyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgKnRoYXQqIGlzIHVzZWQgdG8gc2VlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgZ3JvdXBpbmcgZ2V0cyBjYWxsZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMDoxMC41MDY2NjkyNThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTM3NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2F0dHJfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTUwNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTUxMC1cXG5tbS92bXNjYW4uYzo1NTExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG5tbS92bXNjYW4uYy01NTEyLVxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTctXFxubW0vdm1zY2FuLmM6NTk1ODpcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbm1tL3Ztc2Nhbi5jLTU5NTktXFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MTAuNjE4MDUzMDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDE4ODYwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgYHN5c2ZzYCBzdG9yZSwgbm90aGluZyB0b28gY29tcGxpY2F0ZWQuIEkgY2FuIGVpdGhlciBsZWF2ZSBgRm9jdXNTeW1ib2xzYCBlbXB0eSBvciBwcm92aWRlIGBlbmFibGVkX3N0b3JlYCwgYnV0IHNpbmNlIHRoYXQncyBzdGF0aWMsIEknbSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGl0IGVtcHR5IGZvciBub3cuIEhtbSwgbG9va3MgbGlrZSBgZmlsbF9ldmljdGFibGVgLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIGFyZSBhbGwgc3RhdGljLiBFbXB0eSBgRm9jdXNTeW1ib2xzYCBpdCBpcy4gTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBsb29rIG5leHQuIEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgcmVxdWlyZW1lbnQuIE9rYXksIG1vdmluZyBvbiwgbGV0J3Mgc2VlIGlmIGBDT05GSUdfU1lTRlNgIGlzIGFsc28gcmVxdWlyZWQuIEkgc2VlIHRoYXQgYHN5c2ZzX2NyZWF0ZV9ncm91cGAgaXMganVzdCBhIHN0dWIgaWYgYENPTkZJR19TWVNGU2AgaXNuJ3Qgc2V0LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgYmUgY29tcGlsZWQgaWYgU1lTRlMgaXNuJ3QgZW5hYmxlZC4gQmV0dGVyIGRvdWJsZS1jaGVjayBpZiBgZW5hYmxlZF9zdG9yZWAgaXMgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19TWVNGU2AuIE5lZWQgdG8gYmUgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjE2LjI1OTk0MTQ4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzUwNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTI4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG5tbS92bXNjYW4uYy04MTI5LVxcbm1tL3Ztc2Nhbi5jOjgxMzA6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jLTgxMzEtc3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjE2LjYyNjI5ODMyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU0NzYxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgVmFyaWFibGUqKlxuXG5IbW0sIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUsIHJlbGF0ZWQgdG8gdGhlIHZtc2NhbiBzdWJzeXN0ZW0sIHdhcyBwcm90ZWN0ZWQgYnkgYSBgI2lmZGVmIENPTkZJR19TWVNGU2AgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2suIEJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgZG9lc24ndCBzZWVtIHRvIGNvbmZpcm0gdGhhdC4gSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgY29uZmluZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgbW0vdm1zY2FuLmNgIHNvdXJjZSBmaWxlLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXJvdW5kIHdoZXJlIGBlbmFibGVkX3N0b3JlYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCBkZXRlcm1pbmUgaWYgbXkgb3JpZ2luYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jeSBvbiBgU1lTRlNgIHdhcyBpbmFjY3VyYXRlLCBvciBpZiBJJ20gc2ltcGx5IG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHZhcmlhYmxlJ3MgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjIwLjQ4MTA2MjczNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTQ1MTpcXHRcXG41NDUyOlxcdFxcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XFxuNTQ1MzpcXHRcXG41NDU0OlxcdFxcdHJldHVybiBsZW47XFxuNTQ1NTpcXHR9XFxuNTQ1NjpcXHRcXG41NDU3OlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XFxuNTQ1ODpcXHRcXG41NDU5OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuNTQ2MDpcXHR7XFxuNTQ2MTpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XFxuNTQ2MjpcXHRcXG41NDYzOlxcdFxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxuNTQ2NDpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbjU0NjU6XFx0XFxuNTQ2NjpcXHRcXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxuNTQ2NzpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbjU0Njg6XFx0XFxuNTQ2OTpcXHRcXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbjU0NzA6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG41NDcxOlxcdFxcbjU0NzI6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBjYXBzKTtcXG41NDczOlxcdH1cXG41NDc0OlxcdFxcbjU0NzU6XFx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbjU0NzY6XFx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjU0Nzc6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuNTQ3ODpcXHR7XFxuNTQ3OTpcXHRcXHRpbnQgaTtcXG41NDgwOlxcdFxcdHVuc2lnbmVkIGludCBjYXBzO1xcbjU0ODE6XFx0XFxuNTQ4MjpcXHRcXHRpZiAodG9sb3dlcigqYnVmKSA9PSAnbicpXFxuNTQ4MzpcXHRcXHRcXHRjYXBzID0gMDtcXG41NDg0OlxcdFxcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ3knKVxcbjU0ODU6XFx0XFx0XFx0Y2FwcyA9IC0xO1xcbjU0ODY6XFx0XFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZjYXBzKSlcXG41NDg3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU0ODg6XFx0XFxuNTQ4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG41NDkwOlxcdFxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxuNTQ5MTpcXHRcXG41NDkyOlxcdFxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG41NDkzOlxcdFxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbjU0OTQ6XFx0XFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG41NDk1OlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU0OTY6XFx0XFx0XFx0ZWxzZVxcbjU0OTc6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU0OTg6XFx0XFx0fVxcbjU0OTk6XFx0XFxuNTUwMDpcXHRcXHRyZXR1cm4gbGVuO1xcbjU1MDE6XFx0fVxcbjU1MDI6XFx0XFxuNTUwMzpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbjU1MDQ6XFx0XFxuNTUwNTpcXHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbjU1MDY6XFx0XFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxuNTUwNzpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG41NTA4OlxcdFxcdE5VTExcXG41NTA5OlxcdH07XFxuNTUxMDpcXHRcXG41NTExOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG41NTEyOlxcdFxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbjU1MTM6XFx0XFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcXG41NTE0OlxcdH07XFxuNTUxNTpcXHRcXG41NTE2OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG41NTE3OlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxcbjU1MTg6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG41NTE5OlxcdFxcbjU1MjA6XFx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuNTUyMTpcXHR7XFxuNTUyMjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTUyMzpcXHRcXHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XFxuNTUyNDpcXHRcXG41NTI1OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XFxuNTUyNjpcXHRcXHRpZiAoIW0tXFx1MDAzZXByaXZhdGUpXFxuNTUyNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG41NTI4OlxcdFxcbjU1Mjk6XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7XFxuNTUzMDpcXHRcXHRkbyB7XFxuNTUzMTpcXHRcXHRcXHRpbnQgbmlkO1xcbjU1MzI6XFx0XFxuNTUzMzpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG41NTM0OlxcdFxcdFxcdFxcdGlmICghbnJfdG9fc2tpcC0tKVxcbjU1MzU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTUzNjpcXHRcXHRcXHR9XFxuNTUzNzpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XFxuNTUzODpcXHRcXG41NTM5OlxcdFxcdHJldHVybiBOVUxMO1xcbjU1NDA6XFx0fVxcbjU1NDE6XFx0XFxuNTU0MjpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41NTQzOlxcdHtcXG41NTQ0OlxcdFxcdGlmICghSVNfRVJSX09SX05VTEwodikpXFxuNTU0NTpcXHRcXHRcXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoTlVMTCwgbHJ1dmVjX21lbWNnKHYpKTtcXG41NTQ2OlxcdFxcbjU1NDc6XFx0XFx0a3ZmcmVlKG0tXFx1MDAzZXByaXZhdGUpO1xcbjU1NDg6XFx0XFx0bS1cXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XFxuNTU0OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjIwLjQ4MTQ5MjkwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIzNDE4NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIExSVSBHZW5lcmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBMUlUgZ2VuZXJhdGlvbi4gSXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0J3MgKm5vdCogdW5kZXIgYCNpZmRlZiBDT05GSUdfU1lTRlNgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCwgdGhhdCdzIGp1c3QgdGhlIGZpcnN0IHBhc3MsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3b25kZXIsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugb3IgZXZlbiBiZSAqcmVxdWlyZWQqIGZvciBgTFJVX0dFTmAgdG8gYmUgYWN0aXZlPyBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbnN1bHQgYG1tL0tjb25maWdgLiBUaGF0IHNob3VsZCBoYXZlIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgcmVnYXJkaW5nIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyByZWxhdGVkIHRvIGBMUlVfR0VOYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjI0LjMwNDkxMzUyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDQ0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MjQuMzYyMTcwMzEyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDQ5MjE1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVX0dFTiBDb25maWd1cmF0aW9uIGFuZCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTFJVX0dFTmAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGVuYWJsZSBpdCwgc28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJMUlVfR0VOXCJdYC4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoaXMgcGF0Y2ggdGhhdCdzIGZpeGluZyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoIGhvdyBgZmlsbF9ldmljdGFibGVgIHdhcyBoYW5kbGluZyBmb2xpb3MgZHVyaW5nIHRoZSBNR0xSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBwaWNraW5nIHRoZW0gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0LiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggZGVmaW5pdGVseSB3YXJyYW50cyBhdHRlbnRpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBjb250cm9sbGFibGUgdGhyb3VnaCBzeXNmcywgc3BlY2lmaWNhbGx5IGJ5IHRvZ2dsaW5nIE1HTFJVLCB3aGljaCBpcyBpbXBvcnRhbnQuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5BcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEknbSBnb2luZyB0byBsZWF2ZSB0aGF0IGVtcHR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24sIGBmaWxsX2V2aWN0YWJsZWAsIGlzIHN0YXRpYywgYW5kIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaXRzZWxmIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2suIFRoZXJlJ3Mgbm8gc2Vuc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBJIGNvdWxkIGZvY3VzIG9uIHRvIG5hcnJvdyB0aGUgc2NvcGUuXG5cbkkganVzdCB3YW50IHRvIGRvdWJsZSBjaGVjayBteSB3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gTGV0IG1lIHJldmlldyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIHBvc3NpYmx5IHRyaWdnZXIgYGZpbGxfZXZpY3RhYmxlYC4gT2theSwgc28gYGZpbGxfZXZpY3RhYmxlYCBpcyBjYWxsZWQgb25seSBieSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBUaGVuLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBlbmFibGVkX3N0b3JlYC4gQW5kIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiBOb3BlLCB0aGF0J3MgaXQuIEl04oCZcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc3lzZnMgcGF0aC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSdtIGNvbWZvcnRhYmxlIHVzaW5nIGBzZXQtcmVzdWx0c2AgdG8gZmluYWxpemUgdGhlIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NjIsIk91dHB1dFRva2VucyI6OTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMTY3MDk0MTQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNjk0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYCB3aGVyZSBmb2xpb3Mgd2VyZSB0YWtlbiBmcm9tIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGxpc3Qgd2hlbiBtb3ZpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1HTFJVKSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgdG9nZ2xpbmcgb2YgTUdMUlUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMjQ4MjcwNDIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1ODMxNDExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjMyLjI0ODg2OTc0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTA1NzcxMDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODowOToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgKzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQm90aCB0aGUgbGVnYWN5IExSVSBhbmQgYSBNR0xSVSBnZW5lcmF0aW9uIGtlZXAgdGhlXG4rXHRcdFx0ICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZVxuK1x0XHRcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxuK1x0XHRcdCAqIHRoYXQgb3JkZXIsIHRoZSBlbmQgd2UgdGFrZSBmcm9tIG11c3QgbWF0Y2ggdGhlIGVuZFxuK1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZVxuK1x0XHRcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcbitcdFx0XHQgKiBoZWFkOyBhY3RpdmUgZm9saW9zIHVzZSByZWNsYWltaW5nPWZhbHNlIChsaXN0X2FkZCksXG4rXHRcdFx0ICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZFxuK1x0XHRcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhY3RpdmUpXG4rXHRcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICs1MzI2LDE2IEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbiBcbiBcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZFxuK1x0XHRcdCAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2hcbitcdFx0XHQgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmVcbitcdFx0XHQgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvXG4rXHRcdFx0ICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpc1xuK1x0XHRcdCAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClcbitcdFx0XHQgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS5cbitcdFx0XHQgKi9cbitcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbiBcbiBcdFx0XHRpZiAoIS0tcmVtYWluaW5nKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMjQ4ODcwNjYzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDU3NjgyMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIExpc3QgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZmlsbF9ldmljdGFibGVgIGluIGBtbS92bXNjYW4uY2AsIGFuZCBpdCdzIGFsbCBhYm91dCBob3cgZm9saW9zIGFyZSBoYW5kbGVkIG9uIHRoZSBMUlUgbGlzdHMuIEluaXRpYWxseSwgSSBub3RpY2VkIHRoZSBjaGFuZ2UgaW4gaG93IGZvbGlvcyBhcmUgcHVsbGVkIGZyb20gdGhlIGBoZWFkYCBsaXN0LiBOb3csIGRlcGVuZGluZyBvbiB0aGUgYGFjdGl2ZWAgc3RhdGUsIHdlJ3JlIGVpdGhlciB0YWtpbmcgZnJvbSB0aGUgdGFpbCAodXNpbmcgYGxydV90b19mb2xpbyhoZWFkKWApIG9yIHRoZSBoZWFkIChgbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgKS4gSSBoYWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3RvX2ZvbGlvYCBpcyBpbmRlZWQgYGxpc3RfbGFzdF9lbnRyeWAsIGFuZCBpdCBpcywgc28gdGhhdCdzIGdvb2QuIFRoZSBjaGFuZ2UgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYCBpcyBhbHNvIHNvbWV0aGluZyB0byBjb25zaWRlcjogd2UncmUgbm93IHBhc3NpbmcgYCFhY3RpdmVgIGluc3RlYWQgb2YgYGZhbHNlYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBsb2dpYyBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgTFJVIGxpc3QgbWFuYWdlbWVudC4gSSBxdWlja2x5IHJhbiB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIG9mIGJ1Z3MuIFRoZXJlJ3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgbG9va3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLCBzbyBidWdzIGhlcmUgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbGlzdCBjb3JydXB0aW9uLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGEgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIHNjZW5hcmlvLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSB0b29sIGZvciBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpc24ndCBhcHBsaWNhYmxlIGhlcmUuIFRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCBtZSBjb25maXJtIHRoZSBjb2RlOlxuYGBgY1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZVxuK1x0XHRcdCAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGVcbitcdFx0XHQgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmVcbitcdFx0XHQgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmRcbitcdFx0XHQgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2VcbitcdFx0XHQgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlXG4rXHRcdFx0ICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLFxuK1x0XHRcdCAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmRcbitcdFx0XHQgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoYWN0aXZlKVxuK1x0XHRcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbmBgYFxuQW5kOlxuYGBgY1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuYGBgXG5cbk9rYXksIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXQgaXMgcHVyZWx5IGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLCBhbmQgbm8gZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYzLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjQzLjMwNjU1Njc5NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdGFraW5nIGZvbGlvcyBmcm9tIHRoZSBMUlUgbGlzdCBhbmQgYWRkaW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24gaW4gYGZpbGxfZXZpY3RhYmxlKClgLiBJdCBjaGFuZ2VzIHRoZSBsaXN0IGV4dHJhY3Rpb24gdG8gdGFrZSBmcm9tIHRoZSBoZWFkIG9yIHRhaWwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZvbGlvIGlzIGFjdGl2ZSwgYW5kIHBhc3NlcyBgIWFjdGl2ZWAgdG8gYGxydV9nZW5fYWRkX2ZvbGlvKClgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBsaXN0IG9yZGVyaW5nIGFuZCBMUlUgZ2VuZXJhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBkbyBub3Qgc2VuZCBhbnkgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgbGlzdCBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 07:38:46 +0000 UTC FinishedAt: 2026-08-20 08:10:44 +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": "36f0f67c5c0065f65c0f4ee459cddbfe4045bccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "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": "36f0f67c5c0065f65c0f4ee459cddbfe4045bccb", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "c93a23cf-8cc4-4336-a353-b310d54701ae" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [], "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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHRha2luZyBmb2xpb3MgZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGFkZGluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uIGluIGBmaWxsX2V2aWN0YWJsZSgpYC4gSXQgY2hhbmdlcyB0aGUgbGlzdCBleHRyYWN0aW9uIHRvIHRha2UgZnJvbSB0aGUgaGVhZCBvciB0YWlsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhY3RpdmUsIGFuZCBwYXNzZXMgYCFhY3RpdmVgIHRvIGBscnVfZ2VuX2FkZF9mb2xpbygpYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gbGlzdCBvcmRlcmluZyBhbmQgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgZG8gbm90IHNlbmQgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaWxsX2V2aWN0YWJsZWAgd2hlcmUgZm9saW9zIHdlcmUgdGFrZW4gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0IHdoZW4gbW92aW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChNR0xSVSkgdGhhdCBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIHRvZ2dsaW5nIG9mIE1HTFJVLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjRlZWEwNmNjMDBjM2ZjMTBjMTk1M2RjMmYzZmIzNmI4YTVlMTlhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA4OjA5OjEwIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgJiM0Mzs1MzAyLDIzIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdFx0Ym9vbCBzdWNjZXNzO1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4mIzQzO1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4mIzQzO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbiYjNDM7XHRcdFx0ICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZVxuJiM0MztcdFx0XHQgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmVcbiYjNDM7XHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZVxuJiM0MztcdFx0XHQgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlXG4mIzQzO1x0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbiYjNDM7XHRcdFx0ICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZFxuJiM0MztcdFx0XHQgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGlmIChhY3RpdmUpXG4mIzQzO1x0XHRcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4mIzQzO1x0XHRcdGVsc2VcbiYjNDM7XHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICYjNDM7NTMyNiwxNiBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7XG4gXG4gXHRcdFx0bHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcbi1cdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpO1xuJiM0MztcdFx0XHQvKlxuJiM0MztcdFx0XHQgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZFxuJiM0MztcdFx0XHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5faXNfYWN0aXZlKCkgcmVwb3J0cyBhcyBhY3RpdmUsIHNvIGl0cyBpbmFjdGl2ZVxuJiM0MztcdFx0XHQgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvXG4mIzQzO1x0XHRcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcbiYjNDM7XHRcdFx0ICogcmV1c2VzIHJlY2xhaW1pbmcgYmV5b25kIGl0cyBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKVxuJiM0MztcdFx0XHQgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYCB3aGVyZSBmb2xpb3Mgd2VyZSB0YWtlbiBmcm9tIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGxpc3Qgd2hlbiBtb3ZpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1HTFJVKSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgdG9nZ2xpbmcgb2YgTUdMUlUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBmNGVlYTA2Y2MwMGMzZmMxMGMxOTUzZGMyZjNmYjM2YjhhNWUxOWE4CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFRodSBBdWcgMjAgMDg6MDk6MTAgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC01MzAyLDcgJiM0Mzs1MzAyLDIzIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIAogCQl3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHsKIAkJCWJvb2wgc3VjY2VzczsKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZQomIzQzOwkJCSAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGUKJiM0MzsJCQkgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmUKJiM0MzsJCQkgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmQKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2UKJiM0MzsJCQkgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlCiYjNDM7CQkJICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLAomIzQzOwkJCSAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmQKJiM0MzsJCQkgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTsKQEAgLTUzMTAsNyAmIzQzOzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7CiAKIAkJCWxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogV2l0aCByZWNsYWltaW5nPWZhbHNlLCBscnVfZ2VuX2ZvbGlvX3NlcSgpIHdvdWxkIHNlZWQKJiM0MzsJCQkgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoCiYjNDM7CQkJICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlCiYjNDM7CQkJICogcGxhY2VtZW50IHdvdWxkIGJlIGxvc3QuICBQYXNzIHJlY2xhaW1pbmc9IWFjdGl2ZSB0bwomIzQzOwkJCSAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXMKJiM0MzsJCQkgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpCiYjNDM7CQkJICogbWVhbmluZzsgaXQgYWxzbyBwaWNrcyBsaXN0X2FkZF90YWlsKCkgYWJvdmUuCiYjNDM7CQkJICovCiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwogCQkJVk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTsKIAogCQkJaWYgKCEtLXJlbWFpbmluZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDb3JlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgd2hlbiB0aGV5JiMzOTtyZSB0YWtlbiBmcm9tIHRoZSBMUlUgbGlzdCBhbmQgaG93IHRoZXkmIzM5O3JlIGFkZGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoZSBjb2RlIGRpZmYsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6CgpgYGBjCi0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQkJaWYgKGFjdGl2ZSkKJiM0MzsJCQkJZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpOwpgYGAKCmFuZAoKYGBgYwotCQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTsKJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CmBgYAoKVGhpcyBpcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSAoTUdMUlUvdm1zY2FuKSwgbWVhbmluZyB0aGlzIHdpbGwgYWZmZWN0IGhvdyBtZW1vcnkgaXMgcmVjbGFpbWVkLiBCZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIGltcGxpY2F0aW9ucywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuIElzIGBmaWxsX2V2aWN0YWJsZWAgYSBzdGF0aWMgZnVuY3Rpb24/IEtub3dpbmcgdGhhdCB3aWxsIGluZmx1ZW5jZSBob3cgYnJvYWRseSB0aGUgY2hhbmdlIGNvdWxkIHJpcHBsZSBvdXQuIExldCBtZSBxdWlja2x5IGNoZWNrLi4uIE9rYXksIGdvb2QsIGl0IGlzIGluZGVlZCBhIHN0YXRpYyBmdW5jdGlvbiB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gTm93LCB3aGVyZSBpcyBpdCAqY2FsbGVkKj8gVGhhdCYjMzk7cyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01Mzc4PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDEyLVxubW0vdm1zY2FuLmM6NTQxMzpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQxNC1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMyNQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3MsIGdpdmVuIG15IGV4cGVydGlzZToKCioqVHJhY2luZyB0aGUgTFJVIEV2aWN0aW9uIFBhdGgqKgoKUmlnaHQsIGBmaWxsX2V2aWN0YWJsZWAgaXMgdHJpZ2dlcmVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEludGVyZXN0aW5nLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIG1lIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgKmNvbnRleHQqIG9mIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFdoYXQmIzM5O3MgZHJpdmluZyAqdGhhdCogc3RhdGUgY2hhbmdlPyBJdCBzZWVtcyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgcHJvY2Vzcy4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBXaGVyZSBhcmUgdGhlIGNhbGwgc2l0ZXMgZm9yICp0aGF0KiBmdW5jdGlvbj8gV2hhdCB0cmlnZ2VycyB0aGUgY2hhbmdlcyB0aGF0ICp0aGVuKiByZXF1aXJlIHRoZSBldmljdGlvbiBtZWNoYW5pc20gdG8gY29tZSBpbnRvIHBsYXk/IEtub3dpbmcgdGhlIHVwc3RyZWFtIGNhbGxlcnMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHN5c3RlbSYjMzk7cyBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeSBhbmQgd2hlbiB0aG9zZSB0cmlnZ2VycyBmb3IgZXZpY3Rpb24gaGFwcGVuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTM0OT1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNzctXG5tbS92bXNjYW4uYzo1Mzc4OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNzkte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NzY9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0OTItXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0OTM6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDk0LVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gdXNlcnNwYWNlIHdyaXRpbmcgdG8gdGhhdCBzeXNmcyBmaWxlLiBTbywgbGlrZWx5IGNoYW5naW5nIHNvbWUgc29ydCBvZiBlbmFibGluZyBzdGF0ZS4gRmluZS4gQnV0LCBJIG5lZWQgdG8ga25vdyB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGFsbCB0aGUgcG9pbnRzIG9mIGFjY2VzcyBmb3IgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgbm90IGp1c3QgdGhpcyBvbmUuIFRoaXMgc2VlbXMgbGlrZSBhIGNyaXRpY2FsIGZ1bmN0aW9uLiBOb3csIGxldCBtZSBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55ICpvdGhlciogY2FsbGVycyBvZiB0aGlzIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjYWxsIGdyYXBoLCBiZWNhdXNlIEkgc3VzcGVjdCB0aGlzIHNtYWxsIGRldGFpbCBtYXkgYmUgbW9yZSBzaWduaWZpY2FudC4gTGV0JiMzOTtzIGRpZyBkZWVwZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU0NTk9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU0NzY6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vdm1zY2FuLmMtNTQ3Ny1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTgwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBgZW5hYmxlZF9zdG9yZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgd29ya2luZy4gSSYjMzk7bSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiB0aGUgYGVuYWJsZWRfc3RvcmVgIHZhcmlhYmxlIChvciByZWxhdGVkIGNvZGUpLiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGFydGljdWxhciBtZWNoYW5pc20gbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyBiZWluZyBzdG9yZWQsIHdoZW4gaXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aHkqLiBJcyBpdCBhIGZsYWcsIGEgY291bnRlciwgYSBiaXRtYXNrPyBJcyBpdCByZWxhdGVkIHRvIHNvbWUga2luZCBvZiB0aHJvdHRsaW5nIG9yIHJlc291cmNlIGxpbWl0aW5nPyBJcyB0aGlzIHdoZXJlIHRoZSBjb250cm9sIG92ZXIgdGhlIHNjYW4gcHJvY2VzcyBpcyByZWFsbHkgaGFwcGVuaW5nPyBMZXQmIzM5O3MgZ2V0IGNyYWNraW5nISBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlLCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSB3cml0ZXMgYW5kIHJlYWRzLCBhbmQgdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW4gYW5kIHVucmF2ZWwgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9scnVfc29ydC5jPTQ1ND1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9lbmFibGVkKHZvaWQpXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjAtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ2MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxubW0vZGFtb24vbHJ1X3NvcnQuYy00NjItXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmM9NDkwPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBlbmFibGVkX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDkxOlx0LnNldCA9IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUsXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Mi1cdC5nZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX2xvYWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTM3NT1zdGF0aWMgYm9vbCBkYW1vbl9yZWNsYWltX2VuYWJsZWQodm9pZClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgxLVxubW0vZGFtb24vcmVjbGFpbS5jOjM4MjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fZW5hYmxlZF9zdG9yZShjb25zdCBjaGFyICp2YWwsXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgzLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9NDExPXN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBlbmFibGVkX3BhcmFtX29wcyA9IHtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6XHQuc2V0ID0gZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jLTQxMy1cdC5nZXQgPSBkYW1vbl9yZWNsYWltX2VuYWJsZWRfbG9hZCxcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMTgtXG5tbS9kYW1vbi9zdGF0LmM6MTk6c3RhdGljIGludCBkYW1vbl9zdGF0X2VuYWJsZWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjAtXHRcdGNvbnN0IGNoYXIgKnZhbCwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApO1xuLS1cbm1tL2RhbW9uL3N0YXQuYz0yNT1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgZW5hYmxlZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9zdGF0LmM6MjY6XHQuc2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlLFxubW0vZGFtb24vc3RhdC5jLTI3LVx0LmdldCA9IGRhbW9uX3N0YXRfZW5hYmxlZF9sb2FkLFxuLS1cbm1tL2RhbW9uL3N0YXQuYz0yMzI9c3RhdGljIGJvb2wgZGFtb25fc3RhdF9lbmFibGVkKHZvaWQpXG4tLVxubW0vZGFtb24vc3RhdC5jLTIzOC1cbm1tL2RhbW9uL3N0YXQuYzoyMzk6c3RhdGljIGludCBkYW1vbl9zdGF0X2VuYWJsZWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjQwLVx0XHRjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDI0PXN0YXRpYyBib29sIHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKGVudW0gZ2xvYmFsX2VuYWJsZWRfbW9kZSBtb2RlKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDQ0LVxubW0vaHVnZV9tZW1vcnkuYzo0NDU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2VfbWVtb3J5LmMtNDQ2LVx0XHRcdCAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTY3OS1cbm1tL2h1Z2VfbWVtb3J5LmM6NjgwOnN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL2h1Z2VfbWVtb3J5LmMtNjgxLVx0XHRcdFx0ICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz03MDg9c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBhbm9uX2VuYWJsZWRfYXR0ciA9XG5tbS9odWdlX21lbW9yeS5jOjcwOTpcdF9fQVRUUihlbmFibGVkLCAwNjQ0LCBhbm9uX2VuYWJsZWRfc2hvdywgYW5vbl9lbmFibGVkX3N0b3JlKTtcbm1tL2h1Z2VfbWVtb3J5LmMtNzEwLVxuLS1cbm1tL21lbW9yeS10aWVycy5jPTk0Mz1zdGF0aWMgc3NpemVfdCBkZW1vdGlvbl9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vbWVtb3J5LXRpZXJzLmMtOTQ4LVxubW0vbWVtb3J5LXRpZXJzLmM6OTQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90aW9uX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9tZW1vcnktdGllcnMuYy05NTAtXHRcdFx0XHQgICAgICBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vc2htZW0uYz01NDMzPXN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9zaG1lbS5jLTU0NTYtXG5tbS9zaG1lbS5jOjU0NTc6c3RhdGljIHNzaXplX3Qgc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL3NobWVtLmMtNTQ1OC1cdFx0c3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBjb3VudClcbi0tXG5tbS9zaG1lbS5jPTU1Mzg9c3RhdGljIGJvb2wgc2V0X3NobWVtX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gaHVnZV9tb2RlIG1vZGUpXG4tLVxubW0vc2htZW0uYy01NTU0LVxubW0vc2htZW0uYzo1NTU1OnN0YXRpYyBzc2l6ZV90IHRocHNpemVfc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbm1tL3NobWVtLmMtNTU1Ni1cdFx0XHRcdFx0ICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3NobWVtLmM9NTU4Nz1zdHJ1Y3Qga29ial9hdHRyaWJ1dGUgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX2F0dHIgPVxubW0vc2htZW0uYzo1NTg4Olx0X19BVFRSKHNobWVtX2VuYWJsZWQsIDA2NDQsIHRocHNpemVfc2htZW1fZW5hYmxlZF9zaG93LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc3RvcmUpO1xubW0vc2htZW0uYy01NTg5LSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2IENPTkZJR19TWVNGUyAqL1xuLS1cbm1tL3N3YXBfc3RhdGUuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXG4tLVxubW0vc3dhcF9zdGF0ZS5jLTEwMzctfVxubW0vc3dhcF9zdGF0ZS5jOjEwMzg6c3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXG5tbS9zd2FwX3N0YXRlLmMtMTAzOS1cdFx0XHRcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vdm1zY2FuLmMtNTQ3NS0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL3Ztc2Nhbi5jLTU0NzctXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBNR0xSVSYjMzk7cyBFbmFibGluZyBhbmQgRGlzYWJsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gaG93IE1HTFJVJiMzOTtzIHN0YXRlIGlzIGNvbnRyb2xsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgaW4gcmVsYXRpb24gdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgaXMgd2hhdCYjMzk7cyBjYXRjaGluZyBteSBhdHRlbnRpb24uIEkgbmVlZCB0byBiZSBjbGVhciBvbiB3aGVyZSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbiBpcyBhY3R1YWxseSB1dGlsaXplZCwgZXNwZWNpYWxseSBzaW5jZSBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhvc2Ugc3RhdGUgY2hhbmdlcy4KCk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgb25seSBnZXQgY2FsbGVkIHdoZW4gTUdMUlUgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBjaXJjdW1zdGFuY2VzLiBJZiBzbywgdGhlbiBob3csIGluIGRldGFpbCwgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzeXN0ZW0/IEkgbmVlZCB0byBhbmFseXplIHRoZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGZ1bmN0aW9uLiBUaGF0IHdpbGwgb2ZmZXIgc29tZSBjbGFyaXR5LiBVbmRlcnN0YW5kaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTM3Ny1cbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxubW0vdm1zY2FuLmMtNTM3OS17XG4tLVxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG4tLVxubW0vdm1zY2FuLmMtNTQ5Mi1cdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxubW0vdm1zY2FuLmM6NTQ5MzpcdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbm1tL3Ztc2Nhbi5jLTU0OTQtXHRcdGVsc2UgaWYgKGVuYWJsZWQpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1NjQKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA2OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBEZWVwIGludG8gUGFnZSBFdmljdGlvbioqCgpPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGdldHMgdHJpZ2dlcmVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIGFuZCB0aGF0LCBpbiB0dXJuLCBpcyBhIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiBgZW5hYmxlZF9zdG9yZWAuIEdvdCBpdC4gVGhhdCYjMzk7cyB0aGUgcHJpbWFyeSBwYXRoLCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBwb3RlbnRpYWwgc2lkZSBlZmZlY3RzLiBJcyBgZmlsbF9ldmljdGFibGVgICpvbmx5KiBjYWxsZWQgZnJvbSB0aGF0IHNwZWNpZmljIGNhbGwgY2hhaW4/IEkgY2FuJiMzOTt0IGFzc3VtZSB0aGF0LiBCZXN0IHRvIGJlIHRob3JvdWdoLCBlc3BlY2lhbGx5IHdpdGggc29tZXRoaW5nIHRoaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IG1hbmFnZW1lbnQuCgpSaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtbS92bXNjYW4uY2AuIEEgcXVpY2sgc2VhcmNoIGZvciBgZmlsbF9ldmljdGFibGVgIHNob3VsZCByZXZlYWwgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBHb3R0YSBjaGVjayB0aGUgb3RoZXIgY29kZXBhdGhzIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gdW5leHBlY3RlZCBiZWhhdmlvciBvciBzdWJ0bGUgaW50ZXJhY3Rpb25zIEkmIzM5O20gbWlzc2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01Mzc4PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDEyLVxubW0vdm1zY2FuLmM6NTQxMzpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQxNC1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNjYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTUdMUlUgVG9nZ2xlIExvZ2ljKioKCk9rYXksIHNvIHRoaXMgY29kZSwgdGhlIG9uZSBJJiMzOTttIGxvb2tpbmcgYXQsIGlzIG9ubHkgY2FsbGVkIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgd2hpY2ggaXMgdmVyeSBzcGVjaWZpYy4gVGhhdCBtZWFucyBpdCBvbmx5IGdldHMgZXhlY3V0ZWQgd2hlbiB0aGUgdXNlciBpbnRlcmFjdHMgd2l0aCB0aGUgc3lzZnMgaW50ZXJmYWNlIHRvIHR1cm4gTUdMUlUgb24gb3Igb2ZmLiBUaGF04oCZcyBhIGtleSBwaWVjZSBvZiBpbmZvcm1hdGlvbi4KCk5leHQsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgZW52aXJvbm1lbnQuIENhbiB0aGlzIGNvZGUgcGF0aCBiZSByZWFjaGVkIGluIGEgdmlydHVhbGl6ZWQgc2V0dGluZz8gVGhlIGFuc3dlciBpcyBsaWtlbHkgeWVzLCBiZWNhdXNlIHN5c2ZzIGlzIHVzdWFsbHkgYWNjZXNzaWJsZSB3aXRoaW4gYSBWTS4gU28gdGhhdCYjMzk7cyBvbmUgbGVzcyBiYXJyaWVyIHRvIGVudHJ5LgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uOiBpcyB0aGlzIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCB0b3VjaGVzIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgKHNwZWNpZmljYWxseSBNR0xSVSkuIEFueSBjb2RlIHRoYXQgYWx0ZXJzIHRoYXQgY3JpdGljYWwgY29tcG9uZW50IGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBhIG1lbW9yeSBjb3JydXB0aW9uIG9yIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgaXMgc2lnbmlmaWNhbnQgaGVyZS4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayBgbW0vdm1zY2FuLmNgIGFuZCBzcGVjaWZpY2FsbHkgbG9vayBhcm91bmQgYGZpbGxfZXZpY3RhYmxlYCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSBgI2lmZGVmYCBibG9ja3MgdGhhdCBtaWdodCBnYXRlIHRoaXMgbG9naWMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIHJhbmdlIG9mIGNvbmZpZ3VyYXRpb25zIHRoYXQgYXJlIHBvc3NpYmxlIGJlZm9yZSBJIHN0YXJ0IHRlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MjgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MjgwOlx0XHRcdH1cbjUyODE6XHRcdH0gZWxzZSB7XG41MjgyOlx0XHRcdGludCBnZW4sIHR5cGUsIHpvbmU7XG41MjgzOlx0XG41Mjg0Olx0XHRcdGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKSB7XG41Mjg1Olx0XHRcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmxydWdlbi1cdTAwM2Vmb2xpb3NbZ2VuXVt0eXBlXVt6b25lXSkpXG41Mjg2Olx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG41Mjg3Olx0XHRcdH1cbjUyODg6XHRcdH1cbjUyODk6XHRcbjUyOTA6XHRcdHJldHVybiB0cnVlO1xuNTI5MTpcdH1cbjUyOTI6XHRcbjUyOTM6XHRzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG41Mjk0Olx0e1xuNTI5NTpcdFx0ZW51bSBscnVfbGlzdCBscnU7XG41Mjk2Olx0XHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcbjUyOTc6XHRcbjUyOTg6XHRcdGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobHJ1KSB7XG41Mjk5Olx0XHRcdGludCB0eXBlID0gaXNfZmlsZV9scnUobHJ1KTtcbjUzMDA6XHRcdFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XG41MzAxOlx0XHRcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcdTAwMjZscnV2ZWMtXHUwMDNlbGlzdHNbbHJ1XTtcbjUzMDI6XHRcbjUzMDM6XHRcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG41MzA0Olx0XHRcdFx0Ym9vbCBzdWNjZXNzO1xuNTMwNTpcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG41MzA2Olx0XG41MzA3Olx0XHRcdFx0LypcbjUzMDg6XHRcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbjUzMDk6XHRcdFx0XHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXG41MzEwOlx0XHRcdFx0ICogdGFpbCwgYW5kIHJlY2xhaW0gdGFrZXMgZnJvbSB0aGUgdGFpbC4gIFRvIHByZXNlcnZlXG41MzExOlx0XHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG41MzEyOlx0XHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXG41MzEzOlx0XHRcdFx0ICogcmVjbGFpbWluZz10cnVlIChsaXN0X2FkZF90YWlsKSwgc28gdGFrZSBmcm9tIHRoZVxuNTMxNDpcdFx0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbjUzMTU6XHRcdFx0XHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXG41MzE2Olx0XHRcdFx0ICogd291bGQgcmV2ZXJzZSBob3QvY29sZCB3aXRoaW4gdGhlIGdlbmVyYXRpb24uXG41MzE3Olx0XHRcdFx0ICovXG41MzE4Olx0XHRcdFx0aWYgKGFjdGl2ZSlcbjUzMTk6XHRcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuNTMyMDpcdFx0XHRcdGVsc2VcbjUzMjE6XHRcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG41MzIyOlx0XG41MzIzOlx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG41MzI0Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbjUzMjU6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbjUzMjY6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbjUzMjc6XHRcbjUzMjg6XHRcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuNTMyOTpcdFx0XHRcdC8qXG41MzMwOlx0XHRcdFx0ICogV2l0aCByZWNsYWltaW5nPWZhbHNlLCBscnVfZ2VuX2ZvbGlvX3NlcSgpIHdvdWxkIHNlZWRcbjUzMzE6XHRcdFx0XHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXG41MzMyOlx0XHRcdFx0ICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlXG41MzMzOlx0XHRcdFx0ICogcGxhY2VtZW50IHdvdWxkIGJlIGxvc3QuICBQYXNzIHJlY2xhaW1pbmc9IWFjdGl2ZSB0b1xuNTMzNDpcdFx0XHRcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcbjUzMzU6XHRcdFx0XHQgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpXG41MzM2Olx0XHRcdFx0ICogbWVhbmluZzsgaXQgYWxzbyBwaWNrcyBsaXN0X2FkZF90YWlsKCkgYWJvdmUuXG41MzM3Olx0XHRcdFx0ICovXG41MzM4Olx0XHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuNTMzOTpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG41MzQwOlx0XG41MzQxOlx0XHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbjUzNDI6XHRcdFx0XHRcdHJldHVybiBmYWxzZTtcbjUzNDM6XHRcdFx0fVxuNTM0NDpcdFx0fVxuNTM0NTpcdFxuNTM0NjpcdFx0cmV0dXJuIHRydWU7XG41MzQ3Olx0fVxuNTM0ODpcdFxuNTM0OTpcdHN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG41MzUwOlx0e1xuNTM1MTpcdFx0aW50IGdlbiwgdHlwZSwgem9uZTtcbjUzNTI6XHRcdGludCByZW1haW5pbmcgPSBNQVhfTFJVX0JBVENIO1xuNTM1MzpcdFxuNTM1NDpcdFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpIHtcbjUzNTU6XHRcdFx0c3RydWN0IGxpc3RfaGVhZCAqaGVhZCA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW4uZm9saW9zW2dlbl1bdHlwZV1bem9uZV07XG41MzU2Olx0XG41MzU3Olx0XHRcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xuNTM1ODpcdFx0XHRcdGJvb2wgc3VjY2VzcztcbjUzNTk6XHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuNTM2MDpcdFxuNTM2MTpcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuNTM2MjpcdFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbyksIGZvbGlvKTtcbjUzNjM6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcbjUzNjQ6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fem9uZW51bShmb2xpbykgIT0gem9uZSwgZm9saW8pO1xuNTM2NTpcdFxuNTM2NjpcdFx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG41MzY3Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbjUzNjg6XHRcdFx0XHRscnV2ZWNfYWRkX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuNTM2OTpcdFxuNTM3MDpcdFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG41MzcxOlx0XHRcdFx0XHRyZXR1cm4gZmFsc2U7XG41MzcyOlx0XHRcdH1cbjUzNzM6XHRcdH1cbjUzNzQ6XHRcbjUzNzU6XHRcdHJldHVybiB0cnVlO1xuNTM3NjpcdH1cbjUzNzc6XHRcbjUzNzg6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG41Mzc5Olx0e1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MDUxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBgZmlsbF9ldmljdGFibGVgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gcXVpY2tseSBkZXRlcm1pbmUgdGhlIGNvbnRleHQgb2YgdGhpcyBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgaXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZCwgbGlrZWx5IGJhc2VkIG9uIHNvbWUgZmVhdHVyZSBmbGFnLiBTcGVjaWZpY2FsbHksIEkgc3VzcGVjdCBpdCYjMzk7cyBhc3NvY2lhdGVkIHdpdGggdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaW1wbHlpbmcgaXQgcGxheXMgYSByb2xlIGluIGEgbW9yZSBhZHZhbmNlZCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGltcGxlbWVudGF0aW9uIG9yIHNvbWUgdmFyaWFudCBvZiBwYWdlIGFnaW5nLgoKTXkgZmlyc3QgbW92ZSBpcyB0byBzY2FuIHRoZSBjb2RlIHRvIHZlcmlmeSBpZiB0aGF0IHByZXByb2Nlc3NvciBkaXJlY3RpdmUsIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLCBpbmRlZWQgZW5jbG9zZXMgdGhlIGRlZmluaXRpb24gb3IgZGVjbGFyYXRpb24gb2YgYGZpbGxfZXZpY3RhYmxlYC4gVGhhdCB3aWxsIGltbWVkaWF0ZWx5IGdpdmUgbWUgYSBjbHVlIGFzIHRvIGl0cyBwdXJwb3NlIGFuZCBkZXBlbmRlbmN5LiBUaGUgcGxhY2VtZW50IHdpbGwgaW5kaWNhdGUgaWYgSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2s7IGl0JiMzOTtsbCBjbGFyaWZ5IHdoZXRoZXIgYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3RpdmVseSB1c2VkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgYW4gb3B0aW9uYWwgY29tcG9uZW50LiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBvdGhlciBmdW5jdGlvbnMgYXJlIGFmZmVjdGVkIGJ5IGBMUlVfR0VOYCwgdG8gZ2FpbiBzb21lIGluc2lnaHQgaW50byBgZmlsbF9ldmljdGFibGVgJiMzOTtzIHJvbGUgaW4gdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTEtXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjY5My1cbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkwMS1cbi0tXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzctXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwMzktXG4tLVxubW0vdm1zY2FuLmM9NTk2OD1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTY5LVxubW0vdm1zY2FuLmM6NTk3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NzEtXG4tLVxubW0vdm1zY2FuLmM9NTk4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODYtXG5tbS92bXNjYW4uYzo1OTg3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk4OC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNDYKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgR2VuZXJhdGlvbiBDb2RlKioKCk9rYXksIEkmIzM5O20gY2hlY2tpbmcgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoZSB0YXJnZXQgZnVuY3Rpb24gaXMgaW5kZWVkIHdyYXBwZWQgd2l0aGluIGFuIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBMZXQmIzM5O3Mgc2VlLi4uIGxvb2tpbmcgYXQgdGhlIGxpbmUgbnVtYmVycywgYGZpbGxfZXZpY3RhYmxlYCBpcyBhcm91bmQgbGluZSA1MjkzLCBhbmQgdGhlIGAjZWxzZWAgZm9yIHRoZSBjb25kaXRpb25hbCBpcyBhcm91bmQgNTk3MCwgc28gaXQgbG9va3MgbGlrZSB0aGF0IGNvZGUgcGF0aCBpcyBkZWZpbml0ZWx5IGVuYWJsZWQgd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIGRlZmluZWQuCgpOb3csIGEgcXVpY2sgdGhvdWdodDogaXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXM/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgPyBUaGUgZmlyc3Qgb25lIGp1c3QgKmRlZmluZXMqIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIG90aGVyIHBhcmFtZXRlciBtaWdodCBkZXRlcm1pbmUgaWYgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBidXQgc3RpbGwgYWxsb3dpbmcgaXQgdG8gYmUgdG9nZ2xlZCB2aWEgc3lzZnMsIHJpZ2h0PwoKVGhpbmtpbmcgYWJvdXQgdGhhdCBzeXNmcyBvcHRpb24sIHdoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIG5hbWU/IEFoIHllcywgYGVuYWJsZWRfc3RvcmVgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpdHNlbGYgaXMgZGVwZW5kZW50IG9uLCBzYXksIGBDT05GSUdfU1lTRlNgIGJlaW5nIGVuYWJsZWQuLi4gSSYjMzk7bGwgY2hlY2sgdGhhdCBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTQ1OT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NzUtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xubW0vdm1zY2FuLmM6NTQ3NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS92bXNjYW4uYy01NDc3LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU5MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyB0aGUgYGVuYWJsZWRfc3RvcmVgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgZW5hYmxlZF9zdG9yZWAuIE15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHRvIHNjb3BlIGl0LiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0xldCYjMzk7cyBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZS4mIzM0OyBJJiMzOTttIG5vdCBqdXN0IGdvaW5nIHRvIHRha2UgdGhpcyB0ZXJtIGF0IGZhY2UgdmFsdWU7IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjb250ZXh0LiBXaGVyZSBpcyBpdCB1c2VkPyBXaGF0IHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIG5lYXIgaXQgaW4gdGhlIGNvZGViYXNlPyBXaGF0JiMzOTtzIHRoZSBnZW5lcmFsIGRlc2lnbiBwYXR0ZXJuIGF0IHBsYXkgYXJvdW5kIGl0PwoKSSB3YW50IHRvIGtub3cgaWYgaXQmIzM5O3MgYSBzaW1wbGUgYm9vbGVhbiBmbGFnLCBhIG1vcmUgY29tcGxleCBkYXRhIHN0cnVjdHVyZSwgb3IgcGFydCBvZiBhIGxhcmdlciBzdGF0ZSBtYW5hZ2VtZW50IHN5c3RlbS4gQXJlIHdlIGRlYWxpbmcgd2l0aCBzb21ldGhpbmcgbG9jYWwgdG8gYSBmdW5jdGlvbiwgb3IgaXMgdGhpcyBhIGdsb2JhbCBvciBzaGFyZWQgcmVzb3VyY2U/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBwb3RlbnRpYWwgY29uY3VycmVuY3kgaXNzdWVzIG9yIHJhY2UgY29uZGl0aW9ucyBpZiBpdCYjMzk7cyBtb2RpZmllZCBpbiBtdWx0aXBsZSBwbGFjZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgb24gdGhpcyBvciBkZXBlbmRlbmNpZXMgaXQgdXNlcz8gSXMgaXQgc2ltcGx5IHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgb3IgbW9yZSBjb21wbGljYXRlZD8KCkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgJiMzNDtlbmFibGVkJiMzNDsgbWVhbnMgaW4gKnRoaXMqIGNvbnRleHQuIElzIGl0IGFib3V0IGZlYXR1cmUgZmxhZ3MsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiwgYWNjZXNzIGNvbnRyb2wsIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaGUgZG9jdW1lbnRhdGlvbiBtYXkgY2xhcmlmeSwgYnV0IEkgd2FudCB0byBnZXQgYSBwaWN0dXJlIG9mIGl0IGJ5IGludmVzdGlnYXRpbmcgd2hlcmUgaXQmIzM5O3MgdXNlZCBhbmQgaG93LiBMZXQmIzM5O3Mgc2VlIGhvdyBtdWNoIG9mIHRoZSBjb2RlIEkgY2FuIHF1aWNrbHkgc2NhbiwgZmluZCBhbnkgcXVpY2sgY2x1ZXMsIGFuZCB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgYSBoeXBvdGhlc2lzIGFib3V0IGl0cyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzU0NTA6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NDUxOlx0XG41NDUyOlx0XHRXUklURV9PTkNFKGxydV9nZW5fbWluX3R0bCwgbXNlY3NfdG9famlmZmllcyhtc2VjcykpO1xuNTQ1MzpcdFxuNTQ1NDpcdFx0cmV0dXJuIGxlbjtcbjU0NTU6XHR9XG41NDU2Olx0XG41NDU3Olx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX21pbl90dGxfYXR0ciA9IF9fQVRUUl9SVyhtaW5fdHRsX21zKTtcbjU0NTg6XHRcbjU0NTk6XHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuNTQ2MDpcdHtcbjU0NjE6XHRcdHVuc2lnbmVkIGludCBjYXBzID0gMDtcbjU0NjI6XHRcbjU0NjM6XHRcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXG41NDY0Olx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fQ09SRSk7XG41NDY1Olx0XG41NDY2Olx0XHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXG41NDY3Olx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTU1fV0FMSyk7XG41NDY4Olx0XG41NDY5Olx0XHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxuNTQ3MDpcdFx0XHRjYXBzIHw9IEJJVChMUlVfR0VOX05PTkxFQUZfWU9VTkcpO1xuNTQ3MTpcdFxuNTQ3MjpcdFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcJiMzNDsweCUwNHhcXG5cJiMzNDssIGNhcHMpO1xuNTQ3MzpcdH1cbjU0NzQ6XHRcbjU0NzU6XHQvKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG41NDc2Olx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuNTQ3NzpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuNTQ3ODpcdHtcbjU0Nzk6XHRcdGludCBpO1xuNTQ4MDpcdFx0dW5zaWduZWQgaW50IGNhcHM7XG41NDgxOlx0XG41NDgyOlx0XHRpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O24mIzM5OylcbjU0ODM6XHRcdFx0Y2FwcyA9IDA7XG41NDg0Olx0XHRlbHNlIGlmICh0b2xvd2VyKCpidWYpID09ICYjMzk7eSYjMzk7KVxuNTQ4NTpcdFx0XHRjYXBzID0gLTE7XG41NDg2Olx0XHRlbHNlIGlmIChrc3RydG91aW50KGJ1ZiwgMCwgXHUwMDI2Y2FwcykpXG41NDg3Olx0XHRcdHJldHVybiAtRUlOVkFMO1xuNTQ4ODpcdFxuNTQ4OTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpJiM0MzsmIzQzOykge1xuNTQ5MDpcdFx0XHRib29sIGVuYWJsZWQgPSBjYXBzIFx1MDAyNiBCSVQoaSk7XG41NDkxOlx0XG41NDkyOlx0XHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbjU0OTM6XHRcdFx0XHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcbjU0OTQ6XHRcdFx0ZWxzZSBpZiAoZW5hYmxlZClcbjU0OTU6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTQ5NjpcdFx0XHRlbHNlXG41NDk3Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XG41NDk4Olx0XHR9XG41NDk5Olx0XG41NTAwOlx0XHRyZXR1cm4gbGVuO1xuNTUwMTpcdH1cbjU1MDI6XHRcbjU1MDM6XHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xuNTUwNDpcdFxuNTUwNTpcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XG41NTA2Olx0XHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxuNTUwNzpcdFx0XHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcbjU1MDg6XHRcdE5VTExcbjU1MDk6XHR9O1xuNTUxMDpcdFxuNTUxMTpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcbjU1MTI6XHRcdC5uYW1lID0gXCYjMzQ7bHJ1X2dlblwmIzM0OyxcbjU1MTM6XHRcdC5hdHRycyA9IGxydV9nZW5fYXR0cnMsXG41NTE0Olx0fTtcbjU1MTU6XHRcbjU1MTY6XHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG41NTE3Olx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZnMgaW50ZXJmYWNlXG41NTE4Olx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbjU1MTk6XHRcbjU1MjA6XHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcbjU1MjE6XHR7XG41NTIyOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41NTIzOlx0XHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XG41NTI0Olx0XG41NTI1Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XG41NTI2Olx0XHRpZiAoIW0tXHUwMDNlcHJpdmF0ZSlcbjU1Mjc6XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG41NTI4Olx0XG41NTI5Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjU1MzA6XHRcdGRvIHtcbjU1MzE6XHRcdFx0aW50IG5pZDtcbjU1MzI6XHRcbjU1MzM6XHRcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG41NTM0Olx0XHRcdFx0aWYgKCFucl90b19za2lwLS0pXG41NTM1Olx0XHRcdFx0XHRyZXR1cm4gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbjU1MzY6XHRcdFx0fVxuNTUzNzpcdFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xuNTUzODpcdFxuNTUzOTpcdFx0cmV0dXJuIE5VTEw7XG41NTQwOlx0fVxuNTU0MTpcdFxuNTU0MjpcdHN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuNTU0MzpcdHtcbjU1NDQ6XHRcdGlmICghSVNfRVJSX09SX05VTEwodikpXG41NTQ1Olx0XHRcdG1lbV9jZ3JvdXBfaXRlcl9icmVhayhOVUxMLCBscnV2ZWNfbWVtY2codikpO1xuNTU0NjpcdFxuNTU0NzpcdFx0a3ZmcmVlKG0tXHUwMDNlcHJpdmF0ZSk7XG41NTQ4Olx0XHRtLVx1MDAzZXByaXZhdGUgPSBOVUxMO1xuNTU0OTpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI0MDAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTUdMUlUgU3RhdGUgQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgYnkgd3JpdGVzIHRvIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgaXMgc3RhdGljLCB3aGljaCBJIGV4cGVjdGVkLCBidXQgaXQgbWFrZXMgbWUgd29uZGVyIGlmIGZ1enppbmcgdGhpcyBpcyBhY3R1YWxseSB3b3J0aHdoaWxlLCB5ZXMsIHRoYXQmIzM5O3MgYSBrZXkgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gTUdMUlUgdGhhdCBjb3VsZCBiZSB2dWxuZXJhYmxlLgoKTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpdHNlbGYsIGJ1dCB0aGF0JiMzOTtzIHN0YXRpYy4gSG1tLCBhbmQgYGVuYWJsZWRfc3RvcmVgIHdoaWNoIGNhbGxzIGl0IGlzIGFsc28gc3RhdGljLCBzbyBteSBnb2FsIG9mIGRpcmVjdGx5IGZ1enppbmcgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBwcm9iYWJseSBub3QgZ29pbmcgdG8gd29yay4KCkkgbmVlZCB0byBzZWUgaWYgdGhlcmUgYXJlIGFueSAqbm9uLXN0YXRpYyogZnVuY3Rpb25zIHRoYXQgY291bGQgYmUgZW50cnkgcG9pbnRzLiBJIGNoZWNrZWQgdGhlIGNhbGxlcnMgb2YgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCwgYW5kIGl0IGxvb2tzIGxpa2UgdGhlIG9ubHkgY2FsbGVyIGlzIGBlbmFibGVkX3N0b3JlYC4gSSB3YXMgaW5pdGlhbGx5IHRoaW5raW5nIHRoZXJlIG1pZ2h0IGJlIHNvbWV0aGluZyBmcm9tIGBscnVfZ2VuX2luaXRfbWVtY2dgIG9yIHNpbWlsYXIsIGJ1dCBpdCYjMzk7cyBvbmx5IGBlbmFibGVkX3N0b3JlYC4KClRvIGJlIHRob3JvdWdoLCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIGVudGlyZSBgbW0vdm1zY2FuLmNgIGZpbGUgdG8gY2hlY2sgaWYgaXQmIzM5O3MgcmVmZXJlbmNlZCBhbnl3aGVyZSBlbHNlLCBpdCYjMzk7cyB3b3J0aCBjaGVja2luZyB0byBzZWUgaWYgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBhY3R1YWxseSB1c2VkIHNvbWV3aGVyZSBlbHNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUzNDk9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01Mzc3LVxubW0vdm1zY2FuLmM6NTM3ODpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG5tbS92bXNjYW4uYy01Mzc5LXtcbi0tXG5tbS92bXNjYW4uYz01NDc2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDkyLVx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYzo1NDkzOlx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ5NC1cdFx0ZWxzZSBpZiAoZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxNDAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6CgoqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgQ29kZSBQYXRoKioKCkFscmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBlbmFibGVkX3N0b3JlYCB3b3JrcyB3aXRoaW4gdGhpcyBzeXNmcyBzZXR1cC4gU2luY2UgaXQmIzM5O3MgaW52b2tlZCB0aHJvdWdoIHRoZSBgc3lzZnNfa2Zfd3JpdGVgIHBhdGgsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGl0JiMzOTtzIGEgZGlyZWN0IGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdz8gVGhhdCBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzIHRlbXB0aW5nLCBidXQgc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGFyZW4mIzM5O3QgdGhlIGJlc3QgZW50cnkgcG9pbnRzIGZvciBhIGJyb2FkIG92ZXJ2aWV3LgoKSW5zdGVhZCwgSSYjMzk7bGwgc3dpdGNoIGdlYXJzIGFuZCB0cnkgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGNoZWNraW5nIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgZ2l2ZW4gdGhhdCBNR0xSVSBoYXMgc3Ryb25nIHRpZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBgdm1zY2FuYC4gSSYjMzk7bSBob3BpbmcgdG8gZmluZCBzb21lIHB1YmxpY2x5IHZpc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzIHdpdGhpbiBgbW0vdm1zY2FuLmNgIHJlbGF0ZWQgdG8gTUdMUlUmIzM5O3MgaW50ZXJhY3Rpb25zLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIG92ZXJ2aWV3IG9mIGhvdyBNR0xSVSBpcyBiZWluZyBpbnRlZ3JhdGVkIGludG8gdGhlIG1haW4gbWVtb3J5IG1hbmFnZW1lbnQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBscnVfZ2VuXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI5MjM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMjk0MS1cbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbm1tL3Ztc2Nhbi5jLTI5NDMte1xuLS1cbm1tL3Ztc2Nhbi5jLTI5NjgtXG5tbS92bXNjYW4uYzoyOTY5OnZvaWQgbHJ1X2dlbl9kZWxfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0yOTcwLXtcbi0tXG5tbS92bXNjYW4uYy0zMDA4LSNpZmRlZiBDT05GSUdfTUVNQ0dcbm1tL3Ztc2Nhbi5jOjMwMDk6dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS92bXNjYW4uYy0zMDEwLXtcbi0tXG5tbS92bXNjYW4uYz00MzgyPXN0YXRpYyB2b2lkIGxydV9nZW5fcm90YXRlX21lbWNnKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IG9wKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ0MjktXG5tbS92bXNjYW4uYzo0NDMwOnZvaWQgbHJ1X2dlbl9vbmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQzMS17XG4tLVxubW0vdm1zY2FuLmMtNDQ1NC1cbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ1Ni17XG4tLVxubW0vdm1zY2FuLmMtNDQ2NS1cbm1tL3Ztc2Nhbi5jOjQ0NjY6dm9pZCBscnVfZ2VuX3JlbGVhc2VfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNDQ2Ny17XG4tLVxubW0vdm1zY2FuLmMtNDQ5MS1cbm1tL3Ztc2Nhbi5jOjQ0OTI6dm9pZCBscnVfZ2VuX3NvZnRfcmVjbGFpbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBuaWQpXG5tbS92bXNjYW4uYy00NDkzLXtcbi0tXG5tbS92bXNjYW4uYz00NTg5PXN0YXRpYyB2b2lkIF9fbHJ1X2dlbl9yZXBhcmVudF9tZW1jZyhzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsIHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDYxOS1cbm1tL3Ztc2Nhbi5jOjQ2MjA6dm9pZCBscnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xuLS1cbm1tL3Ztc2Nhbi5jPTU4Njg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgbHJ1X2dlbl9yb19mb3BzID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTU4NzgtXG5tbS92bXNjYW4uYzo1ODc5OnZvaWQgbHJ1X2dlbl9pbml0X3BnZGF0KHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG5tbS92bXNjYW4uYy01ODgwLXtcbi0tXG5tbS92bXNjYW4uYy01ODkwLVxubW0vdm1zY2FuLmM6NTg5MTp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTg5Mi17XG4tLVxubW0vdm1zY2FuLmMtNTkxMi1cbm1tL3Ztc2Nhbi5jOjU5MTM6dm9pZCBscnVfZ2VuX2luaXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNTkxNC17XG4tLVxubW0vdm1zY2FuLmMtNTkyMy1cbm1tL3Ztc2Nhbi5jOjU5MjQ6dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vdm1zY2FuLmMtNTkyNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWFjaGFiaWxpdHkgb2YgTW9kaWZpZWQgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgaXQmIzM5O3MgYWN0dWFsbHkgZ2V0dGluZyBleGVjdXRlZC4gSSBzZWUgdGhpcyBtb2RpZmllZCBzZWN0aW9uLCBidXQgaXQgb25seSBzZWVtcyB0byBiZSBhY2Nlc3NpYmxlIHdoZW4gSSB0b2dnbGUgTUdMUlUgb24gb3Igb2ZmLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4gSSYjMzk7bSB0aGlua2luZywgaXMgdGhlcmUgYW55IHNwZWNpZmljIGZ1bmN0aW9uIHRoYXQmIzM5O3MgZHluYW1pY2FsbHkgbGlua2VkIHRvIHRyaWdnZXIgdGhpcyBjb2RlPyBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIG5vdCBhIHN0YXRpYyBwYXRoLiBBaCwgYGVuYWJsZWRfc3RvcmVgIGlzIGFuIGF0dHJpYnV0ZSBzdG9yZSBmdW5jdGlvbi4gUmlnaHQsIGF0dHJpYnV0ZSBzdG9yZXMgYXJlIG9mdGVuIGR5bmFtaWNhbGx5IGNhbGxlZCBvciBhY2Nlc3NlZCB2aWEgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IC0geWVzLCBgZW5hYmxlZF9zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGxydV9nZW5fYXR0cl9ncm91cGAuIE9rYXksIHNvIGBscnVfZ2VuX2F0dHJfZ3JvdXBgIGlzIHRoZSBpbXBvcnRhbnQgYml0IGhlcmUuIE5vdyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgKnRoYXQqIGlzIHVzZWQgdG8gc2VlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGdyb3VwaW5nIGdldHMgY2FsbGVkLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fYXR0cl9ncm91cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU1MDU9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbi0tXG5tbS92bXNjYW4uYy01NTEwLVxubW0vdm1zY2FuLmM6NTUxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG5tbS92bXNjYW4uYy01NTEyLVx0Lm5hbWUgPSBcJiMzNDtscnVfZ2VuXCYjMzQ7LFxuLS1cbm1tL3Ztc2Nhbi5jPTU5NTM9c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXG4tLVxubW0vdm1zY2FuLmMtNTk1Ny1cbm1tL3Ztc2Nhbi5jOjU5NTg6XHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFx1MDAyNmxydV9nZW5fYXR0cl9ncm91cCkpXG5tbS92bXNjYW4uYy01OTU5LVx0XHRwcl9lcnIoXCYjMzQ7bHJ1X2dlbjogZmFpbGVkIHRvIGNyZWF0ZSBzeXNmcyBncm91cFxcblwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTc0CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBTeXNmcyBTdG9yZSBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gSXQmIzM5O3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwganVzdCBhIGBzeXNmc2Agc3RvcmUsIG5vdGhpbmcgdG9vIGNvbXBsaWNhdGVkLiBJIGNhbiBlaXRoZXIgbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkgb3IgcHJvdmlkZSBgZW5hYmxlZF9zdG9yZWAsIGJ1dCBzaW5jZSB0aGF0JiMzOTtzIHN0YXRpYywgSSYjMzk7bSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGl0IGVtcHR5IGZvciBub3cuIEhtbSwgbG9va3MgbGlrZSBgZmlsbF9ldmljdGFibGVgLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIGFyZSBhbGwgc3RhdGljLiBFbXB0eSBgRm9jdXNTeW1ib2xzYCBpdCBpcy4gTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBsb29rIG5leHQuIEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgcmVxdWlyZW1lbnQuIE9rYXksIG1vdmluZyBvbiwgbGV0JiMzOTtzIHNlZSBpZiBgQ09ORklHX1NZU0ZTYCBpcyBhbHNvIHJlcXVpcmVkLiBJIHNlZSB0aGF0IGBzeXNmc19jcmVhdGVfZ3JvdXBgIGlzIGp1c3QgYSBzdHViIGlmIGBDT05GSUdfU1lTRlNgIGlzbiYjMzk7dCBzZXQsIGJ1dCB0aGF0IHN0aWxsIGRvZXNuJiMzOTt0IG1lYW4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgYmUgY29tcGlsZWQgaWYgU1lTRlMgaXNuJiMzOTt0IGVuYWJsZWQuIEJldHRlciBkb3VibGUtY2hlY2sgaWYgYGVuYWJsZWRfc3RvcmVgIGlzIGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfU1lTRlNgLiBOZWVkIHRvIGJlIHRob3JvdWdoIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1lTRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04MTI4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcbm1tL3Ztc2Nhbi5jLTgxMjktXG5tbS92bXNjYW4uYzo4MTMwOiNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXHUwMDI2XHUwMDI2IGRlZmluZWQoQ09ORklHX05VTUEpXG5tbS92bXNjYW4uYy04MTMxLXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUyOAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkludmVzdGlnYXRpbmcgdGhlIGBlbmFibGVkX3N0b3JlYCBWYXJpYWJsZSoqCgpIbW0sIHNvbWV0aGluZyYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIE15IGluaXRpYWwgYXNzdW1wdGlvbiB3YXMgdGhhdCB0aGUgYGVuYWJsZWRfc3RvcmVgIHZhcmlhYmxlLCByZWxhdGVkIHRvIHRoZSB2bXNjYW4gc3Vic3lzdGVtLCB3YXMgcHJvdGVjdGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfU1lTRlNgIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJsb2NrLiBCdXQgYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGRvZXNuJiMzOTt0IHNlZW0gdG8gY29uZmlybSB0aGF0LiBJdCBkb2VzbiYjMzk7dCBhcHBlYXIgdG8gYmUgY29uZmluZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBtbS92bXNjYW4uY2Agc291cmNlIGZpbGUuIEkgbmVlZCB0byB0YWtlIGFub3RoZXIgbG9vayBhcm91bmQgd2hlcmUgYGVuYWJsZWRfc3RvcmVgIGlzIGRlZmluZWQgYW5kIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQmIzM5O3MgaGFuZGxlZCB3aXRoaW4gdGhhdCBjb250ZXh0LCBhbmQgZGV0ZXJtaW5lIGlmIG15IG9yaWdpbmFsIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGRlcGVuZGVuY3kgb24gYFNZU0ZTYCB3YXMgaW5hY2N1cmF0ZSwgb3IgaWYgSSYjMzk7bSBzaW1wbHkgbWlzc2luZyBzb21ldGhpbmcgaW4gdGhlIGNvZGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgdmFyaWFibGUmIzM5O3MgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ1MDpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU0NTE6XHRcbjU0NTI6XHRcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XG41NDUzOlx0XG41NDU0Olx0XHRyZXR1cm4gbGVuO1xuNTQ1NTpcdH1cbjU0NTY6XHRcbjU0NTc6XHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fbWluX3R0bF9hdHRyID0gX19BVFRSX1JXKG1pbl90dGxfbXMpO1xuNTQ1ODpcdFxuNTQ1OTpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG41NDYwOlx0e1xuNTQ2MTpcdFx0dW5zaWduZWQgaW50IGNhcHMgPSAwO1xuNTQ2MjpcdFxuNTQ2MzpcdFx0aWYgKGdldF9jYXAoTFJVX0dFTl9DT1JFKSlcbjU0NjQ6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9DT1JFKTtcbjU0NjU6XHRcbjU0NjY6XHRcdGlmIChzaG91bGRfd2Fsa19tbXUoKSlcbjU0Njc6XHRcdFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9NTV9XQUxLKTtcbjU0Njg6XHRcbjU0Njk6XHRcdGlmIChzaG91bGRfY2xlYXJfcG1kX3lvdW5nKCkpXG41NDcwOlx0XHRcdGNhcHMgfD0gQklUKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XG41NDcxOlx0XG41NDcyOlx0XHRyZXR1cm4gc3lzZnNfZW1pdChidWYsIFwmIzM0OzB4JTA0eFxcblwmIzM0OywgY2Fwcyk7XG41NDczOlx0fVxuNTQ3NDpcdFxuNTQ3NTpcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbjU0NzY6XHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG41NDc3Olx0XHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG41NDc4Olx0e1xuNTQ3OTpcdFx0aW50IGk7XG41NDgwOlx0XHR1bnNpZ25lZCBpbnQgY2FwcztcbjU0ODE6XHRcbjU0ODI6XHRcdGlmICh0b2xvd2VyKCpidWYpID09ICYjMzk7biYjMzk7KVxuNTQ4MzpcdFx0XHRjYXBzID0gMDtcbjU0ODQ6XHRcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTt5JiMzOTspXG41NDg1Olx0XHRcdGNhcHMgPSAtMTtcbjU0ODY6XHRcdGVsc2UgaWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcdTAwMjZjYXBzKSlcbjU0ODc6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG41NDg4Olx0XG41NDg5Olx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkmIzQzOyYjNDM7KSB7XG41NDkwOlx0XHRcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXHUwMDI2IEJJVChpKTtcbjU0OTE6XHRcbjU0OTI6XHRcdFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxuNTQ5MzpcdFx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xuNTQ5NDpcdFx0XHRlbHNlIGlmIChlbmFibGVkKVxuNTQ5NTpcdFx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlKFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XG41NDk2Olx0XHRcdGVsc2VcbjU0OTc6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU0OTg6XHRcdH1cbjU0OTk6XHRcbjU1MDA6XHRcdHJldHVybiBsZW47XG41NTAxOlx0fVxuNTUwMjpcdFxuNTUwMzpcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XG41NTA0Olx0XG41NTA1Olx0c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbjU1MDY6XHRcdFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXG41NTA3Olx0XHRcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxuNTUwODpcdFx0TlVMTFxuNTUwOTpcdH07XG41NTEwOlx0XG41NTExOlx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xuNTUxMjpcdFx0Lm5hbWUgPSBcJiMzNDtscnVfZ2VuXCYjMzQ7LFxuNTUxMzpcdFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcbjU1MTQ6XHR9O1xuNTUxNTpcdFxuNTUxNjpcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbjU1MTc6XHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmcyBpbnRlcmZhY2VcbjU1MTg6XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xuNTUxOTpcdFxuNTUyMDpcdHN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxuNTUyMTpcdHtcbjU1MjI6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjU1MjM6XHRcdGxvZmZfdCBucl90b19za2lwID0gKnBvcztcbjU1MjQ6XHRcbjU1MjU6XHRcdG0tXHUwMDNlcHJpdmF0ZSA9IGt2bWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcbjU1MjY6XHRcdGlmICghbS1cdTAwM2Vwcml2YXRlKVxuNTUyNzpcdFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbjU1Mjg6XHRcbjU1Mjk6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNTUzMDpcdFx0ZG8ge1xuNTUzMTpcdFx0XHRpbnQgbmlkO1xuNTUzMjpcdFxuNTUzMzpcdFx0XHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcbjU1MzQ6XHRcdFx0XHRpZiAoIW5yX3RvX3NraXAtLSlcbjU1MzU6XHRcdFx0XHRcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTUzNjpcdFx0XHR9XG41NTM3Olx0XHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XG41NTM4Olx0XG41NTM5Olx0XHRyZXR1cm4gTlVMTDtcbjU1NDA6XHR9XG41NTQxOlx0XG41NTQyOlx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41NTQzOlx0e1xuNTU0NDpcdFx0aWYgKCFJU19FUlJfT1JfTlVMTCh2KSlcbjU1NDU6XHRcdFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XG41NTQ2Olx0XG41NTQ3Olx0XHRrdmZyZWUobS1cdTAwM2Vwcml2YXRlKTtcbjU1NDg6XHRcdG0tXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XG41NTQ5Olx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzI2MQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIExSVSBHZW5lcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgZm9yIExSVSBnZW5lcmF0aW9uLiBJdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzICpub3QqIHVuZGVyIGAjaWZkZWYgQ09ORklHX1NZU0ZTYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LCB0aGF0IG5hcnJvd3MgdGhpbmdzIGRvd24gYSBiaXQuIFJpZ2h0IG5vdywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBwcmltYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBCdXQsIHRoYXQmIzM5O3MganVzdCB0aGUgZmlyc3QgcGFzcywgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlciwgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBvciBldmVuIGJlICpyZXF1aXJlZCogZm9yIGBMUlVfR0VOYCB0byBiZSBhY3RpdmU/IEdvdHRhIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY29uc3VsdCBgbW0vS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGhhdmUgYSBkZWZpbml0aXZlIGFuc3dlciByZWdhcmRpbmcgYW55IGFzc29jaWF0ZWQgZGVwZW5kZW5jaWVzIG9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBjb25maWd1cmF0aW9uIHNldHRpbmdzIHJlbGF0ZWQgdG8gYExSVV9HRU5gLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzkzPWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwNDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDA1LVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDEyLVxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxNC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTgtXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQyMC1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDI3LVxubW0vS2NvbmZpZzoxNDI4OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI5LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzc2MgoJCQkJCQkJb3V0cHV0OiA5OQoJCQkJCQkJdGhvdWdodHM6IDI1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBMUlVfR0VOIENvbmZpZ3VyYXRpb24gYW5kIEJ1ZyBGaXgqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYExSVV9HRU5gIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgc3RlcCBpcyB0byBlbmFibGUgaXQsIHNvIEkmIzM5O2xsIHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gYFsmIzM0O0xSVV9HRU4mIzM0O11gLiBUaGlzIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guCgpUaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBmaXhpbmcgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYC4gSXQgYXBwZWFycyB0aGVyZSB3YXMgYW4gaXNzdWUgd2l0aCBob3cgYGZpbGxfZXZpY3RhYmxlYCB3YXMgaGFuZGxpbmcgZm9saW9zIGR1cmluZyB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBwcm9jZXNzLCBzcGVjaWZpY2FsbHkgcGlja2luZyB0aGVtIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdC4gVGhhdCYjMzk7cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBkZWZpbml0ZWx5IHdhcnJhbnRzIGF0dGVudGlvbi4gVGhpcyBpcyByZWFjaGFibGUgYW5kIGNvbnRyb2xsYWJsZSB0aHJvdWdoIHN5c2ZzLCBzcGVjaWZpY2FsbHkgYnkgdG9nZ2xpbmcgTUdMUlUsIHdoaWNoIGlzIGltcG9ydGFudC4KCkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgZmFjdCB0aGF0IHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9dHJ1ZWAuIEdvdHRhIGJlIHRob3JvdWdoIGhlcmUuCgpBcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEkmIzM5O20gZ29pbmcgdG8gbGVhdmUgdGhhdCBlbXB0eS4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uLCBgZmlsbF9ldmljdGFibGVgLCBpcyBzdGF0aWMsIGFuZCBpdCYjMzk7cyBvbmx5IGNhbGxlZCBmcm9tIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpdHNlbGYgYSBzeXNmcyBzdG9yZSBjYWxsYmFjay4gVGhlcmUmIzM5O3Mgbm8gc2Vuc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBJIGNvdWxkIGZvY3VzIG9uIHRvIG5hcnJvdyB0aGUgc2NvcGUuCgpJIGp1c3Qgd2FudCB0byBkb3VibGUgY2hlY2sgbXkgd29yay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLiBMZXQgbWUgcmV2aWV3IHRoZSBjYWxsIGdyYXBoIGFuZCBzZWUgaWYgYW55IG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb24gY291bGQgcG9zc2libHkgdHJpZ2dlciBgZmlsbF9ldmljdGFibGVgLiBPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGlzIGNhbGxlZCBvbmx5IGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFRoZW4sIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgYnkgYGVuYWJsZWRfc3RvcmVgLiBBbmQgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24uIE5vcGUsIHRoYXQmIzM5O3MgaXQuIEl04oCZcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc3lzZnMgcGF0aC4KCkFscmlnaHQsIHdpdGggdGhhdCBjb25maXJtZWQsIEkmIzM5O20gY29tZm9ydGFibGUgdXNpbmcgYHNldC1yZXN1bHRzYCB0byBmaW5hbGl6ZSB0aGUgb3V0cHV0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwODoxMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHRha2luZyBmb2xpb3MgZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGFkZGluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uIGluIGBmaWxsX2V2aWN0YWJsZSgpYC4gSXQgY2hhbmdlcyB0aGUgbGlzdCBleHRyYWN0aW9uIHRvIHRha2UgZnJvbSB0aGUgaGVhZCBvciB0YWlsIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBmb2xpbyBpcyBhY3RpdmUsIGFuZCBwYXNzZXMgYCFhY3RpdmVgIHRvIGBscnVfZ2VuX2FkZF9mb2xpbygpYC4gVGhlc2UgY2hhbmdlcyBhcmUgcHVyZWx5IHJlbGF0ZWQgdG8gbGlzdCBvcmRlcmluZyBhbmQgTFJVIGdlbmVyYXRpb24gbG9naWMuIFRoZXkgZG8gbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCBkbyBub3QgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBhbmQgZG8gbm90IHNlbmQgYW55IGRhdGEgdG8gdXNlcnNwYWNlLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbGlrZWx5IGJlIGxpc3QgY29ycnVwdGlvbiwgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycywgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YTgKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEF1ZyAyMCAwODowOToxMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uYjlhMTVmYWEyZmVhMSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUzMDIsNyAmIzQzOzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQkJYm9vbCBzdWNjZXNzOwotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQm90aCB0aGUgbGVnYWN5IExSVSBhbmQgYSBNR0xSVSBnZW5lcmF0aW9uIGtlZXAgdGhlCiYjNDM7CQkJICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZQomIzQzOwkJCSAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZQomIzQzOwkJCSAqIHRoYXQgb3JkZXIsIHRoZSBlbmQgd2UgdGFrZSBmcm9tIG11c3QgbWF0Y2ggdGhlIGVuZAomIzQzOwkJCSAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZQomIzQzOwkJCSAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGUKJiM0MzsJCQkgKiBoZWFkOyBhY3RpdmUgZm9saW9zIHVzZSByZWNsYWltaW5nPWZhbHNlIChsaXN0X2FkZCksCiYjNDM7CQkJICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZAomIzQzOwkJCSAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLgomIzQzOwkJCSAqLwomIzQzOwkJCWlmIChhY3RpdmUpCiYjNDM7CQkJCWZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCWVsc2UKJiM0MzsJCQkJZm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTsKIAogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7CiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pOwpAQCAtNTMxMCw3ICYjNDM7NTMyNiwxNiBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTsKIAogCQkJbHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTsKLQkJCXN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZAomIzQzOwkJCSAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2gKJiM0MzsJCQkgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmUKJiM0MzsJCQkgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvCiYjNDM7CQkJICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpcwomIzQzOwkJCSAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkKJiM0MzsJCQkgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CiAJCQlWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpOwogCiAJCQlpZiAoIS0tcmVtYWluaW5nKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQ2MwoJCQkJCQkJb3V0cHV0OiAxOTIKCQkJCQkJCXRob3VnaHRzOiA1ODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBMUlUgTGlzdCBNYW5hZ2VtZW50IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGZpbGxfZXZpY3RhYmxlYCBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQmIzM5O3MgYWxsIGFib3V0IGhvdyBmb2xpb3MgYXJlIGhhbmRsZWQgb24gdGhlIExSVSBsaXN0cy4gSW5pdGlhbGx5LCBJIG5vdGljZWQgdGhlIGNoYW5nZSBpbiBob3cgZm9saW9zIGFyZSBwdWxsZWQgZnJvbSB0aGUgYGhlYWRgIGxpc3QuIE5vdywgZGVwZW5kaW5nIG9uIHRoZSBgYWN0aXZlYCBzdGF0ZSwgd2UmIzM5O3JlIGVpdGhlciB0YWtpbmcgZnJvbSB0aGUgdGFpbCAodXNpbmcgYGxydV90b19mb2xpbyhoZWFkKWApIG9yIHRoZSBoZWFkIChgbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgKS4gSSBoYWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3RvX2ZvbGlvYCBpcyBpbmRlZWQgYGxpc3RfbGFzdF9lbnRyeWAsIGFuZCBpdCBpcywgc28gdGhhdCYjMzk7cyBnb29kLiBUaGUgY2hhbmdlIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBzb21ldGhpbmcgdG8gY29uc2lkZXI6IHdlJiMzOTtyZSBub3cgcGFzc2luZyBgIWFjdGl2ZWAgaW5zdGVhZCBvZiBgZmFsc2VgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBsb2dpYyBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgTFJVIGxpc3QgbWFuYWdlbWVudC4gSSBxdWlja2x5IHJhbiB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIG9mIGJ1Z3MuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gaGVyZSB0aGF0IGxvb2tzIGxpa2UgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGxpc3QgbWFuaXB1bGF0aW9uIGFuZCB0aGUgTFJVIGdlbmVyYXRpb24gbG9naWMsIHNvIGJ1Z3MgaGVyZSBhcmUgbW9yZSBsaWtlbHkgdG8gYmUgbG9naWMgZXJyb3JzLCB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBvciBsaXN0IGNvcnJ1cHRpb24uIEtBU0FOIHdvdWxkIGRlZmluaXRlbHkgY2F0Y2ggYSB1c2UtYWZ0ZXItZnJlZSBvciBsaXN0IGNvcnJ1cHRpb24gc2NlbmFyaW8uIEtNU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgaXMgdGhlIHRvb2wgZm9yIGZpbmRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMsIHdoaWNoIGlzbiYjMzk7dCBhcHBsaWNhYmxlIGhlcmUuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaW4gdGhlIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBvciBleHBvc2VzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0IG1lIGNvbmZpcm0gdGhlIGNvZGU6CmBgYGMKLQkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZQomIzQzOwkJCSAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGUKJiM0MzsJCQkgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmUKJiM0MzsJCQkgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmQKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2UKJiM0MzsJCQkgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlCiYjNDM7CQkJICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLAomIzQzOwkJCSAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmQKJiM0MzsJCQkgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CmBgYApBbmQ6CmBgYGMKLQkJCXN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7CiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwpgYGAKCk9rYXksIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXQgaXMgcHVyZWx5IGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLCBhbmQgbm8gZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEkmIzM5O20gY29uZmlkZW50IGluIGNhbGxpbmcgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMS45OTg0NzA0OTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTMwODEzMjU1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJMUlVfR0VOXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIGluIGBmaWxsX2V2aWN0YWJsZWAgd2hlcmUgZm9saW9zIHdlcmUgdGFrZW4gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0IHdoZW4gbW92aW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IChNR0xSVSkgdGhhdCBpcyByZWFjaGFibGUgdmlhIHN5c2ZzIHRvZ2dsaW5nIG9mIE1HTFJVLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMS45OTg0NzcwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4NjU3NTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YThcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFRodSBBdWcgMjAgMDg6MDk6MTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MzAyLDcgKzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XFxuIFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZVxcbitcXHRcXHRcXHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXFxuK1xcdFxcdFxcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxcbitcXHRcXHRcXHQgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmRcXG4rXFx0XFx0XFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXFxuK1xcdFxcdFxcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcXG4rXFx0XFx0XFx0ICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLFxcbitcXHRcXHRcXHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXFxuK1xcdFxcdFxcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0aWYgKGFjdGl2ZSlcXG4rXFx0XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XFxuK1xcdFxcdFxcdGVsc2VcXG4rXFx0XFx0XFx0XFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcXG4gXFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pO1xcbkBAIC01MzEwLDcgKzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcXG4gXFxuIFxcdFxcdFxcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XFxuLVxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXFxuK1xcdFxcdFxcdCAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2hcXG4rXFx0XFx0XFx0ICogbHJ1X2dlbl9pc19hY3RpdmUoKSByZXBvcnRzIGFzIGFjdGl2ZSwgc28gaXRzIGluYWN0aXZlXFxuK1xcdFxcdFxcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cXG4rXFx0XFx0XFx0ICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpc1xcbitcXHRcXHRcXHQgKiByZXVzZXMgcmVjbGFpbWluZyBiZXlvbmQgaXRzIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpXFxuK1xcdFxcdFxcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xcbiBcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbiBcXG4gXFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MTIuNTg2MTE5MjM4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6Nzk2NjIxNDc1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZjRlZWEwNmNjMDBjM2ZjMTBjMTk1M2RjMmYzZmIzNmI4YTVlMTlhOFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA4OjA5OjEwIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uYjlhMTVmYWEyZmVhMSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTUzMDIsNyArNTMwMiwyMyBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4gXG4gXHRcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xuIFx0XHRcdGJvb2wgc3VjY2Vzcztcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcbitcdFx0XHQgKiBob3R0ZXN0IGZvbGlvcyBhdCB0aGUgaGVhZCBhbmQgdGhlIGNvbGRlc3QgYXQgdGhlXG4rXHRcdFx0ICogdGFpbCwgYW5kIHJlY2xhaW0gdGFrZXMgZnJvbSB0aGUgdGFpbC4gIFRvIHByZXNlcnZlXG4rXHRcdFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXG4rXHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSBpbnNlcnRzIGF0OiBpbmFjdGl2ZSBmb2xpb3MgdXNlXG4rXHRcdFx0ICogcmVjbGFpbWluZz10cnVlIChsaXN0X2FkZF90YWlsKSwgc28gdGFrZSBmcm9tIHRoZVxuK1x0XHRcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcbitcdFx0XHQgKiBzbyB0YWtlIGZyb20gdGhlIHRhaWwuICBUYWtpbmcgZnJvbSB0aGUgd3JvbmcgZW5kXG4rXHRcdFx0ICogd291bGQgcmV2ZXJzZSBob3QvY29sZCB3aXRoaW4gdGhlIGdlbmVyYXRpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbkBAIC01MzEwLDcgKzUzMjYsMTYgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXG4rXHRcdFx0ICogYW4gaW5hY3RpdmUgZm9saW8gbmVhciBtYXhfc2VxLCB3aGljaFxuK1x0XHRcdCAqIGxydV9nZW5faXNfYWN0aXZlKCkgcmVwb3J0cyBhcyBhY3RpdmUsIHNvIGl0cyBpbmFjdGl2ZVxuK1x0XHRcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cbitcdFx0XHQgKiBzZWVkIGl0IGludG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uIGluc3RlYWQuICBUaGlzXG4rXHRcdFx0ICogcmV1c2VzIHJlY2xhaW1pbmcgYmV5b25kIGl0cyBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKVxuK1x0XHRcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxMi41ODYxMjI0ODhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTUyNTQ4MDI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENvcmUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gSXQgc2VlbXMgbGlrZSB0aGV5J3ZlIGNoYW5nZWQgaG93IGZvbGlvcyBhcmUgaGFuZGxlZCB3aGVuIHRoZXkncmUgdGFrZW4gZnJvbSB0aGUgTFJVIGxpc3QgYW5kIGhvdyB0aGV5J3JlIGFkZGVkIHRvIHRoZSBMUlUgZ2VuZXJhdGlvbi4gSSBjYW4gc2VlIHRoZSBjb2RlIGRpZmYsIHdoaWNoIGlzIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6XG5cbmBgYGNcbi1cdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4rXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG5gYGBcblxuYW5kXG5cbmBgYGNcbi1cdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpO1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbmBgYFxuXG5UaGlzIGlzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gKE1HTFJVL3Ztc2NhbiksIG1lYW5pbmcgdGhpcyB3aWxsIGFmZmVjdCBob3cgbWVtb3J5IGlzIHJlY2xhaW1lZC4gQmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LiBJcyBgZmlsbF9ldmljdGFibGVgIGEgc3RhdGljIGZ1bmN0aW9uPyBLbm93aW5nIHRoYXQgd2lsbCBpbmZsdWVuY2UgaG93IGJyb2FkbHkgdGhlIGNoYW5nZSBjb3VsZCByaXBwbGUgb3V0LiBMZXQgbWUgcXVpY2tseSBjaGVjay4uLiBPa2F5LCBnb29kLCBpdCBpcyBpbmRlZWQgYSBzdGF0aWMgZnVuY3Rpb24gd2l0aGluIGBtbS92bXNjYW4uY2AuIE5vdywgd2hlcmUgaXMgaXQgKmNhbGxlZCo/IFRoYXQncyB0aGUgbmV4dCBjcml0aWNhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHNpdGVzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB3aGF0IHRoaXMgcGF0Y2ggaXMgYWN0dWFsbHkgY2hhbmdpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0NjYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToxNy43Mzg2NzM2NDZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE0MzE2OTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9ldmljdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01MjkyLVxcbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTUyOTQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM3OD1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDEyLVxcbm1tL3Ztc2Nhbi5jOjU0MTM6XFx0XFx0XFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcXG5tbS92bXNjYW4uYy01NDE0LVxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjE3Ljc5MDExMjkwNFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMzYzNDMwOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6XG5cbioqVHJhY2luZyB0aGUgTFJVIEV2aWN0aW9uIFBhdGgqKlxuXG5SaWdodCwgYGZpbGxfZXZpY3RhYmxlYCBpcyB0cmlnZ2VyZWQgYnkgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gSW50ZXJlc3RpbmcuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgbWUgd2FudCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gV2hhdCdzIGRyaXZpbmcgKnRoYXQqIHN0YXRlIGNoYW5nZT8gSXQgc2VlbXMgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIHByb2Nlc3MuIEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gV2hlcmUgYXJlIHRoZSBjYWxsIHNpdGVzIGZvciAqdGhhdCogZnVuY3Rpb24/IFdoYXQgdHJpZ2dlcnMgdGhlIGNoYW5nZXMgdGhhdCAqdGhlbiogcmVxdWlyZSB0aGUgZXZpY3Rpb24gbWVjaGFuaXNtIHRvIGNvbWUgaW50byBwbGF5PyBLbm93aW5nIHRoZSB1cHN0cmVhbSBjYWxsZXJzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0ncyBvdmVyYWxsIGV2aWN0aW9uIHBvbGljeSBhbmQgd2hlbiB0aG9zZSB0cmlnZ2VycyBmb3IgZXZpY3Rpb24gaGFwcGVuLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzI1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjAuODI2NDU5MDI4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMzUyNjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUzNDk9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUzNzctXFxubW0vdm1zY2FuLmM6NTM3ODpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxubW0vdm1zY2FuLmMtNTM3OS17XFxuLS1cXG5tbS92bXNjYW4uYz01NDc2PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0OTItXFx0XFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxcbm1tL3Ztc2Nhbi5jOjU0OTM6XFx0XFx0XFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ5NC1cXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyMC44Nzg4MTc1NTdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTM2NDMxNzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqXG5cbk9rYXksIHNvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYGVuYWJsZWRfc3RvcmVgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZSDigJMgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIGl0J3MgaG93IHRoZSBrZXJuZWwgcmVhY3RzIHRvIHVzZXJzcGFjZSB3cml0aW5nIHRvIHRoYXQgc3lzZnMgZmlsZS4gU28sIGxpa2VseSBjaGFuZ2luZyBzb21lIHNvcnQgb2YgZW5hYmxpbmcgc3RhdGUuIEZpbmUuIEJ1dCwgSSBuZWVkIHRvIGtub3cgdGhlIGJpZ2dlciBwaWN0dXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBhbGwgdGhlIHBvaW50cyBvZiBhY2Nlc3MgZm9yIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIG5vdCBqdXN0IHRoaXMgb25lLiBUaGlzIHNlZW1zIGxpa2UgYSBjcml0aWNhbCBmdW5jdGlvbi4gTm93LCBsZXQgbWUgZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSAqb3RoZXIqIGNhbGxlcnMgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY2FsbCBncmFwaCwgYmVjYXVzZSBJIHN1c3BlY3QgdGhpcyBzbWFsbCBkZXRhaWwgbWF5IGJlIG1vcmUgc2lnbmlmaWNhbnQuIExldCdzIGRpZyBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyNC4wMTUyNTE3OThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3NDI1NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS92bXNjYW4uYy01NDc3LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOToyNC4wNjQwMDAwMzZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODMyMzQzNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIGBlbmFibGVkX3N0b3JlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHdvcmtpbmcuIEknbSBnb2luZyB0byBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCByaWdodCBhd2F5LiBTcGVjaWZpY2FsbHksIEknbSB6ZXJvaW5nIGluIG9uIHRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgKG9yIHJlbGF0ZWQgY29kZSkuIEknbSBndWVzc2luZyB0aGF0J3Mgd2hlcmUgdGhlIGhlYXJ0IG9mIHRoaXMgcGFydGljdWxhciBtZWNoYW5pc20gbGllcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGJlaW5nIHN0b3JlZCwgd2hlbiBpdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCAqd2h5Ki4gSXMgaXQgYSBmbGFnLCBhIGNvdW50ZXIsIGEgYml0bWFzaz8gSXMgaXQgcmVsYXRlZCB0byBzb21lIGtpbmQgb2YgdGhyb3R0bGluZyBvciByZXNvdXJjZSBsaW1pdGluZz8gSXMgdGhpcyB3aGVyZSB0aGUgY29udHJvbCBvdmVyIHRoZSBzY2FuIHByb2Nlc3MgaXMgcmVhbGx5IGhhcHBlbmluZz8gTGV0J3MgZ2V0IGNyYWNraW5nISBJIG5lZWQgdG8gdHJhY2UgdGhlIHVzYWdlLCB0aGUgaW5pdGlhbGl6YXRpb24sIHRoZSB3cml0ZXMgYW5kIHJlYWRzLCBhbmQgdGhlIGxvZ2ljIHRoYXQgdXNlcyB0aGlzIHZhbHVlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFyb3VuZCBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGtleS4gSXQncyB0aW1lIHRvIGRpZyBpbiBhbmQgdW5yYXZlbCB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MTgwLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjcuODk2MzQ3MTA1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDY5OTA4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVkX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9scnVfc29ydC5jPTQ1ND1zdGF0aWMgYm9vbCBkYW1vbl9scnVfc29ydF9lbmFibGVkKHZvaWQpXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ2MC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ2MTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2VuYWJsZWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDYyLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vbHJ1X3NvcnQuYz00OTA9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGVuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDkxOlxcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkyLVxcdC5nZXQgPSBkYW1vbl9scnVfc29ydF9lbmFibGVkX2xvYWQsXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9Mzc1PXN0YXRpYyBib29sIGRhbW9uX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTM4MS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6MzgyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtMzgzLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jPTQxMT1zdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMgZW5hYmxlZF9wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vcmVjbGFpbS5jOjQxMjpcXHQuc2V0ID0gZGFtb25fcmVjbGFpbV9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXFx0LmdldCA9IGRhbW9uX3JlY2xhaW1fZW5hYmxlZF9sb2FkLFxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTE4LVxcbm1tL2RhbW9uL3N0YXQuYzoxOTpzdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9zdG9yZShcXG5tbS9kYW1vbi9zdGF0LmMtMjAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcCk7XFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGVuYWJsZWRfcGFyYW1fb3BzID0ge1xcbm1tL2RhbW9uL3N0YXQuYzoyNjpcXHQuc2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlLFxcbm1tL2RhbW9uL3N0YXQuYy0yNy1cXHQuZ2V0ID0gZGFtb25fc3RhdF9lbmFibGVkX2xvYWQsXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmM9MjMyPXN0YXRpYyBib29sIGRhbW9uX3N0YXRfZW5hYmxlZCh2b2lkKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTIzOC1cXG5tbS9kYW1vbi9zdGF0LmM6MjM5OnN0YXRpYyBpbnQgZGFtb25fc3RhdF9lbmFibGVkX3N0b3JlKFxcbm1tL2RhbW9uL3N0YXQuYy0yNDAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NDI0PXN0YXRpYyBib29sIHNldF9nbG9iYWxfZW5hYmxlZF9tb2RlKGVudW0gZ2xvYmFsX2VuYWJsZWRfbW9kZSBtb2RlKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy00NDQtXFxubW0vaHVnZV9tZW1vcnkuYzo0NDU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdlX21lbW9yeS5jLTQ0Ni1cXHRcXHRcXHQgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NjU4PXN0YXRpYyBib29sIHNldF9hbm9uX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gYW5vbl9lbmFibGVkX21vZGUgbW9kZSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtNjc5LVxcbm1tL2h1Z2VfbWVtb3J5LmM6NjgwOnN0YXRpYyBzc2l6ZV90IGFub25fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9odWdlX21lbW9yeS5jLTY4MS1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9NzA4PXN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgYW5vbl9lbmFibGVkX2F0dHIgPVxcbm1tL2h1Z2VfbWVtb3J5LmM6NzA5OlxcdF9fQVRUUihlbmFibGVkLCAwNjQ0LCBhbm9uX2VuYWJsZWRfc2hvdywgYW5vbl9lbmFibGVkX3N0b3JlKTtcXG5tbS9odWdlX21lbW9yeS5jLTcxMC1cXG4tLVxcbm1tL21lbW9yeS10aWVycy5jPTk0Mz1zdGF0aWMgc3NpemVfdCBkZW1vdGlvbl9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9tZW1vcnktdGllcnMuYy05NDgtXFxubW0vbWVtb3J5LXRpZXJzLmM6OTQ5OnN0YXRpYyBzc2l6ZV90IGRlbW90aW9uX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vbWVtb3J5LXRpZXJzLmMtOTUwLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG4tLVxcbm1tL3NobWVtLmM9NTQzMz1zdGF0aWMgc3NpemVfdCBzaG1lbV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zaG1lbS5jLTU0NTYtXFxubW0vc2htZW0uYzo1NDU3OnN0YXRpYyBzc2l6ZV90IHNobWVtX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vc2htZW0uYy01NDU4LVxcdFxcdHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuLS1cXG5tbS9zaG1lbS5jPTU1Mzg9c3RhdGljIGJvb2wgc2V0X3NobWVtX2VuYWJsZWRfbW9kZShpbnQgb3JkZXIsIGVudW0gaHVnZV9tb2RlIG1vZGUpXFxuLS1cXG5tbS9zaG1lbS5jLTU1NTQtXFxubW0vc2htZW0uYzo1NTU1OnN0YXRpYyBzc2l6ZV90IHRocHNpemVfc2htZW1fZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcXG5tbS9zaG1lbS5jLTU1NTYtXFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vc2htZW0uYz01NTg3PXN0cnVjdCBrb2JqX2F0dHJpYnV0ZSB0aHBzaXplX3NobWVtX2VuYWJsZWRfYXR0ciA9XFxubW0vc2htZW0uYzo1NTg4OlxcdF9fQVRUUihzaG1lbV9lbmFibGVkLCAwNjQ0LCB0aHBzaXplX3NobWVtX2VuYWJsZWRfc2hvdywgdGhwc2l6ZV9zaG1lbV9lbmFibGVkX3N0b3JlKTtcXG5tbS9zaG1lbS5jLTU1ODktI2VuZGlmIC8qIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfU1lTRlMgKi9cXG4tLVxcbm1tL3N3YXBfc3RhdGUuYz0xMDMzPXN0YXRpYyBzc2l6ZV90IHZtYV9yYV9lbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9zd2FwX3N0YXRlLmMtMTAzNy19XFxubW0vc3dhcF9zdGF0ZS5jOjEwMzg6c3RhdGljIHNzaXplX3Qgdm1hX3JhX2VuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxubW0vc3dhcF9zdGF0ZS5jLTEwMzktXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmM9NTQ1OT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ3NS0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ3NjpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ3Ny1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MjcuOTQ3MDUyNDMzWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTEzNjc0OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgTUdMUlUncyBFbmFibGluZyBhbmQgRGlzYWJsaW5nKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBNR0xSVSdzIHN0YXRlIGlzIGNvbnRyb2xsZWQgd2l0aGluIGBtbS92bXNjYW4uY2AuIFRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUgaW4gcmVsYXRpb24gdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgaXMgd2hhdCdzIGNhdGNoaW5nIG15IGF0dGVudGlvbi4gSSBuZWVkIHRvIGJlIGNsZWFyIG9uIHdoZXJlIHRoZSBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IHV0aWxpemVkLCBlc3BlY2lhbGx5IHNpbmNlIGl0J3MgYXNzb2NpYXRlZCB3aXRoIHRob3NlIHN0YXRlIGNoYW5nZXMuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgb25seSBnZXQgY2FsbGVkIHdoZW4gTUdMUlUgaXMgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZD8gSXQncyBjcnVjaWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNpcmN1bXN0YW5jZXMuIElmIHNvLCB0aGVuIGhvdywgaW4gZGV0YWlsLCBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHN5c3RlbT8gSSBuZWVkIHRvIGFuYWx5emUgdGhlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24uIFRoYXQgd2lsbCBvZmZlciBzb21lIGNsYXJpdHkuIFVuZGVyc3RhbmRpbmcgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGZ1bmN0aW9ucyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYwNjUsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozMS43Mzg0MjMxMzNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyMTcyODg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jLTUzNzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NDkyLVxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYzo1NDkzOlxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU0OTQtXFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MzEuNzkwNjAxODAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjYzNDA2MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIERlZXAgaW50byBQYWdlIEV2aWN0aW9uKipcblxuT2theSwgc28gYGZpbGxfZXZpY3RhYmxlYCBnZXRzIHRyaWdnZXJlZCBieSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgdGhhdCwgaW4gdHVybiwgaXMgYSBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgYGVuYWJsZWRfc3RvcmVgLiBHb3QgaXQuIFRoYXQncyB0aGUgcHJpbWFyeSBwYXRoLCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IHBvdGVudGlhbCBzaWRlIGVmZmVjdHMuIElzIGBmaWxsX2V2aWN0YWJsZWAgKm9ubHkqIGNhbGxlZCBmcm9tIHRoYXQgc3BlY2lmaWMgY2FsbCBjaGFpbj8gSSBjYW4ndCBhc3N1bWUgdGhhdC4gQmVzdCB0byBiZSB0aG9yb3VnaCwgZXNwZWNpYWxseSB3aXRoIHNvbWV0aGluZyB0aGlzIGZ1bmRhbWVudGFsIHRvIG1lbW9yeSBtYW5hZ2VtZW50LlxuXG5SaWdodCwgdGltZSB0byBjcmFjayBvcGVuIGBtbS92bXNjYW4uY2AuIEEgcXVpY2sgc2VhcmNoIGZvciBgZmlsbF9ldmljdGFibGVgIHNob3VsZCByZXZlYWwgYWxsIG9mIGl0cyBjYWxsIHNpdGVzLiBHb3R0YSBjaGVjayB0aGUgb3RoZXIgY29kZXBhdGhzIHRvIGNvbmZpcm0gdGhlcmUncyBubyB1bmV4cGVjdGVkIGJlaGF2aW9yIG9yIHN1YnRsZSBpbnRlcmFjdGlvbnMgSSdtIG1pc3NpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1NjQsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozNS4yNTY5NDU4MTJaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNjY5MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZXZpY3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUyNzA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5Mi1cXG5tbS92bXNjYW4uYzo1MjkzOnN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01Mjk0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNzg9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQxMi1cXG5tbS92bXNjYW4uYzo1NDEzOlxcdFxcdFxcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XFxubW0vdm1zY2FuLmMtNTQxNC1cXHRcXHRcXHRcXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozNS4zMTA2MjA5M1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI1NDAyOTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE1HTFJVIFRvZ2dsZSBMb2dpYyoqXG5cbk9rYXksIHNvIHRoaXMgY29kZSwgdGhlIG9uZSBJJ20gbG9va2luZyBhdCwgaXMgb25seSBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCB3aGljaCBpcyB2ZXJ5IHNwZWNpZmljLiBUaGF0IG1lYW5zIGl0IG9ubHkgZ2V0cyBleGVjdXRlZCB3aGVuIHRoZSB1c2VyIGludGVyYWN0cyB3aXRoIHRoZSBzeXNmcyBpbnRlcmZhY2UgdG8gdHVybiBNR0xSVSBvbiBvciBvZmYuIFRoYXTigJlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLlxuXG5OZXh0LCBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGVudmlyb25tZW50LiBDYW4gdGhpcyBjb2RlIHBhdGggYmUgcmVhY2hlZCBpbiBhIHZpcnR1YWxpemVkIHNldHRpbmc/IFRoZSBhbnN3ZXIgaXMgbGlrZWx5IHllcywgYmVjYXVzZSBzeXNmcyBpcyB1c3VhbGx5IGFjY2Vzc2libGUgd2l0aGluIGEgVk0uIFNvIHRoYXQncyBvbmUgbGVzcyBiYXJyaWVyIHRvIGVudHJ5LlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb246IGlzIHRoaXMgZnV6ei13b3J0aHk/IEFic29sdXRlbHkuIEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCAoc3BlY2lmaWNhbGx5IE1HTFJVKS4gQW55IGNvZGUgdGhhdCBhbHRlcnMgdGhhdCBjcml0aWNhbCBjb21wb25lbnQgaXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIFRoZSBwb3RlbnRpYWwgZm9yIGEgbWVtb3J5IGNvcnJ1cHRpb24gb3IgZGVuaWFsLW9mLXNlcnZpY2UgdnVsbmVyYWJpbGl0eSBpcyBzaWduaWZpY2FudCBoZXJlLlxuXG5GaW5hbGx5LCBsZXQncyBuYWlsIGRvd24gd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgd2UgbmVlZCB0byB3b3JyeSBhYm91dC4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS92bXNjYW4uY2AgYW5kIHNwZWNpZmljYWxseSBsb29rIGFyb3VuZCBgZmlsbF9ldmljdGFibGVgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIGJsb2NrcyB0aGF0IG1pZ2h0IGdhdGUgdGhpcyBsb2dpYy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcmFuZ2Ugb2YgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgcG9zc2libGUgYmVmb3JlIEkgc3RhcnQgdGVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTozOS41MzYwMjczNDZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwOTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDUyODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MjgwOlxcdFxcdFxcdH1cXG41MjgxOlxcdFxcdH0gZWxzZSB7XFxuNTI4MjpcXHRcXHRcXHRpbnQgZ2VuLCB0eXBlLCB6b25lO1xcbjUyODM6XFx0XFxuNTI4NDpcXHRcXHRcXHRmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSkge1xcbjUyODU6XFx0XFx0XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZscnVnZW4tXFx1MDAzZWZvbGlvc1tnZW5dW3R5cGVdW3pvbmVdKSlcXG41Mjg2OlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41Mjg3OlxcdFxcdFxcdH1cXG41Mjg4OlxcdFxcdH1cXG41Mjg5OlxcdFxcbjUyOTA6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTI5MTpcXHR9XFxuNTI5MjpcXHRcXG41MjkzOlxcdHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG41Mjk0OlxcdHtcXG41Mjk1OlxcdFxcdGVudW0gbHJ1X2xpc3QgbHJ1O1xcbjUyOTY6XFx0XFx0aW50IHJlbWFpbmluZyA9IE1BWF9MUlVfQkFUQ0g7XFxuNTI5NzpcXHRcXG41Mjk4OlxcdFxcdGZvcl9lYWNoX2V2aWN0YWJsZV9scnUobHJ1KSB7XFxuNTI5OTpcXHRcXHRcXHRpbnQgdHlwZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XFxuNTMwMDpcXHRcXHRcXHRib29sIGFjdGl2ZSA9IGlzX2FjdGl2ZV9scnUobHJ1KTtcXG41MzAxOlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VsaXN0c1tscnVdO1xcbjUzMDI6XFx0XFxuNTMwMzpcXHRcXHRcXHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcXG41MzA0OlxcdFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG41MzA1OlxcdFxcdFxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuNTMwNjpcXHRcXG41MzA3OlxcdFxcdFxcdFxcdC8qXFxuNTMwODpcXHRcXHRcXHRcXHQgKiBCb3RoIHRoZSBsZWdhY3kgTFJVIGFuZCBhIE1HTFJVIGdlbmVyYXRpb24ga2VlcCB0aGVcXG41MzA5OlxcdFxcdFxcdFxcdCAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGVcXG41MzEwOlxcdFxcdFxcdFxcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxcbjUzMTE6XFx0XFx0XFx0XFx0ICogdGhhdCBvcmRlciwgdGhlIGVuZCB3ZSB0YWtlIGZyb20gbXVzdCBtYXRjaCB0aGUgZW5kXFxuNTMxMjpcXHRcXHRcXHRcXHQgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2VcXG41MzEzOlxcdFxcdFxcdFxcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcXG41MzE0OlxcdFxcdFxcdFxcdCAqIGhlYWQ7IGFjdGl2ZSBmb2xpb3MgdXNlIHJlY2xhaW1pbmc9ZmFsc2UgKGxpc3RfYWRkKSxcXG41MzE1OlxcdFxcdFxcdFxcdCAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmRcXG41MzE2OlxcdFxcdFxcdFxcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxcbjUzMTc6XFx0XFx0XFx0XFx0ICovXFxuNTMxODpcXHRcXHRcXHRcXHRpZiAoYWN0aXZlKVxcbjUzMTk6XFx0XFx0XFx0XFx0XFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XFxuNTMyMDpcXHRcXHRcXHRcXHRlbHNlXFxuNTMyMTpcXHRcXHRcXHRcXHRcXHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xcbjUzMjI6XFx0XFxuNTMyMzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcXG41MzI0OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XFxuNTMyNTpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG41MzI2OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xcbjUzMjc6XFx0XFxuNTMyODpcXHRcXHRcXHRcXHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xcbjUzMjk6XFx0XFx0XFx0XFx0LypcXG41MzMwOlxcdFxcdFxcdFxcdCAqIFdpdGggcmVjbGFpbWluZz1mYWxzZSwgbHJ1X2dlbl9mb2xpb19zZXEoKSB3b3VsZCBzZWVkXFxuNTMzMTpcXHRcXHRcXHRcXHQgKiBhbiBpbmFjdGl2ZSBmb2xpbyBuZWFyIG1heF9zZXEsIHdoaWNoXFxuNTMzMjpcXHRcXHRcXHRcXHQgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmVcXG41MzMzOlxcdFxcdFxcdFxcdCAqIHBsYWNlbWVudCB3b3VsZCBiZSBsb3N0LiAgUGFzcyByZWNsYWltaW5nPSFhY3RpdmUgdG9cXG41MzM0OlxcdFxcdFxcdFxcdCAqIHNlZWQgaXQgaW50byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gaW5zdGVhZC4gIFRoaXNcXG41MzM1OlxcdFxcdFxcdFxcdCAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClcXG41MzM2OlxcdFxcdFxcdFxcdCAqIG1lYW5pbmc7IGl0IGFsc28gcGlja3MgbGlzdF9hZGRfdGFpbCgpIGFib3ZlLlxcbjUzMzc6XFx0XFx0XFx0XFx0ICovXFxuNTMzODpcXHRcXHRcXHRcXHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XFxuNTMzOTpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbjUzNDA6XFx0XFxuNTM0MTpcXHRcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcbjUzNDI6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjUzNDM6XFx0XFx0XFx0fVxcbjUzNDQ6XFx0XFx0fVxcbjUzNDU6XFx0XFxuNTM0NjpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG41MzQ3OlxcdH1cXG41MzQ4OlxcdFxcbjUzNDk6XFx0c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG41MzUwOlxcdHtcXG41MzUxOlxcdFxcdGludCBnZW4sIHR5cGUsIHpvbmU7XFxuNTM1MjpcXHRcXHRpbnQgcmVtYWluaW5nID0gTUFYX0xSVV9CQVRDSDtcXG41MzUzOlxcdFxcbjUzNTQ6XFx0XFx0Zm9yX2VhY2hfZ2VuX3R5cGVfem9uZShnZW4sIHR5cGUsIHpvbmUpIHtcXG41MzU1OlxcdFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQgPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW4uZm9saW9zW2dlbl1bdHlwZV1bem9uZV07XFxuNTM1NjpcXHRcXG41MzU3OlxcdFxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkge1xcbjUzNTg6XFx0XFx0XFx0XFx0Ym9vbCBzdWNjZXNzO1xcbjUzNTk6XFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG41MzYwOlxcdFxcbjUzNjE6XFx0XFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XFxuNTM2MjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pLCBmb2xpbyk7XFxuNTM2MzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9faXNfZmlsZV9scnUoZm9saW8pICE9IHR5cGUsIGZvbGlvKTtcXG41MzY0OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb196b25lbnVtKGZvbGlvKSAhPSB6b25lLCBmb2xpbyk7XFxuNTM2NTpcXHRcXG41MzY2OlxcdFxcdFxcdFxcdHN1Y2Nlc3MgPSBscnVfZ2VuX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XFxuNTM2NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xcbjUzNjg6XFx0XFx0XFx0XFx0bHJ1dmVjX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG41MzY5OlxcdFxcbjUzNzA6XFx0XFx0XFx0XFx0aWYgKCEtLXJlbWFpbmluZylcXG41MzcxOlxcdFxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG41MzcyOlxcdFxcdFxcdH1cXG41MzczOlxcdFxcdH1cXG41Mzc0OlxcdFxcbjUzNzU6XFx0XFx0cmV0dXJuIHRydWU7XFxuNTM3NjpcXHR9XFxuNTM3NzpcXHRcXG41Mzc4OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41Mzc5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MDk6MzkuNTM2NTAwMTU2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTEzNTAzMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGZpbGxfZXZpY3RhYmxlYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgY29udGV4dCBvZiB0aGlzIGBmaWxsX2V2aWN0YWJsZWAgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIGxpa2VseSBiYXNlZCBvbiBzb21lIGZlYXR1cmUgZmxhZy4gU3BlY2lmaWNhbGx5LCBJIHN1c3BlY3QgaXQncyBhc3NvY2lhdGVkIHdpdGggdGhlIGBMUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgaW1wbHlpbmcgaXQgcGxheXMgYSByb2xlIGluIGEgbW9yZSBhZHZhbmNlZCBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGltcGxlbWVudGF0aW9uIG9yIHNvbWUgdmFyaWFudCBvZiBwYWdlIGFnaW5nLlxuXG5NeSBmaXJzdCBtb3ZlIGlzIHRvIHNjYW4gdGhlIGNvZGUgdG8gdmVyaWZ5IGlmIHRoYXQgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSwgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAsIGluZGVlZCBlbmNsb3NlcyB0aGUgZGVmaW5pdGlvbiBvciBkZWNsYXJhdGlvbiBvZiBgZmlsbF9ldmljdGFibGVgLiBUaGF0IHdpbGwgaW1tZWRpYXRlbHkgZ2l2ZSBtZSBhIGNsdWUgYXMgdG8gaXRzIHB1cnBvc2UgYW5kIGRlcGVuZGVuY3kuIFRoZSBwbGFjZW1lbnQgd2lsbCBpbmRpY2F0ZSBpZiBJJ20gb24gdGhlIHJpZ2h0IHRyYWNrOyBpdCdsbCBjbGFyaWZ5IHdoZXRoZXIgYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3RpdmVseSB1c2VkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gb3IgYW4gb3B0aW9uYWwgY29tcG9uZW50LiBGcm9tIHRoZXJlLCBJJ2xsIG5lZWQgdG8gbG9vayBhdCB3aGF0IG90aGVyIGZ1bmN0aW9ucyBhcmUgYWZmZWN0ZWQgYnkgYExSVV9HRU5gLCB0byBnYWluIHNvbWUgaW5zaWdodCBpbnRvIGBmaWxsX2V2aWN0YWJsZWAncyByb2xlIGluIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwNTEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQzLjc0Nzg1NDU1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMDE1MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0xSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9ODI3PWVudW0gZm9saW9fcmVmZXJlbmNlcyB7XFxuLS1cXG5tbS92bXNjYW4uYy04MzItXFxubW0vdm1zY2FuLmM6ODMzOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTgzNC0vKlxcbi0tXFxubW0vdm1zY2FuLmM9ODYyPXN0YXRpYyBib29sIGxydV9nZW5fc2V0X3JlZnMoc3RydWN0IGZvbGlvICpmb2xpbywgY29uc3Qgdm1hX2ZsYWdzX3QgKnZtYV9mbGFncylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTg2NS19XFxubW0vdm1zY2FuLmM6ODY2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTg2Ny1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTI2ODA9c3RhdGljIGJvb2wgY2FuX2FnZV9hbm9uX3BhZ2VzKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI2OTEtXFxubW0vdm1zY2FuLmM6MjY5MjojaWZkZWYgQ09ORklHX0xSVV9HRU5cXG5tbS92bXNjYW4uYy0yNjkzLVxcbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XFxubW0vdm1zY2FuLmM6MjY5NTojaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XFxuLS1cXG5tbS92bXNjYW4uYz0yODgwPXN0YXRpYyB2b2lkIHJlc2V0X2Jsb29tX2ZpbHRlcihzdHJ1Y3QgbHJ1X2dlbl9tbV9zdGF0ZSAqbW1fc3RhdGUsIHVuc2lnbmVkIGxvbmcgc2VxKVxcbi0tXFxubW0vdm1zY2FuLmMtMjg5OS1cXG5tbS92bXNjYW4uYzoyOTAwOiNpZmRlZiBDT05GSUdfTFJVX0dFTl9XQUxLU19NTVVcXG5tbS92bXNjYW4uYy0yOTAxLVxcbi0tXFxubW0vdm1zY2FuLmM9MzAwOT12b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMwMzctXFxubW0vdm1zY2FuLmM6MzAzODojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VICovXFxubW0vdm1zY2FuLmMtMzAzOS1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTU5Njg9bGF0ZV9pbml0Y2FsbChpbml0X2xydV9nZW4pO1xcbm1tL3Ztc2Nhbi5jLTU5NjktXFxubW0vdm1zY2FuLmM6NTk3MDojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cXG5tbS92bXNjYW4uYy01OTcxLVxcbi0tXFxubW0vdm1zY2FuLmM9NTk4Mj1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTk4Ni1cXG5tbS92bXNjYW4uYzo1OTg3OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5ODgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQzLjc5NTA2MTM3MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTQxMzY1NDA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29kZSoqXG5cbk9rYXksIEknbSBjaGVja2luZyB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhlIHRhcmdldCBmdW5jdGlvbiBpcyBpbmRlZWQgd3JhcHBlZCB3aXRoaW4gYW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2suIExldCdzIHNlZS4uLiBsb29raW5nIGF0IHRoZSBsaW5lIG51bWJlcnMsIGBmaWxsX2V2aWN0YWJsZWAgaXMgYXJvdW5kIGxpbmUgNTI5MywgYW5kIHRoZSBgI2Vsc2VgIGZvciB0aGUgY29uZGl0aW9uYWwgaXMgYXJvdW5kIDU5NzAsIHNvIGl0IGxvb2tzIGxpa2UgdGhhdCBjb2RlIHBhdGggaXMgZGVmaW5pdGVseSBlbmFibGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBkZWZpbmVkLlxuXG5Ob3csIGEgcXVpY2sgdGhvdWdodDogaXMgdGhlcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcGFyYW1ldGVyIHRoYXQgbWlnaHQgaW1wYWN0IHRoaXM/IFBlcmhhcHMgc29tZXRoaW5nIGxpa2UgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgPyBUaGUgZmlyc3Qgb25lIGp1c3QgKmRlZmluZXMqIHRoZSBzdHJ1Y3R1cmUsIGJ1dCB0aGlzIG90aGVyIHBhcmFtZXRlciBtaWdodCBkZXRlcm1pbmUgaWYgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGJ1dCBzdGlsbCBhbGxvd2luZyBpdCB0byBiZSB0b2dnbGVkIHZpYSBzeXNmcywgcmlnaHQ/XG5cblRoaW5raW5nIGFib3V0IHRoYXQgc3lzZnMgb3B0aW9uLCB3aGF0J3MgdGhlIGZ1bmN0aW9uIG5hbWU/IEFoIHllcywgYGVuYWJsZWRfc3RvcmVgLiBJIHNob3VsZCB2ZXJpZnkgaWYgdGhhdCBmdW5jdGlvbiBpdHNlbGYgaXMgZGVwZW5kZW50IG9uLCBzYXksIGBDT05GSUdfU1lTRlNgIGJlaW5nIGVuYWJsZWQuLi4gSSdsbCBjaGVjayB0aGF0IG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDQ2LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjA5OjQ4LjczNjQyOTk5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg0MzU2MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01NDU5PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuLS1cXG5tbS92bXNjYW4uYy01NDc1LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG5tbS92bXNjYW4uYzo1NDc2OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG5tbS92bXNjYW4uYy01NDc3LVxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo0OC43ODQ4NzE4NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3OTAwMjg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYGVuYWJsZWRfc3RvcmVgLiBNeSBtaW5kIGltbWVkaWF0ZWx5IHN0YXJ0cyB0byBzY29wZSBpdC4gSSdtIHRoaW5raW5nLCBcIkxldCdzIGRpZyBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLlwiIEknbSBub3QganVzdCBnb2luZyB0byB0YWtlIHRoaXMgdGVybSBhdCBmYWNlIHZhbHVlOyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29udGV4dC4gV2hlcmUgaXMgaXQgdXNlZD8gV2hhdCB2YXJpYWJsZXMgb3IgZnVuY3Rpb25zIGFyZSBuZWFyIGl0IGluIHRoZSBjb2RlYmFzZT8gV2hhdCdzIHRoZSBnZW5lcmFsIGRlc2lnbiBwYXR0ZXJuIGF0IHBsYXkgYXJvdW5kIGl0P1xuXG5JIHdhbnQgdG8ga25vdyBpZiBpdCdzIGEgc2ltcGxlIGJvb2xlYW4gZmxhZywgYSBtb3JlIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUsIG9yIHBhcnQgb2YgYSBsYXJnZXIgc3RhdGUgbWFuYWdlbWVudCBzeXN0ZW0uIEFyZSB3ZSBkZWFsaW5nIHdpdGggc29tZXRoaW5nIGxvY2FsIHRvIGEgZnVuY3Rpb24sIG9yIGlzIHRoaXMgYSBnbG9iYWwgb3Igc2hhcmVkIHJlc291cmNlPyBBcmUgdGhlcmUgYW55IG9idmlvdXMgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciByYWNlIGNvbmRpdGlvbnMgaWYgaXQncyBtb2RpZmllZCBpbiBtdWx0aXBsZSBwbGFjZXM/IEFyZSB0aGVyZSBhbnkgb2J2aW91cyBkZXBlbmRlbmNpZXMgb24gdGhpcyBvciBkZXBlbmRlbmNpZXMgaXQgdXNlcz8gSXMgaXQgc2ltcGx5IHVzZWQgdG8gZW5hYmxlL2Rpc2FibGUgZmVhdHVyZXMgb3IgbW9yZSBjb21wbGljYXRlZD9cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBcImVuYWJsZWRcIiBtZWFucyBpbiAqdGhpcyogY29udGV4dC4gSXMgaXQgYWJvdXQgZmVhdHVyZSBmbGFncywgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uLCBhY2Nlc3MgY29udHJvbCwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IFRoZSBkb2N1bWVudGF0aW9uIG1heSBjbGFyaWZ5LCBidXQgSSB3YW50IHRvIGdldCBhIHBpY3R1cmUgb2YgaXQgYnkgaW52ZXN0aWdhdGluZyB3aGVyZSBpdCdzIHVzZWQgYW5kIGhvdy4gTGV0J3Mgc2VlIGhvdyBtdWNoIG9mIHRoZSBjb2RlIEkgY2FuIHF1aWNrbHkgc2NhbiwgZmluZCBhbnkgcXVpY2sgY2x1ZXMsIGFuZCB1c2UgdGhhdCB0byBjb25zdHJ1Y3QgYSBoeXBvdGhlc2lzIGFib3V0IGl0cyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA1OTEsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo1NC4xNjM4NzgyNjRaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ1MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU0NTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1NDUwOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU0NTE6XFx0XFxuNTQ1MjpcXHRcXHRXUklURV9PTkNFKGxydV9nZW5fbWluX3R0bCwgbXNlY3NfdG9famlmZmllcyhtc2VjcykpO1xcbjU0NTM6XFx0XFxuNTQ1NDpcXHRcXHRyZXR1cm4gbGVuO1xcbjU0NTU6XFx0fVxcbjU0NTY6XFx0XFxuNTQ1NzpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fbWluX3R0bF9hdHRyID0gX19BVFRSX1JXKG1pbl90dGxfbXMpO1xcbjU0NTg6XFx0XFxuNTQ1OTpcXHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbjU0NjA6XFx0e1xcbjU0NjE6XFx0XFx0dW5zaWduZWQgaW50IGNhcHMgPSAwO1xcbjU0NjI6XFx0XFxuNTQ2MzpcXHRcXHRpZiAoZ2V0X2NhcChMUlVfR0VOX0NPUkUpKVxcbjU0NjQ6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9DT1JFKTtcXG41NDY1OlxcdFxcbjU0NjY6XFx0XFx0aWYgKHNob3VsZF93YWxrX21tdSgpKVxcbjU0Njc6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9NTV9XQUxLKTtcXG41NDY4OlxcdFxcbjU0Njk6XFx0XFx0aWYgKHNob3VsZF9jbGVhcl9wbWRfeW91bmcoKSlcXG41NDcwOlxcdFxcdFxcdGNhcHMgfD0gQklUKExSVV9HRU5fTk9OTEVBRl9ZT1VORyk7XFxuNTQ3MTpcXHRcXG41NDcyOlxcdFxcdHJldHVybiBzeXNmc19lbWl0KGJ1ZiwgXFxcIjB4JTA0eFxcXFxuXFxcIiwgY2Fwcyk7XFxuNTQ3MzpcXHR9XFxuNTQ3NDpcXHRcXG41NDc1OlxcdC8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cXG41NDc2OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcXG41NDc3OlxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxcbjU0Nzg6XFx0e1xcbjU0Nzk6XFx0XFx0aW50IGk7XFxuNTQ4MDpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcztcXG41NDgxOlxcdFxcbjU0ODI6XFx0XFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ24nKVxcbjU0ODM6XFx0XFx0XFx0Y2FwcyA9IDA7XFxuNTQ4NDpcXHRcXHRlbHNlIGlmICh0b2xvd2VyKCpidWYpID09ICd5JylcXG41NDg1OlxcdFxcdFxcdGNhcHMgPSAtMTtcXG41NDg2OlxcdFxcdGVsc2UgaWYgKGtzdHJ0b3VpbnQoYnVmLCAwLCBcXHUwMDI2Y2FwcykpXFxuNTQ4NzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG41NDg4OlxcdFxcbjU0ODk6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSsrKSB7XFxuNTQ5MDpcXHRcXHRcXHRib29sIGVuYWJsZWQgPSBjYXBzIFxcdTAwMjYgQklUKGkpO1xcbjU0OTE6XFx0XFxuNTQ5MjpcXHRcXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxuNTQ5MzpcXHRcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG41NDk0OlxcdFxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuNTQ5NTpcXHRcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcXG41NDk2OlxcdFxcdFxcdGVsc2VcXG41NDk3OlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcXG41NDk4OlxcdFxcdH1cXG41NDk5OlxcdFxcbjU1MDA6XFx0XFx0cmV0dXJuIGxlbjtcXG41NTAxOlxcdH1cXG41NTAyOlxcdFxcbjU1MDM6XFx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG41NTA2OlxcdFxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbjU1MDc6XFx0XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxuNTUwODpcXHRcXHROVUxMXFxuNTUwOTpcXHR9O1xcbjU1MTA6XFx0XFxuNTUxMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XFxuNTUxMjpcXHRcXHQubmFtZSA9IFxcXCJscnVfZ2VuXFxcIixcXG41NTEzOlxcdFxcdC5hdHRycyA9IGxydV9nZW5fYXR0cnMsXFxuNTUxNDpcXHR9O1xcbjU1MTU6XFx0XFxuNTUxNjpcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuNTUxNzpcXHQgKiAgICAgICAgICAgICAgICAgICAgICAgICAgZGVidWdmcyBpbnRlcmZhY2VcXG41NTE4OlxcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXFxuNTUxOTpcXHRcXG41NTIwOlxcdHN0YXRpYyB2b2lkICpscnVfZ2VuX3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcG9zKVxcbjU1MjE6XFx0e1xcbjU1MjI6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xcbjU1MjM6XFx0XFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xcbjU1MjQ6XFx0XFxuNTUyNTpcXHRcXHRtLVxcdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xcbjU1MjY6XFx0XFx0aWYgKCFtLVxcdTAwM2Vwcml2YXRlKVxcbjU1Mjc6XFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuNTUyODpcXHRcXG41NTI5OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjU1MzA6XFx0XFx0ZG8ge1xcbjU1MzE6XFx0XFx0XFx0aW50IG5pZDtcXG41NTMyOlxcdFxcbjU1MzM6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XFxuNTUzNDpcXHRcXHRcXHRcXHRpZiAoIW5yX3RvX3NraXAtLSlcXG41NTM1OlxcdFxcdFxcdFxcdFxcdHJldHVybiBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbjU1MzY6XFx0XFx0XFx0fVxcbjU1Mzc6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU1Mzg6XFx0XFxuNTUzOTpcXHRcXHRyZXR1cm4gTlVMTDtcXG41NTQwOlxcdH1cXG41NTQxOlxcdFxcbjU1NDI6XFx0c3RhdGljIHZvaWQgbHJ1X2dlbl9zZXFfc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuNTU0MzpcXHR7XFxuNTU0NDpcXHRcXHRpZiAoIUlTX0VSUl9PUl9OVUxMKHYpKVxcbjU1NDU6XFx0XFx0XFx0bWVtX2Nncm91cF9pdGVyX2JyZWFrKE5VTEwsIGxydXZlY19tZW1jZyh2KSk7XFxuNTU0NjpcXHRcXG41NTQ3OlxcdFxcdGt2ZnJlZShtLVxcdTAwM2Vwcml2YXRlKTtcXG41NTQ4OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBOVUxMO1xcbjU1NDk6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODowOTo1NC4xNjQyMjUxMjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjAwMjUzODA4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBNR0xSVSBTdGF0ZSBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgZnVuY3Rpb24sIGFuZCBpdCdzIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAuIEkgc2VlIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpcyBzdGF0aWMsIHdoaWNoIEkgZXhwZWN0ZWQsIGJ1dCBpdCBtYWtlcyBtZSB3b25kZXIgaWYgZnV6emluZyB0aGlzIGlzIGFjdHVhbGx5IHdvcnRod2hpbGUsIHllcywgdGhhdCdzIGEga2V5IGZ1bmN0aW9uYWwgY2hhbmdlIGluIE1HTFJVIHRoYXQgY291bGQgYmUgdnVsbmVyYWJsZS5cblxuTXkgaW5pdGlhbCBmb2N1cyB3YXMgb24gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpdHNlbGYsIGJ1dCB0aGF0J3Mgc3RhdGljLiBIbW0sIGFuZCBgZW5hYmxlZF9zdG9yZWAgd2hpY2ggY2FsbHMgaXQgaXMgYWxzbyBzdGF0aWMsIHNvIG15IGdvYWwgb2YgZGlyZWN0bHkgZnV6emluZyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIHByb2JhYmx5IG5vdCBnb2luZyB0byB3b3JrLlxuXG5JIG5lZWQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucyB0aGF0IGNvdWxkIGJlIGVudHJ5IHBvaW50cy4gSSBjaGVja2VkIHRoZSBjYWxsZXJzIG9mIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAsIGFuZCBpdCBsb29rcyBsaWtlIHRoZSBvbmx5IGNhbGxlciBpcyBgZW5hYmxlZF9zdG9yZWAuIEkgd2FzIGluaXRpYWxseSB0aGlua2luZyB0aGVyZSBtaWdodCBiZSBzb21ldGhpbmcgZnJvbSBgbHJ1X2dlbl9pbml0X21lbWNnYCBvciBzaW1pbGFyLCBidXQgaXQncyBvbmx5IGBlbmFibGVkX3N0b3JlYC5cblxuVG8gYmUgdGhvcm91Z2gsIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBlbnRpcmUgYG1tL3Ztc2Nhbi5jYCBmaWxlIHRvIGNoZWNrIGlmIGl0J3MgcmVmZXJlbmNlZCBhbnl3aGVyZSBlbHNlLCBpdCdzIHdvcnRoIGNoZWNraW5nIHRvIHNlZSBpZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGFjdHVhbGx5IHVzZWQgc29tZXdoZXJlIGVsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDAwLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MDAuMTY2NzY3MDI0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODk3NzgzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz01MzQ5PXN0YXRpYyBib29sIGRyYWluX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbm1tL3Ztc2Nhbi5jLTUzNzkte1xcbi0tXFxubW0vdm1zY2FuLmM9NTQ3Nj1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NDkyLVxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG5tbS92bXNjYW4uYzo1NDkzOlxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbm1tL3Ztc2Nhbi5jLTU0OTQtXFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MDAuMjE1NzQ5OTYyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYwNDYxMjM5OTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBDb2RlIFBhdGgqKlxuXG5BbHJpZ2h0LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgY29kZSwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgYXQgaG93IGBlbmFibGVkX3N0b3JlYCB3b3JrcyB3aXRoaW4gdGhpcyBzeXNmcyBzZXR1cC4gU2luY2UgaXQncyBpbnZva2VkIHRocm91Z2ggdGhlIGBzeXNmc19rZl93cml0ZWAgcGF0aCwgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzIGEgZGlyZWN0IGludGVyZmFjZS4gTm93LCB0aGUgcmVhbCBxdWVzdGlvbiBpcywgYXJlIHRoZXJlIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE1HTFJVIGNvZGUgdGhhdCBJIGNhbiBwb3RlbnRpYWxseSBmb2N1cyBvbiBmb3IgYSBkZWVwZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxvdz8gVGhhdCBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzIHRlbXB0aW5nLCBidXQgc3RhdGljIGZ1bmN0aW9ucyB1c3VhbGx5IGFyZW4ndCB0aGUgYmVzdCBlbnRyeSBwb2ludHMgZm9yIGEgYnJvYWQgb3ZlcnZpZXcuXG5cbkluc3RlYWQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB0cnkgYSBkaWZmZXJlbnQgYXBwcm9hY2gsIGNoZWNraW5nIHRoZSBgbW0vdm1zY2FuLmNgIGZpbGUgZm9yIG90aGVyIHBvdGVudGlhbGx5IGludGVyZXN0aW5nIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBJdCBtYWtlcyBzZW5zZSB0byBzdGFydCB0aGVyZSwgZ2l2ZW4gdGhhdCBNR0xSVSBoYXMgc3Ryb25nIHRpZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBgdm1zY2FuYC4gSSdtIGhvcGluZyB0byBmaW5kIHNvbWUgcHVibGljbHkgdmlzaWJsZSwgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgd2l0aGluIGBtbS92bXNjYW4uY2AgcmVsYXRlZCB0byBNR0xSVSdzIGludGVyYWN0aW9ucy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciBvdmVydmlldyBvZiBob3cgTUdMUlUgaXMgYmVpbmcgaW50ZWdyYXRlZCBpbnRvIHRoZSBtYWluIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMxNDAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMDowNi4yNjE4Nzc3NTJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTAwMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGxydV9nZW5fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI5MjM9c3RhdGljIHN0cnVjdCBtbV9zdHJ1Y3QgKmdldF9uZXh0X21tKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXFxuLS1cXG5tbS92bXNjYW4uYy0yOTQxLVxcbm1tL3Ztc2Nhbi5jOjI5NDI6dm9pZCBscnVfZ2VuX2FkZF9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0yOTQzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI5NjgtXFxubW0vdm1zY2FuLmM6Mjk2OTp2b2lkIGxydV9nZW5fZGVsX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbm1tL3Ztc2Nhbi5jLTI5NzAte1xcbi0tXFxubW0vdm1zY2FuLmMtMzAwOC0jaWZkZWYgQ09ORklHX01FTUNHXFxubW0vdm1zY2FuLmM6MzAwOTp2b2lkIGxydV9nZW5fbWlncmF0ZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG5tbS92bXNjYW4uYy0zMDEwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzODI9c3RhdGljIHZvaWQgbHJ1X2dlbl9yb3RhdGVfbWVtY2coc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgb3ApXFxuLS1cXG5tbS92bXNjYW4uYy00NDI5LVxcbm1tL3Ztc2Nhbi5jOjQ0MzA6dm9pZCBscnVfZ2VuX29ubGluZV9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNDQzMS17XFxuLS1cXG5tbS92bXNjYW4uYy00NDU0LVxcbm1tL3Ztc2Nhbi5jOjQ0NTU6dm9pZCBscnVfZ2VuX29mZmxpbmVfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL3Ztc2Nhbi5jLTQ0NTYte1xcbi0tXFxubW0vdm1zY2FuLmMtNDQ2NS1cXG5tbS92bXNjYW4uYzo0NDY2OnZvaWQgbHJ1X2dlbl9yZWxlYXNlX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy00NDY3LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ0OTEtXFxubW0vdm1zY2FuLmM6NDQ5Mjp2b2lkIGxydV9nZW5fc29mdF9yZWNsYWltKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG5tbS92bXNjYW4uYy00NDkzLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ1ODk9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2MTktXFxubW0vdm1zY2FuLmM6NDYyMDp2b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbm1tL3Ztc2Nhbi5jLTQ2MjEte1xcbi0tXFxubW0vdm1zY2FuLmM9NTg2OD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBscnVfZ2VuX3JvX2ZvcHMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy01ODc4LVxcbm1tL3Ztc2Nhbi5jOjU4Nzk6dm9pZCBscnVfZ2VuX2luaXRfcGdkYXQoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG5tbS92bXNjYW4uYy01ODgwLXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4OTAtXFxubW0vdm1zY2FuLmM6NTg5MTp2b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTU4OTIte1xcbi0tXFxubW0vdm1zY2FuLmMtNTkxMi1cXG5tbS92bXNjYW4uYzo1OTEzOnZvaWQgbHJ1X2dlbl9pbml0X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS92bXNjYW4uYy01OTE0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5MjMtXFxubW0vdm1zY2FuLmM6NTkyNDp2b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vdm1zY2FuLmMtNTkyNS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjA2LjMxMDM5NTc3MVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTk2MjcwMTA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUmVhY2hhYmlsaXR5IG9mIE1vZGlmaWVkIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBpdCdzIGFjdHVhbGx5IGdldHRpbmcgZXhlY3V0ZWQuIEkgc2VlIHRoaXMgbW9kaWZpZWQgc2VjdGlvbiwgYnV0IGl0IG9ubHkgc2VlbXMgdG8gYmUgYWNjZXNzaWJsZSB3aGVuIEkgdG9nZ2xlIE1HTFJVIG9uIG9yIG9mZi4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBOb3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmlzbS4gSSdtIHRoaW5raW5nLCBpcyB0aGVyZSBhbnkgc3BlY2lmaWMgZnVuY3Rpb24gdGhhdCdzIGR5bmFtaWNhbGx5IGxpbmtlZCB0byB0cmlnZ2VyIHRoaXMgY29kZT8gSXQgc2VlbXMgbGlrZSBpdCdzIG5vdCBhIHN0YXRpYyBwYXRoLiBBaCwgYGVuYWJsZWRfc3RvcmVgIGlzIGFuIGF0dHJpYnV0ZSBzdG9yZSBmdW5jdGlvbi4gUmlnaHQsIGF0dHJpYnV0ZSBzdG9yZXMgYXJlIG9mdGVuIGR5bmFtaWNhbGx5IGNhbGxlZCBvciBhY2Nlc3NlZCB2aWEgY29uZmlndXJhdGlvbi4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IC0geWVzLCBgZW5hYmxlZF9zdG9yZWAgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gYGxydV9nZW5fYXR0cl9ncm91cGAuIE9rYXksIHNvIGBscnVfZ2VuX2F0dHJfZ3JvdXBgIGlzIHRoZSBpbXBvcnRhbnQgYml0IGhlcmUuIE5vdyBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgKnRoYXQqIGlzIHVzZWQgdG8gc2VlIGhvdyB0aGlzIHdob2xlIHRoaW5nIGhhbmdzIHRvZ2V0aGVyLCBhbmQgd2hhdCB0cmlnZ2VycyB0aGlzIGNvZGUgcGF0aC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgZ3JvdXBpbmcgZ2V0cyBjYWxsZWQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0MzgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwODoxMDoxMC41MDY2NjkyNThaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTM3NzQ0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2F0dHJfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTUwNT1zdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNTUxMC1cXG5tbS92bXNjYW4uYzo1NTExOnN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG5tbS92bXNjYW4uYy01NTEyLVxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Mz1zdGF0aWMgaW50IF9faW5pdCBpbml0X2xydV9nZW4odm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU5NTctXFxubW0vdm1zY2FuLmM6NTk1ODpcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbm1tL3Ztc2Nhbi5jLTU5NTktXFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MTAuNjE4MDUzMDQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NDE4ODYwMDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIFN5c2ZzIFN0b3JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBzeXNmcyBzdG9yZSBmdW5jdGlvbi4gSXQncyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBqdXN0IGEgYHN5c2ZzYCBzdG9yZSwgbm90aGluZyB0b28gY29tcGxpY2F0ZWQuIEkgY2FuIGVpdGhlciBsZWF2ZSBgRm9jdXNTeW1ib2xzYCBlbXB0eSBvciBwcm92aWRlIGBlbmFibGVkX3N0b3JlYCwgYnV0IHNpbmNlIHRoYXQncyBzdGF0aWMsIEknbSBsZWFuaW5nIHRvd2FyZCBsZWF2aW5nIGl0IGVtcHR5IGZvciBub3cuIEhtbSwgbG9va3MgbGlrZSBgZmlsbF9ldmljdGFibGVgLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLCBhbmQgYGVuYWJsZWRfc3RvcmVgIGFyZSBhbGwgc3RhdGljLiBFbXB0eSBgRm9jdXNTeW1ib2xzYCBpdCBpcy4gTm93LCB3aGF0IGFib3V0IGBFbmFibGVDb25maWdzYD8gVGhhdCBzZWVtcyBsaWtlIGEgZ29vZCBwbGFjZSB0byBsb29rIG5leHQuIEFoLCBgQ09ORklHX0xSVV9HRU5gIGlzIGEgcmVxdWlyZW1lbnQuIE9rYXksIG1vdmluZyBvbiwgbGV0J3Mgc2VlIGlmIGBDT05GSUdfU1lTRlNgIGlzIGFsc28gcmVxdWlyZWQuIEkgc2VlIHRoYXQgYHN5c2ZzX2NyZWF0ZV9ncm91cGAgaXMganVzdCBhIHN0dWIgaWYgYENPTkZJR19TWVNGU2AgaXNuJ3Qgc2V0LCBidXQgdGhhdCBzdGlsbCBkb2Vzbid0IG1lYW4gYGVuYWJsZWRfc3RvcmVgIHdpbGwgYmUgY29tcGlsZWQgaWYgU1lTRlMgaXNuJ3QgZW5hYmxlZC4gQmV0dGVyIGRvdWJsZS1jaGVjayBpZiBgZW5hYmxlZF9zdG9yZWAgaXMgZ3VhcmRlZCBieSBhbiBgI2lmZGVmIENPTkZJR19TWVNGU2AuIE5lZWQgdG8gYmUgdGhvcm91Z2ghXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTc0LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTY4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjE2LjI1OTk0MTQ4N1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2MzUwNjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19TWVNGU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTI4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG5tbS92bXNjYW4uYy04MTI5LVxcbm1tL3Ztc2Nhbi5jOjgxMzA6I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jLTgxMzEtc3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjE2LjYyNjI5ODMyNVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODU0NzYxODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgZW5hYmxlZF9zdG9yZWAgVmFyaWFibGUqKlxuXG5IbW0sIHNvbWV0aGluZydzIG5vdCBxdWl0ZSByaWdodC4gTXkgaW5pdGlhbCBhc3N1bXB0aW9uIHdhcyB0aGF0IHRoZSBgZW5hYmxlZF9zdG9yZWAgdmFyaWFibGUsIHJlbGF0ZWQgdG8gdGhlIHZtc2NhbiBzdWJzeXN0ZW0sIHdhcyBwcm90ZWN0ZWQgYnkgYSBgI2lmZGVmIENPTkZJR19TWVNGU2AgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmxvY2suIEJ1dCBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgZG9lc24ndCBzZWVtIHRvIGNvbmZpcm0gdGhhdC4gSXQgZG9lc24ndCBhcHBlYXIgdG8gYmUgY29uZmluZWQgYnkgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi5cblxuTGV0J3MgZG91YmxlLWNoZWNrIHRoZSBgbW0vdm1zY2FuLmNgIHNvdXJjZSBmaWxlLiBJIG5lZWQgdG8gdGFrZSBhbm90aGVyIGxvb2sgYXJvdW5kIHdoZXJlIGBlbmFibGVkX3N0b3JlYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBJJ2xsIG5lZWQgdG8gc2VlIHByZWNpc2VseSBob3cgaXQncyBoYW5kbGVkIHdpdGhpbiB0aGF0IGNvbnRleHQsIGFuZCBkZXRlcm1pbmUgaWYgbXkgb3JpZ2luYWwgdW5kZXJzdGFuZGluZyBvZiBpdHMgZGVwZW5kZW5jeSBvbiBgU1lTRlNgIHdhcyBpbmFjY3VyYXRlLCBvciBpZiBJJ20gc2ltcGx5IG1pc3Npbmcgc29tZXRoaW5nIGluIHRoZSBjb2RlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHZhcmlhYmxlJ3MgdmlzaWJpbGl0eSBhbmQgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUyOCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjIwLjQ4MTA2MjczNFoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjgzNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ1MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU0NTA6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTQ1MTpcXHRcXG41NDUyOlxcdFxcdFdSSVRFX09OQ0UobHJ1X2dlbl9taW5fdHRsLCBtc2Vjc190b19qaWZmaWVzKG1zZWNzKSk7XFxuNTQ1MzpcXHRcXG41NDU0OlxcdFxcdHJldHVybiBsZW47XFxuNTQ1NTpcXHR9XFxuNTQ1NjpcXHRcXG41NDU3OlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9taW5fdHRsX2F0dHIgPSBfX0FUVFJfUlcobWluX3R0bF9tcyk7XFxuNTQ1ODpcXHRcXG41NDU5OlxcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXFxuNTQ2MDpcXHR7XFxuNTQ2MTpcXHRcXHR1bnNpZ25lZCBpbnQgY2FwcyA9IDA7XFxuNTQ2MjpcXHRcXG41NDYzOlxcdFxcdGlmIChnZXRfY2FwKExSVV9HRU5fQ09SRSkpXFxuNTQ2NDpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX0NPUkUpO1xcbjU0NjU6XFx0XFxuNTQ2NjpcXHRcXHRpZiAoc2hvdWxkX3dhbGtfbW11KCkpXFxuNTQ2NzpcXHRcXHRcXHRjYXBzIHw9IEJJVChMUlVfR0VOX01NX1dBTEspO1xcbjU0Njg6XFx0XFxuNTQ2OTpcXHRcXHRpZiAoc2hvdWxkX2NsZWFyX3BtZF95b3VuZygpKVxcbjU0NzA6XFx0XFx0XFx0Y2FwcyB8PSBCSVQoTFJVX0dFTl9OT05MRUFGX1lPVU5HKTtcXG41NDcxOlxcdFxcbjU0NzI6XFx0XFx0cmV0dXJuIHN5c2ZzX2VtaXQoYnVmLCBcXFwiMHglMDR4XFxcXG5cXFwiLCBjYXBzKTtcXG41NDczOlxcdH1cXG41NDc0OlxcdFxcbjU0NzU6XFx0Lyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbjU0NzY6XFx0c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbjU0Nzc6XFx0XFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuNTQ3ODpcXHR7XFxuNTQ3OTpcXHRcXHRpbnQgaTtcXG41NDgwOlxcdFxcdHVuc2lnbmVkIGludCBjYXBzO1xcbjU0ODE6XFx0XFxuNTQ4MjpcXHRcXHRpZiAodG9sb3dlcigqYnVmKSA9PSAnbicpXFxuNTQ4MzpcXHRcXHRcXHRjYXBzID0gMDtcXG41NDg0OlxcdFxcdGVsc2UgaWYgKHRvbG93ZXIoKmJ1ZikgPT0gJ3knKVxcbjU0ODU6XFx0XFx0XFx0Y2FwcyA9IC0xO1xcbjU0ODY6XFx0XFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFxcdTAwMjZjYXBzKSlcXG41NDg3OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjU0ODg6XFx0XFxuNTQ4OTpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgTlJfTFJVX0dFTl9DQVBTOyBpKyspIHtcXG41NDkwOlxcdFxcdFxcdGJvb2wgZW5hYmxlZCA9IGNhcHMgXFx1MDAyNiBCSVQoaSk7XFxuNTQ5MTpcXHRcXG41NDkyOlxcdFxcdFxcdGlmIChpID09IExSVV9HRU5fQ09SRSlcXG41NDkzOlxcdFxcdFxcdFxcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xcbjU0OTQ6XFx0XFx0XFx0ZWxzZSBpZiAoZW5hYmxlZClcXG41NDk1OlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU0OTY6XFx0XFx0XFx0ZWxzZVxcbjU0OTc6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9kaXNhYmxlKFxcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xcbjU0OTg6XFx0XFx0fVxcbjU0OTk6XFx0XFxuNTUwMDpcXHRcXHRyZXR1cm4gbGVuO1xcbjU1MDE6XFx0fVxcbjU1MDI6XFx0XFxuNTUwMzpcXHRzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xcbjU1MDQ6XFx0XFxuNTUwNTpcXHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xcbjU1MDY6XFx0XFx0XFx1MDAyNmxydV9nZW5fbWluX3R0bF9hdHRyLmF0dHIsXFxuNTUwNzpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9lbmFibGVkX2F0dHIuYXR0cixcXG41NTA4OlxcdFxcdE5VTExcXG41NTA5OlxcdH07XFxuNTUxMDpcXHRcXG41NTExOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgYXR0cmlidXRlX2dyb3VwIGxydV9nZW5fYXR0cl9ncm91cCA9IHtcXG41NTEyOlxcdFxcdC5uYW1lID0gXFxcImxydV9nZW5cXFwiLFxcbjU1MTM6XFx0XFx0LmF0dHJzID0gbHJ1X2dlbl9hdHRycyxcXG41NTE0OlxcdH07XFxuNTUxNTpcXHRcXG41NTE2OlxcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG41NTE3OlxcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxcbjU1MTg6XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG41NTE5OlxcdFxcbjU1MjA6XFx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXFxuNTUyMTpcXHR7XFxuNTUyMjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTUyMzpcXHRcXHRsb2ZmX3QgbnJfdG9fc2tpcCA9ICpwb3M7XFxuNTUyNDpcXHRcXG41NTI1OlxcdFxcdG0tXFx1MDAzZXByaXZhdGUgPSBrdm1hbGxvYyhQQVRIX01BWCwgR0ZQX0tFUk5FTCk7XFxuNTUyNjpcXHRcXHRpZiAoIW0tXFx1MDAzZXByaXZhdGUpXFxuNTUyNzpcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG41NTI4OlxcdFxcbjU1Mjk6XFx0XFx0bWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgTlVMTCwgTlVMTCk7XFxuNTUzMDpcXHRcXHRkbyB7XFxuNTUzMTpcXHRcXHRcXHRpbnQgbmlkO1xcbjU1MzI6XFx0XFxuNTUzMzpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG41NTM0OlxcdFxcdFxcdFxcdGlmICghbnJfdG9fc2tpcC0tKVxcbjU1MzU6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTUzNjpcXHRcXHRcXHR9XFxuNTUzNzpcXHRcXHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XFxuNTUzODpcXHRcXG41NTM5OlxcdFxcdHJldHVybiBOVUxMO1xcbjU1NDA6XFx0fVxcbjU1NDE6XFx0XFxuNTU0MjpcXHRzdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41NTQzOlxcdHtcXG41NTQ0OlxcdFxcdGlmICghSVNfRVJSX09SX05VTEwodikpXFxuNTU0NTpcXHRcXHRcXHRtZW1fY2dyb3VwX2l0ZXJfYnJlYWsoTlVMTCwgbHJ1dmVjX21lbWNnKHYpKTtcXG41NTQ2OlxcdFxcbjU1NDc6XFx0XFx0a3ZmcmVlKG0tXFx1MDAzZXByaXZhdGUpO1xcbjU1NDg6XFx0XFx0bS1cXHUwMDNlcHJpdmF0ZSA9IE5VTEw7XFxuNTU0OTpcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjIwLjQ4MTQ5MjkwNFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODIzNDE4NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIExSVSBHZW5lcmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGZvciBMUlUgZ2VuZXJhdGlvbi4gSXQncyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0J3MgKm5vdCogdW5kZXIgYCNpZmRlZiBDT05GSUdfU1lTRlNgLCB3aGljaCBpcyBnb29kIHRvIGtub3csIHRoYXQgbmFycm93cyB0aGluZ3MgZG93biBhIGJpdC4gUmlnaHQgbm93LCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBvcHRpb24uIEJ1dCwgdGhhdCdzIGp1c3QgdGhlIGZpcnN0IHBhc3MsIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3b25kZXIsIGFyZSB0aGVyZSBhbnkgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBpbmZsdWVuY2Ugb3IgZXZlbiBiZSAqcmVxdWlyZWQqIGZvciBgTFJVX0dFTmAgdG8gYmUgYWN0aXZlPyBHb3R0YSBtYWtlIHN1cmUgSSBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIGNvbnN1bHQgYG1tL0tjb25maWdgLiBUaGF0IHNob3VsZCBoYXZlIGEgZGVmaW5pdGl2ZSBhbnN3ZXIgcmVnYXJkaW5nIGFueSBhc3NvY2lhdGVkIGRlcGVuZGVuY2llcyBvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgY29uZmlndXJhdGlvbiBzZXR0aW5ncyByZWxhdGVkIHRvIGBMUlVfR0VOYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcyNjEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjI0LjMwNDkxMzUyM1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTcyNDQ0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9LY29uZmlnPTEzOTM9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxcbi0tXFxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XFxubW0vS2NvbmZpZzoxNDA0OmNvbmZpZyBMUlVfR0VOXFxubW0vS2NvbmZpZy0xNDA1LVxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTItXFxubW0vS2NvbmZpZzoxNDEzOmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG5tbS9LY29uZmlnLTE0MTQtXFx0Ym9vbCBcXFwiRW5hYmxlIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MTgtXFxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXFxubW0vS2NvbmZpZy0xNDIwLVxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4tLVxcbm1tL0tjb25maWctMTQyNy1cXG5tbS9LY29uZmlnOjE0Mjg6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXFxubW0vS2NvbmZpZy0xNDI5LVxcdGRlZl9ib29sIHlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MjQuMzYyMTcwMzEyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4MDQ5MjE1NTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTFJVX0dFTiBDb25maWd1cmF0aW9uIGFuZCBCdWcgRml4KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgTFJVX0dFTmAgY29uZmlndXJhdGlvbi4gTXkgaW5pdGlhbCBzdGVwIGlzIHRvIGVuYWJsZSBpdCwgc28gSSdsbCBzZXQgYEVuYWJsZUNvbmZpZ3NgIHRvIGBbXCJMUlVfR0VOXCJdYC4gVGhpcyBzZWVtcyBzdHJhaWdodGZvcndhcmQgZW5vdWdoLlxuXG5UaGUgY29yZSBvZiB0aGUgbWF0dGVyIGlzIHRoaXMgcGF0Y2ggdGhhdCdzIGZpeGluZyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgLiBJdCBhcHBlYXJzIHRoZXJlIHdhcyBhbiBpc3N1ZSB3aXRoIGhvdyBgZmlsbF9ldmljdGFibGVgIHdhcyBoYW5kbGluZyBmb2xpb3MgZHVyaW5nIHRoZSBNR0xSVSBnZW5lcmF0aW9uIHByb2Nlc3MsIHNwZWNpZmljYWxseSBwaWNraW5nIHRoZW0gZnJvbSB0aGUgd3JvbmcgZW5kIG9mIHRoZSBsaXN0LiBUaGF0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggZGVmaW5pdGVseSB3YXJyYW50cyBhdHRlbnRpb24uIFRoaXMgaXMgcmVhY2hhYmxlIGFuZCBjb250cm9sbGFibGUgdGhyb3VnaCBzeXNmcywgc3BlY2lmaWNhbGx5IGJ5IHRvZ2dsaW5nIE1HTFJVLCB3aGljaCBpcyBpbXBvcnRhbnQuXG5cbkdpdmVuIHRoZSBwb3RlbnRpYWwgaW1wYWN0IGFuZCB0aGUgZmFjdCB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCwgSSdtIGdvaW5nIHRvIHNldCBgV29ydGhGdXp6aW5nPXRydWVgLiBHb3R0YSBiZSB0aG9yb3VnaCBoZXJlLlxuXG5BcyBmb3IgYEZvY3VzU3ltYm9sc2AsIEknbSBnb2luZyB0byBsZWF2ZSB0aGF0IGVtcHR5LiBUaGUgbW9kaWZpZWQgZnVuY3Rpb24sIGBmaWxsX2V2aWN0YWJsZWAsIGlzIHN0YXRpYywgYW5kIGl0J3Mgb25seSBjYWxsZWQgZnJvbSBhbm90aGVyIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaXMgaXRzZWxmIGEgc3lzZnMgc3RvcmUgY2FsbGJhY2suIFRoZXJlJ3Mgbm8gc2Vuc2libGUsIG5vbi1zdGF0aWMgZW50cnkgcG9pbnQgdGhhdCBJIGNvdWxkIGZvY3VzIG9uIHRvIG5hcnJvdyB0aGUgc2NvcGUuXG5cbkkganVzdCB3YW50IHRvIGRvdWJsZSBjaGVjayBteSB3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZy4gTGV0IG1lIHJldmlldyB0aGUgY2FsbCBncmFwaCBhbmQgc2VlIGlmIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9uIGNvdWxkIHBvc3NpYmx5IHRyaWdnZXIgYGZpbGxfZXZpY3RhYmxlYC4gT2theSwgc28gYGZpbGxfZXZpY3RhYmxlYCBpcyBjYWxsZWQgb25seSBieSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBUaGVuLCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBlbmFibGVkX3N0b3JlYC4gQW5kIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLiBOb3BlLCB0aGF0J3MgaXQuIEl04oCZcyBhbGwgY29udGFpbmVkIHdpdGhpbiB0aGUgc3lzZnMgcGF0aC5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGNvbmZpcm1lZCwgSSdtIGNvbWZvcnRhYmxlIHVzaW5nIGBzZXQtcmVzdWx0c2AgdG8gZmluYWxpemUgdGhlIG91dHB1dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc3NjIsIk91dHB1dFRva2VucyI6OTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMTY3MDk0MTQ2WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNjk0MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgaW4gYGZpbGxfZXZpY3RhYmxlYCB3aGVyZSBmb2xpb3Mgd2VyZSB0YWtlbiBmcm9tIHRoZSB3cm9uZyBlbmQgb2YgdGhlIGxpc3Qgd2hlbiBtb3ZpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbi4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1HTFJVKSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgc3lzZnMgdG9nZ2xpbmcgb2YgTUdMUlUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyBpbiBgZmlsbF9ldmljdGFibGVgIHdoZXJlIGZvbGlvcyB3ZXJlIHRha2VuIGZyb20gdGhlIHdyb25nIGVuZCBvZiB0aGUgbGlzdCB3aGVuIG1vdmluZyB0aGVtIHRvIHRoZSBNR0xSVSBnZW5lcmF0aW9uLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTUdMUlUpIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBzeXNmcyB0b2dnbGluZyBvZiBNR0xSVS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMjQ4MjcwNDIzWiIsIlNlcSI6MzcsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA1ODMxNDExMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjMyLjI0ODg2OTc0M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTA1NzcxMDA2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGY0ZWVhMDZjYzAwYzNmYzEwYzE5NTNkYzJmM2ZiMzZiOGE1ZTE5YThcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEF1ZyAyMCAwODowOToxMCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmI5YTE1ZmFhMmZlYTEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgKzUzMDIsMjMgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogQm90aCB0aGUgbGVnYWN5IExSVSBhbmQgYSBNR0xSVSBnZW5lcmF0aW9uIGtlZXAgdGhlXG4rXHRcdFx0ICogaG90dGVzdCBmb2xpb3MgYXQgdGhlIGhlYWQgYW5kIHRoZSBjb2xkZXN0IGF0IHRoZVxuK1x0XHRcdCAqIHRhaWwsIGFuZCByZWNsYWltIHRha2VzIGZyb20gdGhlIHRhaWwuICBUbyBwcmVzZXJ2ZVxuK1x0XHRcdCAqIHRoYXQgb3JkZXIsIHRoZSBlbmQgd2UgdGFrZSBmcm9tIG11c3QgbWF0Y2ggdGhlIGVuZFxuK1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgaW5zZXJ0cyBhdDogaW5hY3RpdmUgZm9saW9zIHVzZVxuK1x0XHRcdCAqIHJlY2xhaW1pbmc9dHJ1ZSAobGlzdF9hZGRfdGFpbCksIHNvIHRha2UgZnJvbSB0aGVcbitcdFx0XHQgKiBoZWFkOyBhY3RpdmUgZm9saW9zIHVzZSByZWNsYWltaW5nPWZhbHNlIChsaXN0X2FkZCksXG4rXHRcdFx0ICogc28gdGFrZSBmcm9tIHRoZSB0YWlsLiAgVGFraW5nIGZyb20gdGhlIHdyb25nIGVuZFxuK1x0XHRcdCAqIHdvdWxkIHJldmVyc2UgaG90L2NvbGQgd2l0aGluIHRoZSBnZW5lcmF0aW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhY3RpdmUpXG4rXHRcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICs1MzI2LDE2IEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbiBcbiBcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBXaXRoIHJlY2xhaW1pbmc9ZmFsc2UsIGxydV9nZW5fZm9saW9fc2VxKCkgd291bGQgc2VlZFxuK1x0XHRcdCAqIGFuIGluYWN0aXZlIGZvbGlvIG5lYXIgbWF4X3NlcSwgd2hpY2hcbitcdFx0XHQgKiBscnVfZ2VuX2lzX2FjdGl2ZSgpIHJlcG9ydHMgYXMgYWN0aXZlLCBzbyBpdHMgaW5hY3RpdmVcbitcdFx0XHQgKiBwbGFjZW1lbnQgd291bGQgYmUgbG9zdC4gIFBhc3MgcmVjbGFpbWluZz0hYWN0aXZlIHRvXG4rXHRcdFx0ICogc2VlZCBpdCBpbnRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiBpbnN0ZWFkLiAgVGhpc1xuK1x0XHRcdCAqIHJldXNlcyByZWNsYWltaW5nIGJleW9uZCBpdHMgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClcbitcdFx0XHQgKiBtZWFuaW5nOyBpdCBhbHNvIHBpY2tzIGxpc3RfYWRkX3RhaWwoKSBhYm92ZS5cbitcdFx0XHQgKi9cbitcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbiBcbiBcdFx0XHRpZiAoIS0tcmVtYWluaW5nKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDg6MTA6MzIuMjQ4ODcwNjYzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMDU3NjgyMjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIExpc3QgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgZmlsbF9ldmljdGFibGVgIGluIGBtbS92bXNjYW4uY2AsIGFuZCBpdCdzIGFsbCBhYm91dCBob3cgZm9saW9zIGFyZSBoYW5kbGVkIG9uIHRoZSBMUlUgbGlzdHMuIEluaXRpYWxseSwgSSBub3RpY2VkIHRoZSBjaGFuZ2UgaW4gaG93IGZvbGlvcyBhcmUgcHVsbGVkIGZyb20gdGhlIGBoZWFkYCBsaXN0LiBOb3csIGRlcGVuZGluZyBvbiB0aGUgYGFjdGl2ZWAgc3RhdGUsIHdlJ3JlIGVpdGhlciB0YWtpbmcgZnJvbSB0aGUgdGFpbCAodXNpbmcgYGxydV90b19mb2xpbyhoZWFkKWApIG9yIHRoZSBoZWFkIChgbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgKS4gSSBoYWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbHJ1X3RvX2ZvbGlvYCBpcyBpbmRlZWQgYGxpc3RfbGFzdF9lbnRyeWAsIGFuZCBpdCBpcywgc28gdGhhdCdzIGdvb2QuIFRoZSBjaGFuZ2UgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYCBpcyBhbHNvIHNvbWV0aGluZyB0byBjb25zaWRlcjogd2UncmUgbm93IHBhc3NpbmcgYCFhY3RpdmVgIGluc3RlYWQgb2YgYGZhbHNlYC5cblxuTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYSBsb2dpYyBjb3JyZWN0aW9uIHdpdGhpbiB0aGUgTFJVIGxpc3QgbWFuYWdlbWVudC4gSSBxdWlja2x5IHJhbiB0aHJvdWdoIHRoZSBwb3NzaWJpbGl0aWVzIG9mIGJ1Z3MuIFRoZXJlJ3Mgbm90aGluZyBpbiBoZXJlIHRoYXQgbG9va3MgbGlrZSB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBsaXN0IG1hbmlwdWxhdGlvbiBhbmQgdGhlIExSVSBnZW5lcmF0aW9uIGxvZ2ljLCBzbyBidWdzIGhlcmUgYXJlIG1vcmUgbGlrZWx5IHRvIGJlIGxvZ2ljIGVycm9ycywgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgb3IgbGlzdCBjb3JydXB0aW9uLiBLQVNBTiB3b3VsZCBkZWZpbml0ZWx5IGNhdGNoIGEgdXNlLWFmdGVyLWZyZWUgb3IgbGlzdCBjb3JydXB0aW9uIHNjZW5hcmlvLiBLTVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIGlzIHRoZSB0b29sIGZvciBmaW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCB3aGljaCBpc24ndCBhcHBsaWNhYmxlIGhlcmUuIFRoZXJlJ3Mgbm90aGluZyBpbiB0aGUgcGF0Y2ggdGhhdCBpbnRyb2R1Y2VzIG9yIGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkuXG5cbkxldCBtZSBjb25maXJtIHRoZSBjb2RlOlxuYGBgY1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvdGggdGhlIGxlZ2FjeSBMUlUgYW5kIGEgTUdMUlUgZ2VuZXJhdGlvbiBrZWVwIHRoZVxuK1x0XHRcdCAqIGhvdHRlc3QgZm9saW9zIGF0IHRoZSBoZWFkIGFuZCB0aGUgY29sZGVzdCBhdCB0aGVcbitcdFx0XHQgKiB0YWlsLCBhbmQgcmVjbGFpbSB0YWtlcyBmcm9tIHRoZSB0YWlsLiAgVG8gcHJlc2VydmVcbitcdFx0XHQgKiB0aGF0IG9yZGVyLCB0aGUgZW5kIHdlIHRha2UgZnJvbSBtdXN0IG1hdGNoIHRoZSBlbmRcbitcdFx0XHQgKiBscnVfZ2VuX2FkZF9mb2xpbygpIGluc2VydHMgYXQ6IGluYWN0aXZlIGZvbGlvcyB1c2VcbitcdFx0XHQgKiByZWNsYWltaW5nPXRydWUgKGxpc3RfYWRkX3RhaWwpLCBzbyB0YWtlIGZyb20gdGhlXG4rXHRcdFx0ICogaGVhZDsgYWN0aXZlIGZvbGlvcyB1c2UgcmVjbGFpbWluZz1mYWxzZSAobGlzdF9hZGQpLFxuK1x0XHRcdCAqIHNvIHRha2UgZnJvbSB0aGUgdGFpbC4gIFRha2luZyBmcm9tIHRoZSB3cm9uZyBlbmRcbitcdFx0XHQgKiB3b3VsZCByZXZlcnNlIGhvdC9jb2xkIHdpdGhpbiB0aGUgZ2VuZXJhdGlvbi5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoYWN0aXZlKVxuK1x0XHRcdFx0Zm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0ZWxzZVxuK1x0XHRcdFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbmBgYFxuQW5kOlxuYGBgY1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuYGBgXG5cbk9rYXksIHRoZSBjb2RlIGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSXQgaXMgcHVyZWx5IGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGVyZSBhcmUgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCBvciB3cml0dGVuLCBhbmQgbm8gZGF0YSBiZWluZyBzZW50IHRvIHVzZXIgc3BhY2UuIFRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuIEknbSBjb25maWRlbnQgaW4gY2FsbGluZyBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDYzLCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4MywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA4OjEwOjQzLjMwNjU1Njc5NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciB0YWtpbmcgZm9saW9zIGZyb20gdGhlIExSVSBsaXN0IGFuZCBhZGRpbmcgdGhlbSB0byB0aGUgTUdMUlUgZ2VuZXJhdGlvbiBpbiBgZmlsbF9ldmljdGFibGUoKWAuIEl0IGNoYW5nZXMgdGhlIGxpc3QgZXh0cmFjdGlvbiB0byB0YWtlIGZyb20gdGhlIGhlYWQgb3IgdGFpbCBkZXBlbmRpbmcgb24gd2hldGhlciB0aGUgZm9saW8gaXMgYWN0aXZlLCBhbmQgcGFzc2VzIGAhYWN0aXZlYCB0byBgbHJ1X2dlbl9hZGRfZm9saW8oKWAuIFRoZXNlIGNoYW5nZXMgYXJlIHB1cmVseSByZWxhdGVkIHRvIGxpc3Qgb3JkZXJpbmcgYW5kIExSVSBnZW5lcmF0aW9uIGxvZ2ljLiBUaGV5IGRvIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBhbGxvY2F0aW9ucywgZG8gbm90IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgYW5kIGRvIG5vdCBzZW5kIGFueSBkYXRhIHRvIHVzZXJzcGFjZS4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGxpa2VseSBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3IgdGFraW5nIGZvbGlvcyBmcm9tIHRoZSBMUlUgbGlzdCBhbmQgYWRkaW5nIHRoZW0gdG8gdGhlIE1HTFJVIGdlbmVyYXRpb24gaW4gYGZpbGxfZXZpY3RhYmxlKClgLiBJdCBjaGFuZ2VzIHRoZSBsaXN0IGV4dHJhY3Rpb24gdG8gdGFrZSBmcm9tIHRoZSBoZWFkIG9yIHRhaWwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgdGhlIGZvbGlvIGlzIGFjdGl2ZSwgYW5kIHBhc3NlcyBgIWFjdGl2ZWAgdG8gYGxydV9nZW5fYWRkX2ZvbGlvKClgLiBUaGVzZSBjaGFuZ2VzIGFyZSBwdXJlbHkgcmVsYXRlZCB0byBsaXN0IG9yZGVyaW5nIGFuZCBMUlUgZ2VuZXJhdGlvbiBsb2dpYy4gVGhleSBkbyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIGRvIG5vdCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGFuZCBkbyBub3Qgc2VuZCBhbnkgZGF0YSB0byB1c2Vyc3BhY2UuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBsaWtlbHkgYmUgbGlzdCBjb3JydXB0aW9uLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzLCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[1] Phase: Succeeded StartedAt: 2026-08-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 08:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 08:10:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2] Phase: Succeeded StartedAt: 2026-08-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 08:11:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:10:54 +0000 UTC FinishedAt: 2026-08-20 08:10:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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-workflowrw2l6/series-workflowrw2l6-convert-artifact-988116443/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:11:04 +0000 UTC FinishedAt: 2026-08-20 08:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:11:04 +0000 UTC FinishedAt: 2026-08-20 08:27:20 +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:*6db7a82e-b7e5-4d31-9f07-9912579a542f,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-workflowrw2l6/series-workflowrw2l6-convert-artifact-988116443/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": "3a5d1894-d058-4b44-b1c7-faca524b8fa5", "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-workflowrw2l6/series-workflowrw2l6-build-action-2160931609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:11:04 +0000 UTC FinishedAt: 2026-08-20 08:27:10 +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:*6db7a82e-b7e5-4d31-9f07-9912579a542f,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-workflowrw2l6/series-workflowrw2l6-convert-artifact-988116443/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": "3a5d1894-d058-4b44-b1c7-faca524b8fa5", "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-workflowrw2l6/series-workflowrw2l6-build-action-2160931609/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:20 +0000 UTC FinishedAt: 2026-08-20 08:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:20 +0000 UTC FinishedAt: 2026-08-20 08:27:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:20 +0000 UTC FinishedAt: 2026-08-20 08:27:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:20 +0000 UTC FinishedAt: 2026-08-20 08:27:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-workflowrw2l6/series-workflowrw2l6-convert-artifact-2108714290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:30 +0000 UTC FinishedAt: 2026-08-20 08:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:27:30 +0000 UTC FinishedAt: 2026-08-20 08:29:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a5d1894-d058-4b44-b1c7-faca524b8fa5,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-workflowrw2l6/series-workflowrw2l6-build-action-2160931609/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-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:29:42 +0000 UTC FinishedAt: 2026-08-20 08:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:29:42 +0000 UTC FinishedAt: 2026-08-20 08:29:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:29:42 +0000 UTC FinishedAt: 2026-08-20 08:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:29:42 +0000 UTC FinishedAt: 2026-08-20 08:49:56 +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:*6db7a82e-b7e5-4d31-9f07-9912579a542f,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-workflowrw2l6/series-workflowrw2l6-convert-artifact-2108714290/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": "38e6bc0d-18ec-419f-bec4-9328711598e1", "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-workflowrw2l6/series-workflowrw2l6-build-action-2750242502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:29:42 +0000 UTC FinishedAt: 2026-08-20 08:49:34 +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:*6db7a82e-b7e5-4d31-9f07-9912579a542f,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-workflowrw2l6/series-workflowrw2l6-convert-artifact-2108714290/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": "38e6bc0d-18ec-419f-bec4-9328711598e1", "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-workflowrw2l6/series-workflowrw2l6-build-action-2750242502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:49:56 +0000 UTC FinishedAt: 2026-08-20 08:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:49:56 +0000 UTC FinishedAt: 2026-08-20 08:49:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:49:56 +0000 UTC FinishedAt: 2026-08-20 08:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:49:56 +0000 UTC FinishedAt: 2026-08-20 08:51:56 +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:*38e6bc0d-18ec-419f-bec4-9328711598e1,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-workflowrw2l6/series-workflowrw2l6-build-action-2750242502/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-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +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":[],"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:*3a5d1894-d058-4b44-b1c7-faca524b8fa5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38e6bc0d-18ec-419f-bec4-9328711598e1,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-workflowrw2l6/series-workflowrw2l6-build-action-2160931609/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-workflowrw2l6/series-workflowrw2l6-build-action-2750242502/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 08:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 08:52:11 +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":[],"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-workflowrw2l6/series-workflowrw2l6-convert-artifact-2054556551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 08:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 08:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:06 +0000 UTC FinishedAt: 2026-08-20 08:52:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:16 +0000 UTC FinishedAt: 2026-08-20 11:58:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrw2l6[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"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":[],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"36f0f67c5c0065f65c0f4ee459cddbfe4045bccb","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"c93a23cf-8cc4-4336-a353-b310d54701ae","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-20 08:52:16 +0000 UTC FinishedAt: 2026-08-20 11:57:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3a5d1894-d058-4b44-b1c7-faca524b8fa5,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*38e6bc0d-18ec-419f-bec4-9328711598e1,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-workflowrw2l6/series-workflowrw2l6-build-action-2160931609/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-workflowrw2l6/series-workflowrw2l6-build-action-2750242502/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-workflowrw2l6/series-workflowrw2l6-convert-artifact-2054556551/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,}