Name: series-workflowzjqg5 Phase: Succeeded StartedAt: 2026-08-21 02:32:16 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[0] Phase: Succeeded StartedAt: 2026-08-21 02:32:16 +0000 UTC FinishedAt: 2026-08-21 02:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 02:32:16 +0000 UTC FinishedAt: 2026-08-21 02:59:35 +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": "5425e1a8f93c809cf379b0621c499d12701adfce", "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": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "b10ca4b0-847e-45e6-9c8e-6eadae76d668" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "enabled_store", "lru_gen_change_state" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MjVlMDkzZmY0NGI0MDhhODlkODE4MTA1NDU0YjliNWVmNTQxNmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZTZiYjJhYzdhNTdhYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTUzMDIsNyAmIzQzOzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXG4mIzQzO1x0XHRcdCAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoXG4mIzQzO1x0XHRcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoYWN0aXZlKVxuJiM0MztcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pO1xuQEAgLTUzMTAsNyAmIzQzOzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW5cbiYjNDM7XHRcdFx0ICogdGhlIG9sZGVyIGdlbnMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbiBcbiBcdFx0XHRpZiAoIS0tcmVtYWluaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsbF9ldmljdGFibGVgIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIHRvIGZpeCBhbiBpc3N1ZSB3aXRoIGNvbGQvaG90IGludmVyc2lvbiB3aGVuIG1vdmluZyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlL2luYWN0aXZlIGxpc3RzIHRvIHRoZSBNR0xSVSBsaXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgYXQgcnVudGltZSB2aWEgdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIHN5c2ZzIGZpbGUsIHdoaWNoIHRyaWdnZXJzIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwMjo1NzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uZTZiYjJhYzdhNTdhYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUzMDIsNyAmIzQzOzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQkJYm9vbCBzdWNjZXNzOwotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXIKJiM0MzsJCQkgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaAomIzQzOwkJCSAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGFjdGl2ZSkKJiM0MzsJCQkJZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7CkBAIC01MzEwLDcgJiM0Mzs1MzIwLDExIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pOwogCiAJCQlscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pOwotCQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvcnJvdyByZWNsYWltaW5nPXRydWUgdG8gcGxhY2UgaW5hY3RpdmUgZm9saW9zIGluCiYjNDM7CQkJICogdGhlIG9sZGVyIGdlbnMuCiYjNDM7CQkJICovCiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwogCQkJVk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTsKIAogCQkJaWYgKCEtLXJlbWFpbmluZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGRlY2lkZXMgd2hhdCBmb2xpb3MgdG8gZXZpY3QsIGhvdyBpdCBzZWxlY3RzIHdoaWNoIHBhZ2VzIHRvIGtpY2sgb3V0IG9mIG1lbW9yeS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2suCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCByZXRyaWV2aW5nIGZvbGlvcyBmcm9tIHRoZSBgaGVhZGAgbGlzdCB3aXRoaW4gYGZpbGxfZXZpY3RhYmxlYCwgY29uZGl0aW9uYWwgb24gdGhlIGBhY3RpdmVgIGZsYWcuIElmIGEgZm9saW8gaXMgYGFjdGl2ZWAsIGl0JiMzOTtzIHRha2luZyB0aGUgdGFpbCBvZiB0aGUgbGlzdCB2aWEgYGxydV90b19mb2xpbyhoZWFkKWAuICBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZSwgd2hpY2ggd2UmIzM5O2QgZXhwZWN0IHdoZW4gYWN0aXZlLiBJZiBpdCYjMzk7cyAqbm90KiBhY3RpdmUgKGAhYWN0aXZlYCksIGl0JiMzOTtzIGdyYWJiaW5nIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHdpdGggYGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpYC4gT2theSwgc28gaXQgcHJpb3JpdGl6ZXMgZGlmZmVyZW50IGxvY2F0aW9ucyBpbiB0aGUgTFJVLCBkZXBlbmRpbmcgb24gYWN0aXZpdHkuCgpUaGF0IGByZWNsYWltaW5nYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBjaGFuZ2luZyBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyB0aGUgZm9saW8gaXMgYmVpbmcgYWRkZWQgYmFjayBpbnRvIHRoZSBMUlUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlY2xhaW1pbmdgIGZsYWcgYmV0dGVyIGluIHRoZSBjb250ZXh0IG9mIGBscnVfZ2VuX2FkZF9mb2xpb2AuIEkmIzM5O2xsIGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbi4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYGZpbGxfZXZpY3RhYmxlYCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgZXZpY3Rpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01MzY3PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDAxLVxubW0vdm1zY2FuLmM6NTQwMjpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQwMy1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGZpbGxfZXZpY3RhYmxlYCoqCgpPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvJiMzOTtzIGNhbGxpbmcgaXQ/IFRoZSB0ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFJpZ2h0LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxsIHRvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWA/IFdoZXJlIGRvZXMgKml0KiBmaXQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB0byBzZWUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjYWxsIHRvIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgaXMgc3RhbmRhcmQgZGVidWdnaW5nLCBlc3NlbnRpYWxseSB0cmFja2luZyB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgZmlsbF9ldmljdGFibGVgLiBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGZvciBhbGwgY2FsbCBzaXRlcyBvZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjYtXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0ODI6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDgzLVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gYSB1c2VyIHdyaXRpbmcgYSB2YWx1ZSB0byBhIHN5c2ZzIGZpbGUuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgc29tZSBzb3J0IG9mIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYmVoYXZpb3IsIG9yIG1heWJlIGEgZmVhdHVyZSB0aGF0JiMzOTtzIExSVS1yZWxhdGVkLiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8gKmVsc2UqIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8mIzM0Oy4gYGVuYWJsZWRfc3RvcmVgIGlzIGp1c3Qgb25lIHBvaW50IG9mIGVudHJ5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIGEgc3RhdGUgY2hhbmdlIGluIHRoZSBMUlUgZ2VuZXJhdGlvbj8gQXJlIHRoZXJlIG90aGVyIHN5c2ZzIGVudHJpZXMgdXNpbmcgaXQ/IFBlcmhhcHMgb3RoZXIgaW50ZXJuYWwga2VybmVsIG1vZHVsZXM/IEtub3dpbmcgYWxsIHRoZSBjYWxsZXJzIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5emluZyBwZXJmb3JtYW5jZSBpbXBhY3RzLCBhbmQgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmdW5jdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUzMzg9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MzY2LVxubW0vdm1zY2FuLmM6NTM2NzpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG5tbS92bXNjYW4uYy01MzY4LXtcbi0tXG5tbS92bXNjYW4uYz01NDY1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDgxLVx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYzo1NDgyOlx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ4My1cdFx0ZWxzZSBpZiAoZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIENvbnRleHQgb2Ygc3lzZnMgV3JpdGVzKioKCk9rYXksIHNvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgb25seSBnZXRzIHRyaWdnZXJlZCB3aGVuIHdlJiMzOTtyZSB3cml0aW5nIHRvIGEgc3lzZnMgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gVGhpcyBmdW5jdGlvbiBjYWxsIGlzIGEga2V5IHNpZ25hbC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogd2hpY2ggc3BlY2lmaWMgc3lzZnMgZmlsZSBpcyBpbml0aWF0aW5nIHRoaXMgcGFydGljdWxhciBjYWxsPyBLbm93aW5nIHRoZSBmaWxlIG5hbWUgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBzdGF0ZSBjaGFuZ2UuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRoYXQgc3lzZnMgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU0NDg9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NDY0LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU0NjU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vdm1zY2FuLmMtNTQ2Ni1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zdG9yZWAgaW4gc3lzZnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZSB1dGlsaXplcyB0aGF0IGBlbmFibGVkX3N0b3JlYCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgZW5hYmxlZF9zdG9yZWAsIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9mIHNvbWUgZmVhdHVyZSBvciBoYXJkd2FyZSBjb21wb25lbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYSB1c2Ugb2YgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBtZXRob2QgZm9yIHNlYXJjaGluZywgbGlrZWx5IGxldmVyYWdpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHdheSB0byBmaW5kIGl0LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NjQtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS92bXNjYW4uYy01NDY2LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBCcmFpbnN0b3JtaW5nIGZvciBhIEtlcm5lbCBDb2RlIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZW5hYmxlZF9zdG9yZWAgaXMgYmVpbmcgdXNlZCwgYnV0IGEgc3RyYWlnaHQgZ3JlcCBpc24mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LiBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuIFdoYXQmIzM5O3MgaXQgYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpIbW0sIG1heWJlIEkgc2hvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCwgc2luY2UgYGVuYWJsZWRfc3RvcmVgIG1pZ2h0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGNhc2Ugd2hlcmUgdGhpbmdzIGxpa2UgdGhpcyBhcmUgd3JhcHBlZCBpbiBrZXJuZWwtc3R5bGUgYXR0cmlidXRlcy4gT2theSwgSSYjMzk7bGwgdHJ5IHNlYXJjaGluZyBmb3IgYF9fQVRUUmAgZmlyc3QuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaXMgc3RydWN0dXJlZC4gVGhhdCBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBzZWN0aW9uIHRoYXQgSSBuZWVkIHRvIGFuYWx5emUuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZS4uLiBhIHdpZGVyIHNlYXJjaCBzaG91bGQgaGVscCBjbGFyaWZ5IGFueSBzdXJyb3VuZGluZyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX0FUVFIuKmVuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zaG93YCBhbmQgYGVuYWJsZWRfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSAmIzM0O2VuYWJsZWQmIzM0OyBmbGFncyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBlbmFibGVkX3Nob3dgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFjdHVhbGx5IHV0aWxpemVkLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBjb250cm9sIHBvaW50cyBmb3IgZmVhdHVyZSB0b2dnbGVzIG9yIHBlcm1pc3Npb25pbmcsIGJ1dCBJIG5lZWQgY29uY3JldGUgZXZpZGVuY2UgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciByZWZhY3RvcmluZy4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgcmV2ZWFsIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBkZWZpbmVkLCBtb2RpZmllZCwgYW5kIGNvbnN1bWVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSAmIzM0O2VuYWJsZWQmIzM0OyBmbGFncyBhZmZlY3QgZGF0YSB2aXNpYmlsaXR5IG9yIGF2YWlsYWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG1vZHVsZXMsIGZ1bmN0aW9ucywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZGF0YSBzdHJ1Y3R1cmVzIGludGVyYWN0IHdpdGggdGhvc2UgdmFyaWFibGVzLCBzbyBJJiMzOTtsbCBuZWVkIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01NDQ4PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG5tbS92bXNjYW4uYzo1NDY1OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL3Ztc2Nhbi5jLTU0NjYtXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0NjUgaW4gYG1tL3Ztc2Nhbi5jYC4gSSYjMzk7bSBnb2luZyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaG90IHNwb3RzIG9mIHRoZSBzY2FubmluZyBsb2dpYyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcmVjbGFpbS4gTXkgaHVuY2ggaXMgdGhhdCBJJiMzOTttIGdvaW5nIHRvIGZpbmQgc29tZSBvZiB0aGUgY29yZSByZWNsYWltIGRlY2lzaW9ucyBiZWluZyBtYWRlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIG1haW4gc2NhbiBsb29wIG9yIGEgZGVjaXNpb24gcG9pbnQgb24gd2hhdCB0byByZWNsYWltIGZyb20gdmFyaW91cyB6b25lcy4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHRoZSBzeXN0ZW0gaXMgbWFraW5nIHRyYWRlLW9mZnMgYmV0d2VlbiBkaWZmZXJlbnQgcGFnZSB0eXBlcyBhbmQgZGV0ZXJtaW5pbmcgdGhlIGVmZmljYWN5IG9mIGFnZ3Jlc3NpdmUgcmVjbGFpbSB2cyBrZWVwaW5nIHBhZ2VzIGluIGEgY2FjaGUuIEdpdmVuIHRoZSBsaW5lIG51bWJlciwgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGFjdHVhbCBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzIG9yIGEgY3JpdGljYWwgem9uZS1zcGVjaWZpYyByZWNsYWltIGFsZ29yaXRobS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyB0aGUgYHNocmlua19zbGFiYCBvciBgc2hyaW5rX3BhZ2VfbGlzdGAgZnVuY3Rpb25zLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgc2VlIHNvbWV0aGluZyBhcm91bmQgdGhlIGBscnVfbG9ja2AgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHRocmVhZHMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFZNIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ2NTpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjU0NjY6XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjU0Njc6XHR7XG41NDY4Olx0XHRpbnQgaTtcbjU0Njk6XHRcdHVuc2lnbmVkIGludCBjYXBzO1xuNTQ3MDpcdFxuNTQ3MTpcdFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTtuJiMzOTspXG41NDcyOlx0XHRcdGNhcHMgPSAwO1xuNTQ3MzpcdFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O3kmIzM5OylcbjU0NzQ6XHRcdFx0Y2FwcyA9IC0xO1xuNTQ3NTpcdFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFx1MDAyNmNhcHMpKVxuNTQ3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU0Nzc6XHRcbjU0Nzg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbjU0Nzk6XHRcdFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcdTAwMjYgQklUKGkpO1xuNTQ4MDpcdFxuNTQ4MTpcdFx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG41NDgyOlx0XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG41NDgzOlx0XHRcdGVsc2UgaWYgKGVuYWJsZWQpXG41NDg0Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU0ODU6XHRcdFx0ZWxzZVxuNTQ4NjpcdFx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTQ4NzpcdFx0fVxuNTQ4ODpcdFxuNTQ4OTpcdFx0cmV0dXJuIGxlbjtcbjU0OTA6XHR9XG41NDkxOlx0XG41NDkyOlx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbjU0OTM6XHRcbjU0OTQ6XHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xuNTQ5NTpcdFx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbjU0OTY6XHRcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG41NDk3Olx0XHROVUxMXG41NDk4Olx0fTtcbjU0OTk6XHRcbjU1MDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG41NTAxOlx0XHQubmFtZSA9IFwmIzM0O2xydV9nZW5cJiMzNDssXG41NTAyOlx0XHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxuNTUwMzpcdH07XG41NTA0Olx0XG41NTA1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNTUwNjpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxuNTUwNzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG41NTA4Olx0XG41NTA5Olx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXG41NTEwOlx0e1xuNTUxMTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTUxMjpcdFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xuNTUxMzpcdFxuNTUxNDpcdFx0bS1cdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgRmVhdHVyZSYjMzk7cyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgYXR0cmlidXRlLCBgbHJ1X2dlbl9lbmFibGVkX2F0dHJgLiBSaWdodCwgaXQgY3JlYXRlcyB0aGF0IGBlbmFibGVkYCBzeXNmcyBmaWxlIHdpdGhpbiB0aGUgYGxydV9nZW5gIGRpcmVjdG9yeS4gU3RhbmRhcmQgc3R1ZmYgZm9yIHRoZSBNR0xSVSBmZWF0dXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGFuZCBtdXN0IGJlIGNyaXRpY2FsIHRvIHRoZSBlbmFibGluZyBvciBkaXNhYmxpbmcgcHJvY2VzcyB0aHJvdWdoIHN5c2ZzLiBBaCwgYnV0IHdhaXQgYSBtaW51dGXigKZJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpc24mIzM5O3QgY2FsbGVkIGRpcmVjdGx5IGZyb20gc3lzZnMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhlIHN0YXRlIGNoYW5nZSBsb2dpYy4gSSYjMzk7bGwgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNjc6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG41MzY4Olx0e1xuNTM2OTpcdFx0c3RhdGljIERFRklORV9NVVRFWChzdGF0ZV9tdXRleCk7XG41MzcwOlx0XG41MzcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41MzcyOlx0XG41MzczOlx0XHRjZ3JvdXBfbG9jaygpO1xuNTM3NDpcdFx0Y3B1c19yZWFkX2xvY2soKTtcbjUzNzU6XHRcdGdldF9vbmxpbmVfbWVtcygpO1xuNTM3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzdGF0ZV9tdXRleCk7XG41Mzc3Olx0XG41Mzc4Olx0XHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcbjUzNzk6XHRcdFx0Z290byB1bmxvY2s7XG41MzgwOlx0XG41MzgxOlx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9zd2l0Y2gpO1xuNTM4MjpcdFxuNTM4MzpcdFx0aWYgKGVuYWJsZWQpXG41Mzg0Olx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xuNTM4NTpcdFx0ZWxzZVxuNTM4NjpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG41Mzg3Olx0XG41Mzg4Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjUzODk6XHRcdGRvIHtcbjUzOTA6XHRcdFx0aW50IG5pZDtcbjUzOTE6XHRcbjUzOTI6XHRcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbjUzOTM6XHRcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTM5NDpcdFxuNTM5NTpcdFx0XHRcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuNTM5NjpcdFxuNTM5NzpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xuNTM5ODpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XG41Mzk5Olx0XG41NDAwOlx0XHRcdFx0bHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkID0gZW5hYmxlZDtcbjU0MDE6XHRcbjU0MDI6XHRcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xuNTQwMzpcdFx0XHRcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjU0MDQ6XHRcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTQwNTpcdFx0XHRcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG41NDA2Olx0XHRcdFx0fVxuNTQwNzpcdFxuNTQwODpcdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG41NDA5Olx0XHRcdH1cbjU0MTA6XHRcbjU0MTE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG41NDEyOlx0XHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XG41NDEzOlx0XG41NDE0Olx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfc3dpdGNoKTtcbjU0MTU6XHRcbjU0MTY6XHR1bmxvY2s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNR0xSVSBBY3RpdmF0aW9uIFBhdGgqKgoKQWxyaWdodCwgc28gYGZpbGxfZXZpY3RhYmxlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIE1HTFJVIGlzIGFjdGl2YXRlZCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc2lnbmFsIHRvIHN0YXJ0IHBvcHVsYXRpbmcgZGF0YS4gV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBxdWlja2x5OiBpcyBNR0xSVSBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZXM7IHRoYXQmIzM5O3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgY2hlY2tpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gY29uZmlybSB0aGUgZGVmYXVsdCBNR0xSVSBiZWhhdmlvciBhbmQgaXRzIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlICYjMzQ7bW0vJiMzNDsgcHJlZml4LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNDA0IGlzIGEga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHRoZSBzdGFydCBvZiBhIGxvZ2ljYWwgYmxvY2sgZGVmaW5pbmcgb3B0aW9ucy4KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFudGljaXBhdGUgd2hhdCBJIG1pZ2h0IGZpbmQuIElzIGl0IHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9ucz8gUGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXM/IE1heWJlIHNvbWUgbmV3IG1lbW9yeSBwcm90ZWN0aW9uIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiBpbnRyb2R1Y2VkPyBDb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byBaT05FX0RNQSBvciBoaWdoIG1lbW9yeSBzdXBwb3J0LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgaW5jbHVkZSBzdGF0ZW1lbnRzIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHdpdGhpbiBgS2NvbmZpZ2AuIEkmIzM5O20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgcGFydCBvZiB0aGUgS2NvbmZpZyBmaWxlIHRpZXMgaW50byBvdGhlciBzdWJzeXN0ZW1zLCBzbyB0aGlzIHdvbiYjMzk7dCBiZSBhbiBpc29sYXRlZCBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGNvbXBsZXgsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBvcHRpb24gYXQgaGFuZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHZhbHVlcy4gTGV0JiMzOTtzIGhvcGUgdGhhdCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLgoKKipMUlUgR2VuZXJhdGlvbiBhbmQgRXZpY3Rpb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBgTFJVX0dFTmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3Mga2V5IGhlcmUuIElmIHRoYXQmIzM5O3MgZW5hYmxlZCwgdGhlbiB3ZSYjMzk7cmUgY29tcGlsaW5nIGluIGBmaWxsX2V2aWN0YWJsZWAuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgYGZpbGxfZXZpY3RhYmxlYCBhY3R1YWxseSAqaW5zaWRlKiBhIHByZXByb2Nlc3NvciBjb25kaXRpb25hbCBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUmIzM5O3MgdGhlIHNvdXJjZT8gUmlnaHQsIGBtbS92bXNjYW4uY2AgaXMgdGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgZGV0YWlscyBvZiB0aGUgc2Nhbi4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGxvZ2ljIGhvbGRzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz01OTU3PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTU5NTgtXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk2MC1cbi0tXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk3NS1cbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaWxsX2V2aWN0YWJsZWAgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpcyBpbmRlZWQgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgZnVuY3Rpb24gaXMsIHNwZWNpZmljYWxseSBmcm9tIHVzZXJzcGFjZS4gSXQgbG9va3MgbGlrZSB3cml0aW5nIHRvIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIGlzIHRoZSBwYXRoLiBJIG5lZWQgdG8gYmUgc3VyZTsgZG9lcyBzeXprYWxsZXIgdGVzdCBzeXNmcyB3cml0ZXM/IFllcywgaXQgZG9lcywgc28gdGhhdCYjMzk7cyBhIHZpYWJsZSBhdmVudWUgZm9yIHRlc3RpbmcuCgpIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIHN0cmF0ZWdpY2FsbHkuIEZvY3VzaW5nIGRpcmVjdGx5IG9uIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgb3IgYGZpbGxfZXZpY3RhYmxlYCBjb3VsZCBhbHNvIGJlIGEgZ29vZCBhcHByb2FjaC4gSG9sZCBvbiwgYGZpbGxfZXZpY3RhYmxlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCYjMzk7cyBmaW5kICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBnaXZpbmcgbWUgbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgY29uZGl0aW9uYWwgcGF0aC4gT2theSwgYm90aCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFsc28gc3RhdGljLiBCdXQsIHdhaXQuLi4gYGVuYWJsZWRfc3RvcmVgIGlzIHJlZ2lzdGVyZWQgYXMgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQmIzM5O3MgcHJvbWlzaW5nLiBJIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBmaWxsX2V2aWN0YWJsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfZXZpY3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTI5Mi1cbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTI5NC17XG4tLVxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTQwMS1cbm1tL3Ztc2Nhbi5jOjU0MDI6XHRcdFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcbm1tL3Ztc2Nhbi5jLTU0MDMtXHRcdFx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZmlsbF9ldmljdGFibGVgJiMzOTtzIENhbGxlcnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBpcyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB1cCB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hhdCB0cmlnZ2VycyAqdGhhdCogZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhvc2UgaGlnaGVyLWxldmVsIGNhbGxzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IGBmaWxsX2V2aWN0YWJsZWAgaXMgaW52b2tlZC4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaG93IGV2aWN0aW9uIGRlY2lzaW9ucyBhcmUgdWx0aW1hdGVseSBkcml2ZW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIGZhY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjYtXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0ODI6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDgzLVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBmb3IgYGZpbGxfZXZpY3RhYmxlYC4gRnJvbSBteSBjb2RlIHJldmlldywgaXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG9ubHkgcGF0aC4gQnV0IGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgY29uZmlybSDigJMgeWVwLCBzZWVtcyBsaWtlIGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIHNvbGUgdHJpZ2dlci4gR29vZC4gQW5kLCBzaW5jZSBpdCYjMzk7cyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBJIGtub3cgaXQmIzM5O3MgcmVhY2hhYmxlLgoKQnV0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGlmIE1HTFJVIGlzIGVuYWJsZWQgYnkgZGVmYXVsdD8gSWYgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGlzIHNldCwgdGhlIHN5c3RlbSBib290cyB3aXRoIE1HTFJVIGFjdGl2ZSwgcmlnaHQ/IFNvLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgaW5pdF9scnVfZ2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvY2VzcyBkb2VzbiYjMzk7dCBnZXQgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfbHJ1X2dlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU5MTM9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDEtXG5tbS92bXNjYW4uYzo1OTQyOnN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxubW0vdm1zY2FuLmMtNTk0My17XG4tLVxubW0vdm1zY2FuLmMtNTk1Ni19O1xubW0vdm1zY2FuLmM6NTk1NzpsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIHRoaXMgZmllbGQ6CgoqKkxldCYjMzk7cyBEaXZlIGludG8gYGluaXRfbHJ1X2dlbmAqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbml0X2xydV9nZW5gLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBzcGVjaWZpYyBmdW5jdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW4gTFJVIGNhY2hlLCBnaXZlbiB0aGUgbmFtZS4gVGhlICYjMzQ7Z2VuJiMzNDsgc3VmZml4IGxpa2VseSBoaW50cyBhdCBzb21lIHNvcnQgb2YgZ2VuZXJhdG9yIGNvbXBvbmVudCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zOgoKKiAgIElzIGl0IGEgZ2VuZXJhdG9yLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMUlUgaXRzZWxmPwoqICAgSXMgaXQgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGEgbGF0ZXIgZ2VuZXJhdG9yPwoqICAgV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlc2lnbiBwaGlsb3NvcGh5IGhlcmU/IElzIHRoaXMgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGUgTFJVPwoKSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgRGF0YSBzdHJ1Y3R1cmUgY2hvaWNlczogSGFzaCBtYXBzPyBMaW5rZWQgbGlzdHM/IE90aGVyIHN0cnVjdHVyZXMgb3B0aW1pemVkIGZvciBMUlUgYmVoYXZpb3I/CiogICBIb3cgdGhlIGNhY2hlIGlzIHBvcHVsYXRlZCBpbml0aWFsbHkuIEFyZSB0aGVyZSBkZWZhdWx0IHZhbHVlcywgb3IgaW5pdGlhbCBlbnRyaWVzPwoqICAgSG93IHRoZSAmIzM0O2dlbmVyYXRvciYjMzQ7IGFzcGVjdCBpcyBpbnRlZ3JhdGVkLiBIb3cgaXMgaXQgZ2VuZXJhdGluZyBjYWNoZWQgdmFsdWVzPwoqICAgV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBhYm91dCB0aGUgY2FjaGUmIzM5O3Mga2V5L3ZhbHVlIHR5cGVzPyBBcmUgdGhlcmUgYW55IHR5cGUtcmVsYXRlZCBjb25zdHJhaW50cz8KKiAgIEVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBvdmVyZmxvdy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBvdmVydmlldyBhbmQgdGhlbiBpbW1lZGlhdGVseSBob25lIGluIG9uIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZ2VuZXJhdG9yIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIExSVSBjYWNoZSBkZXNpZ24uIEkmIzM5O20gZXhjaXRlZCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgd2VsbCBpdCBtYXRjaGVzIG15IGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk0MjpcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuNTk0MzpcdHtcbjU5NDQ6XHRcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyAmIzQzOyAxIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuNTk0NTpcdFx0QlVJTERfQlVHX09OKEJJVChMUlVfR0VOX1dJRFRIKSBcdTAwM2M9IE1BWF9OUl9HRU5TKTtcbjU5NDY6XHRcbjU5NDc6XHRcdGlmIChzeXNmc19jcmVhdGVfZ3JvdXAobW1fa29iaiwgXHUwMDI2bHJ1X2dlbl9hdHRyX2dyb3VwKSlcbjU5NDg6XHRcdFx0cHJfZXJyKFwmIzM0O2xydV9nZW46IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZ3JvdXBcXG5cJiMzNDspO1xuNTk0OTpcdFxuNTk1MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5cJiMzNDssIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxuNTk1MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XG41OTUyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlbl9mdWxsXCYjMzQ7LCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxuNTk1MzpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG41OTU0Olx0XG41OTU1Olx0XHRyZXR1cm4gMDtcbjU5NTY6XHR9O1xuNTk1NzpcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbjU5NTg6XHRcbjU5NTk6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbjU5NjA6XHRcbjU5NjE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTUdMUlUgQm9vdC1VcCoqCgpPa2F5LCBzbyBgaW5pdF9scnVfZ2VuYCBpcyBhcHBhcmVudGx5IGp1c3QgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIHN5c2ZzIGFuZCBkZWJ1Z2ZzIGludGVyZmFjZXMuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGEgcXVlc3Rpb24gaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQ6IGhvdyBleGFjdGx5ICppcyogTUdMUlUgZW5hYmxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyBpZiB0aGUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldD8gSXQgaGFzIHRvIGJlIGNvbWluZyBmcm9tIHNvbWV3aGVyZS4gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGxydV9nZW5fZW5hYmxlZCgpYCDigJMgdGhhdCBmdW5jdGlvbiBzaG91bGQgaG9sZCB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNoZWNrIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTg2OD1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTQtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODA9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4Ni1cbm1tL3Ztc2Nhbi5jOjIyODc6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI4OC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzNjc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNzctXG5tbS92bXNjYW4uYzo1Mzc4Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01Mzc5LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NDY1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDkxLVxubW0vdm1zY2FuLmM6NTQ5MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ5My1cbm1tL3Ztc2Nhbi5jPTU0OTQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU0OTUtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTQ5NjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NDk3LVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTU4ODA9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODg3LVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NTg4ODpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy01ODg5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Nzg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODgtXG5tbS92bXNjYW4uYzo1OTg5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTU5OTAtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02MjQ4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNTMtXG5tbS92bXNjYW4uYzo2MjU0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjI1NS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02NTI1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUyOS1cbm1tL3Ztc2Nhbi5jOjY1MzA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjUzMS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY5MTU9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5MTktXG5tbS92bXNjYW4uYzo2OTIwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTY5MjEtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqVHJhY2luZyBgbHJ1X2dlbl9lbmFibGVkYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxydV9nZW5fZW5hYmxlZGAgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBpdHMgc2NvcGUgaXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoaXMgZmxhZywgc28gSSBjYW4gdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHRyYWNlIHRoYXQgdmFyaWFibGUgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIGBscnVfZ2VuX2VuYWJsZWRgIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaGUgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSBgbHJ1X2dlbl9lbmFibGVkYCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIEkgbmVlZCB0byBrbm93IGl0cyBzY29wZSwgaXRzIHR5cGUgKGlmIGFueSksIGFuZCBhbnkgZGVmYXVsdCB2YWx1ZXMuIFRoYXQgbWVhbnMgZGl2aW5nIGludG8gdGhlIGBpbmNsdWRlL2AgZGlyZWN0b3J5IOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBhbmQgaGVhZGVycyB0eXBpY2FsbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2YXJpYWJsZSB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIG9mZiB0byBgaW5jbHVkZS9gIEkgZ28uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTEwMD1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9zd2l0Y2hpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNi0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDc6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDgte1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTEzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjExNDpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExNS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDc9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxNTpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTFJVIEdlbmVyYXRpb24gQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNldHRpbmcuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhhdCYjMzk7cyBkZWZpbmVkLCBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGdvaW5nIHRvIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSWYgaXQmIzM5O3MgKmVuYWJsZWQqIGJ5IGRlZmF1bHQsIHRoZW4gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB3aWxsIGxpa2VseSAqb25seSogYmUgaW52b2tlZCB3aGVuIGEgdXNlcnNwYWNlIHByb2Nlc3MgZXhwbGljaXRseSBpbnRlcmFjdHMgd2l0aCBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgZGlzYWJsZS9yZS1lbmFibGUgc3dpdGNoLCB5ZWFoPwoKTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgZnVuY3Rpb24gaXMgdGllZCB0byB0aGUgYGVuYWJsZWRgIHN0YXRlLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyAqd2hlbiogYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3R1YWxseSBjYWxsZWQuIElmIHRoZSBrZXJuZWwgYm9vdHMgd2l0aCBNR0xSVSBlbmFibGVkIC0gYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBpcyB0cnVlIGJ5IGRlZmF1bHQgLSBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgZG9lcyAqTk9UKiBnZXQgY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuIEludGVyZXN0aW5nLi4uCgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGNhbiBzZWUgaG93IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgZW50cnkgd291bGQgaW5mbHVlbmNlIHRoaXMgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTM2NzpcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbjUzNjg6XHR7XG41MzY5Olx0XHRzdGF0aWMgREVGSU5FX01VVEVYKHN0YXRlX211dGV4KTtcbjUzNzA6XHRcbjUzNzE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjUzNzI6XHRcbjUzNzM6XHRcdGNncm91cF9sb2NrKCk7XG41Mzc0Olx0XHRjcHVzX3JlYWRfbG9jaygpO1xuNTM3NTpcdFx0Z2V0X29ubGluZV9tZW1zKCk7XG41Mzc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnN0YXRlX211dGV4KTtcbjUzNzc6XHRcbjUzNzg6XHRcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxuNTM3OTpcdFx0XHRnb3RvIHVubG9jaztcbjUzODA6XHRcbjUzODE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X3N3aXRjaCk7XG41MzgyOlx0XG41MzgzOlx0XHRpZiAoZW5hYmxlZClcbjUzODQ6XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG41Mzg1Olx0XHRlbHNlXG41Mzg2Olx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbjUzODc6XHRcbjUzODg6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNTM4OTpcdFx0ZG8ge1xuNTM5MDpcdFx0XHRpbnQgbmlkO1xuNTM5MTpcdFxuNTM5MjpcdFx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuNTM5MzpcdFx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG41Mzk0Olx0XG41Mzk1Olx0XHRcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG41Mzk2Olx0XG41Mzk3Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzZXFfaXNfdmFsaWQobHJ1dmVjKSk7XG41Mzk4Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdGF0ZV9pc192YWxpZChscnV2ZWMpKTtcbjUzOTk6XHRcbjU0MDA6XHRcdFx0XHRscnV2ZWMtXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xuNTQwMTpcdFxuNTQwMjpcdFx0XHRcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XG41NDAzOlx0XHRcdFx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuNTQwNDpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG41NDA1Olx0XHRcdFx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjU0MDY6XHRcdFx0XHR9XG41NDA3Olx0XG41NDA4Olx0XHRcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjU0MDk6XHRcdFx0fVxuNTQxMDpcdFxuNTQxMTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjU0MTI6XHRcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBtZW1jZywgTlVMTCkpKTtcbjU0MTM6XHRcbjU0MTQ6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9zd2l0Y2gpO1xuNTQxNTpcdFxuNTQxNjpcdHVubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTUdMUlUgVG9nZ2xlKioKCk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgb25lIHRoYXQgbW92ZXMgcGFnZXMgYmV0d2VlbiBMUlUgbGlzdHMgd2hlbiBNR0xSVSBnZXRzIGVuYWJsZWQgYXQgcnVudGltZS4gSWYgTUdMUlUgaXMgb24gZnJvbSB0aGUgc3RhcnQsIHRob3NlIHBhZ2VzIGFyZSBhbHJlYWR5IGluIHRoZSBtdWx0aS1nZW4gTFJVIGxpc3RzLiBBbmQsIGlmIE1HTFJVIGlzIGRpc2FibGVkIGF0IHJ1bnRpbWUsIGBkcmFpbl9ldmljdGFibGVgIGlzIGNhbGxlZCB0byBtb3ZlIHBhZ2VzIGJhY2suIFNvLCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIG9uLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGNvdWxkIGJlIGEgZ29vZCBhcmVhIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1NKSBzdWJzeXN0ZW0gYW5kIHRoZSBMUlUgbGlzdHMgc3BlY2lmaWNhbGx5LgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIHdoZXJlIGZvbGlvcyBhcmUgZ2V0dGluZyBhZGRlZCB0byB0aGUgTFJVIGxpc3RzIGluIHRoZSB3cm9uZyBvcmRlciwgY2F1c2luZyBhIGNvbGQvaG90IGludmVyc2lvbiBwcm9ibGVtLiBUbyB0ZXN0IHRoaXMgd2l0aCBzeXprYWxsZXIsIEkmIzM5O2xsIG5lZWQgdG8gdG9nZ2xlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBBaCwgc3l6a2FsbGVyIGNhbiB3cml0ZSB0byBzeXNmcyBmaWxlcyEgVGhhdCYjMzk7cyBnb29kLgoKVGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdG9nZ2xlIGlzIHRoZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGZ1bmN0aW9uLiBUaGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24gaXMgYGVuYWJsZWRfc3RvcmVgLiBTaG91bGQgSSBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnQgb3IgdGhlIHN5c2ZzIGVudHJ5PyBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG1vcmUgZGlyZWN0IGVudHJ5IHBvaW50LiBIb3dldmVyLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSG0sIGxldCBtZSBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLi4uIHByb2JhYmx5IG5vdCwgZ2l2ZW4gdGhhdCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3MgY2hlY2sgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBhcyB3ZWxsLCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gYGZpbGxfZXZpY3RhYmxlYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gZm9jdXMgb24gdGhvc2UgdHdvLiBXYWl0LCBgZW5hYmxlZF9zdG9yZWAgaXMgcGFzc2VkIHRvIGBfX0FUVFJfUlcoZW5hYmxlZClgLgoKSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBmaWxsX2V2aWN0YWJsZWAsIG5vLgoKSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzbiYjMzk7dCBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBkaWZmZXJlbnRseS4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWRkZWQgdG8gTFJVIGxpc3RzIHVzaW5nIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbS4KCkkmIzM5O2xsIG5lZWQgYExSVV9HRU5gICh3aGljaCBpcyBgQ09ORklHX0xSVV9HRU5gKSBlbmFibGVkLCB3aGljaCBkZXBlbmRzIG9uIGBNTVVgLiBJcyB0aGF0IGFsbCBJIG5lZWQ/IFllcywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGRpcmVjdGx5IGVuYWJsZXMgTUdMUlUuIEFuZCBgZW5hYmxlZF9zdG9yZWAgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTEtXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjY5My1cbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkwMS1cbi0tXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzctXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwMzktXG4tLVxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTU4LVxubW0vdm1zY2FuLmM6NTk1OTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NjAtXG4tLVxubW0vdm1zY2FuLmM9NTk3MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NzUtXG5tbS92bXNjYW4uYzo1OTc2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTgKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNdWx0aS1HZW4gTFJVIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgbG9naWMgYW5kIGhlcmUmIzM5O3MgbXkgdGhpbmtpbmcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgKExSVV9HRU4pIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGVudHJ5IHBvaW50LCB3cmFwcGVkIHdpdGhpbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBhbmQgYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgRm9jdXNTeW1ib2xzYC4gU2luY2UgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIGluaXRpYWxseSBhc3N1bWVkIGl0JiMzOTtzIGlubGluZWQgYW5kIFN5emthbGxlciBjb3VsZG4mIzM5O3QgdGFyZ2V0IGl0IGRpcmVjdGx5LiBCdXQgd2FpdCwgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgX19BVFRSX1JXYCwgc28gaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIFNvIHRoYXQgbWFrZXMgYGVuYWJsZWRfc3RvcmVgIGEgdmlhYmxlIGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSBzaW5jZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzbiYjMzk7dCBpbmxpbmVkIGVpdGhlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGJvdGggaW4gbXkgZm9jdXMgc3ltYm9scy4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGJ1dCBJIGNvdWxkbiYjMzk7dCBmaW5kIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB0byB0cmlnZ2VyIHRoaXMgY2hhbmdlLiBUaGUgb25seSBwYXRoIHNlZW1zIHRvIGJlIHRocm91Z2ggdGhlIHN5c2ZzIGNhbGxiYWNrLCBgZW5hYmxlZF9zdG9yZWAuIEV2ZW4gdGhvdWdoIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBhcmUgYm90aCBzdGF0aWMsIHRoZXkmIzM5O3JlIHZhbGlkIHRhcmdldHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW5saW5lZC4KCkkgZG91YmxlLWNoZWNrZWQgdG8gc2VlIGlmIGBmaWxsX2V2aWN0YWJsZWAgaXMgY2FsbGVkIGZyb20gZWxzZXdoZXJlLCBidXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGFsc28gcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLgoKVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGZpbGxfZXZpY3RhYmxlYC4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG9mIHBvcHVsYXRpbmcgdGhlIG11bHRpLWdlbiBMUlUgbGlzdHMsIHdoaWNoIGhhcHBlbnMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBUaHVzLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byBgTFJVX0dFTmAsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4KCkFuZCBhcyBhIGZpbmFsIGRvdWJsZSBjaGVjaywgSSBhbSBjb25maXJtaW5nIHRoYXQgdGhlIGVudHJ5IHBvaW50IGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIG9ubHkgd2F5IHRvIGdldCB0byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBUaGlzIGlzIGNvbmZpcm1lZCB2aWEgY29kZSBhbmFseXNpcyB3aGVyZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBlbmFibGVkX3N0b3JlYC4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmAg4oCTIGl0IGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVGAsIGFuZCBgU1BBUlNFTUVNYC4gVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBtb3N0bHkgbGlrZWx5IHNhdGlzZmllZCBieSBkZWZhdWx0LiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBjb25maWRlbnRseSBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsbF9ldmljdGFibGVgIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIHRvIGZpeCBhbiBpc3N1ZSB3aXRoIGNvbGQvaG90IGludmVyc2lvbiB3aGVuIG1vdmluZyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlL2luYWN0aXZlIGxpc3RzIHRvIHRoZSBNR0xSVSBsaXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgYXQgcnVudGltZSB2aWEgdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIHN5c2ZzIGZpbGUsIHdoaWNoIHRyaWdnZXJzIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODI1ZTA5M2ZmNDRiNDA4YTg5ZDgxODEwNTQ1NGI5YjVlZjU0MTZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDAyOjU3OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5lNmJiMmFjN2E1N2FhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTMwMiw3ICYjNDM7NTMwMiwxNyBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCQlib29sIHN1Y2Nlc3M7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIHVzZXMgbGlzdF9hZGRfdGFpbCgpIHJhdGhlcgomIzQzOwkJCSAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoCiYjNDM7CQkJICogaXRzIG9yZGVyaW5nIHRvIGF2b2lkIGNvbGQvaG90IGludmVyc2lvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTsKQEAgLTUzMTAsNyAmIzQzOzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7CiAKIAkJCWxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW4KJiM0MzsJCQkgKiB0aGUgb2xkZXIgZ2Vucy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CiAJCQlWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpOwogCiAJCQlpZiAoIS0tcmVtYWluaW5nKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBRdWljayBMb29rIGF0IExSVSBGb2xpbyBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHR3ZWFraW5nIGBmaWxsX2V2aWN0YWJsZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBob3cgd2UgZ3JhYiBhIGBmb2xpb2AgZnJvbSB0aGUgYGhlYWRgIG9mIGFuIExSVSBsaXN0LCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCYjMzk7cyBjdXJyZW50bHkgY29uc2lkZXJlZCAmIzM0O2FjdGl2ZSYjMzQ7IG9yIG5vdC4gSWYgaXQgKmlzKiBhY3RpdmUsIGl0IHVzZXMgYGxydV90b19mb2xpbyhoZWFkKWAg4oCTIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIHNhbWUgYXMgYGxpc3RfbGFzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgLiBPdGhlcndpc2UgKGlmIGl0JiMzOTtzIG5vdCBhY3RpdmUpLCBpdCBncmFicyB0aGUgZmlyc3QgZW50cnkgKGBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KWApLiBJdCYjMzk7cyBhbHNvIGNoYW5naW5nIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgbHJ1X2dlbl9hZGRfZm9saW9gIGZyb20gYGZhbHNlYCB0byBgIWFjdGl2ZWAuCgpUaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXJseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgZGVhbGluZyB3aXRoIExSVSBsaXN0cywgcGFnZSBldmljdGlvbiwgYW5kIHRoZSBmb2xpb3MgdGhlbXNlbHZlcy4gTm90aGluZyB1c2VyLWZhY2luZyBoZXJlLCBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgY2hhbmdpbmcgdGhlIG9yZGVyIGFuZCBwYXNzaW5nIGEgYm9vbGVhbiB0byBhIGZ1bmN0aW9uLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpa2VseSBnb2luZyB0byBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3Igc29tZSBraW5kIG9mIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMsIHBhZ2Ugc3RhdGUgY2hlY2tzLCBldGMuKSBhcmUgYnVpbHQgdG8gY2F0Y2guIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGxlYWsgaW5mbyB0byB0aGUgdXNlci4KClNvLCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGxydV9nZW5fYWRkX2ZvbGlvYCBhbmQgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbnMsIGJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBub3QgYSBLTVNBTiB0YXJnZXQuIEkmIzM5O2xsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2VsZWN0aW5nIGZvbGlvcyBmcm9tIGFuIExSVSBsaXN0IGluIGBmaWxsX2V2aWN0YWJsZWAgYW5kIGFkanVzdHMgdGhlIGByZWNsYWltaW5nYCBmbGFnIHBhc3NlZCB0byBgbHJ1X2dlbl9hZGRfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgb3JkZXJpbmcgb2YgZm9saW9zIGluIHRoZSBMUlUgZ2VuZXJhdGlvbnMgKGF2b2lkaW5nIGNvbGQvaG90IGludmVyc2lvbikgYW5kIGRvIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBtZW1vcnksIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMsIG9yIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIG1hbmlmZXN0IGFzIGxpc3QgY29ycnVwdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi4yMzY5NDQyMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyODQ2MzIwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi4yMzY5NTAyNzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg4NDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmU2YmIyYWM3YTU3YWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MzAyLDcgKzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XFxuIFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXFxuK1xcdFxcdFxcdCAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoXFxuK1xcdFxcdFxcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYWN0aXZlKVxcbitcXHRcXHRcXHRcXHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xcbiBcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XFxuQEAgLTUzMTAsNyArNTMyMCwxMSBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0bHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG4tXFx0XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW5cXG4rXFx0XFx0XFx0ICogdGhlIG9sZGVyIGdlbnMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi42ODA1NzA5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1OTg1ODExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwMjo1NzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmU2YmIyYWM3YTU3YWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgKzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXJcbitcdFx0XHQgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaFxuK1x0XHRcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbkBAIC01MzEwLDcgKzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvcnJvdyByZWNsYWltaW5nPXRydWUgdG8gcGxhY2UgaW5hY3RpdmUgZm9saW9zIGluXG4rXHRcdFx0ICogdGhlIG9sZGVyIGdlbnMuXG4rXHRcdFx0ICovXG4rXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG4gXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjI2LjY4MDU3MjM0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjgxMjMwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IGZvbGlvcyB0byBldmljdCwgaG93IGl0IHNlbGVjdHMgd2hpY2ggcGFnZXMgdG8ga2ljayBvdXQgb2YgbWVtb3J5LiBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQncyBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCByZXRyaWV2aW5nIGZvbGlvcyBmcm9tIHRoZSBgaGVhZGAgbGlzdCB3aXRoaW4gYGZpbGxfZXZpY3RhYmxlYCwgY29uZGl0aW9uYWwgb24gdGhlIGBhY3RpdmVgIGZsYWcuIElmIGEgZm9saW8gaXMgYGFjdGl2ZWAsIGl0J3MgdGFraW5nIHRoZSB0YWlsIG9mIHRoZSBsaXN0IHZpYSBgbHJ1X3RvX2ZvbGlvKGhlYWQpYC4gIE1ha2VzIHNlbnNlLCB0aGF0J3MgbGlrZWx5IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIHBhZ2UsIHdoaWNoIHdlJ2QgZXhwZWN0IHdoZW4gYWN0aXZlLiBJZiBpdCdzICpub3QqIGFjdGl2ZSAoYCFhY3RpdmVgKSwgaXQncyBncmFiYmluZyB0aGUgaGVhZCBvZiB0aGUgbGlzdCB3aXRoIGBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KWAuIE9rYXksIHNvIGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIExSVSwgZGVwZW5kaW5nIG9uIGFjdGl2aXR5LlxuXG5UaGF0IGByZWNsYWltaW5nYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBjaGFuZ2luZyBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb2xpbyBpcyBiZWluZyBhZGRlZCBiYWNrIGludG8gdGhlIExSVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgcmVjbGFpbWluZ2AgZmxhZyBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgYGxydV9nZW5fYWRkX2ZvbGlvYC4gSSdsbCBoYXZlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgZnVuY3Rpb24uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgZmlsbF9ldmljdGFibGVgIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBldmljdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozMi4wNDg3MDAyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA1MjcxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9ldmljdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01MjkyLVxcbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTUyOTQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDAxLVxcbm1tL3Ztc2Nhbi5jOjU0MDI6XFx0XFx0XFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcXG5tbS92bXNjYW4uYy01NDAzLVxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjMyLjM2OTIzMzI3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTgyODI0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGZpbGxfZXZpY3RhYmxlYCoqXG5cbk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdobydzIGNhbGxpbmcgaXQ/IFRoZSB0ZXh0IHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gUmlnaHQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgPyBXaGVyZSBkb2VzICppdCogZml0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgdG8gc2VlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgY2FsbCB0byBgZmlsbF9ldmljdGFibGVgLiBUaGlzIGlzIHN0YW5kYXJkIGRlYnVnZ2luZywgZXNzZW50aWFsbHkgdHJhY2tpbmcgdGhlIGNvbnRyb2wgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGZpbGxfZXZpY3RhYmxlYC4gSSdsbCBzdGFydCBieSBsb29raW5nIGZvciBhbGwgY2FsbCBzaXRlcyBvZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozNS4zMjc1MTgyODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNjU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9jaGFuZ2Vfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjM1LjM3NjU5MDE1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc2OTc4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBDYWxsZXJzKipcblxuT2theSwgc28gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZW5hYmxlZF9zdG9yZWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBgZW5hYmxlZF9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gYSB1c2VyIHdyaXRpbmcgYSB2YWx1ZSB0byBhIHN5c2ZzIGZpbGUuIEdpdmVuIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgdGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzb21lIHNvcnQgb2YgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBiZWhhdmlvciwgb3IgbWF5YmUgYSBmZWF0dXJlIHRoYXQncyBMUlUtcmVsYXRlZC4gQnV0LCBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldobyAqZWxzZSogbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uP1wiLiBgZW5hYmxlZF9zdG9yZWAgaXMganVzdCBvbmUgcG9pbnQgb2YgZW50cnksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRyaWdnZXJpbmcgYSBzdGF0ZSBjaGFuZ2UgaW4gdGhlIExSVSBnZW5lcmF0aW9uPyBBcmUgdGhlcmUgb3RoZXIgc3lzZnMgZW50cmllcyB1c2luZyBpdD8gUGVyaGFwcyBvdGhlciBpbnRlcm5hbCBrZXJuZWwgbW9kdWxlcz8gS25vd2luZyBhbGwgdGhlIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIGltcGFjdHMsIGFuZCBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozOC45MTQzMDI1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTkwMTA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjQwLjYxNDIwNzczNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjQ5MjI1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIENvbnRleHQgb2Ygc3lzZnMgV3JpdGVzKipcblxuT2theSwgc28gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBvbmx5IGdldHMgdHJpZ2dlcmVkIHdoZW4gd2UncmUgd3JpdGluZyB0byBhIHN5c2ZzIGZpbGUsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBzaWduYWwuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoaWNoIHNwZWNpZmljIHN5c2ZzIGZpbGUgaXMgaW5pdGlhdGluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbD8gS25vd2luZyB0aGUgZmlsZSBuYW1lIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMgc3RhdGUgY2hhbmdlLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IHN5c2ZzIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1Nzo0Ni4yNzkxMzM0OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODY0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ2Ni1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDYuMzI3MDA0MTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQyMTcwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zdG9yZWAgaW4gc3lzZnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGUgdXRpbGl6ZXMgdGhhdCBgZW5hYmxlZF9zdG9yZWAgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYGVuYWJsZWRfc3RvcmVgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9mIHNvbWUgZmVhdHVyZSBvciBoYXJkd2FyZSBjb21wb25lbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYSB1c2Ugb2YgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBtZXRob2QgZm9yIHNlYXJjaGluZywgbGlrZWx5IGxldmVyYWdpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHdheSB0byBmaW5kIGl0LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDkuMjgxMjIzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDUzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ2Ni1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDkuMzI3Njg1NzE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzcxNzI4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgQnJhaW5zdG9ybWluZyBmb3IgYSBLZXJuZWwgQ29kZSBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBlbmFibGVkX3N0b3JlYCBpcyBiZWluZyB1c2VkLCBidXQgYSBzdHJhaWdodCBncmVwIGlzbid0IGdvaW5nIHRvIGN1dCBpdC4gSSBuZWVkIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIHZhcmlhYmxlLiBXaGF0J3MgaXQgYWN0dWFsbHkgKmRvaW5nKj8gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuSG1tLCBtYXliZSBJIHNob3VsZCBicm9hZGVuIHRoZSBzZWFyY2gsIHNpbmNlIGBlbmFibGVkX3N0b3JlYCBtaWdodCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIGNhc2Ugd2hlcmUgdGhpbmdzIGxpa2UgdGhpcyBhcmUgd3JhcHBlZCBpbiBrZXJuZWwtc3R5bGUgYXR0cmlidXRlcy4gT2theSwgSSdsbCB0cnkgc2VhcmNoaW5nIGZvciBgX19BVFRSYCBmaXJzdC4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0IHNob3VsZCBoZWxwIG1lIHplcm8gaW4gb24gdGhlIGV4YWN0IHNlY3Rpb24gdGhhdCBJIG5lZWQgdG8gYW5hbHl6ZS4gR290dGEgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcgY3JpdGljYWwuIExldCdzIHNlZS4uLiBhIHdpZGVyIHNlYXJjaCBzaG91bGQgaGVscCBjbGFyaWZ5IGFueSBzdXJyb3VuZGluZyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjUzLjAwNDg2MzM1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDQ5NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fQVRUUi4qZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTMuMDUxODc5MTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDM4Mzg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGVuYWJsZWRfc2hvd2AgYW5kIGBlbmFibGVkX3N0b3JlYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBcImVuYWJsZWRcIiBmbGFncyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBlbmFibGVkX3Nob3dgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFjdHVhbGx5IHV0aWxpemVkLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBjb250cm9sIHBvaW50cyBmb3IgZmVhdHVyZSB0b2dnbGVzIG9yIHBlcm1pc3Npb25pbmcsIGJ1dCBJIG5lZWQgY29uY3JldGUgZXZpZGVuY2UgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciByZWZhY3RvcmluZy4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgcmV2ZWFsIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBkZWZpbmVkLCBtb2RpZmllZCwgYW5kIGNvbnN1bWVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSBcImVuYWJsZWRcIiBmbGFncyBhZmZlY3QgZGF0YSB2aXNpYmlsaXR5IG9yIGF2YWlsYWJpbGl0eS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbW9kdWxlcywgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aG9zZSB2YXJpYWJsZXMsIHNvIEknbGwgbmVlZCBhIGNvbXByZWhlbnNpdmUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTYuMDU1NzIxNjk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAzMjczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVkX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU0NDg9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NjQtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbm1tL3Ztc2Nhbi5jOjU0NjU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0NjYtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjU2LjEwNTc2MDU1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI1ODM0Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTQ2NSBpbiBgbW0vdm1zY2FuLmNgLiBJJ20gZ29pbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhvdCBzcG90cyBvZiB0aGUgc2Nhbm5pbmcgbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHJlY2xhaW0uIE15IGh1bmNoIGlzIHRoYXQgSSdtIGdvaW5nIHRvIGZpbmQgc29tZSBvZiB0aGUgY29yZSByZWNsYWltIGRlY2lzaW9ucyBiZWluZyBtYWRlLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgbWFpbiBzY2FuIGxvb3Agb3IgYSBkZWNpc2lvbiBwb2ludCBvbiB3aGF0IHRvIHJlY2xhaW0gZnJvbSB2YXJpb3VzIHpvbmVzLiBJdCdzIG9mdGVuIHRoZSBwbGFjZSB3aGVyZSB0aGUgc3lzdGVtIGlzIG1ha2luZyB0cmFkZS1vZmZzIGJldHdlZW4gZGlmZmVyZW50IHBhZ2UgdHlwZXMgYW5kIGRldGVybWluaW5nIHRoZSBlZmZpY2FjeSBvZiBhZ2dyZXNzaXZlIHJlY2xhaW0gdnMga2VlcGluZyBwYWdlcyBpbiBhIGNhY2hlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGFjdHVhbCBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzIG9yIGEgY3JpdGljYWwgem9uZS1zcGVjaWZpYyByZWNsYWltIGFsZ29yaXRobS4gTGV0J3Mgc2VlIGlmIGl0J3MgdGhlIGBzaHJpbmtfc2xhYmAgb3IgYHNocmlua19wYWdlX2xpc3RgIGZ1bmN0aW9ucy4gSSBhbnRpY2lwYXRlIEknbGwgc2VlIHNvbWV0aGluZyBhcm91bmQgdGhlIGBscnVfbG9ja2AgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHRocmVhZHMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFZNIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjU5LjgzMTU5ODc1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ2NTpcXHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuNTQ2NjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG41NDY3OlxcdHtcXG41NDY4OlxcdFxcdGludCBpO1xcbjU0Njk6XFx0XFx0dW5zaWduZWQgaW50IGNhcHM7XFxuNTQ3MDpcXHRcXG41NDcxOlxcdFxcdGlmICh0b2xvd2VyKCpidWYpID09ICduJylcXG41NDcyOlxcdFxcdFxcdGNhcHMgPSAwO1xcbjU0NzM6XFx0XFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAneScpXFxuNTQ3NDpcXHRcXHRcXHRjYXBzID0gLTE7XFxuNTQ3NTpcXHRcXHRlbHNlIGlmIChrc3RydG91aW50KGJ1ZiwgMCwgXFx1MDAyNmNhcHMpKVxcbjU0NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTQ3NzpcXHRcXG41NDc4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkrKykge1xcbjU0Nzk6XFx0XFx0XFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcXHUwMDI2IEJJVChpKTtcXG41NDgwOlxcdFxcbjU0ODE6XFx0XFx0XFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxcbjU0ODI6XFx0XFx0XFx0XFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XFxuNTQ4MzpcXHRcXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcbjU0ODQ6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxuNTQ4NTpcXHRcXHRcXHRlbHNlXFxuNTQ4NjpcXHRcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxuNTQ4NzpcXHRcXHR9XFxuNTQ4ODpcXHRcXG41NDg5OlxcdFxcdHJldHVybiBsZW47XFxuNTQ5MDpcXHR9XFxuNTQ5MTpcXHRcXG41NDkyOlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxuNTQ5MzpcXHRcXG41NDk0OlxcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxuNTQ5NTpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG41NDk2OlxcdFxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbjU0OTc6XFx0XFx0TlVMTFxcbjU0OTg6XFx0fTtcXG41NDk5OlxcdFxcbjU1MDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xcbjU1MDE6XFx0XFx0Lm5hbWUgPSBcXFwibHJ1X2dlblxcXCIsXFxuNTUwMjpcXHRcXHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxcbjU1MDM6XFx0fTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbjU1MDY6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZnMgaW50ZXJmYWNlXFxuNTUwNzpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjU1MDg6XFx0XFxuNTUwOTpcXHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcXG41NTEwOlxcdHtcXG41NTExOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NTEyOlxcdFxcdGxvZmZfdCBucl90b19za2lwID0gKnBvcztcXG41NTEzOlxcdFxcbjU1MTQ6XFx0XFx0bS1cXHUwMDNlcHJpdmF0ZSA9IGt2bWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTkuODMxOTc5OTEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODU2Nzg5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBGZWF0dXJlJ3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBhdHRyaWJ1dGUsIGBscnVfZ2VuX2VuYWJsZWRfYXR0cmAuIFJpZ2h0LCBpdCBjcmVhdGVzIHRoYXQgYGVuYWJsZWRgIHN5c2ZzIGZpbGUgd2l0aGluIHRoZSBgbHJ1X2dlbmAgZGlyZWN0b3J5LiBTdGFuZGFyZCBzdHVmZiBmb3IgdGhlIE1HTFJVIGZlYXR1cmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGBmaWxsX2V2aWN0YWJsZWAgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBjcml0aWNhbCB0byB0aGUgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHByb2Nlc3MgdGhyb3VnaCBzeXNmcy4gQWgsIGJ1dCB3YWl0IGEgbWludXRl4oCmSSdtIHJlbWVtYmVyaW5nIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpc24ndCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBzeXNmcywgaXQncyBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl0J3MgbGlrZWx5IHRoZSBjZW50cmFsIHBvaW50IGZvciB0aGUgc3RhdGUgY2hhbmdlIGxvZ2ljLiBJJ2xsIGdldCB0aGUgZnVsbCBwaWN0dXJlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDQuMjE3NjYyMjI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzY3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzY3OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41MzY4OlxcdHtcXG41MzY5OlxcdFxcdHN0YXRpYyBERUZJTkVfTVVURVgoc3RhdGVfbXV0ZXgpO1xcbjUzNzA6XFx0XFxuNTM3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTM3MjpcXHRcXG41MzczOlxcdFxcdGNncm91cF9sb2NrKCk7XFxuNTM3NDpcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbjUzNzU6XFx0XFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuNTM3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdGF0ZV9tdXRleCk7XFxuNTM3NzpcXHRcXG41Mzc4OlxcdFxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbjUzNzk6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNTM4MDpcXHRcXG41MzgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9zd2l0Y2gpO1xcbjUzODI6XFx0XFxuNTM4MzpcXHRcXHRpZiAoZW5hYmxlZClcXG41Mzg0OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG41Mzg1OlxcdFxcdGVsc2VcXG41Mzg2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxuNTM4NzpcXHRcXG41Mzg4OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjUzODk6XFx0XFx0ZG8ge1xcbjUzOTA6XFx0XFx0XFx0aW50IG5pZDtcXG41MzkxOlxcdFxcbjUzOTI6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG41MzkzOlxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjUzOTY6XFx0XFxuNTM5NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNlcV9pc192YWxpZChscnV2ZWMpKTtcXG41Mzk4OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbjU0MDE6XFx0XFxuNTQwMjpcXHRcXHRcXHRcXHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xcbjU0MDM6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG41NDA0OlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MDU6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNTQwNjpcXHRcXHRcXHRcXHR9XFxuNTQwNzpcXHRcXG41NDA4OlxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTQwOTpcXHRcXHRcXHR9XFxuNTQxMDpcXHRcXG41NDExOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MTI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU0MTM6XFx0XFxuNTQxNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X3N3aXRjaCk7XFxuNTQxNTpcXHRcXG41NDE2OlxcdHVubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDQuMjE4MTQ4MDk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI1NDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1HTFJVIEFjdGl2YXRpb24gUGF0aCoqXG5cbkFscmlnaHQsIHNvIGBmaWxsX2V2aWN0YWJsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBNR0xSVSBpcyBhY3RpdmF0ZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHNpZ25hbCB0byBzdGFydCBwb3B1bGF0aW5nIGRhdGEuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgcXVpY2tseTogaXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIGNhbid0IHF1aXRlIHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGVzOyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgY2hlY2tpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gY29uZmlybSB0aGUgZGVmYXVsdCBNR0xSVSBiZWhhdmlvciBhbmQgaXRzIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDcuNzYwNjk1ODIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM2ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODowNy44MTAwNjk5MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MDc3NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDA0LiBMZXQncyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlIFwibW0vXCIgcHJlZml4LiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDE0MDQgaXMgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgdGhlIHN0YXJ0IG9mIGEgbG9naWNhbCBibG9jayBkZWZpbmluZyBvcHRpb25zLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFudGljaXBhdGUgd2hhdCBJIG1pZ2h0IGZpbmQuIElzIGl0IHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9ucz8gUGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXM/IE1heWJlIHNvbWUgbmV3IG1lbW9yeSBwcm90ZWN0aW9uIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiBpbnRyb2R1Y2VkPyBDb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byBaT05FX0RNQSBvciBoaWdoIG1lbW9yeSBzdXBwb3J0LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGxpa2VseSBpbmNsdWRlIHN0YXRlbWVudHMgYW5kIGNyb3NzLXJlZmVyZW5jZXMgd2l0aGluIGBLY29uZmlnYC4gSSdtIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGlzIHBhcnQgb2YgdGhlIEtjb25maWcgZmlsZSB0aWVzIGludG8gb3RoZXIgc3Vic3lzdGVtcywgc28gdGhpcyB3b24ndCBiZSBhbiBpc29sYXRlZCBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGNvbXBsZXgsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBvcHRpb24gYXQgaGFuZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBMZXQncyBob3BlIHRoYXQgaXQgaXMgd2VsbCBkb2N1bWVudGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTIuNTUwODUwNjgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDQ6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA1OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDc6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwOTpcXHRcXHRoZWxwXFxuMTQxMDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMjpcXHRcXG4xNDEzOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE4OlxcdFxcbjE0MTk6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDIwOlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIxOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjI6XFx0XFx0aGVscFxcbjE0MjM6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTIuNTUwOTUzMTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ3MjA1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLlxuXG4qKkxSVSBHZW5lcmF0aW9uIGFuZCBFdmljdGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gYExSVV9HRU5gIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3Mga2V5IGhlcmUuIElmIHRoYXQncyBlbmFibGVkLCB0aGVuIHdlJ3JlIGNvbXBpbGluZyBpbiBgZmlsbF9ldmljdGFibGVgLiBIbW0sIHdhaXQgYSBzZWNvbmQuLi4gaXNuJ3QgYGZpbGxfZXZpY3RhYmxlYCBhY3R1YWxseSAqaW5zaWRlKiBhIHByZXByb2Nlc3NvciBjb25kaXRpb25hbCBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUncyB0aGUgc291cmNlPyBSaWdodCwgYG1tL3Ztc2Nhbi5jYCBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBzY2FuLiBMZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gR290dGEgbWFrZSBzdXJlIHRoZSBsb2dpYyBob2xkcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTYuNjg1Njc2NzgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDExOTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODY1LX1cXG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODY3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY5MS1cXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2OTMtXFxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODk5LVxcbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MDEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzNy1cXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxuLS1cXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc1LVxcbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTk3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTYuNzM1ODAxMDA2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzUzMjkzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGZpbGxfZXZpY3RhYmxlYCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgaXMgaW5kZWVkIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGZ1bmN0aW9uIGlzLCBzcGVjaWZpY2FsbHkgZnJvbSB1c2Vyc3BhY2UuIEl0IGxvb2tzIGxpa2Ugd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBpcyB0aGUgcGF0aC4gSSBuZWVkIHRvIGJlIHN1cmU7IGRvZXMgc3l6a2FsbGVyIHRlc3Qgc3lzZnMgd3JpdGVzPyBZZXMsIGl0IGRvZXMsIHNvIHRoYXQncyBhIHZpYWJsZSBhdmVudWUgZm9yIHRlc3RpbmcuXG5cbkhvd2V2ZXIsIEknbSB0aGlua2luZyBzdHJhdGVnaWNhbGx5LiBGb2N1c2luZyBkaXJlY3RseSBvbiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIG9yIGBmaWxsX2V2aWN0YWJsZWAgY291bGQgYWxzbyBiZSBhIGdvb2QgYXBwcm9hY2guIEhvbGQgb24sIGBmaWxsX2V2aWN0YWJsZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQncyBmaW5kICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBnaXZpbmcgbWUgbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgY29uZGl0aW9uYWwgcGF0aC4gT2theSwgYm90aCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFsc28gc3RhdGljLiBCdXQsIHdhaXQuLi4gYGVuYWJsZWRfc3RvcmVgIGlzIHJlZ2lzdGVyZWQgYXMgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQncyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYGZpbGxfZXZpY3RhYmxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODoyMS45NzExMzgyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDMxMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZXZpY3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUyNzA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5Mi1cXG5tbS92bXNjYW4uYzo1MjkzOnN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01Mjk0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNjc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQwMS1cXG5tbS92bXNjYW4uYzo1NDAyOlxcdFxcdFxcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XFxubW0vdm1zY2FuLmMtNTQwMy1cXHRcXHRcXHRcXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODoyMi4xODM1NzYwOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MDcxMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBmaWxsX2V2aWN0YWJsZWAncyBDYWxsZXJzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBMUlUgZXZpY3Rpb24gcHJvY2Vzcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBlbHNlIGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgYmVpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGF0IHRyaWdnZXJzICp0aGF0KiBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aG9zZSBoaWdoZXItbGV2ZWwgY2FsbHMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVuIGFuZCB3aHkgYGZpbGxfZXZpY3RhYmxlYCBpcyBpbnZva2VkLiBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGhvdyBldmljdGlvbiBkZWNpc2lvbnMgYXJlIHVsdGltYXRlbHkgZHJpdmVuLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBmYWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjI1LjcyNDI5MTQ5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwNjQ4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9jaGFuZ2Vfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjI1Ljc3NDM2MjAzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMwMDU3OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBmb3IgYGZpbGxfZXZpY3RhYmxlYC4gRnJvbSBteSBjb2RlIHJldmlldywgaXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG9ubHkgcGF0aC4gQnV0IGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgY29uZmlybSDigJMgeWVwLCBzZWVtcyBsaWtlIGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIHNvbGUgdHJpZ2dlci4gR29vZC4gQW5kLCBzaW5jZSBpdCdzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIEkga25vdyBpdCdzIHJlYWNoYWJsZS5cblxuQnV0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGlmIE1HTFJVIGlzIGVuYWJsZWQgYnkgZGVmYXVsdD8gSWYgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGlzIHNldCwgdGhlIHN5c3RlbSBib290cyB3aXRoIE1HTFJVIGFjdGl2ZSwgcmlnaHQ/IFNvLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgaW5pdF9scnVfZ2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvY2VzcyBkb2Vzbid0IGdldCB0cmlnZ2VyZWQgYXV0b21hdGljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzAuMDA0NDIzNDQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X2xydV9nZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTkxMz12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01OTQxLVxcbm1tL3Ztc2Nhbi5jOjU5NDI6c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxubW0vdm1zY2FuLmMtNTk0My17XFxuLS1cXG5tbS92bXNjYW4uYy01OTU2LX07XFxubW0vdm1zY2FuLmM6NTk1NzpsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzAuMDU0Njg4NzU2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzYzNzAxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIHRoaXMgZmllbGQ6XG5cbioqTGV0J3MgRGl2ZSBpbnRvIGBpbml0X2xydV9nZW5gKipcblxuQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGluaXRfbHJ1X2dlbmAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHNwZWNpZmljIGZ1bmN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBMUlUgY2FjaGUsIGdpdmVuIHRoZSBuYW1lLiBUaGUgXCJnZW5cIiBzdWZmaXggbGlrZWx5IGhpbnRzIGF0IHNvbWUgc29ydCBvZiBnZW5lcmF0b3IgY29tcG9uZW50LCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBxdWVzdGlvbnM6XG5cbiogICBJcyBpdCBhIGdlbmVyYXRvci1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFJVIGl0c2VsZj9cbiogICBJcyBpdCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYSBsYXRlciBnZW5lcmF0b3I/XG4qICAgV2hhdCdzIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVzaWduIHBoaWxvc29waHkgaGVyZT8gSXMgdGhpcyBmb3IgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMUlU/XG5cbkknbSByZWFkeSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIERhdGEgc3RydWN0dXJlIGNob2ljZXM6IEhhc2ggbWFwcz8gTGlua2VkIGxpc3RzPyBPdGhlciBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgTFJVIGJlaGF2aW9yP1xuKiAgIEhvdyB0aGUgY2FjaGUgaXMgcG9wdWxhdGVkIGluaXRpYWxseS4gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzLCBvciBpbml0aWFsIGVudHJpZXM/XG4qICAgSG93IHRoZSBcImdlbmVyYXRvclwiIGFzcGVjdCBpcyBpbnRlZ3JhdGVkLiBIb3cgaXMgaXQgZ2VuZXJhdGluZyBjYWNoZWQgdmFsdWVzP1xuKiAgIFdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGNhY2hlJ3Mga2V5L3ZhbHVlIHR5cGVzPyBBcmUgdGhlcmUgYW55IHR5cGUtcmVsYXRlZCBjb25zdHJhaW50cz9cbiogICBFcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3cuXG5cbkVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIG92ZXJ2aWV3IGFuZCB0aGVuIGltbWVkaWF0ZWx5IGhvbmUgaW4gb24gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBnZW5lcmF0b3IgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgTFJVIGNhY2hlIGRlc2lnbi4gSSdtIGV4Y2l0ZWQgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkIGFuZCBob3cgd2VsbCBpdCBtYXRjaGVzIG15IGV4cGVjdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODozNC4wOTEwNjM4NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NDIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NDI6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNTk0MzpcXHR7XFxuNTk0NDpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG41OTQ1OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjU5NDY6XFx0XFxuNTk0NzpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjU5NDg6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG41OTQ5OlxcdFxcbjU5NTA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNTk1MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNTk1MjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTk1MzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTk1NDpcXHRcXG41OTU1OlxcdFxcdHJldHVybiAwO1xcbjU5NTY6XFx0fTtcXG41OTU3OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41OTU4OlxcdFxcbjU5NTk6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNTk2MDpcXHRcXG41OTYxOlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjM0LjA5MTM2NzYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQzODU3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTUdMUlUgQm9vdC1VcCoqXG5cbk9rYXksIHNvIGBpbml0X2xydV9nZW5gIGlzIGFwcGFyZW50bHkganVzdCByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgc3lzZnMgYW5kIGRlYnVnZnMgaW50ZXJmYWNlcy4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBhIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkOiBob3cgZXhhY3RseSAqaXMqIE1HTFJVIGVuYWJsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MgaWYgdGhlIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQ/IEl0IGhhcyB0byBiZSBjb21pbmcgZnJvbSBzb21ld2hlcmUuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGxydV9nZW5fZW5hYmxlZCgpYCDigJMgdGhhdCBmdW5jdGlvbiBzaG91bGQgaG9sZCB0aGUga2V5LiBMZXQncyBzZWUgd2hhdCB0aGUgY2hlY2sgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjM3LjczNTIyOTAxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODE2MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Njg9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5NC1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODA9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjg2LVxcbm1tL3Ztc2Nhbi5jOjIyODc6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTIyODgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6XFx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtNTM3OS1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ5MS1cXG5tbS92bXNjYW4uYzo1NDkyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ5My1cXG5tbS92bXNjYW4uYz01NDk0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxubW0vdm1zY2FuLmMtNTQ5NS1cXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYzo1NDk2OlxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0OTctXFx0TlVMTFxcbi0tXFxubW0vdm1zY2FuLmM9NTg4MD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg4Ny1cXHRscnVnZW4tXFx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyArIDE7XFxubW0vdm1zY2FuLmM6NTg4ODpcXHRscnVnZW4tXFx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcXG5tbS92bXNjYW4uYy01ODg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk3OD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTg4LVxcbm1tL3Ztc2Nhbi5jOjU5ODk6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTU5OTAtXFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTMtXFxubW0vdm1zY2FuLmM6NjI1NDpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MjU1LVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTI1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTI5LVxcbm1tL3Ztc2Nhbi5jOjY1MzA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTY1MzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjkxNT1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02OTE5LVxcbm1tL3Ztc2Nhbi5jOjY5MjA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy02OTIxLVxcdFxcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzcuOTc4MDUwNzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTU5ODYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVHJhY2luZyBgbHJ1X2dlbl9lbmFibGVkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbHJ1X2dlbl9lbmFibGVkYCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IGl0cyBzY29wZSBpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBMZXQncyBzZWUgd2hlcmUgdGhhdCB2YXJpYWJsZSBpcyBhY3R1YWxseSAqZGVmaW5lZCogaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGlzIGZsYWcsIHNvIEkgY2FuIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHRyYWNlIHRoYXQgdmFyaWFibGUgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODo0MS4yNDM2NTI4ODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzYwOTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NDEuMjk2NDIxMjc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjMzMTUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyB0aGUgYGxydV9nZW5fZW5hYmxlZGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gcGlucG9pbnQgd2hlcmUgYGxydV9nZW5fZW5hYmxlZGAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8ga25vdyBpdHMgc2NvcGUsIGl0cyB0eXBlIChpZiBhbnkpLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzLiBUaGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBhbmQgaGVhZGVycyB0eXBpY2FsbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2YXJpYWJsZSB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9yIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBTbywgb2ZmIHRvIGBpbmNsdWRlL2AgSSBnby4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODo0NS41MTk3NDAzNDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ1OTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNi0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTA3OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExMy0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTE0OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzE0LVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzE1OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjQ1LjY2NzIwNjYyMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEzODc5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTFJVIEdlbmVyYXRpb24gQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBzZXR0aW5nLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIHRoYXQncyBkZWZpbmVkLCBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGdvaW5nIHRvIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElmIGl0J3MgKmVuYWJsZWQqIGJ5IGRlZmF1bHQsIHRoZW4gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB3aWxsIGxpa2VseSAqb25seSogYmUgaW52b2tlZCB3aGVuIGEgdXNlcnNwYWNlIHByb2Nlc3MgZXhwbGljaXRseSBpbnRlcmFjdHMgd2l0aCBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYC4gRXNzZW50aWFsbHksIGl0J3MgYSBkaXNhYmxlL3JlLWVuYWJsZSBzd2l0Y2gsIHllYWg/XG5cbk5vdywgdGhlIG5leHQgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBgZmlsbF9ldmljdGFibGVgLiBUaGlzIGZ1bmN0aW9uIGlzIHRpZWQgdG8gdGhlIGBlbmFibGVkYCBzdGF0ZS4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgKndoZW4qIGBmaWxsX2V2aWN0YWJsZWAgaXMgYWN0dWFsbHkgY2FsbGVkLiBJZiB0aGUga2VybmVsIGJvb3RzIHdpdGggTUdMUlUgZW5hYmxlZCAtIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgdHJ1ZSBieSBkZWZhdWx0IC0gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGRvZXMgKk5PVCogZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLiBJbnRlcmVzdGluZy4uLlxuXG5JIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGNhbiBzZWUgaG93IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgZW50cnkgd291bGQgaW5mbHVlbmNlIHRoaXMgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NTAuMDgxMDg5MTM4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzY3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzY3OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41MzY4OlxcdHtcXG41MzY5OlxcdFxcdHN0YXRpYyBERUZJTkVfTVVURVgoc3RhdGVfbXV0ZXgpO1xcbjUzNzA6XFx0XFxuNTM3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTM3MjpcXHRcXG41MzczOlxcdFxcdGNncm91cF9sb2NrKCk7XFxuNTM3NDpcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbjUzNzU6XFx0XFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuNTM3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdGF0ZV9tdXRleCk7XFxuNTM3NzpcXHRcXG41Mzc4OlxcdFxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbjUzNzk6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNTM4MDpcXHRcXG41MzgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9zd2l0Y2gpO1xcbjUzODI6XFx0XFxuNTM4MzpcXHRcXHRpZiAoZW5hYmxlZClcXG41Mzg0OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG41Mzg1OlxcdFxcdGVsc2VcXG41Mzg2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxuNTM4NzpcXHRcXG41Mzg4OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjUzODk6XFx0XFx0ZG8ge1xcbjUzOTA6XFx0XFx0XFx0aW50IG5pZDtcXG41MzkxOlxcdFxcbjUzOTI6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG41MzkzOlxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjUzOTY6XFx0XFxuNTM5NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNlcV9pc192YWxpZChscnV2ZWMpKTtcXG41Mzk4OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbjU0MDE6XFx0XFxuNTQwMjpcXHRcXHRcXHRcXHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xcbjU0MDM6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG41NDA0OlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MDU6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNTQwNjpcXHRcXHRcXHRcXHR9XFxuNTQwNzpcXHRcXG41NDA4OlxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTQwOTpcXHRcXHRcXHR9XFxuNTQxMDpcXHRcXG41NDExOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MTI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU0MTM6XFx0XFxuNTQxNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X3N3aXRjaCk7XFxuNTQxNTpcXHRcXG41NDE2OlxcdHVubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NTAuMDgxNTE4NjA4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTMyODA0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1HTFJVIFRvZ2dsZSoqXG5cbk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCdzIHRoZSBvbmUgdGhhdCBtb3ZlcyBwYWdlcyBiZXR3ZWVuIExSVSBsaXN0cyB3aGVuIE1HTFJVIGdldHMgZW5hYmxlZCBhdCBydW50aW1lLiBJZiBNR0xSVSBpcyBvbiBmcm9tIHRoZSBzdGFydCwgdGhvc2UgcGFnZXMgYXJlIGFscmVhZHkgaW4gdGhlIG11bHRpLWdlbiBMUlUgbGlzdHMuIEFuZCwgaWYgTUdMUlUgaXMgZGlzYWJsZWQgYXQgcnVudGltZSwgYGRyYWluX2V2aWN0YWJsZWAgaXMgY2FsbGVkIHRvIG1vdmUgcGFnZXMgYmFjay4gU28sIGBmaWxsX2V2aWN0YWJsZWAgaXMgb25seSBleGVjdXRlZCB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgb24uIEl0IHNvdW5kcyBsaWtlIHRoaXMgY291bGQgYmUgYSBnb29kIGFyZWEgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTU0pIHN1YnN5c3RlbSBhbmQgdGhlIExSVSBsaXN0cyBzcGVjaWZpY2FsbHkuXG5cblRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aGVyZSBmb2xpb3MgYXJlIGdldHRpbmcgYWRkZWQgdG8gdGhlIExSVSBsaXN0cyBpbiB0aGUgd3Jvbmcgb3JkZXIsIGNhdXNpbmcgYSBjb2xkL2hvdCBpbnZlcnNpb24gcHJvYmxlbS4gVG8gdGVzdCB0aGlzIHdpdGggc3l6a2FsbGVyLCBJJ2xsIG5lZWQgdG8gdG9nZ2xlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBBaCwgc3l6a2FsbGVyIGNhbiB3cml0ZSB0byBzeXNmcyBmaWxlcyEgVGhhdCdzIGdvb2QuXG5cblRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHRvZ2dsZSBpcyB0aGUgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBmdW5jdGlvbi4gVGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGlzIGBlbmFibGVkX3N0b3JlYC4gU2hvdWxkIEkgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50IG9yIHRoZSBzeXNmcyBlbnRyeT8gYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludC4gSG93ZXZlciwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gSG0sIGxldCBtZSBjaGVjayBpZiBpdCdzIGlubGluZWQuLi4gcHJvYmFibHkgbm90LCBnaXZlbiB0aGF0IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMuIExldCdzIGNoZWNrIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgYXMgd2VsbCwgaXQncyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIGZyb20gYGVuYWJsZWRfc3RvcmVgLiBgZmlsbF9ldmljdGFibGVgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28uIFdhaXQsIGBlbmFibGVkX3N0b3JlYCBpcyBwYXNzZWQgdG8gYF9fQVRUUl9SVyhlbmFibGVkKWAuXG5cbkkgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgZmlsbF9ldmljdGFibGVgLCBuby5cblxuSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzbid0IG1vZGlmaWVkLCBidXQgaXQncyBjYWxsZWQgZGlmZmVyZW50bHkuIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFkZGVkIHRvIExSVSBsaXN0cyB1c2luZyBgbHJ1X2dlbl9hZGRfZm9saW9gLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0uXG5cbkknbGwgbmVlZCBgTFJVX0dFTmAgKHdoaWNoIGlzIGBDT05GSUdfTFJVX0dFTmApIGVuYWJsZWQsIHdoaWNoIGRlcGVuZHMgb24gYE1NVWAuIElzIHRoYXQgYWxsIEkgbmVlZD8gWWVzLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgZGlyZWN0bHkgZW5hYmxlcyBNR0xSVS4gQW5kIGBlbmFibGVkX3N0b3JlYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLCBzbyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MDEuNjE0MzI2MjI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA5OTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODY1LX1cXG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODY3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY5MS1cXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2OTMtXFxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODk5LVxcbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MDEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzNy1cXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxuLS1cXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc1LVxcbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTk3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MDEuNjYyNDM0NzYyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTM5ODcyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgbG9naWMgYW5kIGhlcmUncyBteSB0aGlua2luZy4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChMUlVfR0VOKSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBlbnRyeSBwb2ludCwgd3JhcHBlZCB3aXRoaW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYW5kIGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiB0aGlzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgRm9jdXNTeW1ib2xzYC4gU2luY2UgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIGluaXRpYWxseSBhc3N1bWVkIGl0J3MgaW5saW5lZCBhbmQgU3l6a2FsbGVyIGNvdWxkbid0IHRhcmdldCBpdCBkaXJlY3RseS4gQnV0IHdhaXQsIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgX19BVFRSX1JXYCwgc28gaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QgbmV3cy4gU28gdGhhdCBtYWtlcyBgZW5hYmxlZF9zdG9yZWAgYSB2aWFibGUgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHNpbmNlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXNuJ3QgaW5saW5lZCBlaXRoZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSBib3RoIGluIG15IGZvY3VzIHN5bWJvbHMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGJ1dCBJIGNvdWxkbid0IGZpbmQgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIHRvIHRyaWdnZXIgdGhpcyBjaGFuZ2UuIFRoZSBvbmx5IHBhdGggc2VlbXMgdG8gYmUgdGhyb3VnaCB0aGUgc3lzZnMgY2FsbGJhY2ssIGBlbmFibGVkX3N0b3JlYC4gRXZlbiB0aG91Z2ggYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFyZSBib3RoIHN0YXRpYywgdGhleSdyZSB2YWxpZCB0YXJnZXRzIGJlY2F1c2UgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gc2VlIGlmIGBmaWxsX2V2aWN0YWJsZWAgaXMgY2FsbGVkIGZyb20gZWxzZXdoZXJlLCBidXQgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggYWdhaW4uXG5cblRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiBwb3B1bGF0aW5nIHRoZSBtdWx0aS1nZW4gTFJVIGxpc3RzLCB3aGljaCBoYXBwZW5zIHdoZW4gTUdMUlUgaXMgZW5hYmxlZC4gVGh1cywgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byBgTFJVX0dFTmAsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC5cblxuQW5kIGFzIGEgZmluYWwgZG91YmxlIGNoZWNrLCBJIGFtIGNvbmZpcm1pbmcgdGhhdCB0aGUgZW50cnkgcG9pbnQgYGVuYWJsZWRfc3RvcmVgIGlzIGluZGVlZCB0aGUgb25seSB3YXkgdG8gZ2V0IHRvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFRoaXMgaXMgY29uZmlybWVkIHZpYSBjb2RlIGFuYWx5c2lzIHdoZXJlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLlxuXG5JJ3ZlIGFsc28gY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmAg4oCTIGl0IGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVGAsIGFuZCBgU1BBUlNFTUVNYC4gVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBtb3N0bHkgbGlrZWx5IHNhdGlzZmllZCBieSBkZWZhdWx0LiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBjb25maWRlbnRseSBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk4LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MTYuMjAyMzEwMjU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MzkxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzkxNTYxNDdaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDI0MDkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzk3MTk0NDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODI0MTg0MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MjVlMDkzZmY0NGI0MDhhODlkODE4MTA1NDU0YjliNWVmNTQxNmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5lNmJiMmFjN2E1N2FhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTMwMiw3ICs1MzAyLDE3IEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdFx0Ym9vbCBzdWNjZXNzO1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXG4rXHRcdFx0ICogdGhhbiBsaXN0X2FkZCgpIHdoZW4gcmVjbGFpbWluZyBpcyB0cnVlLiAgTWF0Y2hcbitcdFx0XHQgKiBpdHMgb3JkZXJpbmcgdG8gYXZvaWQgY29sZC9ob3QgaW52ZXJzaW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhY3RpdmUpXG4rXHRcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICs1MzIwLDExIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbiBcbiBcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3Jyb3cgcmVjbGFpbWluZz10cnVlIHRvIHBsYWNlIGluYWN0aXZlIGZvbGlvcyBpblxuK1x0XHRcdCAqIHRoZSBvbGRlciBnZW5zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzk3MjAzOTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MTgxNzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBBIFF1aWNrIExvb2sgYXQgTFJVIEZvbGlvIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdHdlYWtpbmcgYGZpbGxfZXZpY3RhYmxlYCBpbiBgbW0vdm1zY2FuLmNgLiBCYXNpY2FsbHksIGl0J3MgYWJvdXQgaG93IHdlIGdyYWIgYSBgZm9saW9gIGZyb20gdGhlIGBoZWFkYCBvZiBhbiBMUlUgbGlzdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgY29uc2lkZXJlZCBcImFjdGl2ZVwiIG9yIG5vdC4gSWYgaXQgKmlzKiBhY3RpdmUsIGl0IHVzZXMgYGxydV90b19mb2xpbyhoZWFkKWAg4oCTIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIHNhbWUgYXMgYGxpc3RfbGFzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgLiBPdGhlcndpc2UgKGlmIGl0J3Mgbm90IGFjdGl2ZSksIGl0IGdyYWJzIHRoZSBmaXJzdCBlbnRyeSAoYGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpYCkuIEl0J3MgYWxzbyBjaGFuZ2luZyB0aGUgdGhpcmQgYXJndW1lbnQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYCBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXJseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgZGVhbGluZyB3aXRoIExSVSBsaXN0cywgcGFnZSBldmljdGlvbiwgYW5kIHRoZSBmb2xpb3MgdGhlbXNlbHZlcy4gTm90aGluZyB1c2VyLWZhY2luZyBoZXJlLCBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZC4gSXQncyBqdXN0IGEgbWF0dGVyIG9mIGNoYW5naW5nIHRoZSBvcmRlciBhbmQgcGFzc2luZyBhIGJvb2xlYW4gdG8gYSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpa2VseSBnb2luZyB0byBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3Igc29tZSBraW5kIG9mIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMsIHBhZ2Ugc3RhdGUgY2hlY2tzLCBldGMuKSBhcmUgYnVpbHQgdG8gY2F0Y2guIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSdzIG5vIHdheSB0byBsZWFrIGluZm8gdG8gdGhlIHVzZXIuXG5cblNvLCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGFuZCBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9ucywgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIG5vdCBhIEtNU0FOIHRhcmdldC4gSSdsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU5OjI0LjUyMTU0MTA1NloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 02:32:16 +0000 UTC FinishedAt: 2026-08-21 02:59:26 +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": "5425e1a8f93c809cf379b0621c499d12701adfce", "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": "5425e1a8f93c809cf379b0621c499d12701adfce", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "b10ca4b0-847e-45e6-9c8e-6eadae76d668" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "enabled_store", "lru_gen_change_state" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgICAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4MjVlMDkzZmY0NGI0MDhhODlkODE4MTA1NDU0YjliNWVmNTQxNmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZTZiYjJhYzdhNTdhYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTUzMDIsNyAmIzQzOzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XG4mIzQzO1x0XHRcdC8qXG4mIzQzO1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXG4mIzQzO1x0XHRcdCAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoXG4mIzQzO1x0XHRcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRpZiAoYWN0aXZlKVxuJiM0MztcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuJiM0MztcdFx0XHRlbHNlXG4mIzQzO1x0XHRcdFx0Zm9saW8gPSBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KTtcbiBcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICE9IGFjdGl2ZSwgZm9saW8pO1xuQEAgLTUzMTAsNyAmIzQzOzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbiYjNDM7XHRcdFx0LypcbiYjNDM7XHRcdFx0ICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW5cbiYjNDM7XHRcdFx0ICogdGhlIG9sZGVyIGdlbnMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTtcbiBcbiBcdFx0XHRpZiAoIS0tcmVtYWluaW5nKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsbF9ldmljdGFibGVgIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIHRvIGZpeCBhbiBpc3N1ZSB3aXRoIGNvbGQvaG90IGludmVyc2lvbiB3aGVuIG1vdmluZyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlL2luYWN0aXZlIGxpc3RzIHRvIHRoZSBNR0xSVSBsaXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgYXQgcnVudGltZSB2aWEgdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIHN5c2ZzIGZpbGUsIHdoaWNoIHRyaWdnZXJzIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwMjo1NzoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggYzE0MDRhNTk1MjNkNi4uZTZiYjJhYzdhNTdhYSAxMDA2NDQKLS0tIGEvbW0vdm1zY2FuLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vdm1zY2FuLmMKQEAgLTUzMDIsNyAmIzQzOzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCiAJCXdoaWxlICghbGlzdF9lbXB0eShoZWFkKSkgewogCQkJYm9vbCBzdWNjZXNzOwotCQkJc3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJCS8qCiYjNDM7CQkJICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXIKJiM0MzsJCQkgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaAomIzQzOwkJCSAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGFjdGl2ZSkKJiM0MzsJCQkJZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7CiYjNDM7CQkJZWxzZQomIzQzOwkJCQlmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpOwogCiAJCQlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbyksIGZvbGlvKTsKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7CkBAIC01MzEwLDcgJiM0Mzs1MzIwLDExIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYykKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pOwogCiAJCQlscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pOwotCQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTsKJiM0MzsJCQkvKgomIzQzOwkJCSAqIEJvcnJvdyByZWNsYWltaW5nPXRydWUgdG8gcGxhY2UgaW5hY3RpdmUgZm9saW9zIGluCiYjNDM7CQkJICogdGhlIG9sZGVyIGdlbnMuCiYjNDM7CQkJICovCiYjNDM7CQkJc3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpOwogCQkJVk1fV0FSTl9PTl9PTkNFKCFzdWNjZXNzKTsKIAogCQkJaWYgKCEtLXJlbWFpbmluZykKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3OAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHZtc2Nhbi5jIFBhdGNoKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGhvdyB0aGUga2VybmVsIGRlY2lkZXMgd2hhdCBmb2xpb3MgdG8gZXZpY3QsIGhvdyBpdCBzZWxlY3RzIHdoaWNoIHBhZ2VzIHRvIGtpY2sgb3V0IG9mIG1lbW9yeS4gVGhpcyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBhbmQgbWVtb3J5IG1hbmFnZW1lbnQsIHNvIGl0JiMzOTtzIGFsd2F5cyB3b3J0aCBhIGNsb3NlIGxvb2suCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCByZXRyaWV2aW5nIGZvbGlvcyBmcm9tIHRoZSBgaGVhZGAgbGlzdCB3aXRoaW4gYGZpbGxfZXZpY3RhYmxlYCwgY29uZGl0aW9uYWwgb24gdGhlIGBhY3RpdmVgIGZsYWcuIElmIGEgZm9saW8gaXMgYGFjdGl2ZWAsIGl0JiMzOTtzIHRha2luZyB0aGUgdGFpbCBvZiB0aGUgbGlzdCB2aWEgYGxydV90b19mb2xpbyhoZWFkKWAuICBNYWtlcyBzZW5zZSwgdGhhdCYjMzk7cyBsaWtlbHkgdGhlIGxlYXN0IHJlY2VudGx5IHVzZWQgcGFnZSwgd2hpY2ggd2UmIzM5O2QgZXhwZWN0IHdoZW4gYWN0aXZlLiBJZiBpdCYjMzk7cyAqbm90KiBhY3RpdmUgKGAhYWN0aXZlYCksIGl0JiMzOTtzIGdyYWJiaW5nIHRoZSBoZWFkIG9mIHRoZSBsaXN0IHdpdGggYGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpYC4gT2theSwgc28gaXQgcHJpb3JpdGl6ZXMgZGlmZmVyZW50IGxvY2F0aW9ucyBpbiB0aGUgTFJVLCBkZXBlbmRpbmcgb24gYWN0aXZpdHkuCgpUaGF0IGByZWNsYWltaW5nYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBjaGFuZ2luZyBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBwcm9iYWJseSByZWxhdGVkIHRvIGhvdyB0aGUgZm9saW8gaXMgYmVpbmcgYWRkZWQgYmFjayBpbnRvIHRoZSBMUlUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgYHJlY2xhaW1pbmdgIGZsYWcgYmV0dGVyIGluIHRoZSBjb250ZXh0IG9mIGBscnVfZ2VuX2FkZF9mb2xpb2AuIEkmIzM5O2xsIGhhdmUgdG8gY3Jvc3MtcmVmZXJlbmNlIHRoZSBmdW5jdGlvbi4KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGRlZmluaXRpb24gb2YgYGZpbGxfZXZpY3RhYmxlYCB0byBzZWUgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIE5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmaXRzIGludG8gdGhlIG92ZXJhbGwgZXZpY3Rpb24gcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmlsbF9ldmljdGFibGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01MjcwPXN0YXRpYyBib29sIF9fbWF5YmVfdW51c2VkIHN0YXRlX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MjkyLVxubW0vdm1zY2FuLmM6NTI5MzpzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG5tbS92bXNjYW4uYy01Mjk0LXtcbi0tXG5tbS92bXNjYW4uYz01MzY3PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbi0tXG5tbS92bXNjYW4uYy01NDAxLVxubW0vdm1zY2FuLmM6NTQwMjpcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xubW0vdm1zY2FuLmMtNTQwMy1cdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGZpbGxfZXZpY3RhYmxlYCoqCgpPa2F5LCBzbyBgZmlsbF9ldmljdGFibGVgIGlzIHRoZSBmdW5jdGlvbiB3ZSYjMzk7cmUgaW50ZXJlc3RlZCBpbi4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgd2hvJiMzOTtzIGNhbGxpbmcgaXQ/IFRoZSB0ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFJpZ2h0LCB0aGF0IGdpdmVzIG1lIGEgY2xlYXIgc3RhcnRpbmcgcG9pbnQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCYjMzk7cyBkcml2aW5nIHRoZSBjYWxsIHRvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWA/IFdoZXJlIGRvZXMgKml0KiBmaXQgaW50byB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmU/IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB0byBzZWUgdGhlIGNvbmRpdGlvbnMgdGhhdCB0cmlnZ2VyIHRoZSBjYWxsIHRvIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgaXMgc3RhbmRhcmQgZGVidWdnaW5nLCBlc3NlbnRpYWxseSB0cmFja2luZyB0aGUgY29udHJvbCBmbG93IHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiBgZmlsbF9ldmljdGFibGVgLiBJJiMzOTtsbCBzdGFydCBieSBsb29raW5nIGZvciBhbGwgY2FsbCBzaXRlcyBvZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhhdCByZXZlYWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjYtXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0ODI6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDgzLVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1NjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgQ2FsbGVycyoqCgpPa2F5LCBzbyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIGJlaW5nIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gUmlnaHQsIHRoYXQgbWFrZXMgc2Vuc2Ug4oCTIGBlbmFibGVkX3N0b3JlYCBpcyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCB3aGljaCBtZWFucyBpdCYjMzk7cyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gYSB1c2VyIHdyaXRpbmcgYSB2YWx1ZSB0byBhIHN5c2ZzIGZpbGUuIEdpdmVuIHRoZSBuYW1lLCBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgcHJvYmFibHkgcmVsYXRlcyB0byBlbmFibGluZyBvciBkaXNhYmxpbmcgc29tZSBzb3J0IG9mIExSVSAoTGVhc3QgUmVjZW50bHkgVXNlZCkgYmVoYXZpb3IsIG9yIG1heWJlIGEgZmVhdHVyZSB0aGF0JiMzOTtzIExSVS1yZWxhdGVkLiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtXaG8gKmVsc2UqIG1pZ2h0IGJlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8mIzM0Oy4gYGVuYWJsZWRfc3RvcmVgIGlzIGp1c3Qgb25lIHBvaW50IG9mIGVudHJ5LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgY29udGV4dC4gV2hhdCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSB0cmlnZ2VyaW5nIGEgc3RhdGUgY2hhbmdlIGluIHRoZSBMUlUgZ2VuZXJhdGlvbj8gQXJlIHRoZXJlIG90aGVyIHN5c2ZzIGVudHJpZXMgdXNpbmcgaXQ/IFBlcmhhcHMgb3RoZXIgaW50ZXJuYWwga2VybmVsIG1vZHVsZXM/IEtub3dpbmcgYWxsIHRoZSBjYWxsZXJzIGlzIGNyaXRpY2FsIGZvciBkZWJ1Z2dpbmcsIGFuYWx5emluZyBwZXJmb3JtYW5jZSBpbXBhY3RzLCBhbmQgZnVsbHkgdW5kZXJzdGFuZGluZyB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBjaGFuZ2VzIG1hZGUgdG8gdGhpcyBmdW5jdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIGZpbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTUzMzg9c3RhdGljIGJvb2wgZHJhaW5fZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01MzY2LVxubW0vdm1zY2FuLmM6NTM2NzpzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG5tbS92bXNjYW4uYy01MzY4LXtcbi0tXG5tbS92bXNjYW4uYz01NDY1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDgxLVx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG5tbS92bXNjYW4uYzo1NDgyOlx0XHRcdGxydV9nZW5fY2hhbmdlX3N0YXRlKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ4My1cdFx0ZWxzZSBpZiAoZW5hYmxlZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIENvbnRleHQgb2Ygc3lzZnMgV3JpdGVzKioKCk9rYXksIHNvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgb25seSBnZXRzIHRyaWdnZXJlZCB3aGVuIHdlJiMzOTtyZSB3cml0aW5nIHRvIGEgc3lzZnMgZmlsZSwgd2hpY2ggaW1tZWRpYXRlbHkgbmFycm93cyBkb3duIHRoZSBzY29wZSBvZiB3aGF0IEkgbmVlZCB0byBpbnZlc3RpZ2F0ZS4gVGhpcyBmdW5jdGlvbiBjYWxsIGlzIGEga2V5IHNpZ25hbC4gTm93LCB0aGUgY3JpdGljYWwgcXVlc3Rpb24gYmVjb21lczogd2hpY2ggc3BlY2lmaWMgc3lzZnMgZmlsZSBpcyBpbml0aWF0aW5nIHRoaXMgcGFydGljdWxhciBjYWxsPyBLbm93aW5nIHRoZSBmaWxlIG5hbWUgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IGFuZCB0aGUgaW1wbGljYXRpb24gb2YgdGhpcyBzdGF0ZSBjaGFuZ2UuIFRpbWUgdG8gZGlnIGluIGFuZCBmaW5kIHRoYXQgc3lzZnMgcGF0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU0NDg9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1Zilcbi0tXG5tbS92bXNjYW4uYy01NDY0LS8qIHNlZSBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMgKi9cbm1tL3Ztc2Nhbi5jOjU0NjU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxubW0vdm1zY2FuLmMtNTQ2Ni1cdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyNQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zdG9yZWAgaW4gc3lzZnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIHNwZWNpZmljIHN5c2ZzIGF0dHJpYnV0ZSB1dGlsaXplcyB0aGF0IGBlbmFibGVkX3N0b3JlYCBmdW5jdGlvbi4gVGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLCBgZW5hYmxlZF9zdG9yZWAsIHN0cm9uZ2x5IHN1Z2dlc3RzIGl0JiMzOTtzIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9mIHNvbWUgZmVhdHVyZSBvciBoYXJkd2FyZSBjb21wb25lbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYSB1c2Ugb2YgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBtZXRob2QgZm9yIHNlYXJjaGluZywgbGlrZWx5IGxldmVyYWdpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHdheSB0byBmaW5kIGl0LiBUaW1lIHRvIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtlbmFibGVkX3N0b3JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NjQtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXG5tbS92bXNjYW4uYy01NDY2LVx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgbGVuKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzUyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOgoKKipNeSBCcmFpbnN0b3JtaW5nIGZvciBhIEtlcm5lbCBDb2RlIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgZW5hYmxlZF9zdG9yZWAgaXMgYmVpbmcgdXNlZCwgYnV0IGEgc3RyYWlnaHQgZ3JlcCBpc24mIzM5O3QgZ29pbmcgdG8gY3V0IGl0LiBJIG5lZWQgbW9yZSBjb250ZXh0IHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIHBhcnRpY3VsYXIgdmFyaWFibGUuIFdoYXQmIzM5O3MgaXQgYWN0dWFsbHkgKmRvaW5nKj8gSXQmIzM5O3MgcHJvYmFibHkgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igb3B0aW1pemF0aW9uIHdpdGhpbiB0aGUgdmlydHVhbCBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uCgpIbW0sIG1heWJlIEkgc2hvdWxkIGJyb2FkZW4gdGhlIHNlYXJjaCwgc2luY2UgYGVuYWJsZWRfc3RvcmVgIG1pZ2h0IGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBhIG1hY3JvIG9yIGlubGluZSBmdW5jdGlvbi4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIGNhc2Ugd2hlcmUgdGhpbmdzIGxpa2UgdGhpcyBhcmUgd3JhcHBlZCBpbiBrZXJuZWwtc3R5bGUgYXR0cmlidXRlcy4gT2theSwgSSYjMzk7bGwgdHJ5IHNlYXJjaGluZyBmb3IgYF9fQVRUUmAgZmlyc3QuIFRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGJyb2FkZXIgdmlldyBvZiBob3cgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaXMgc3RydWN0dXJlZC4gVGhhdCBzaG91bGQgaGVscCBtZSB6ZXJvIGluIG9uIHRoZSBleGFjdCBzZWN0aW9uIHRoYXQgSSBuZWVkIHRvIGFuYWx5emUuIEdvdHRhIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBtaXNzIHNvbWV0aGluZyBjcml0aWNhbC4gTGV0JiMzOTtzIHNlZS4uLiBhIHdpZGVyIHNlYXJjaCBzaG91bGQgaGVscCBjbGFyaWZ5IGFueSBzdXJyb3VuZGluZyB1c2FnZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX0FUVFIuKmVuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zaG93YCBhbmQgYGVuYWJsZWRfc3RvcmVgIFVzYWdlKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSAmIzM0O2VuYWJsZWQmIzM0OyBmbGFncyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBlbmFibGVkX3Nob3dgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFjdHVhbGx5IHV0aWxpemVkLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBjb250cm9sIHBvaW50cyBmb3IgZmVhdHVyZSB0b2dnbGVzIG9yIHBlcm1pc3Npb25pbmcsIGJ1dCBJIG5lZWQgY29uY3JldGUgZXZpZGVuY2UgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciByZWZhY3RvcmluZy4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgcmV2ZWFsIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBkZWZpbmVkLCBtb2RpZmllZCwgYW5kIGNvbnN1bWVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSAmIzM0O2VuYWJsZWQmIzM0OyBmbGFncyBhZmZlY3QgZGF0YSB2aXNpYmlsaXR5IG9yIGF2YWlsYWJpbGl0eS4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoaWNoIG1vZHVsZXMsIGZ1bmN0aW9ucywgYW5kIHBvdGVudGlhbGx5IGV2ZW4gZGF0YSBzdHJ1Y3R1cmVzIGludGVyYWN0IHdpdGggdGhvc2UgdmFyaWFibGVzLCBzbyBJJiMzOTtsbCBuZWVkIGEgY29tcHJlaGVuc2l2ZSBzZWFyY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz01NDQ4PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpXG4tLVxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXG5tbS92bXNjYW4uYzo1NDY1OnN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbm1tL3Ztc2Nhbi5jLTU0NjYtXHRcdFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0NjQKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgdmlydHVhbCBtZW1vcnkgc2Nhbm5lciwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDU0NjUgaW4gYG1tL3Ztc2Nhbi5jYC4gSSYjMzk7bSBnb2luZyB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgaG90IHNwb3RzIG9mIHRoZSBzY2FubmluZyBsb2dpYyBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gcmVjbGFpbS4gTXkgaHVuY2ggaXMgdGhhdCBJJiMzOTttIGdvaW5nIHRvIGZpbmQgc29tZSBvZiB0aGUgY29yZSByZWNsYWltIGRlY2lzaW9ucyBiZWluZyBtYWRlLiBJJiMzOTttIHByb2JhYmx5IGxvb2tpbmcgYXQgdGhlIG1haW4gc2NhbiBsb29wIG9yIGEgZGVjaXNpb24gcG9pbnQgb24gd2hhdCB0byByZWNsYWltIGZyb20gdmFyaW91cyB6b25lcy4gSXQmIzM5O3Mgb2Z0ZW4gdGhlIHBsYWNlIHdoZXJlIHRoZSBzeXN0ZW0gaXMgbWFraW5nIHRyYWRlLW9mZnMgYmV0d2VlbiBkaWZmZXJlbnQgcGFnZSB0eXBlcyBhbmQgZGV0ZXJtaW5pbmcgdGhlIGVmZmljYWN5IG9mIGFnZ3Jlc3NpdmUgcmVjbGFpbSB2cyBrZWVwaW5nIHBhZ2VzIGluIGEgY2FjaGUuIEdpdmVuIHRoZSBsaW5lIG51bWJlciwgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGFjdHVhbCBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzIG9yIGEgY3JpdGljYWwgem9uZS1zcGVjaWZpYyByZWNsYWltIGFsZ29yaXRobS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyB0aGUgYHNocmlua19zbGFiYCBvciBgc2hyaW5rX3BhZ2VfbGlzdGAgZnVuY3Rpb25zLiBJIGFudGljaXBhdGUgSSYjMzk7bGwgc2VlIHNvbWV0aGluZyBhcm91bmQgdGhlIGBscnVfbG9ja2AgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHRocmVhZHMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFZNIGRlc2lnbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU0NjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTQ2NTpcdHN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbjU0NjY6XHRcdFx0XHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcbjU0Njc6XHR7XG41NDY4Olx0XHRpbnQgaTtcbjU0Njk6XHRcdHVuc2lnbmVkIGludCBjYXBzO1xuNTQ3MDpcdFxuNTQ3MTpcdFx0aWYgKHRvbG93ZXIoKmJ1ZikgPT0gJiMzOTtuJiMzOTspXG41NDcyOlx0XHRcdGNhcHMgPSAwO1xuNTQ3MzpcdFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAmIzM5O3kmIzM5OylcbjU0NzQ6XHRcdFx0Y2FwcyA9IC0xO1xuNTQ3NTpcdFx0ZWxzZSBpZiAoa3N0cnRvdWludChidWYsIDAsIFx1MDAyNmNhcHMpKVxuNTQ3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjU0Nzc6XHRcbjU0Nzg6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9HRU5fQ0FQUzsgaSYjNDM7JiM0MzspIHtcbjU0Nzk6XHRcdFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcdTAwMjYgQklUKGkpO1xuNTQ4MDpcdFxuNTQ4MTpcdFx0XHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXG41NDgyOlx0XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG41NDgzOlx0XHRcdGVsc2UgaWYgKGVuYWJsZWQpXG41NDg0Olx0XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXHUwMDI2bHJ1X2dlbl9jYXBzW2ldKTtcbjU0ODU6XHRcdFx0ZWxzZVxuNTQ4NjpcdFx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZShcdTAwMjZscnVfZ2VuX2NhcHNbaV0pO1xuNTQ4NzpcdFx0fVxuNTQ4ODpcdFxuNTQ4OTpcdFx0cmV0dXJuIGxlbjtcbjU0OTA6XHR9XG41NDkxOlx0XG41NDkyOlx0c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcbjU0OTM6XHRcbjU0OTQ6XHRzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqbHJ1X2dlbl9hdHRyc1tdID0ge1xuNTQ5NTpcdFx0XHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcbjU0OTY6XHRcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG41NDk3Olx0XHROVUxMXG41NDk4Olx0fTtcbjU0OTk6XHRcbjU1MDA6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZV9ncm91cCBscnVfZ2VuX2F0dHJfZ3JvdXAgPSB7XG41NTAxOlx0XHQubmFtZSA9IFwmIzM0O2xydV9nZW5cJiMzNDssXG41NTAyOlx0XHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxuNTUwMzpcdH07XG41NTA0Olx0XG41NTA1Olx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuNTUwNjpcdCAqICAgICAgICAgICAgICAgICAgICAgICAgICBkZWJ1Z2ZzIGludGVyZmFjZVxuNTUwNzpcdCAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG41NTA4Olx0XG41NTA5Olx0c3RhdGljIHZvaWQgKmxydV9nZW5fc2VxX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwb3MpXG41NTEwOlx0e1xuNTUxMTpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuNTUxMjpcdFx0bG9mZl90IG5yX3RvX3NraXAgPSAqcG9zO1xuNTUxMzpcdFxuNTUxNDpcdFx0bS1cdTAwM2Vwcml2YXRlID0ga3ZtYWxsb2MoUEFUSF9NQVgsIEdGUF9LRVJORUwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTA4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTUdMUlUgRmVhdHVyZSYjMzk7cyBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBuZXcgYXR0cmlidXRlLCBgbHJ1X2dlbl9lbmFibGVkX2F0dHJgLiBSaWdodCwgaXQgY3JlYXRlcyB0aGF0IGBlbmFibGVkYCBzeXNmcyBmaWxlIHdpdGhpbiB0aGUgYGxydV9nZW5gIGRpcmVjdG9yeS4gU3RhbmRhcmQgc3R1ZmYgZm9yIHRoZSBNR0xSVSBmZWF0dXJlLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIHRvdWNoaW5nIHRoZSBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGFuZCBtdXN0IGJlIGNyaXRpY2FsIHRvIHRoZSBlbmFibGluZyBvciBkaXNhYmxpbmcgcHJvY2VzcyB0aHJvdWdoIHN5c2ZzLiBBaCwgYnV0IHdhaXQgYSBtaW51dGXigKZJJiMzOTttIHJlbWVtYmVyaW5nIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpc24mIzM5O3QgY2FsbGVkIGRpcmVjdGx5IGZyb20gc3lzZnMsIGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl0JiMzOTtzIGxpa2VseSB0aGUgY2VudHJhbCBwb2ludCBmb3IgdGhlIHN0YXRlIGNoYW5nZSBsb2dpYy4gSSYjMzk7bGwgZ2V0IHRoZSBmdWxsIHBpY3R1cmUgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MzY3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUzNjc6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG41MzY4Olx0e1xuNTM2OTpcdFx0c3RhdGljIERFRklORV9NVVRFWChzdGF0ZV9tdXRleCk7XG41MzcwOlx0XG41MzcxOlx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XG41MzcyOlx0XG41MzczOlx0XHRjZ3JvdXBfbG9jaygpO1xuNTM3NDpcdFx0Y3B1c19yZWFkX2xvY2soKTtcbjUzNzU6XHRcdGdldF9vbmxpbmVfbWVtcygpO1xuNTM3NjpcdFx0bXV0ZXhfbG9jayhcdTAwMjZzdGF0ZV9tdXRleCk7XG41Mzc3Olx0XG41Mzc4Olx0XHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcbjUzNzk6XHRcdFx0Z290byB1bmxvY2s7XG41MzgwOlx0XG41MzgxOlx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9zd2l0Y2gpO1xuNTM4MjpcdFxuNTM4MzpcdFx0aWYgKGVuYWJsZWQpXG41Mzg0Olx0XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X2dlbl9jYXBzW0xSVV9HRU5fQ09SRV0pO1xuNTM4NTpcdFx0ZWxzZVxuNTM4NjpcdFx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG41Mzg3Olx0XG41Mzg4Olx0XHRtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBOVUxMLCBOVUxMKTtcbjUzODk6XHRcdGRvIHtcbjUzOTA6XHRcdFx0aW50IG5pZDtcbjUzOTE6XHRcbjUzOTI6XHRcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbjUzOTM6XHRcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xuNTM5NDpcdFxuNTM5NTpcdFx0XHRcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xuNTM5NjpcdFxuNTM5NzpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc2VxX2lzX3ZhbGlkKGxydXZlYykpO1xuNTM5ODpcdFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XG41Mzk5Olx0XG41NDAwOlx0XHRcdFx0bHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkID0gZW5hYmxlZDtcbjU0MDE6XHRcbjU0MDI6XHRcdFx0XHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xuNTQwMzpcdFx0XHRcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjU0MDQ6XHRcdFx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuNTQwNTpcdFx0XHRcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG41NDA2Olx0XHRcdFx0fVxuNTQwNzpcdFxuNTQwODpcdFx0XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG41NDA5Olx0XHRcdH1cbjU0MTA6XHRcbjU0MTE6XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG41NDEyOlx0XHR9IHdoaWxlICgobWVtY2cgPSBtZW1fY2dyb3VwX2l0ZXIoTlVMTCwgbWVtY2csIE5VTEwpKSk7XG41NDEzOlx0XG41NDE0Olx0XHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfc3dpdGNoKTtcbjU0MTU6XHRcbjU0MTY6XHR1bmxvY2s6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc1NzMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNR0xSVSBBY3RpdmF0aW9uIFBhdGgqKgoKQWxyaWdodCwgc28gYGZpbGxfZXZpY3RhYmxlYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCBnZXRzIGNhbGxlZCB3aGVuIE1HTFJVIGlzIGFjdGl2YXRlZCB0aHJvdWdoIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoYXQgbWFrZXMgc2Vuc2UsIGEgc2lnbmFsIHRvIHN0YXJ0IHBvcHVsYXRpbmcgZGF0YS4gV2FpdCBhIHNlY29uZCwgdGhvdWdoLi4uIEkgbmVlZCB0byBjbGFyaWZ5IHNvbWV0aGluZyBxdWlja2x5OiBpcyBNR0xSVSBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgY2FuJiMzOTt0IHF1aXRlIHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBmbG93LiBMZXQmIzM5O3MgaGVhZCBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZXM7IHRoYXQmIzM5O3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgY2hlY2tpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gY29uZmlybSB0aGUgZGVmYXVsdCBNR0xSVSBiZWhhdmlvciBhbmQgaXRzIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIExSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXG4tLVxubW0vS2NvbmZpZy0xNDAzLSMgbXVsdGktZ2VuIExSVSB7XG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cbm1tL0tjb25maWctMTQwNS1cdGJvb2wgXCYjMzQ7TXVsdGktR2VuIExSVVwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMi1cbm1tL0tjb25maWc6MTQxMzpjb25maWcgTFJVX0dFTl9FTkFCTEVEXG5tbS9LY29uZmlnLTE0MTQtXHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDE4LVxubW0vS2NvbmZpZzoxNDE5OmNvbmZpZyBMUlVfR0VOX1NUQVRTXG5tbS9LY29uZmlnLTE0MjAtXHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuLS1cbm1tL0tjb25maWctMTQyNy1cbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbm1tL0tjb25maWctMTQyOS1cdGRlZl9ib29sIHlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIHN0cmVhbSBvZiB0aG91Z2h0OgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhYnlyaW50aCoqCgpBbHJpZ2h0LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDE0MDQuIExldCYjMzk7cyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlICYjMzQ7bW0vJiMzNDsgcHJlZml4LiBJJiMzOTttIGd1ZXNzaW5nIHRoYXQgbGluZSAxNDA0IGlzIGEga2V5IGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBwZXJoYXBzIHRoZSBzdGFydCBvZiBhIGxvZ2ljYWwgYmxvY2sgZGVmaW5pbmcgb3B0aW9ucy4KCkdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFudGljaXBhdGUgd2hhdCBJIG1pZ2h0IGZpbmQuIElzIGl0IHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9ucz8gUGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXM/IE1heWJlIHNvbWUgbmV3IG1lbW9yeSBwcm90ZWN0aW9uIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiBpbnRyb2R1Y2VkPyBDb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byBaT05FX0RNQSBvciBoaWdoIG1lbW9yeSBzdXBwb3J0LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSYjMzk7bSBtZW50YWxseSBwYXJzaW5nIHRoZSBsaWtlbHkgaW5jbHVkZSBzdGF0ZW1lbnRzIGFuZCBjcm9zcy1yZWZlcmVuY2VzIHdpdGhpbiBgS2NvbmZpZ2AuIEkmIzM5O20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBkZXBlbmRlbmNpZXMuIEl0IGlzIGxpa2VseSB0aGF0IHRoaXMgcGFydCBvZiB0aGUgS2NvbmZpZyBmaWxlIHRpZXMgaW50byBvdGhlciBzdWJzeXN0ZW1zLCBzbyB0aGlzIHdvbiYjMzk7dCBiZSBhbiBpc29sYXRlZCBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGNvbXBsZXgsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBvcHRpb24gYXQgaGFuZC4gSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0byBjaGVjayBmb3IgYW55IGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHZhbHVlcy4gTGV0JiMzOTtzIGhvcGUgdGhhdCBpdCBpcyB3ZWxsIGRvY3VtZW50ZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MDQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQwNDpcdGNvbmZpZyBMUlVfR0VOXG4xNDA1Olx0XHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbjE0MDY6XHRcdGRlcGVuZHMgb24gTU1VXG4xNDA3Olx0XHQjIG1ha2Ugc3VyZSBmb2xpby1cdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcbjE0MDg6XHRcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxuMTQwOTpcdFx0aGVscFxuMTQxMDpcdFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcbjE0MTE6XHRcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxuMTQxMjpcdFxuMTQxMzpcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbjE0MTQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbjE0MTU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTlxuMTQxNjpcdFx0aGVscFxuMTQxNzpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXG4xNDE4Olx0XG4xNDE5Olx0Y29uZmlnIExSVV9HRU5fU1RBVFNcbjE0MjA6XHRcdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4xNDIxOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MjI6XHRcdGhlbHBcbjE0MjM6XHRcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2NzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLgoKKipMUlUgR2VuZXJhdGlvbiBhbmQgRXZpY3Rpb24gRmxvdyoqCgpBbHJpZ2h0LCBzbyBgTFJVX0dFTmAgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRoYXQmIzM5O3Mga2V5IGhlcmUuIElmIHRoYXQmIzM5O3MgZW5hYmxlZCwgdGhlbiB3ZSYjMzk7cmUgY29tcGlsaW5nIGluIGBmaWxsX2V2aWN0YWJsZWAuIEhtbSwgd2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgYGZpbGxfZXZpY3RhYmxlYCBhY3R1YWxseSAqaW5zaWRlKiBhIHByZXByb2Nlc3NvciBjb25kaXRpb25hbCBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUmIzM5O3MgdGhlIHNvdXJjZT8gUmlnaHQsIGBtbS92bXNjYW4uY2AgaXMgdGhlIG1vc3QgbGlrZWx5IHNwb3QgdG8gZmluZCB0aGUgZGV0YWlscyBvZiB0aGUgc2Nhbi4gTGV0JiMzOTtzIGhlYWQgb3ZlciB0aGVyZSBhbmQgY29uZmlybSBteSBoeXBvdGhlc2lzLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGxvZ2ljIGhvbGRzIHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgyNz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTgzMi1cbm1tL3Ztc2Nhbi5jOjgzMzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTgzNC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTg2Mj1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtODY1LX1cbm1tL3Ztc2Nhbi5jOjg2NjojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTg2Ny1cbi0tXG5tbS92bXNjYW4uYz0yNjgwPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjY5MS1cbm1tL3Ztc2Nhbi5jOjI2OTI6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNjkzLVxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI2OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI2OTYtREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjg4MD1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0yODk5LVxubW0vdm1zY2FuLmM6MjkwMDojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0yOTAxLVxuLS1cbm1tL3Ztc2Nhbi5jPTMwMDk9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzAzNy1cbm1tL3Ztc2Nhbi5jOjMwMzg6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzAzOS1cbi0tXG5tbS92bXNjYW4uYz01OTU3PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTU5NTgtXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk2MC1cbi0tXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNTk3NS1cbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy01OTc3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NjE5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGBmaWxsX2V2aWN0YWJsZWAgUmVhY2hhYmlsaXR5KioKCk9rYXksIHNvIEkgc2VlIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpcyBpbmRlZWQgY29uZGl0aW9uYWxseSBjb21waWxlZCB3aXRoaW4gdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZmlndXJlIG91dCBob3cgcmVhY2hhYmxlIHRoaXMgZnVuY3Rpb24gaXMsIHNwZWNpZmljYWxseSBmcm9tIHVzZXJzcGFjZS4gSXQgbG9va3MgbGlrZSB3cml0aW5nIHRvIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIGlzIHRoZSBwYXRoLiBJIG5lZWQgdG8gYmUgc3VyZTsgZG9lcyBzeXprYWxsZXIgdGVzdCBzeXNmcyB3cml0ZXM/IFllcywgaXQgZG9lcywgc28gdGhhdCYjMzk7cyBhIHZpYWJsZSBhdmVudWUgZm9yIHRlc3RpbmcuCgpIb3dldmVyLCBJJiMzOTttIHRoaW5raW5nIHN0cmF0ZWdpY2FsbHkuIEZvY3VzaW5nIGRpcmVjdGx5IG9uIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgb3IgYGZpbGxfZXZpY3RhYmxlYCBjb3VsZCBhbHNvIGJlIGEgZ29vZCBhcHByb2FjaC4gSG9sZCBvbiwgYGZpbGxfZXZpY3RhYmxlYCBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIExldCYjMzk7cyBmaW5kICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBnaXZpbmcgbWUgbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgY29uZGl0aW9uYWwgcGF0aC4gT2theSwgYm90aCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFsc28gc3RhdGljLiBCdXQsIHdhaXQuLi4gYGVuYWJsZWRfc3RvcmVgIGlzIHJlZ2lzdGVyZWQgYXMgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQmIzM5O3MgcHJvbWlzaW5nLiBJIG5lZWQgdG8gZmluZCBvdXQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjYWxsZXJzIG9mIGBmaWxsX2V2aWN0YWJsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpbGxfZXZpY3RhYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXG4tLVxubW0vdm1zY2FuLmMtNTI5Mi1cbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxubW0vdm1zY2FuLmMtNTI5NC17XG4tLVxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTQwMS1cbm1tL3Ztc2Nhbi5jOjU0MDI6XHRcdFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcbm1tL3Ztc2Nhbi5jLTU0MDMtXHRcdFx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDMxMQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgZmlsbF9ldmljdGFibGVgJiMzOTtzIENhbGxlcnMqKgoKT2theSwgc28gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBpdHMgcm9sZSBpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MuIE5vdywgdGhlIG5leHQgbG9naWNhbCBxdWVzdGlvbiBpcywgd2hlcmUgZWxzZSBpcyBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGJlaW5nIGNhbGxlZCBmcm9tPyBJIG5lZWQgdG8gdHJhY2UgYmFjayB1cCB0aGUgY2FsbCBzdGFjayB0byBzZWUgd2hhdCB0cmlnZ2VycyAqdGhhdCogZnVuY3Rpb24uIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgdGhvc2UgaGlnaGVyLWxldmVsIGNhbGxzIHdpbGwgZ2l2ZSBtZSB0aGUgYmlnZ2VyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IGBmaWxsX2V2aWN0YWJsZWAgaXMgaW52b2tlZC4gSXQmIzM5O3MgYWxsIGFib3V0IHVuZGVyc3RhbmRpbmcgdGhlIGNvbnRyb2wgZmxvdyBhbmQgaG93IGV2aWN0aW9uIGRlY2lzaW9ucyBhcmUgdWx0aW1hdGVseSBkcml2ZW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbml0aWF0aW5nIGZhY3RvcnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fY2hhbmdlX3N0YXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNjYtXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbm1tL3Ztc2Nhbi5jLTUzNjgte1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxuLS1cbm1tL3Ztc2Nhbi5jLTU0ODEtXHRcdGlmIChpID09IExSVV9HRU5fQ09SRSlcbm1tL3Ztc2Nhbi5jOjU0ODI6XHRcdFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XG5tbS92bXNjYW4uYy01NDgzLVx0XHRlbHNlIGlmIChlbmFibGVkKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc3MgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDExNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnkqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBmb3IgYGZpbGxfZXZpY3RhYmxlYC4gRnJvbSBteSBjb2RlIHJldmlldywgaXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG9ubHkgcGF0aC4gQnV0IGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgY29uZmlybSDigJMgeWVwLCBzZWVtcyBsaWtlIGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIHNvbGUgdHJpZ2dlci4gR29vZC4gQW5kLCBzaW5jZSBpdCYjMzk7cyBhIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uLCBJIGtub3cgaXQmIzM5O3MgcmVhY2hhYmxlLgoKQnV0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGlmIE1HTFJVIGlzIGVuYWJsZWQgYnkgZGVmYXVsdD8gSWYgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGlzIHNldCwgdGhlIHN5c3RlbSBib290cyB3aXRoIE1HTFJVIGFjdGl2ZSwgcmlnaHQ/IFNvLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgaW5pdF9scnVfZ2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvY2VzcyBkb2VzbiYjMzk7dCBnZXQgdHJpZ2dlcmVkIGF1dG9tYXRpY2FsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luaXRfbHJ1X2dlbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTU5MTM9dm9pZCBscnVfZ2VuX2V4aXRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NDEtXG5tbS92bXNjYW4uYzo1OTQyOnN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxubW0vdm1zY2FuLmMtNTk0My17XG4tLVxubW0vdm1zY2FuLmMtNTk1Ni19O1xubW0vdm1zY2FuLmM6NTk1NzpsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTU4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI2NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIHdlbGwtdmVyc2VkIGluIHRoaXMgZmllbGQ6CgoqKkxldCYjMzk7cyBEaXZlIGludG8gYGluaXRfbHJ1X2dlbmAqKgoKQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJJiMzOTttIGdvaW5nIHRvIHRha2UgYSBsb29rIGF0IGBpbml0X2xydV9nZW5gLiBUaGlzIGltbWVkaWF0ZWx5IHNpZ25hbHMgYSBzcGVjaWZpYyBmdW5jdGlvbiwgcHJvYmFibHkgcmVsYXRlZCB0byB0aGUgaW5pdGlhbGl6YXRpb24gb2YgYW4gTFJVIGNhY2hlLCBnaXZlbiB0aGUgbmFtZS4gVGhlICYjMzQ7Z2VuJiMzNDsgc3VmZml4IGxpa2VseSBoaW50cyBhdCBzb21lIHNvcnQgb2YgZ2VuZXJhdG9yIGNvbXBvbmVudCwgd2hpY2ggaXMgaW1tZWRpYXRlbHkgaW50ZXJlc3RpbmcuIE15IG1pbmQgaXMgYWxyZWFkeSBzdGFydGluZyB0byBmb3JtdWxhdGUgcXVlc3Rpb25zOgoKKiAgIElzIGl0IGEgZ2VuZXJhdG9yLWJhc2VkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBMUlUgaXRzZWxmPwoqICAgSXMgaXQgaW5pdGlhbGl6aW5nIGRhdGEgc3RydWN0dXJlcyB1c2VkIGJ5IGEgbGF0ZXIgZ2VuZXJhdG9yPwoqICAgV2hhdCYjMzk7cyB0aGUgb3ZlcmFsbCBzdHJ1Y3R1cmUgYW5kIGRlc2lnbiBwaGlsb3NvcGh5IGhlcmU/IElzIHRoaXMgZm9yIGVmZmljaWVudCBtZW1vcnkgbWFuYWdlbWVudCBpbiB0aGUgTFJVPwoKSSYjMzk7bSByZWFkeSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZS4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2U6CgoqICAgRGF0YSBzdHJ1Y3R1cmUgY2hvaWNlczogSGFzaCBtYXBzPyBMaW5rZWQgbGlzdHM/IE90aGVyIHN0cnVjdHVyZXMgb3B0aW1pemVkIGZvciBMUlUgYmVoYXZpb3I/CiogICBIb3cgdGhlIGNhY2hlIGlzIHBvcHVsYXRlZCBpbml0aWFsbHkuIEFyZSB0aGVyZSBkZWZhdWx0IHZhbHVlcywgb3IgaW5pdGlhbCBlbnRyaWVzPwoqICAgSG93IHRoZSAmIzM0O2dlbmVyYXRvciYjMzQ7IGFzcGVjdCBpcyBpbnRlZ3JhdGVkLiBIb3cgaXMgaXQgZ2VuZXJhdGluZyBjYWNoZWQgdmFsdWVzPwoqICAgV2hhdCBhc3N1bXB0aW9ucyBhcmUgYmVpbmcgbWFkZSBhYm91dCB0aGUgY2FjaGUmIzM5O3Mga2V5L3ZhbHVlIHR5cGVzPyBBcmUgdGhlcmUgYW55IHR5cGUtcmVsYXRlZCBjb25zdHJhaW50cz8KKiAgIEVycm9yIGhhbmRsaW5nLCBwYXJ0aWN1bGFybHkgYXJvdW5kIGFsbG9jYXRpb24gYW5kIHBvdGVudGlhbCBvdmVyZmxvdy4KCkVzc2VudGlhbGx5LCBJJiMzOTttIGdvaW5nIHRvIHN0YXJ0IHdpdGggYSBicm9hZCBvdmVydmlldyBhbmQgdGhlbiBpbW1lZGlhdGVseSBob25lIGluIG9uIHRoZSBjb3JlIGRhdGEgc3RydWN0dXJlcyBhbmQgZ2VuZXJhdG9yIGxvZ2ljIHRvIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIExSVSBjYWNoZSBkZXNpZ24uIEkmIzM5O20gZXhjaXRlZCB0byBzZWUgaG93IGl0JiMzOTtzIGltcGxlbWVudGVkIGFuZCBob3cgd2VsbCBpdCBtYXRjaGVzIG15IGV4cGVjdGF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDU5NDIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTk0MjpcdHN0YXRpYyBpbnQgX19pbml0IGluaXRfbHJ1X2dlbih2b2lkKVxuNTk0MzpcdHtcbjU5NDQ6XHRcdEJVSUxEX0JVR19PTihNSU5fTlJfR0VOUyAmIzQzOyAxIFx1MDAzZT0gTUFYX05SX0dFTlMpO1xuNTk0NTpcdFx0QlVJTERfQlVHX09OKEJJVChMUlVfR0VOX1dJRFRIKSBcdTAwM2M9IE1BWF9OUl9HRU5TKTtcbjU5NDY6XHRcbjU5NDc6XHRcdGlmIChzeXNmc19jcmVhdGVfZ3JvdXAobW1fa29iaiwgXHUwMDI2bHJ1X2dlbl9hdHRyX2dyb3VwKSlcbjU5NDg6XHRcdFx0cHJfZXJyKFwmIzM0O2xydV9nZW46IGZhaWxlZCB0byBjcmVhdGUgc3lzZnMgZ3JvdXBcXG5cJiMzNDspO1xuNTk0OTpcdFxuNTk1MDpcdFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFwmIzM0O2xydV9nZW5cJiMzNDssIDA2NDQsIE5VTEwsIE5VTEwsIGZhbHNlLFxuNTk1MTpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XG41OTUyOlx0XHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXCYjMzQ7bHJ1X2dlbl9mdWxsXCYjMzQ7LCAwNDQ0LCBOVUxMLCBOVUxMLCB0cnVlLFxuNTk1MzpcdFx0XHRcdFx0ICAgIFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XG41OTU0Olx0XG41OTU1Olx0XHRyZXR1cm4gMDtcbjU5NTY6XHR9O1xuNTk1NzpcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbjU5NTg6XHRcbjU5NTk6XHQjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbjU5NjA6XHRcbjU5NjE6XHRzdGF0aWMgdm9pZCBscnVfZ2VuX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA0OAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTUdMUlUgQm9vdC1VcCoqCgpPa2F5LCBzbyBgaW5pdF9scnVfZ2VuYCBpcyBhcHBhcmVudGx5IGp1c3QgcmVzcG9uc2libGUgZm9yIHNldHRpbmcgdXAgdGhlIHN5c2ZzIGFuZCBkZWJ1Z2ZzIGludGVyZmFjZXMuIFRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gQnV0IGEgcXVlc3Rpb24gaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQ6IGhvdyBleGFjdGx5ICppcyogTUdMUlUgZW5hYmxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2VzcyBpZiB0aGUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIHNldD8gSXQgaGFzIHRvIGJlIGNvbWluZyBmcm9tIHNvbWV3aGVyZS4gSSBuZWVkIHRvIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuIFRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gYGxydV9nZW5fZW5hYmxlZCgpYCDigJMgdGhhdCBmdW5jdGlvbiBzaG91bGQgaG9sZCB0aGUga2V5LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNoZWNrIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydV9nZW5fZW5hYmxlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTg2OD1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy04OTItXG5tbS92bXNjYW4uYzo4OTM6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy04OTQtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIyODA9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjI4Ni1cbm1tL3Ztc2Nhbi5jOjIyODc6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjI4OC1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTUzNjc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTUzNzctXG5tbS92bXNjYW4uYzo1Mzc4Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01Mzc5LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NDY1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NDkxLVxubW0vdm1zY2FuLmM6NTQ5MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTQ5My1cbm1tL3Ztc2Nhbi5jPTU0OTQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU0OTUtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTQ5NjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NDk3LVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTU4ODA9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy01ODg3LVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NTg4ODpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy01ODg5LVxuLS1cbm1tL3Ztc2Nhbi5jPTU5Nzg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5ODgtXG5tbS92bXNjYW4uYzo1OTg5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTU5OTAtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02MjQ4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyNTMtXG5tbS92bXNjYW4uYzo2MjU0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjI1NS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02NTI1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjUyOS1cbm1tL3Ztc2Nhbi5jOjY1MzA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjUzMS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTY5MTU9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY5MTktXG5tbS92bXNjYW4uYzo2OTIwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTY5MjEtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNDcKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqVHJhY2luZyBgbHJ1X2dlbl9lbmFibGVkYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYGxydV9nZW5fZW5hYmxlZGAgaXMgYmVpbmcgdXNlZCBhbmQgd2hhdCBpdHMgc2NvcGUgaXMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGxvY2F0ZSBpdHMgZGVmaW5pdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IHZhcmlhYmxlIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiBpbiB0aGUgY29kZS4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoaXMgZmxhZywgc28gSSBjYW4gdW5kZXJzdGFuZCBpdHMgaW50ZW5kZWQgcHVycG9zZSBhbmQgaG93IGl0IGluZmx1ZW5jZXMgdGhlIHN5c3RlbSYjMzk7cyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHRyYWNlIHRoYXQgdmFyaWFibGUgZG93bi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tem9uZS5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqQ2hlY2tpbmcgdGhlIGBscnVfZ2VuX2VuYWJsZWRgIERlZmluaXRpb24qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaGUgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBwaW5wb2ludCB3aGVyZSBgbHJ1X2dlbl9lbmFibGVkYCBpcyBhY3R1YWxseSAqZGVmaW5lZCouIEkgbmVlZCB0byBrbm93IGl0cyBzY29wZSwgaXRzIHR5cGUgKGlmIGFueSksIGFuZCBhbnkgZGVmYXVsdCB2YWx1ZXMuIFRoYXQgbWVhbnMgZGl2aW5nIGludG8gdGhlIGBpbmNsdWRlL2AgZGlyZWN0b3J5IOKAkyB0aGF0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBhbmQgaGVhZGVycyB0eXBpY2FsbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2YXJpYWJsZSB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9yIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gU28sIG9mZiB0byBgaW5jbHVkZS9gIEkgZ28uIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwMjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTEwMD1zdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9zd2l0Y2hpbmcodm9pZClcbi0tXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNi0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaDoxMDc6c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fZW5hYmxlZCh2b2lkKVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0xMDgte1xuLS1cbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMTEzLSNlbHNlXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjExNDpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExNS17XG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0zMDc9c3RhdGljIGlubGluZSB2b2lkIGZvbGlvX21pZ3JhdGVfcmVmcyhzdHJ1Y3QgZm9saW8gKm5ldywgY29uc3Qgc3RydWN0IGZvbGlvICpvbGQpXG4tLVxuaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaC0zMTQtXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oOjMxNTpzdGF0aWMgaW5saW5lIGJvb2wgbHJ1X2dlbl9lbmFibGVkKHZvaWQpXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzOTk4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gTFJVIEdlbmVyYXRpb24gQmVoYXZpb3IqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIHNldHRpbmcuIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgdGhhdCYjMzk7cyBkZWZpbmVkLCBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGdvaW5nIHRvIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQuIFRoYXQmIzM5O3MgdGhlIGV4cGVjdGVkIGJlaGF2aW9yLiBOb3csIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucy4gSWYgaXQmIzM5O3MgKmVuYWJsZWQqIGJ5IGRlZmF1bHQsIHRoZW4gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB3aWxsIGxpa2VseSAqb25seSogYmUgaW52b2tlZCB3aGVuIGEgdXNlcnNwYWNlIHByb2Nlc3MgZXhwbGljaXRseSBpbnRlcmFjdHMgd2l0aCBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYC4gRXNzZW50aWFsbHksIGl0JiMzOTtzIGEgZGlzYWJsZS9yZS1lbmFibGUgc3dpdGNoLCB5ZWFoPwoKTm93LCB0aGUgbmV4dCB0aGluZyB0aGF0IHBvcHMgaW50byBteSBoZWFkIGlzIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgZnVuY3Rpb24gaXMgdGllZCB0byB0aGUgYGVuYWJsZWRgIHN0YXRlLiBUaGUgY3JpdGljYWwgdGhpbmcgaGVyZSBpcyAqd2hlbiogYGZpbGxfZXZpY3RhYmxlYCBpcyBhY3R1YWxseSBjYWxsZWQuIElmIHRoZSBrZXJuZWwgYm9vdHMgd2l0aCBNR0xSVSBlbmFibGVkIC0gYW5kIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBpcyB0cnVlIGJ5IGRlZmF1bHQgLSBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgZG9lcyAqTk9UKiBnZXQgY2FsbGVkIGR1cmluZyB0aGUgaW5pdGlhbCBib290IHByb2Nlc3MuIEludGVyZXN0aW5nLi4uCgpJIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGNhbiBzZWUgaG93IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgZW50cnkgd291bGQgaW5mbHVlbmNlIHRoaXMgd2hvbGUgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUzNjcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTM2NzpcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcbjUzNjg6XHR7XG41MzY5Olx0XHRzdGF0aWMgREVGSU5FX01VVEVYKHN0YXRlX211dGV4KTtcbjUzNzA6XHRcbjUzNzE6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcbjUzNzI6XHRcbjUzNzM6XHRcdGNncm91cF9sb2NrKCk7XG41Mzc0Olx0XHRjcHVzX3JlYWRfbG9jaygpO1xuNTM3NTpcdFx0Z2V0X29ubGluZV9tZW1zKCk7XG41Mzc2Olx0XHRtdXRleF9sb2NrKFx1MDAyNnN0YXRlX211dGV4KTtcbjUzNzc6XHRcbjUzNzg6XHRcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxuNTM3OTpcdFx0XHRnb3RvIHVubG9jaztcbjUzODA6XHRcbjUzODE6XHRcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXHUwMDI2bHJ1X3N3aXRjaCk7XG41MzgyOlx0XG41MzgzOlx0XHRpZiAoZW5hYmxlZClcbjUzODQ6XHRcdFx0c3RhdGljX2JyYW5jaF9lbmFibGVfY3B1c2xvY2tlZChcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XG41Mzg1Olx0XHRlbHNlXG41Mzg2Olx0XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcbjUzODc6XHRcbjUzODg6XHRcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xuNTM4OTpcdFx0ZG8ge1xuNTM5MDpcdFx0XHRpbnQgbmlkO1xuNTM5MTpcdFxuNTM5MjpcdFx0XHRmb3JfZWFjaF9ub2RlKG5pZCkge1xuNTM5MzpcdFx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XG41Mzk0Olx0XG41Mzk1Olx0XHRcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG41Mzk2Olx0XG41Mzk3Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzZXFfaXNfdmFsaWQobHJ1dmVjKSk7XG41Mzk4Olx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFzdGF0ZV9pc192YWxpZChscnV2ZWMpKTtcbjUzOTk6XHRcbjU0MDA6XHRcdFx0XHRscnV2ZWMtXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xuNTQwMTpcdFxuNTQwMjpcdFx0XHRcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XG41NDAzOlx0XHRcdFx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuNTQwNDpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG41NDA1Olx0XHRcdFx0XHRscnV2ZWNfbG9ja19pcnEobHJ1dmVjKTtcbjU0MDY6XHRcdFx0XHR9XG41NDA3Olx0XG41NDA4Olx0XHRcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjU0MDk6XHRcdFx0fVxuNTQxMDpcdFxuNTQxMTpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjU0MTI6XHRcdH0gd2hpbGUgKChtZW1jZyA9IG1lbV9jZ3JvdXBfaXRlcihOVUxMLCBtZW1jZywgTlVMTCkpKTtcbjU0MTM6XHRcbjU0MTQ6XHRcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFx1MDAyNmxydV9zd2l0Y2gpO1xuNTQxNTpcdFxuNTQxNjpcdHVubG9jazpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUxODMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA4MzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgTUdMUlUgVG9nZ2xlKioKCk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCYjMzk7cyB0aGUgb25lIHRoYXQgbW92ZXMgcGFnZXMgYmV0d2VlbiBMUlUgbGlzdHMgd2hlbiBNR0xSVSBnZXRzIGVuYWJsZWQgYXQgcnVudGltZS4gSWYgTUdMUlUgaXMgb24gZnJvbSB0aGUgc3RhcnQsIHRob3NlIHBhZ2VzIGFyZSBhbHJlYWR5IGluIHRoZSBtdWx0aS1nZW4gTFJVIGxpc3RzLiBBbmQsIGlmIE1HTFJVIGlzIGRpc2FibGVkIGF0IHJ1bnRpbWUsIGBkcmFpbl9ldmljdGFibGVgIGlzIGNhbGxlZCB0byBtb3ZlIHBhZ2VzIGJhY2suIFNvLCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgZXhlY3V0ZWQgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIG9uLiBJdCBzb3VuZHMgbGlrZSB0aGlzIGNvdWxkIGJlIGEgZ29vZCBhcmVhIGZvciBmdXp6aW5nLCBnaXZlbiB0aGF0IGl0IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgKE1NKSBzdWJzeXN0ZW0gYW5kIHRoZSBMUlUgbGlzdHMgc3BlY2lmaWNhbGx5LgoKVGhpcyBwYXRjaCBpcyBhZGRyZXNzaW5nIGFuIGlzc3VlIHdoZXJlIGZvbGlvcyBhcmUgZ2V0dGluZyBhZGRlZCB0byB0aGUgTFJVIGxpc3RzIGluIHRoZSB3cm9uZyBvcmRlciwgY2F1c2luZyBhIGNvbGQvaG90IGludmVyc2lvbiBwcm9ibGVtLiBUbyB0ZXN0IHRoaXMgd2l0aCBzeXprYWxsZXIsIEkmIzM5O2xsIG5lZWQgdG8gdG9nZ2xlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBBaCwgc3l6a2FsbGVyIGNhbiB3cml0ZSB0byBzeXNmcyBmaWxlcyEgVGhhdCYjMzk7cyBnb29kLgoKVGhlIGVudHJ5IHBvaW50IGZvciB0aGUgdG9nZ2xlIGlzIHRoZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGZ1bmN0aW9uLiBUaGUgc3lzZnMgc3RvcmUgZnVuY3Rpb24gaXMgYGVuYWJsZWRfc3RvcmVgLiBTaG91bGQgSSBmb2N1cyBvbiB0aGUgZW50cnkgcG9pbnQgb3IgdGhlIHN5c2ZzIGVudHJ5PyBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG1vcmUgZGlyZWN0IGVudHJ5IHBvaW50LiBIb3dldmVyLCBpdCYjMzk7cyBhIHN0YXRpYyBmdW5jdGlvbi4gSG0sIGxldCBtZSBjaGVjayBpZiBpdCYjMzk7cyBpbmxpbmVkLi4uIHByb2JhYmx5IG5vdCwgZ2l2ZW4gdGhhdCBzeXNmcyBzdG9yZSBmdW5jdGlvbnMgYXJlIHVzdWFsbHkgcGFzc2VkIGFzIGZ1bmN0aW9uIHBvaW50ZXJzLiBMZXQmIzM5O3MgY2hlY2sgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBhcyB3ZWxsLCBpdCYjMzk7cyBhbHNvIHN0YXRpYywgYnV0IGl0JiMzOTtzIGNhbGxlZCBmcm9tIGBlbmFibGVkX3N0b3JlYC4gYGZpbGxfZXZpY3RhYmxlYCBpcyBhbHNvIHN0YXRpYywgc28gSSBjYW4gZm9jdXMgb24gdGhvc2UgdHdvLiBXYWl0LCBgZW5hYmxlZF9zdG9yZWAgaXMgcGFzc2VkIHRvIGBfX0FUVFJfUlcoZW5hYmxlZClgLgoKSSBzaG91bGQgY2hlY2sgdG8gc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBjYWxsZXJzIG9mIGBmaWxsX2V2aWN0YWJsZWAsIG5vLgoKSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzbiYjMzk7dCBtb2RpZmllZCwgYnV0IGl0JiMzOTtzIGNhbGxlZCBkaWZmZXJlbnRseS4gVGhlIHBhdGNoIGNoYW5nZXMgaG93IGZvbGlvcyBhcmUgYWRkZWQgdG8gTFJVIGxpc3RzIHVzaW5nIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIE1NIHN1YnN5c3RlbS4KCkkmIzM5O2xsIG5lZWQgYExSVV9HRU5gICh3aGljaCBpcyBgQ09ORklHX0xSVV9HRU5gKSBlbmFibGVkLCB3aGljaCBkZXBlbmRzIG9uIGBNTVVgLiBJcyB0aGF0IGFsbCBJIG5lZWQ/IFllcywgaXQgbG9va3MgbGlrZSBgQ09ORklHX0xSVV9HRU5gIGRpcmVjdGx5IGVuYWJsZXMgTUdMUlUuIEFuZCBgZW5hYmxlZF9zdG9yZWAgaXMgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfTFJVX0dFTmAgaXMgZW5hYmxlZCwgc28gSSYjMzk7bGwgbmVlZCB0byB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Q09ORklHX0xSVV9HRU4mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcbi0tXG5tbS92bXNjYW4uYy04MzItXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy04MzQtLypcbi0tXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxuLS1cbm1tL3Ztc2Nhbi5jLTg2NS19XG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy04NjctXG4tLVxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL3Ztc2Nhbi5jLTI2OTEtXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxubW0vdm1zY2FuLmMtMjY5My1cbm1tL3Ztc2Nhbi5jPTI2OTQ9REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobHJ1X3N3aXRjaCk7XG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXG5tbS92bXNjYW4uYy0yNjk2LURFRklORV9TVEFUSUNfS0VZX0FSUkFZX1RSVUUobHJ1X2dlbl9jYXBzLCBOUl9MUlVfR0VOX0NBUFMpO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXG4tLVxubW0vdm1zY2FuLmMtMjg5OS1cbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxubW0vdm1zY2FuLmMtMjkwMS1cbi0tXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuLS1cbm1tL3Ztc2Nhbi5jLTMwMzctXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cbm1tL3Ztc2Nhbi5jLTMwMzktXG4tLVxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XG5tbS92bXNjYW4uYy01OTU4LVxubW0vdm1zY2FuLmM6NTk1OTojZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTU5NjAtXG4tLVxubW0vdm1zY2FuLmM9NTk3MT1zdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU5NzUtXG5tbS92bXNjYW4uYzo1OTc2OiNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNTk3Ny1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcyOTgKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTE5NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBNdWx0aS1HZW4gTFJVIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgU3RyYXRlZ3kqKgoKT2theSwgc28gSSYjMzk7dmUgZ29uZSB0aHJvdWdoIHRoaXMgbG9naWMgYW5kIGhlcmUmIzM5O3MgbXkgdGhpbmtpbmcuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIE11bHRpLUdlbiBMUlUgKExSVV9HRU4pIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIHRoZSBrZXkgaGVyZS4gSXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIGVudHJ5IHBvaW50LCB3cmFwcGVkIHdpdGhpbiBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBhbmQgYCNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IHRoaXMuCgpNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgRm9jdXNTeW1ib2xzYC4gU2luY2UgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIGluaXRpYWxseSBhc3N1bWVkIGl0JiMzOTtzIGlubGluZWQgYW5kIFN5emthbGxlciBjb3VsZG4mIzM5O3QgdGFyZ2V0IGl0IGRpcmVjdGx5LiBCdXQgd2FpdCwgaXQmIzM5O3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgX19BVFRSX1JXYCwgc28gaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCYjMzk7cyBnb29kIG5ld3MuIFNvIHRoYXQgbWFrZXMgYGVuYWJsZWRfc3RvcmVgIGEgdmlhYmxlIGZvY3VzIHN5bWJvbCwgZXNwZWNpYWxseSBzaW5jZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzbiYjMzk7dCBpbmxpbmVkIGVpdGhlci4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0byBpbmNsdWRlIGJvdGggaW4gbXkgZm9jdXMgc3ltYm9scy4KClRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGJ1dCBJIGNvdWxkbiYjMzk7dCBmaW5kIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB0byB0cmlnZ2VyIHRoaXMgY2hhbmdlLiBUaGUgb25seSBwYXRoIHNlZW1zIHRvIGJlIHRocm91Z2ggdGhlIHN5c2ZzIGNhbGxiYWNrLCBgZW5hYmxlZF9zdG9yZWAuIEV2ZW4gdGhvdWdoIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBhcmUgYm90aCBzdGF0aWMsIHRoZXkmIzM5O3JlIHZhbGlkIHRhcmdldHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgaW5saW5lZC4KCkkgZG91YmxlLWNoZWNrZWQgdG8gc2VlIGlmIGBmaWxsX2V2aWN0YWJsZWAgaXMgY2FsbGVkIGZyb20gZWxzZXdoZXJlLCBidXQgaXQmIzM5O3Mgb25seSBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGFsc28gcmV2aWV3ZWQgdGhlIHBhdGNoIGFnYWluLgoKVGhpcyBsb29rcyBsaWtlIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYGZpbGxfZXZpY3RhYmxlYC4gVGhpcyBmdW5jdGlvbiBpcyBwYXJ0IG9mIHRoZSBwcm9jZXNzIG9mIHBvcHVsYXRpbmcgdGhlIG11bHRpLWdlbiBMUlUgbGlzdHMsIHdoaWNoIGhhcHBlbnMgd2hlbiBNR0xSVSBpcyBlbmFibGVkLiBUaHVzLCBgV29ydGhGdXp6aW5nPXRydWVgLgoKVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byBgTFJVX0dFTmAsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4KCkFuZCBhcyBhIGZpbmFsIGRvdWJsZSBjaGVjaywgSSBhbSBjb25maXJtaW5nIHRoYXQgdGhlIGVudHJ5IHBvaW50IGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIG9ubHkgd2F5IHRvIGdldCB0byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBUaGlzIGlzIGNvbmZpcm1lZCB2aWEgY29kZSBhbmFseXNpcyB3aGVyZSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGlzIG9ubHkgY2FsbGVkIGZyb20gd2l0aGluIGBlbmFibGVkX3N0b3JlYC4KCkkmIzM5O3ZlIGFsc28gY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmAg4oCTIGl0IGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVGAsIGFuZCBgU1BBUlNFTUVNYC4gVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBtb3N0bHkgbGlrZWx5IHNhdGlzZmllZCBieSBkZWZhdWx0LiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBjb25maWRlbnRseSBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZW5hYmxlZF9zdG9yZSYjMzQ7LAogICAgJiMzNDtscnVfZ2VuX2NoYW5nZV9zdGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgZmlsbF9ldmljdGFibGVgIGluIHRoZSBNdWx0aS1HZW4gTFJVIChNR0xSVSkgc3Vic3lzdGVtIHRvIGZpeCBhbiBpc3N1ZSB3aXRoIGNvbGQvaG90IGludmVyc2lvbiB3aGVuIG1vdmluZyBmb2xpb3MgZnJvbSB0aGUgYWN0aXZlL2luYWN0aXZlIGxpc3RzIHRvIHRoZSBNR0xSVSBsaXN0cy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQuIFRoZSBjb2RlIGlzIHJlYWNoYWJsZSB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgYXQgcnVudGltZSB2aWEgdGhlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgIHN5c2ZzIGZpbGUsIHdoaWNoIHRyaWdnZXJzIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2VuYWJsZWRfc3RvcmUmIzM0OywKICAgICYjMzQ7bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODI1ZTA5M2ZmNDRiNDA4YTg5ZDgxODEwNTQ1NGI5YjVlZjU0MTZmYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDAyOjU3OjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5lNmJiMmFjN2E1N2FhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtNTMwMiw3ICYjNDM7NTMwMiwxNyBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpCiAKIAkJd2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7CiAJCQlib29sIHN1Y2Nlc3M7Ci0JCQlzdHJ1Y3QgZm9saW8gKmZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpOwomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW87CiYjNDM7CiYjNDM7CQkJLyoKJiM0MzsJCQkgKiBscnVfZ2VuX2FkZF9mb2xpbygpIHVzZXMgbGlzdF9hZGRfdGFpbCgpIHJhdGhlcgomIzQzOwkJCSAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoCiYjNDM7CQkJICogaXRzIG9yZGVyaW5nIHRvIGF2b2lkIGNvbGQvaG90IGludmVyc2lvbi4KJiM0MzsJCQkgKi8KJiM0MzsJCQlpZiAoYWN0aXZlKQomIzQzOwkJCQlmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTsKJiM0MzsJCQllbHNlCiYjNDM7CQkJCWZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7CiAKIAkJCVZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pOwogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTsKQEAgLTUzMTAsNyAmIzQzOzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKQogCQkJVk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX2xydV9nZW4oZm9saW8pICE9IC0xLCBmb2xpbyk7CiAKIAkJCWxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7Ci0JCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgZmFsc2UpOwomIzQzOwkJCS8qCiYjNDM7CQkJICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW4KJiM0MzsJCQkgKiB0aGUgb2xkZXIgZ2Vucy4KJiM0MzsJCQkgKi8KJiM0MzsJCQlzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7CiAJCQlWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpOwogCiAJCQlpZiAoIS0tcmVtYWluaW5nKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDI6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI3NQoJCQkJCQkJb3V0cHV0OiAxNzIKCQkJCQkJCXRob3VnaHRzOiA0NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudDogQSBRdWljayBMb29rIGF0IExSVSBGb2xpbyBTZWxlY3Rpb24qKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0JiMzOTtzIHR3ZWFraW5nIGBmaWxsX2V2aWN0YWJsZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gQmFzaWNhbGx5LCBpdCYjMzk7cyBhYm91dCBob3cgd2UgZ3JhYiBhIGBmb2xpb2AgZnJvbSB0aGUgYGhlYWRgIG9mIGFuIExSVSBsaXN0LCBkZXBlbmRpbmcgb24gd2hldGhlciBpdCYjMzk7cyBjdXJyZW50bHkgY29uc2lkZXJlZCAmIzM0O2FjdGl2ZSYjMzQ7IG9yIG5vdC4gSWYgaXQgKmlzKiBhY3RpdmUsIGl0IHVzZXMgYGxydV90b19mb2xpbyhoZWFkKWAg4oCTIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIHNhbWUgYXMgYGxpc3RfbGFzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgLiBPdGhlcndpc2UgKGlmIGl0JiMzOTtzIG5vdCBhY3RpdmUpLCBpdCBncmFicyB0aGUgZmlyc3QgZW50cnkgKGBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KWApLiBJdCYjMzk7cyBhbHNvIGNoYW5naW5nIHRoZSB0aGlyZCBhcmd1bWVudCB0byBgbHJ1X2dlbl9hZGRfZm9saW9gIGZyb20gYGZhbHNlYCB0byBgIWFjdGl2ZWAuCgpUaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXJseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgZGVhbGluZyB3aXRoIExSVSBsaXN0cywgcGFnZSBldmljdGlvbiwgYW5kIHRoZSBmb2xpb3MgdGhlbXNlbHZlcy4gTm90aGluZyB1c2VyLWZhY2luZyBoZXJlLCBhbmQgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0dXJlcyBiZWluZyBhbGxvY2F0ZWQgb3IgaW5pdGlhbGl6ZWQuIEl0JiMzOTtzIGp1c3QgYSBtYXR0ZXIgb2YgY2hhbmdpbmcgdGhlIG9yZGVyIGFuZCBwYXNzaW5nIGEgYm9vbGVhbiB0byBhIGZ1bmN0aW9uLgoKR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpa2VseSBnb2luZyB0byBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3Igc29tZSBraW5kIG9mIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMsIHBhZ2Ugc3RhdGUgY2hlY2tzLCBldGMuKSBhcmUgYnVpbHQgdG8gY2F0Y2guIFdlJiMzOTtyZSBub3QgdGFsa2luZyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeSBoZXJlLCBhbmQgdGhlcmUmIzM5O3Mgbm8gd2F5IHRvIGxlYWsgaW5mbyB0byB0aGUgdXNlci4KClNvLCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJJiMzOTtsbCB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGxydV9nZW5fYWRkX2ZvbGlvYCBhbmQgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbnMsIGJ1dCBiYXNlZCBvbiB3aGF0IEkgc2VlLCB0aGlzIGlzICpkZWZpbml0ZWx5KiBub3QgYSBLTVNBTiB0YXJnZXQuIEkmIzM5O2xsIG1hcmsgdGhpcyBhcyBgTmVlZHNLTVNBTj1mYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDAyOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBmb3Igc2VsZWN0aW5nIGZvbGlvcyBmcm9tIGFuIExSVSBsaXN0IGluIGBmaWxsX2V2aWN0YWJsZWAgYW5kIGFkanVzdHMgdGhlIGByZWNsYWltaW5nYCBmbGFnIHBhc3NlZCB0byBgbHJ1X2dlbl9hZGRfZm9saW9gLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgb3JkZXJpbmcgb2YgZm9saW9zIGluIHRoZSBMUlUgZ2VuZXJhdGlvbnMgKGF2b2lkaW5nIGNvbGQvaG90IGludmVyc2lvbikgYW5kIGRvIG5vdCBpbnZvbHZlIHRoZSBhbGxvY2F0aW9uIG9mIG5ldyBtZW1vcnksIGluaXRpYWxpemF0aW9uIG9mIHN0cnVjdHVyZXMsIG9yIGNvcHlpbmcgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIG1hbmlmZXN0IGFzIGxpc3QgY29ycnVwdGlvbnMsIHVzZS1hZnRlci1mcmVlLCBvciBsb2dpYyBlcnJvcnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIGFyZSB3ZWxsLWNvdmVyZWQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi4yMzY5NDQyMzJaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTgyODQ2MzIwNDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi4yMzY5NTAyNzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Mjg4NDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmU2YmIyYWM3YTU3YWEgMTAwNjQ0XFxuLS0tIGEvbW0vdm1zY2FuLmNcXG4rKysgYi9tbS92bXNjYW4uY1xcbkBAIC01MzAyLDcgKzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbiBcXG4gXFx0XFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XFxuIFxcdFxcdFxcdGJvb2wgc3VjY2VzcztcXG4tXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFxuK1xcdFxcdFxcdC8qXFxuK1xcdFxcdFxcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXFxuK1xcdFxcdFxcdCAqIHRoYW4gbGlzdF9hZGQoKSB3aGVuIHJlY2xhaW1pbmcgaXMgdHJ1ZS4gIE1hdGNoXFxuK1xcdFxcdFxcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoYWN0aXZlKVxcbitcXHRcXHRcXHRcXHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcXG4rXFx0XFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRcXHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xcbiBcXG4gXFx0XFx0XFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XFxuQEAgLTUzMTAsNyArNTMyMCwxMSBAQCBzdGF0aWMgYm9vbCBmaWxsX2V2aWN0YWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xcbiBcXG4gXFx0XFx0XFx0bHJ1dmVjX2RlbF9mb2xpbyhscnV2ZWMsIGZvbGlvKTtcXG4tXFx0XFx0XFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcXG4rXFx0XFx0XFx0LypcXG4rXFx0XFx0XFx0ICogQm9ycm93IHJlY2xhaW1pbmc9dHJ1ZSB0byBwbGFjZSBpbmFjdGl2ZSBmb2xpb3MgaW5cXG4rXFx0XFx0XFx0ICogdGhlIG9sZGVyIGdlbnMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzdWNjZXNzID0gbHJ1X2dlbl9hZGRfZm9saW8obHJ1dmVjLCBmb2xpbywgIWFjdGl2ZSk7XFxuIFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XFxuIFxcbiBcXHRcXHRcXHRpZiAoIS0tcmVtYWluaW5nKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzoyNi42ODA1NzA5NzZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMDk1OTg1ODExMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImVuYWJsZWRfc3RvcmVcIixcbiAgICBcImxydV9nZW5fY2hhbmdlX3N0YXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGZpbGxfZXZpY3RhYmxlYCBpbiB0aGUgTXVsdGktR2VuIExSVSAoTUdMUlUpIHN1YnN5c3RlbSB0byBmaXggYW4gaXNzdWUgd2l0aCBjb2xkL2hvdCBpbnZlcnNpb24gd2hlbiBtb3ZpbmcgZm9saW9zIGZyb20gdGhlIGFjdGl2ZS9pbmFjdGl2ZSBsaXN0cyB0byB0aGUgTUdMUlUgbGlzdHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGUgY29kZSBpcyByZWFjaGFibGUgd2hlbiBNR0xSVSBpcyB0b2dnbGVkIGF0IHJ1bnRpbWUgdmlhIHRoZSBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBzeXNmcyBmaWxlLCB3aGljaCB0cmlnZ2VycyBgZW5hYmxlZF9zdG9yZWAgYW5kIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDgyNWUwOTNmZjQ0YjQwOGE4OWQ4MTgxMDU0NTRiOWI1ZWY1NDE2ZmNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwMjo1NzoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmU2YmIyYWM3YTU3YWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC01MzAyLDcgKzUzMDIsMTcgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFxuIFx0XHR3aGlsZSAoIWxpc3RfZW1wdHkoaGVhZCkpIHtcbiBcdFx0XHRib29sIHN1Y2Nlc3M7XG4tXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHRcdC8qXG4rXHRcdFx0ICogbHJ1X2dlbl9hZGRfZm9saW8oKSB1c2VzIGxpc3RfYWRkX3RhaWwoKSByYXRoZXJcbitcdFx0XHQgKiB0aGFuIGxpc3RfYWRkKCkgd2hlbiByZWNsYWltaW5nIGlzIHRydWUuICBNYXRjaFxuK1x0XHRcdCAqIGl0cyBvcmRlcmluZyB0byBhdm9pZCBjb2xkL2hvdCBpbnZlcnNpb24uXG4rXHRcdFx0ICovXG4rXHRcdFx0aWYgKGFjdGl2ZSlcbitcdFx0XHRcdGZvbGlvID0gbHJ1X3RvX2ZvbGlvKGhlYWQpO1xuK1x0XHRcdGVsc2VcbitcdFx0XHRcdGZvbGlvID0gbGlzdF9maXJzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSk7XG4gXG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pLCBmb2xpbyk7XG4gXHRcdFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAhPSBhY3RpdmUsIGZvbGlvKTtcbkBAIC01MzEwLDcgKzUzMjAsMTEgQEAgc3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb19scnVfZ2VuKGZvbGlvKSAhPSAtMSwgZm9saW8pO1xuIFxuIFx0XHRcdGxydXZlY19kZWxfZm9saW8obHJ1dmVjLCBmb2xpbyk7XG4tXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sIGZhbHNlKTtcbitcdFx0XHQvKlxuK1x0XHRcdCAqIEJvcnJvdyByZWNsYWltaW5nPXRydWUgdG8gcGxhY2UgaW5hY3RpdmUgZm9saW9zIGluXG4rXHRcdFx0ICogdGhlIG9sZGVyIGdlbnMuXG4rXHRcdFx0ICovXG4rXHRcdFx0c3VjY2VzcyA9IGxydV9nZW5fYWRkX2ZvbGlvKGxydXZlYywgZm9saW8sICFhY3RpdmUpO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRSghc3VjY2Vzcyk7XG4gXG4gXHRcdFx0aWYgKCEtLXJlbWFpbmluZylcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjI2LjY4MDU3MjM0N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNjgxMjMwODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB2bXNjYW4uYyBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGBtbS92bXNjYW4uY2AsIHNwZWNpZmljYWxseSB0aGUgYGZpbGxfZXZpY3RhYmxlYCBmdW5jdGlvbi4gUmlnaHQsIHNvIHdlJ3JlIHRhbGtpbmcgYWJvdXQgaG93IHRoZSBrZXJuZWwgZGVjaWRlcyB3aGF0IGZvbGlvcyB0byBldmljdCwgaG93IGl0IHNlbGVjdHMgd2hpY2ggcGFnZXMgdG8ga2ljayBvdXQgb2YgbWVtb3J5LiBUaGlzIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCwgc28gaXQncyBhbHdheXMgd29ydGggYSBjbG9zZSBsb29rLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCByZXRyaWV2aW5nIGZvbGlvcyBmcm9tIHRoZSBgaGVhZGAgbGlzdCB3aXRoaW4gYGZpbGxfZXZpY3RhYmxlYCwgY29uZGl0aW9uYWwgb24gdGhlIGBhY3RpdmVgIGZsYWcuIElmIGEgZm9saW8gaXMgYGFjdGl2ZWAsIGl0J3MgdGFraW5nIHRoZSB0YWlsIG9mIHRoZSBsaXN0IHZpYSBgbHJ1X3RvX2ZvbGlvKGhlYWQpYC4gIE1ha2VzIHNlbnNlLCB0aGF0J3MgbGlrZWx5IHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIHBhZ2UsIHdoaWNoIHdlJ2QgZXhwZWN0IHdoZW4gYWN0aXZlLiBJZiBpdCdzICpub3QqIGFjdGl2ZSAoYCFhY3RpdmVgKSwgaXQncyBncmFiYmluZyB0aGUgaGVhZCBvZiB0aGUgbGlzdCB3aXRoIGBsaXN0X2ZpcnN0X2VudHJ5KGhlYWQsIHN0cnVjdCBmb2xpbywgbHJ1KWAuIE9rYXksIHNvIGl0IHByaW9yaXRpemVzIGRpZmZlcmVudCBsb2NhdGlvbnMgaW4gdGhlIExSVSwgZGVwZW5kaW5nIG9uIGFjdGl2aXR5LlxuXG5UaGF0IGByZWNsYWltaW5nYCBwYXJhbWV0ZXIgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AgaXMgYWxzbyBjaGFuZ2luZyBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLiBUaGF0J3MgaW50ZXJlc3RpbmcsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaG93IHRoZSBmb2xpbyBpcyBiZWluZyBhZGRlZCBiYWNrIGludG8gdGhlIExSVS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBgcmVjbGFpbWluZ2AgZmxhZyBiZXR0ZXIgaW4gdGhlIGNvbnRleHQgb2YgYGxydV9nZW5fYWRkX2ZvbGlvYC4gSSdsbCBoYXZlIHRvIGNyb3NzLXJlZmVyZW5jZSB0aGUgZnVuY3Rpb24uXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUgaXRzZWxmLiBJJ2xsIGZpcmUgdXAgYGdyZXBwZXJgIGFuZCB0YWtlIGEgbG9vayBhdCB0aGUgZGVmaW5pdGlvbiBvZiBgZmlsbF9ldmljdGFibGVgIHRvIHNlZSB0aGUgc3Vycm91bmRpbmcgY29udGV4dC4gTmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZpdHMgaW50byB0aGUgb3ZlcmFsbCBldmljdGlvbiBwcm9jZXNzLiBMZXQncyBzZWUgd2hhdCdzIHdoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNzgsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozMi4wNDg3MDAyMloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjA1MjcxNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZmlsbF9ldmljdGFibGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTI3MD1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzdGF0ZV9pc192YWxpZChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy01MjkyLVxcbm1tL3Ztc2Nhbi5jOjUyOTM6c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTUyOTQte1xcbi0tXFxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01NDAxLVxcbm1tL3Ztc2Nhbi5jOjU0MDI6XFx0XFx0XFx0d2hpbGUgKCEoZW5hYmxlZCA/IGZpbGxfZXZpY3RhYmxlKGxydXZlYykgOiBkcmFpbl9ldmljdGFibGUobHJ1dmVjKSkpIHtcXG5tbS92bXNjYW4uYy01NDAzLVxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjMyLjM2OTIzMzI3N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTgyODI0OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgQ2FsbCBTdGFjazogYGZpbGxfZXZpY3RhYmxlYCoqXG5cbk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgaXMgdGhlIGZ1bmN0aW9uIHdlJ3JlIGludGVyZXN0ZWQgaW4uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIHdobydzIGNhbGxpbmcgaXQ/IFRoZSB0ZXh0IHRlbGxzIG1lIGl0J3MgY2FsbGVkIGZyb20gYGxydV9nZW5fY2hhbmdlX3N0YXRlYC4gUmlnaHQsIHRoYXQgZ2l2ZXMgbWUgYSBjbGVhciBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYnJvYWRlciBjb250ZXh0LiBXaGF0J3MgZHJpdmluZyB0aGUgY2FsbCB0byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgPyBXaGVyZSBkb2VzICppdCogZml0IGludG8gdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlPyBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgdG8gc2VlIHRoZSBjb25kaXRpb25zIHRoYXQgdHJpZ2dlciB0aGUgY2FsbCB0byBgZmlsbF9ldmljdGFibGVgLiBUaGlzIGlzIHN0YW5kYXJkIGRlYnVnZ2luZywgZXNzZW50aWFsbHkgdHJhY2tpbmcgdGhlIGNvbnRyb2wgZmxvdyB0byB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgYGZpbGxfZXZpY3RhYmxlYC4gSSdsbCBzdGFydCBieSBsb29raW5nIGZvciBhbGwgY2FsbCBzaXRlcyBvZiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBMZXQncyBzZWUgd2hhdCB0aGF0IHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozNS4zMjc1MTgyODZaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkwNjU4NzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9jaGFuZ2Vfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjM1LjM3NjU5MDE1MVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzc2OTc4MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBDYWxsZXJzKipcblxuT2theSwgc28gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgZW5hYmxlZF9zdG9yZWAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlIOKAkyBgZW5hYmxlZF9zdG9yZWAgaXMgYSBzeXNmcyBzdG9yZSBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgaXQncyBob3cgdGhlIGtlcm5lbCByZWFjdHMgdG8gYSB1c2VyIHdyaXRpbmcgYSB2YWx1ZSB0byBhIHN5c2ZzIGZpbGUuIEdpdmVuIHRoZSBuYW1lLCBJJ20gZ3Vlc3NpbmcgdGhpcyBwcm9iYWJseSByZWxhdGVzIHRvIGVuYWJsaW5nIG9yIGRpc2FibGluZyBzb21lIHNvcnQgb2YgTFJVIChMZWFzdCBSZWNlbnRseSBVc2VkKSBiZWhhdmlvciwgb3IgbWF5YmUgYSBmZWF0dXJlIHRoYXQncyBMUlUtcmVsYXRlZC4gQnV0LCBJIGRvbid0IHdhbnQgdG8gbWFrZSBhc3N1bXB0aW9ucy4gSSBuZWVkIHRvIGJlIG1ldGhvZGljYWwuXG5cbk15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldobyAqZWxzZSogbWlnaHQgYmUgY2FsbGluZyB0aGlzIGZ1bmN0aW9uP1wiLiBgZW5hYmxlZF9zdG9yZWAgaXMganVzdCBvbmUgcG9pbnQgb2YgZW50cnksIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0LiBXaGF0IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgYXJlIHRyaWdnZXJpbmcgYSBzdGF0ZSBjaGFuZ2UgaW4gdGhlIExSVSBnZW5lcmF0aW9uPyBBcmUgdGhlcmUgb3RoZXIgc3lzZnMgZW50cmllcyB1c2luZyBpdD8gUGVyaGFwcyBvdGhlciBpbnRlcm5hbCBrZXJuZWwgbW9kdWxlcz8gS25vd2luZyBhbGwgdGhlIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGRlYnVnZ2luZywgYW5hbHl6aW5nIHBlcmZvcm1hbmNlIGltcGFjdHMsIGFuZCBmdWxseSB1bmRlcnN0YW5kaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGNoYW5nZXMgbWFkZSB0byB0aGlzIGZ1bmN0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM1NjYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1NzozOC45MTQzMDI1NTlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY5OTkwMTA5NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjQwLjYxNDIwNzczNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2NjQ5MjI1MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIENvbnRleHQgb2Ygc3lzZnMgV3JpdGVzKipcblxuT2theSwgc28gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBvbmx5IGdldHMgdHJpZ2dlcmVkIHdoZW4gd2UncmUgd3JpdGluZyB0byBhIHN5c2ZzIGZpbGUsIHdoaWNoIGltbWVkaWF0ZWx5IG5hcnJvd3MgZG93biB0aGUgc2NvcGUgb2Ygd2hhdCBJIG5lZWQgdG8gaW52ZXN0aWdhdGUuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBzaWduYWwuIE5vdywgdGhlIGNyaXRpY2FsIHF1ZXN0aW9uIGJlY29tZXM6IHdoaWNoIHNwZWNpZmljIHN5c2ZzIGZpbGUgaXMgaW5pdGlhdGluZyB0aGlzIHBhcnRpY3VsYXIgY2FsbD8gS25vd2luZyB0aGUgZmlsZSBuYW1lIGlzIGdvaW5nIHRvIGJlIGNydWNpYWwgdG8gdW5kZXJzdGFuZGluZyB0aGUgY29udGV4dCBhbmQgdGhlIGltcGxpY2F0aW9uIG9mIHRoaXMgc3RhdGUgY2hhbmdlLiBUaW1lIHRvIGRpZyBpbiBhbmQgZmluZCB0aGF0IHN5c2ZzIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTQsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1Nzo0Ni4yNzkxMzM0OTZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODY0OTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ2Ni1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDYuMzI3MDA0MTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NTQyMTcwMjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBgZW5hYmxlZF9zdG9yZWAgaW4gc3lzZnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBzcGVjaWZpYyBzeXNmcyBhdHRyaWJ1dGUgdXRpbGl6ZXMgdGhhdCBgZW5hYmxlZF9zdG9yZWAgZnVuY3Rpb24uIFRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZiwgYGVuYWJsZWRfc3RvcmVgLCBzdHJvbmdseSBzdWdnZXN0cyBpdCdzIGxpa2VseSBkZWFsaW5nIHdpdGggYW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIG9mIHNvbWUgZmVhdHVyZSBvciBoYXJkd2FyZSBjb21wb25lbnQuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIHdpbGwgYmUgdG8gaWRlbnRpZnkgYSB1c2Ugb2YgdGhhdCBmdW5jdGlvbi4gSSB3aWxsIG5lZWQgdG8gdXNlIG15IHByZWZlcnJlZCBtZXRob2QgZm9yIHNlYXJjaGluZywgbGlrZWx5IGxldmVyYWdpbmcgdGhlIGtlcm5lbCBzb3VyY2UgY29kZSwgYnV0IEkgbmVlZCBhIHF1aWNrIHdheSB0byBmaW5kIGl0LiBUaW1lIHRvIGdldCB0byB3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDI1LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDkuMjgxMjIzOTNaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NDUzMjY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImVuYWJsZWRfc3RvcmVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTQ0OD1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ2NC0vKiBzZWUgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzICovXFxubW0vdm1zY2FuLmM6NTQ2NTpzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxubW0vdm1zY2FuLmMtNTQ2Ni1cXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NDkuMzI3Njg1NzE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NzcxNzI4MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6XG5cbioqTXkgQnJhaW5zdG9ybWluZyBmb3IgYSBLZXJuZWwgQ29kZSBEaXZlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBlbmFibGVkX3N0b3JlYCBpcyBiZWluZyB1c2VkLCBidXQgYSBzdHJhaWdodCBncmVwIGlzbid0IGdvaW5nIHRvIGN1dCBpdC4gSSBuZWVkIG1vcmUgY29udGV4dCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBwYXJ0aWN1bGFyIHZhcmlhYmxlLiBXaGF0J3MgaXQgYWN0dWFsbHkgKmRvaW5nKj8gSXQncyBwcm9iYWJseSByZWxhdGVkIHRvIHNvbWUgc3BlY2lmaWMgZmVhdHVyZSBvciBvcHRpbWl6YXRpb24gd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS5cblxuSG1tLCBtYXliZSBJIHNob3VsZCBicm9hZGVuIHRoZSBzZWFyY2gsIHNpbmNlIGBlbmFibGVkX3N0b3JlYCBtaWdodCBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYSBtYWNybyBvciBpbmxpbmUgZnVuY3Rpb24uIEl0J3Mgb2Z0ZW4gdGhlIGNhc2Ugd2hlcmUgdGhpbmdzIGxpa2UgdGhpcyBhcmUgd3JhcHBlZCBpbiBrZXJuZWwtc3R5bGUgYXR0cmlidXRlcy4gT2theSwgSSdsbCB0cnkgc2VhcmNoaW5nIGZvciBgX19BVFRSYCBmaXJzdC4gVGhhdCBtaWdodCBnaXZlIG1lIGEgYnJvYWRlciB2aWV3IG9mIGhvdyB0aGUgc3Vycm91bmRpbmcgY29kZSBpcyBzdHJ1Y3R1cmVkLiBUaGF0IHNob3VsZCBoZWxwIG1lIHplcm8gaW4gb24gdGhlIGV4YWN0IHNlY3Rpb24gdGhhdCBJIG5lZWQgdG8gYW5hbHl6ZS4gR290dGEgbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBzb21ldGhpbmcgY3JpdGljYWwuIExldCdzIHNlZS4uLiBhIHdpZGVyIHNlYXJjaCBzaG91bGQgaGVscCBjbGFyaWZ5IGFueSBzdXJyb3VuZGluZyB1c2FnZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc1MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjUzLjAwNDg2MzM1OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcwMDQ5NDYsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fQVRUUi4qZW5hYmxlZF9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTMuMDUxODc5MTE1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDM4Mzg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgYGVuYWJsZWRfc2hvd2AgYW5kIGBlbmFibGVkX3N0b3JlYCBVc2FnZSoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBcImVuYWJsZWRcIiBmbGFncyBhcmUgYmVpbmcgdXNlZC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBhbGwgaW5zdGFuY2VzIHdoZXJlIGBlbmFibGVkX3Nob3dgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFjdHVhbGx5IHV0aWxpemVkLiBJIHN1c3BlY3QgdGhlc2UgYXJlIGtleSBjb250cm9sIHBvaW50cyBmb3IgZmVhdHVyZSB0b2dnbGVzIG9yIHBlcm1pc3Npb25pbmcsIGJ1dCBJIG5lZWQgY29uY3JldGUgZXZpZGVuY2UgdG8gY29uZmlybSBteSBoeXBvdGhlc2lzLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZWlyIGltcGxlbWVudGF0aW9uIGlzIGNydWNpYWwgZm9yIGFueSBmdXR1cmUgbW9kaWZpY2F0aW9ucyBvciByZWZhY3RvcmluZy4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgcmV2ZWFsIHdoZXJlIHRoZXNlIGZsYWdzIGFyZSBkZWZpbmVkLCBtb2RpZmllZCwgYW5kIGNvbnN1bWVkIHdpdGhpbiB0aGUgY29kZWJhc2UuIFdlIG5lZWQgdG8gZm9sbG93IHRoZSB0aHJlYWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGVzZSBcImVuYWJsZWRcIiBmbGFncyBhZmZlY3QgZGF0YSB2aXNpYmlsaXR5IG9yIGF2YWlsYWJpbGl0eS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggbW9kdWxlcywgZnVuY3Rpb25zLCBhbmQgcG90ZW50aWFsbHkgZXZlbiBkYXRhIHN0cnVjdHVyZXMgaW50ZXJhY3Qgd2l0aCB0aG9zZSB2YXJpYWJsZXMsIHNvIEknbGwgbmVlZCBhIGNvbXByZWhlbnNpdmUgc2VhcmNoLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDcwLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTYuMDU1NzIxNjk5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDAzMjczNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJlbmFibGVkX3N0b3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU0NDg9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zaG93KHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU0NjQtLyogc2VlIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscyAqL1xcbm1tL3Ztc2Nhbi5jOjU0NjU6c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0NjYtXFx0XFx0XFx0ICAgICBjb25zdCBjaGFyICpidWYsIHNpemVfdCBsZW4pXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjU2LjEwNTc2MDU1NFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzI1ODM0Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSB2aXJ0dWFsIG1lbW9yeSBzY2FubmVyLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNTQ2NSBpbiBgbW0vdm1zY2FuLmNgLiBJJ20gZ29pbmcgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIGhvdCBzcG90cyBvZiB0aGUgc2Nhbm5pbmcgbG9naWMgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHJlY2xhaW0uIE15IGh1bmNoIGlzIHRoYXQgSSdtIGdvaW5nIHRvIGZpbmQgc29tZSBvZiB0aGUgY29yZSByZWNsYWltIGRlY2lzaW9ucyBiZWluZyBtYWRlLiBJJ20gcHJvYmFibHkgbG9va2luZyBhdCB0aGUgbWFpbiBzY2FuIGxvb3Agb3IgYSBkZWNpc2lvbiBwb2ludCBvbiB3aGF0IHRvIHJlY2xhaW0gZnJvbSB2YXJpb3VzIHpvbmVzLiBJdCdzIG9mdGVuIHRoZSBwbGFjZSB3aGVyZSB0aGUgc3lzdGVtIGlzIG1ha2luZyB0cmFkZS1vZmZzIGJldHdlZW4gZGlmZmVyZW50IHBhZ2UgdHlwZXMgYW5kIGRldGVybWluaW5nIHRoZSBlZmZpY2FjeSBvZiBhZ2dyZXNzaXZlIHJlY2xhaW0gdnMga2VlcGluZyBwYWdlcyBpbiBhIGNhY2hlLiBHaXZlbiB0aGUgbGluZSBudW1iZXIsIGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBlaXRoZXIgdGhlIGFjdHVhbCBwYWdlIHNlbGVjdGlvbiBwcm9jZXNzIG9yIGEgY3JpdGljYWwgem9uZS1zcGVjaWZpYyByZWNsYWltIGFsZ29yaXRobS4gTGV0J3Mgc2VlIGlmIGl0J3MgdGhlIGBzaHJpbmtfc2xhYmAgb3IgYHNocmlua19wYWdlX2xpc3RgIGZ1bmN0aW9ucy4gSSBhbnRpY2lwYXRlIEknbGwgc2VlIHNvbWV0aGluZyBhcm91bmQgdGhlIGBscnVfbG9ja2AgYW5kIHRoZSBpbnRlcmFjdGlvbiB3aXRoIG90aGVyIHRocmVhZHMsIGdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIHJhY2UgY29uZGl0aW9ucyBpbiBzaGFyZWQgZGF0YSBzdHJ1Y3R1cmVzLiBUaGlzIGlzIHdoZXJlIHRoZSBydWJiZXIgbWVldHMgdGhlIHJvYWQgd2hlbiBpdCBjb21lcyB0byBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMgb2YgdGhlIFZNIGRlc2lnbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTQ2NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU3OjU5LjgzMTU5ODc1M1oiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNzg1MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTQ2NSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTQ2NTpcXHRzdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuNTQ2NjpcXHRcXHRcXHRcXHQgICAgIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGxlbilcXG41NDY3OlxcdHtcXG41NDY4OlxcdFxcdGludCBpO1xcbjU0Njk6XFx0XFx0dW5zaWduZWQgaW50IGNhcHM7XFxuNTQ3MDpcXHRcXG41NDcxOlxcdFxcdGlmICh0b2xvd2VyKCpidWYpID09ICduJylcXG41NDcyOlxcdFxcdFxcdGNhcHMgPSAwO1xcbjU0NzM6XFx0XFx0ZWxzZSBpZiAodG9sb3dlcigqYnVmKSA9PSAneScpXFxuNTQ3NDpcXHRcXHRcXHRjYXBzID0gLTE7XFxuNTQ3NTpcXHRcXHRlbHNlIGlmIChrc3RydG91aW50KGJ1ZiwgMCwgXFx1MDAyNmNhcHMpKVxcbjU0NzY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNTQ3NzpcXHRcXG41NDc4OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MUlVfR0VOX0NBUFM7IGkrKykge1xcbjU0Nzk6XFx0XFx0XFx0Ym9vbCBlbmFibGVkID0gY2FwcyBcXHUwMDI2IEJJVChpKTtcXG41NDgwOlxcdFxcbjU0ODE6XFx0XFx0XFx0aWYgKGkgPT0gTFJVX0dFTl9DT1JFKVxcbjU0ODI6XFx0XFx0XFx0XFx0bHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoZW5hYmxlZCk7XFxuNTQ4MzpcXHRcXHRcXHRlbHNlIGlmIChlbmFibGVkKVxcbjU0ODQ6XFx0XFx0XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxuNTQ4NTpcXHRcXHRcXHRlbHNlXFxuNTQ4NjpcXHRcXHRcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGUoXFx1MDAyNmxydV9nZW5fY2Fwc1tpXSk7XFxuNTQ4NzpcXHRcXHR9XFxuNTQ4ODpcXHRcXG41NDg5OlxcdFxcdHJldHVybiBsZW47XFxuNTQ5MDpcXHR9XFxuNTQ5MTpcXHRcXG41NDkyOlxcdHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxuNTQ5MzpcXHRcXG41NDk0OlxcdHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxuNTQ5NTpcXHRcXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG41NDk2OlxcdFxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbjU0OTc6XFx0XFx0TlVMTFxcbjU0OTg6XFx0fTtcXG41NDk5OlxcdFxcbjU1MDA6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgbHJ1X2dlbl9hdHRyX2dyb3VwID0ge1xcbjU1MDE6XFx0XFx0Lm5hbWUgPSBcXFwibHJ1X2dlblxcXCIsXFxuNTUwMjpcXHRcXHQuYXR0cnMgPSBscnVfZ2VuX2F0dHJzLFxcbjU1MDM6XFx0fTtcXG41NTA0OlxcdFxcbjU1MDU6XFx0LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxcbjU1MDY6XFx0ICogICAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnZnMgaW50ZXJmYWNlXFxuNTUwNzpcXHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjU1MDg6XFx0XFxuNTUwOTpcXHRzdGF0aWMgdm9pZCAqbHJ1X2dlbl9zZXFfc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBvcylcXG41NTEwOlxcdHtcXG41NTExOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZztcXG41NTEyOlxcdFxcdGxvZmZfdCBucl90b19za2lwID0gKnBvcztcXG41NTEzOlxcdFxcbjU1MTQ6XFx0XFx0bS1cXHUwMDNlcHJpdmF0ZSA9IGt2bWFsbG9jKFBBVEhfTUFYLCBHRlBfS0VSTkVMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTc6NTkuODMxOTc5OTEzWiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODU2Nzg5MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNR0xSVSBGZWF0dXJlJ3MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIG5ldyBhdHRyaWJ1dGUsIGBscnVfZ2VuX2VuYWJsZWRfYXR0cmAuIFJpZ2h0LCBpdCBjcmVhdGVzIHRoYXQgYGVuYWJsZWRgIHN5c2ZzIGZpbGUgd2l0aGluIHRoZSBgbHJ1X2dlbmAgZGlyZWN0b3J5LiBTdGFuZGFyZCBzdHVmZiBmb3IgdGhlIE1HTFJVIGZlYXR1cmUuIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggc2VlbXMgdG8gYmUgdG91Y2hpbmcgdGhlIGBmaWxsX2V2aWN0YWJsZWAgZnVuY3Rpb24uIFRoYXQncyBhIGtleSBmdW5jdGlvbiBhbmQgbXVzdCBiZSBjcml0aWNhbCB0byB0aGUgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHByb2Nlc3MgdGhyb3VnaCBzeXNmcy4gQWgsIGJ1dCB3YWl0IGEgbWludXRl4oCmSSdtIHJlbWVtYmVyaW5nIHRoYXQgYGZpbGxfZXZpY3RhYmxlYCBpc24ndCBjYWxsZWQgZGlyZWN0bHkgZnJvbSBzeXNmcywgaXQncyBjYWxsZWQgZnJvbSBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJJ20gZ29pbmcgdG8gd2FudCB0byB0YWtlIGEgY2xvc2VyIGxvb2sgYXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl0J3MgbGlrZWx5IHRoZSBjZW50cmFsIHBvaW50IGZvciB0aGUgc3RhdGUgY2hhbmdlIGxvZ2ljLiBJJ2xsIGdldCB0aGUgZnVsbCBwaWN0dXJlIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDQuMjE3NjYyMjI0WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzY3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzY3OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41MzY4OlxcdHtcXG41MzY5OlxcdFxcdHN0YXRpYyBERUZJTkVfTVVURVgoc3RhdGVfbXV0ZXgpO1xcbjUzNzA6XFx0XFxuNTM3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTM3MjpcXHRcXG41MzczOlxcdFxcdGNncm91cF9sb2NrKCk7XFxuNTM3NDpcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbjUzNzU6XFx0XFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuNTM3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdGF0ZV9tdXRleCk7XFxuNTM3NzpcXHRcXG41Mzc4OlxcdFxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbjUzNzk6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNTM4MDpcXHRcXG41MzgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9zd2l0Y2gpO1xcbjUzODI6XFx0XFxuNTM4MzpcXHRcXHRpZiAoZW5hYmxlZClcXG41Mzg0OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG41Mzg1OlxcdFxcdGVsc2VcXG41Mzg2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxuNTM4NzpcXHRcXG41Mzg4OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjUzODk6XFx0XFx0ZG8ge1xcbjUzOTA6XFx0XFx0XFx0aW50IG5pZDtcXG41MzkxOlxcdFxcbjUzOTI6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG41MzkzOlxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjUzOTY6XFx0XFxuNTM5NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNlcV9pc192YWxpZChscnV2ZWMpKTtcXG41Mzk4OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbjU0MDE6XFx0XFxuNTQwMjpcXHRcXHRcXHRcXHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xcbjU0MDM6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG41NDA0OlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MDU6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNTQwNjpcXHRcXHRcXHRcXHR9XFxuNTQwNzpcXHRcXG41NDA4OlxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTQwOTpcXHRcXHRcXHR9XFxuNTQxMDpcXHRcXG41NDExOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MTI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU0MTM6XFx0XFxuNTQxNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X3N3aXRjaCk7XFxuNTQxNTpcXHRcXG41NDE2OlxcdHVubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDQuMjE4MTQ4MDk0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NDI1NDQzNDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgc3VtbWFyaXplZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIHNvbWVvbmUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgaW50ZXJuYWxzOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE1HTFJVIEFjdGl2YXRpb24gUGF0aCoqXG5cbkFscmlnaHQsIHNvIGBmaWxsX2V2aWN0YWJsZWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgZ2V0cyBjYWxsZWQgd2hlbiBNR0xSVSBpcyBhY3RpdmF0ZWQgdGhyb3VnaCB0aGUgc3lzZnMgaW50ZXJmYWNlLiBUaGF0IG1ha2VzIHNlbnNlLCBhIHNpZ25hbCB0byBzdGFydCBwb3B1bGF0aW5nIGRhdGEuIFdhaXQgYSBzZWNvbmQsIHRob3VnaC4uLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgcXVpY2tseTogaXMgTUdMUlUgZW5hYmxlZCBieSBkZWZhdWx0PyBJIGNhbid0IHF1aXRlIHJlY2FsbCBvZmYgdGhlIHRvcCBvZiBteSBoZWFkLCBhbmQgaXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIGZsb3cuIExldCdzIGhlYWQgb3ZlciB0byB0aGUgYEtjb25maWdgIGZpbGVzOyB0aGF0J3MgdGhlIGNhbm9uaWNhbCBwbGFjZSBmb3IgY2hlY2tpbmcgZGVmYXVsdCBjb25maWd1cmF0aW9ucyBhbmQgZGVwZW5kZW5jaWVzLiBEaWdnaW5nIGludG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB3aWxsIGJlIHRoZSBxdWlja2VzdCB3YXkgdG8gY29uZmlybSB0aGUgZGVmYXVsdCBNR0xSVSBiZWhhdmlvciBhbmQgaXRzIGNvbXBpbGF0aW9uIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzU3MywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MDcuNzYwNjk1ODIyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM2ODYxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM5Mz1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTE0MDMtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjE0MDQ6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDUtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMi1cXG5tbS9LY29uZmlnOjE0MTM6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQxNC1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxOC1cXG5tbS9LY29uZmlnOjE0MTk6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MjAtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDI3LVxcbm1tL0tjb25maWc6MTQyODpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjktXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODowNy44MTAwNjk5MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MDc3NjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKipcblxuQWxyaWdodCwgc28gSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG1tL0tjb25maWdgIGZpbGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxNDA0LiBMZXQncyBzZWUuLi4gdGhlIGZvY3VzIGhlcmUgaXMgcHJvYmFibHkgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucywgZ2l2ZW4gdGhlIFwibW0vXCIgcHJlZml4LiBJJ20gZ3Vlc3NpbmcgdGhhdCBsaW5lIDE0MDQgaXMgYSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIHBlcmhhcHMgdGhlIHN0YXJ0IG9mIGEgbG9naWNhbCBibG9jayBkZWZpbmluZyBvcHRpb25zLlxuXG5HaXZlbiBteSBleHBlcmllbmNlLCBJJ20gaW1tZWRpYXRlbHkgdHJ5aW5nIHRvIGFudGljaXBhdGUgd2hhdCBJIG1pZ2h0IGZpbmQuIElzIGl0IHJlbGF0ZWQgdG8gTlVNQSBjb25maWd1cmF0aW9ucz8gUGFnZSBhbGxvY2F0aW9uIHN0cmF0ZWdpZXM/IE1heWJlIHNvbWUgbmV3IG1lbW9yeSBwcm90ZWN0aW9uIGZlYXR1cmUgdGhhdCBoYXMgYmVlbiBpbnRyb2R1Y2VkPyBDb3VsZCBiZSBzb21ldGhpbmcgcmVsYXRlZCB0byBaT05FX0RNQSBvciBoaWdoIG1lbW9yeSBzdXBwb3J0LCBkZXBlbmRpbmcgb24gdGhlIGFyY2hpdGVjdHVyZS4gSSdtIG1lbnRhbGx5IHBhcnNpbmcgdGhlIGxpa2VseSBpbmNsdWRlIHN0YXRlbWVudHMgYW5kIGNyb3NzLXJlZmVyZW5jZXMgd2l0aGluIGBLY29uZmlnYC4gSSdtIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgZGVwZW5kZW5jaWVzLiBJdCBpcyBsaWtlbHkgdGhhdCB0aGlzIHBhcnQgb2YgdGhlIEtjb25maWcgZmlsZSB0aWVzIGludG8gb3RoZXIgc3Vic3lzdGVtcywgc28gdGhpcyB3b24ndCBiZSBhbiBpc29sYXRlZCBjb25maWd1cmF0aW9uLiBUaGlzIGNvdWxkIGJlIGNvbXBsZXgsIGRlcGVuZGluZyBvbiB0aGUgcGFydGljdWxhciBvcHRpb24gYXQgaGFuZC4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBMZXQncyBob3BlIHRoYXQgaXQgaXMgd2VsbCBkb2N1bWVudGVkIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDU1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTIuNTUwODUwNjgzWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDczMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MDQsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE0MDQ6XFx0Y29uZmlnIExSVV9HRU5cXG4xNDA1OlxcdFxcdGJvb2wgXFxcIk11bHRpLUdlbiBMUlVcXFwiXFxuMTQwNjpcXHRcXHRkZXBlbmRzIG9uIE1NVVxcbjE0MDc6XFx0XFx0IyBtYWtlIHN1cmUgZm9saW8tXFx1MDAzZWZsYWdzIGhhcyBlbm91Z2ggc3BhcmUgYml0c1xcbjE0MDg6XFx0XFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQXFxuMTQwOTpcXHRcXHRoZWxwXFxuMTQxMDpcXHRcXHQgIEEgaGlnaCBwZXJmb3JtYW5jZSBMUlUgaW1wbGVtZW50YXRpb24gdG8gb3ZlcmNvbW1pdCBtZW1vcnkuIFNlZVxcbjE0MTE6XFx0XFx0ICBEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL211bHRpZ2VuX2xydS5yc3QgZm9yIGRldGFpbHMuXFxuMTQxMjpcXHRcXG4xNDEzOlxcdGNvbmZpZyBMUlVfR0VOX0VOQUJMRURcXG4xNDE0OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbjE0MTU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOXFxuMTQxNjpcXHRcXHRoZWxwXFxuMTQxNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG11bHRpLWdlbiBMUlUgYnkgZGVmYXVsdC5cXG4xNDE4OlxcdFxcbjE0MTk6XFx0Y29uZmlnIExSVV9HRU5fU1RBVFNcXG4xNDIwOlxcdFxcdGJvb2wgXFxcIkZ1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1xcXCJcXG4xNDIxOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MjI6XFx0XFx0aGVscFxcbjE0MjM6XFx0XFx0ICBEbyBub3QgZW5hYmxlIHRoaXMgb3B0aW9uIHVubGVzcyB5b3UgcGxhbiB0byBsb29rIGF0IGhpc3RvcmljYWwgc3RhdHNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTIuNTUwOTUzMTgzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxMzQ3MjA1ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIHNlZSwgbXkgbWVudGFsIGdlYXJzIGFyZSBzdGFydGluZyB0byB0dXJuLlxuXG4qKkxSVSBHZW5lcmF0aW9uIGFuZCBFdmljdGlvbiBGbG93KipcblxuQWxyaWdodCwgc28gYExSVV9HRU5gIGlzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbiB0aGF0J3Mga2V5IGhlcmUuIElmIHRoYXQncyBlbmFibGVkLCB0aGVuIHdlJ3JlIGNvbXBpbGluZyBpbiBgZmlsbF9ldmljdGFibGVgLiBIbW0sIHdhaXQgYSBzZWNvbmQuLi4gaXNuJ3QgYGZpbGxfZXZpY3RhYmxlYCBhY3R1YWxseSAqaW5zaWRlKiBhIHByZXByb2Nlc3NvciBjb25kaXRpb25hbCBiYXNlZCBvbiBgQ09ORklHX0xSVV9HRU5gPyBJIGJldHRlciBkb3VibGUtY2hlY2sgdGhhdC4gV2hlcmUncyB0aGUgc291cmNlPyBSaWdodCwgYG1tL3Ztc2Nhbi5jYCBpcyB0aGUgbW9zdCBsaWtlbHkgc3BvdCB0byBmaW5kIHRoZSBkZXRhaWxzIG9mIHRoZSBzY2FuLiBMZXQncyBoZWFkIG92ZXIgdGhlcmUgYW5kIGNvbmZpcm0gbXkgaHlwb3RoZXNpcy4gR290dGEgbWFrZSBzdXJlIHRoZSBsb2dpYyBob2xkcyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODY3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTYuNjg1Njc2NzgxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDExOTUxNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODY1LX1cXG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODY3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY5MS1cXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2OTMtXFxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODk5LVxcbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MDEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzNy1cXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxuLS1cXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc1LVxcbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTk3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MTYuNzM1ODAxMDA2WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMzUzMjkzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYGZpbGxfZXZpY3RhYmxlYCBSZWFjaGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIHNlZSB0aGF0IGBmaWxsX2V2aWN0YWJsZWAgaXMgaW5kZWVkIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgd2l0aGluIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaG93IHJlYWNoYWJsZSB0aGlzIGZ1bmN0aW9uIGlzLCBzcGVjaWZpY2FsbHkgZnJvbSB1c2Vyc3BhY2UuIEl0IGxvb2tzIGxpa2Ugd3JpdGluZyB0byBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYCBpcyB0aGUgcGF0aC4gSSBuZWVkIHRvIGJlIHN1cmU7IGRvZXMgc3l6a2FsbGVyIHRlc3Qgc3lzZnMgd3JpdGVzPyBZZXMsIGl0IGRvZXMsIHNvIHRoYXQncyBhIHZpYWJsZSBhdmVudWUgZm9yIHRlc3RpbmcuXG5cbkhvd2V2ZXIsIEknbSB0aGlua2luZyBzdHJhdGVnaWNhbGx5LiBGb2N1c2luZyBkaXJlY3RseSBvbiBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIG9yIGBmaWxsX2V2aWN0YWJsZWAgY291bGQgYWxzbyBiZSBhIGdvb2QgYXBwcm9hY2guIEhvbGQgb24sIGBmaWxsX2V2aWN0YWJsZWAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBMZXQncyBmaW5kICpub24tc3RhdGljKiBmdW5jdGlvbnMgdGhhdCBtaWdodCBjYWxsIGl0LCBnaXZpbmcgbWUgbW9yZSBkaXJlY3QgYWNjZXNzIHRvIHRoYXQgY29uZGl0aW9uYWwgcGF0aC4gT2theSwgYm90aCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFuZCBgZW5hYmxlZF9zdG9yZWAgYXJlIGFsc28gc3RhdGljLiBCdXQsIHdhaXQuLi4gYGVuYWJsZWRfc3RvcmVgIGlzIHJlZ2lzdGVyZWQgYXMgYSBzeXNmcyBhdHRyaWJ1dGUhIFRoYXQncyBwcm9taXNpbmcuIEkgbmVlZCB0byBmaW5kIG91dCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNhbGxlcnMgb2YgYGZpbGxfZXZpY3RhYmxlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTYxOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODoyMS45NzExMzgyNVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyNDMxMjQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbGxfZXZpY3RhYmxlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTUyNzA9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc3RhdGVfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTI5Mi1cXG5tbS92bXNjYW4uYzo1MjkzOnN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcXG5tbS92bXNjYW4uYy01Mjk0LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUzNjc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQwMS1cXG5tbS92bXNjYW4uYzo1NDAyOlxcdFxcdFxcdHdoaWxlICghKGVuYWJsZWQgPyBmaWxsX2V2aWN0YWJsZShscnV2ZWMpIDogZHJhaW5fZXZpY3RhYmxlKGxydXZlYykpKSB7XFxubW0vdm1zY2FuLmMtNTQwMy1cXHRcXHRcXHRcXHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODoyMi4xODM1NzYwOTlaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0MDcxMjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBmaWxsX2V2aWN0YWJsZWAncyBDYWxsZXJzKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGlzIG9ubHkgY2FsbGVkIGJ5IGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaW4gdGhlIGNvZGViYXNlLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyByb2xlIGluIHRoZSBMUlUgZXZpY3Rpb24gcHJvY2Vzcy4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHF1ZXN0aW9uIGlzLCB3aGVyZSBlbHNlIGlzIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgYmVpbmcgY2FsbGVkIGZyb20/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHVwIHRoZSBjYWxsIHN0YWNrIHRvIHNlZSB3aGF0IHRyaWdnZXJzICp0aGF0KiBmdW5jdGlvbi4gS25vd2luZyB0aGUgY29udGV4dCBvZiB0aG9zZSBoaWdoZXItbGV2ZWwgY2FsbHMgd2lsbCBnaXZlIG1lIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB3aGVuIGFuZCB3aHkgYGZpbGxfZXZpY3RhYmxlYCBpcyBpbnZva2VkLiBJdCdzIGFsbCBhYm91dCB1bmRlcnN0YW5kaW5nIHRoZSBjb250cm9sIGZsb3cgYW5kIGhvdyBldmljdGlvbiBkZWNpc2lvbnMgYXJlIHVsdGltYXRlbHkgZHJpdmVuLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW5pdGlhdGluZyBmYWN0b3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDMxMSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjI1LjcyNDI5MTQ5OFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAwNjQ4MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibHJ1X2dlbl9jaGFuZ2Vfc3RhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTMzOD1zdGF0aWMgYm9vbCBkcmFpbl9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTM2Ni1cXG5tbS92bXNjYW4uYzo1MzY3OnN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG5tbS92bXNjYW4uYy01MzY4LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ4MS1cXHRcXHRpZiAoaSA9PSBMUlVfR0VOX0NPUkUpXFxubW0vdm1zY2FuLmM6NTQ4MjpcXHRcXHRcXHRscnVfZ2VuX2NoYW5nZV9zdGF0ZShlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NDgzLVxcdFxcdGVsc2UgaWYgKGVuYWJsZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjI1Ljc3NDM2MjAzM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjMwMDU3OTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gdW5kZXJzdGFuZCB0aGUgdHJpZ2dlciBmb3IgYGZpbGxfZXZpY3RhYmxlYC4gRnJvbSBteSBjb2RlIHJldmlldywgaXQgbG9va3MgbGlrZSBgZW5hYmxlZF9zdG9yZWAgaXMgdGhlIG9ubHkgcGF0aC4gQnV0IGlzIHRoYXQgKnRydWx5KiB0aGUgY2FzZT8gTGV0IG1lIGp1c3QgY29uZmlybSDigJMgeWVwLCBzZWVtcyBsaWtlIGBlbmFibGVkX3N0b3JlYCBpcyBpbmRlZWQgdGhlIHNvbGUgdHJpZ2dlci4gR29vZC4gQW5kLCBzaW5jZSBpdCdzIGEgc3lzZnMgc3RvcmUgZnVuY3Rpb24sIEkga25vdyBpdCdzIHJlYWNoYWJsZS5cblxuQnV0LCBhIG5hZ2dpbmcgdGhvdWdodC4uLiB3aGF0IGlmIE1HTFJVIGlzIGVuYWJsZWQgYnkgZGVmYXVsdD8gSWYgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGlzIHNldCwgdGhlIHN5c3RlbSBib290cyB3aXRoIE1HTFJVIGFjdGl2ZSwgcmlnaHQ/IFNvLCBkb2VzIGBmaWxsX2V2aWN0YWJsZWAgZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGJvb3QgcHJvY2Vzcz8gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbml0aWFsaXphdGlvbiBjb2RlIOKAkyBwcm9iYWJseSBzb21ldGhpbmcgbGlrZSBgaW5pdF9scnVfZ2VuYCBvciBzb21ldGhpbmcgc2ltaWxhciwgYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgcHJvY2VzcyBkb2Vzbid0IGdldCB0cmlnZ2VyZWQgYXV0b21hdGljYWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3NzIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzAuMDA0NDIzNDQyWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDI1ODU0NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbml0X2xydV9nZW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NTkxMz12b2lkIGxydV9nZW5fZXhpdF9tZW1jZyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS92bXNjYW4uYy01OTQxLVxcbm1tL3Ztc2Nhbi5jOjU5NDI6c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxubW0vdm1zY2FuLmMtNTk0My17XFxuLS1cXG5tbS92bXNjYW4uYy01OTU2LX07XFxubW0vdm1zY2FuLmM6NTk1NzpsYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzAuMDU0Njg4NzU2WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMzYzNzAxMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIHRoaXMgZmllbGQ6XG5cbioqTGV0J3MgRGl2ZSBpbnRvIGBpbml0X2xydV9nZW5gKipcblxuQWxyaWdodCwgdGhlIGluc3RydWN0aW9uIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gdGFrZSBhIGxvb2sgYXQgYGluaXRfbHJ1X2dlbmAuIFRoaXMgaW1tZWRpYXRlbHkgc2lnbmFscyBhIHNwZWNpZmljIGZ1bmN0aW9uLCBwcm9iYWJseSByZWxhdGVkIHRvIHRoZSBpbml0aWFsaXphdGlvbiBvZiBhbiBMUlUgY2FjaGUsIGdpdmVuIHRoZSBuYW1lLiBUaGUgXCJnZW5cIiBzdWZmaXggbGlrZWx5IGhpbnRzIGF0IHNvbWUgc29ydCBvZiBnZW5lcmF0b3IgY29tcG9uZW50LCB3aGljaCBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZy4gTXkgbWluZCBpcyBhbHJlYWR5IHN0YXJ0aW5nIHRvIGZvcm11bGF0ZSBxdWVzdGlvbnM6XG5cbiogICBJcyBpdCBhIGdlbmVyYXRvci1iYXNlZCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgTFJVIGl0c2VsZj9cbiogICBJcyBpdCBpbml0aWFsaXppbmcgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgYnkgYSBsYXRlciBnZW5lcmF0b3I/XG4qICAgV2hhdCdzIHRoZSBvdmVyYWxsIHN0cnVjdHVyZSBhbmQgZGVzaWduIHBoaWxvc29waHkgaGVyZT8gSXMgdGhpcyBmb3IgZWZmaWNpZW50IG1lbW9yeSBtYW5hZ2VtZW50IGluIHRoZSBMUlU/XG5cbkknbSByZWFkeSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgY29kZS4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZTpcblxuKiAgIERhdGEgc3RydWN0dXJlIGNob2ljZXM6IEhhc2ggbWFwcz8gTGlua2VkIGxpc3RzPyBPdGhlciBzdHJ1Y3R1cmVzIG9wdGltaXplZCBmb3IgTFJVIGJlaGF2aW9yP1xuKiAgIEhvdyB0aGUgY2FjaGUgaXMgcG9wdWxhdGVkIGluaXRpYWxseS4gQXJlIHRoZXJlIGRlZmF1bHQgdmFsdWVzLCBvciBpbml0aWFsIGVudHJpZXM/XG4qICAgSG93IHRoZSBcImdlbmVyYXRvclwiIGFzcGVjdCBpcyBpbnRlZ3JhdGVkLiBIb3cgaXMgaXQgZ2VuZXJhdGluZyBjYWNoZWQgdmFsdWVzP1xuKiAgIFdoYXQgYXNzdW1wdGlvbnMgYXJlIGJlaW5nIG1hZGUgYWJvdXQgdGhlIGNhY2hlJ3Mga2V5L3ZhbHVlIHR5cGVzPyBBcmUgdGhlcmUgYW55IHR5cGUtcmVsYXRlZCBjb25zdHJhaW50cz9cbiogICBFcnJvciBoYW5kbGluZywgcGFydGljdWxhcmx5IGFyb3VuZCBhbGxvY2F0aW9uIGFuZCBwb3RlbnRpYWwgb3ZlcmZsb3cuXG5cbkVzc2VudGlhbGx5LCBJJ20gZ29pbmcgdG8gc3RhcnQgd2l0aCBhIGJyb2FkIG92ZXJ2aWV3IGFuZCB0aGVuIGltbWVkaWF0ZWx5IGhvbmUgaW4gb24gdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBnZW5lcmF0b3IgbG9naWMgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgTFJVIGNhY2hlIGRlc2lnbi4gSSdtIGV4Y2l0ZWQgdG8gc2VlIGhvdyBpdCdzIGltcGxlbWVudGVkIGFuZCBob3cgd2VsbCBpdCBtYXRjaGVzIG15IGV4cGVjdGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNjUsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODozNC4wOTEwNjM4NzVaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk5OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDU5NDIsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjU5NDI6XFx0c3RhdGljIGludCBfX2luaXQgaW5pdF9scnVfZ2VuKHZvaWQpXFxuNTk0MzpcXHR7XFxuNTk0NDpcXHRcXHRCVUlMRF9CVUdfT04oTUlOX05SX0dFTlMgKyAxIFxcdTAwM2U9IE1BWF9OUl9HRU5TKTtcXG41OTQ1OlxcdFxcdEJVSUxEX0JVR19PTihCSVQoTFJVX0dFTl9XSURUSCkgXFx1MDAzYz0gTUFYX05SX0dFTlMpO1xcbjU5NDY6XFx0XFxuNTk0NzpcXHRcXHRpZiAoc3lzZnNfY3JlYXRlX2dyb3VwKG1tX2tvYmosIFxcdTAwMjZscnVfZ2VuX2F0dHJfZ3JvdXApKVxcbjU5NDg6XFx0XFx0XFx0cHJfZXJyKFxcXCJscnVfZ2VuOiBmYWlsZWQgdG8gY3JlYXRlIHN5c2ZzIGdyb3VwXFxcXG5cXFwiKTtcXG41OTQ5OlxcdFxcbjU5NTA6XFx0XFx0ZGVidWdmc19jcmVhdGVfZmlsZV9hdXhfbnVtKFxcXCJscnVfZ2VuXFxcIiwgMDY0NCwgTlVMTCwgTlVMTCwgZmFsc2UsXFxuNTk1MTpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcndfZm9wcyk7XFxuNTk1MjpcXHRcXHRkZWJ1Z2ZzX2NyZWF0ZV9maWxlX2F1eF9udW0oXFxcImxydV9nZW5fZnVsbFxcXCIsIDA0NDQsIE5VTEwsIE5VTEwsIHRydWUsXFxuNTk1MzpcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmxydV9nZW5fcm9fZm9wcyk7XFxuNTk1NDpcXHRcXG41OTU1OlxcdFxcdHJldHVybiAwO1xcbjU5NTY6XFx0fTtcXG41OTU3OlxcdGxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcXG41OTU4OlxcdFxcbjU5NTk6XFx0I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOICovXFxuNTk2MDpcXHRcXG41OTYxOlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjM0LjA5MTM2NzYzNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQzODU3ODQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTUdMUlUgQm9vdC1VcCoqXG5cbk9rYXksIHNvIGBpbml0X2xydV9nZW5gIGlzIGFwcGFyZW50bHkganVzdCByZXNwb25zaWJsZSBmb3Igc2V0dGluZyB1cCB0aGUgc3lzZnMgYW5kIGRlYnVnZnMgaW50ZXJmYWNlcy4gVGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIEJ1dCBhIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkOiBob3cgZXhhY3RseSAqaXMqIE1HTFJVIGVuYWJsZWQgZHVyaW5nIHRoZSBib290IHByb2Nlc3MgaWYgdGhlIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcyBzZXQ/IEl0IGhhcyB0byBiZSBjb21pbmcgZnJvbSBzb21ld2hlcmUuIEkgbmVlZCB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGxydV9nZW5fZW5hYmxlZCgpYCDigJMgdGhhdCBmdW5jdGlvbiBzaG91bGQgaG9sZCB0aGUga2V5LiBMZXQncyBzZWUgd2hhdCB0aGUgY2hlY2sgZG9lcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwNDgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjM3LjczNTIyOTAxNVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyODE2MzQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxydV9nZW5fZW5hYmxlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Njg9c3RhdGljIGVudW0gZm9saW9fcmVmZXJlbmNlcyBmb2xpb19jaGVja19yZWZlcmVuY2VzKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5tbS92bXNjYW4uYy04OTItXFxubW0vdm1zY2FuLmM6ODkzOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTg5NC1cXHRcXHRpZiAoIXJlZmVyZW5jZWRfcHRlcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODA9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yMjg2LVxcbm1tL3Ztc2Nhbi5jOjIyODc6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTIyODgtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NTM2Nz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXFxuLS1cXG5tbS92bXNjYW4uYy01Mzc3LVxcbm1tL3Ztc2Nhbi5jOjUzNzg6XFx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtNTM3OS1cXHRcXHRnb3RvIHVubG9jaztcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NjU9c3RhdGljIHNzaXplX3QgZW5hYmxlZF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLFxcbi0tXFxubW0vdm1zY2FuLmMtNTQ5MS1cXG5tbS92bXNjYW4uYzo1NDkyOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgbHJ1X2dlbl9lbmFibGVkX2F0dHIgPSBfX0FUVFJfUlcoZW5hYmxlZCk7XFxubW0vdm1zY2FuLmMtNTQ5My1cXG5tbS92bXNjYW4uYz01NDk0PXN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpscnVfZ2VuX2F0dHJzW10gPSB7XFxubW0vdm1zY2FuLmMtNTQ5NS1cXHRcXHUwMDI2bHJ1X2dlbl9taW5fdHRsX2F0dHIuYXR0cixcXG5tbS92bXNjYW4uYzo1NDk2OlxcdFxcdTAwMjZscnVfZ2VuX2VuYWJsZWRfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jLTU0OTctXFx0TlVMTFxcbi0tXFxubW0vdm1zY2FuLmM9NTg4MD12b2lkIGxydV9nZW5faW5pdF9scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTg4Ny1cXHRscnVnZW4tXFx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyArIDE7XFxubW0vdm1zY2FuLmM6NTg4ODpcXHRscnVnZW4tXFx1MDAzZWVuYWJsZWQgPSBscnVfZ2VuX2VuYWJsZWQoKTtcXG5tbS92bXNjYW4uYy01ODg5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk3OD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTg4LVxcbm1tL3Ztc2Nhbi5jOjU5ODk6XFx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcXHUwMDI2XFx1MDAyNiAhcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTU5OTAtXFx0XFx0bHJ1X2dlbl9zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjI0OD1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZShwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYyNTMtXFxubW0vdm1zY2FuLmM6NjI1NDpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2IHJvb3RfcmVjbGFpbShzYykpIHtcXG5tbS92bXNjYW4uYy02MjU1LVxcdFxcdG1lbXNldChcXHUwMDI2c2MtXFx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXFx1MDAzZW5yKSk7XFxuLS1cXG5tbS92bXNjYW4uYz02NTI1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy02NTI5LVxcbm1tL3Ztc2Nhbi5jOjY1MzA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxcbm1tL3Ztc2Nhbi5jLTY1MzEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vdm1zY2FuLmM9NjkxNT1zdGF0aWMgdm9pZCBrc3dhcGRfYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02OTE5LVxcbm1tL3Ztc2Nhbi5jOjY5MjA6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcXG5tbS92bXNjYW4uYy02OTIxLVxcdFxcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6MzcuOTc4MDUwNzdaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI2NTU5ODYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqVHJhY2luZyBgbHJ1X2dlbl9lbmFibGVkYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBgbHJ1X2dlbl9lbmFibGVkYCBpcyBiZWluZyB1c2VkIGFuZCB3aGF0IGl0cyBzY29wZSBpcy4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9jYXRlIGl0cyBkZWZpbml0aW9uLiBMZXQncyBzZWUgd2hlcmUgdGhhdCB2YXJpYWJsZSBpcyBhY3R1YWxseSAqZGVmaW5lZCogaW4gdGhlIGNvZGUuIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGlzIGZsYWcsIHNvIEkgY2FuIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHB1cnBvc2UgYW5kIGhvdyBpdCBpbmZsdWVuY2VzIHRoZSBzeXN0ZW0ncyBiZWhhdmlvci4gVGltZSB0byBmaXJlIHVwIHRoZSBzZWFyY2ggdG9vbHMgYW5kIHRyYWNlIHRoYXQgdmFyaWFibGUgZG93bi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNDcsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODo0MS4yNDM2NTI4ODNaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzYwOTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9tbXpvbmUuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NDEuMjk2NDIxMjc4WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjMzMTUxMTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDpcblxuKipDaGVja2luZyB0aGUgYGxydV9nZW5fZW5hYmxlZGAgRGVmaW5pdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gVGhlIGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gcGlucG9pbnQgd2hlcmUgYGxydV9nZW5fZW5hYmxlZGAgaXMgYWN0dWFsbHkgKmRlZmluZWQqLiBJIG5lZWQgdG8ga25vdyBpdHMgc2NvcGUsIGl0cyB0eXBlIChpZiBhbnkpLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzLiBUaGF0IG1lYW5zIGRpdmluZyBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeSDigJMgdGhhdCdzIHdoZXJlIHRoZSBjb3JlIGRlY2xhcmF0aW9ucyBhbmQgaGVhZGVycyB0eXBpY2FsbHkgbGl2ZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyB2YXJpYWJsZSB0aG9yb3VnaGx5IGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgaW1wYWN0IG9yIGhvdyBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBsYXJnZXIgc3lzdGVtLiBTbywgb2ZmIHRvIGBpbmNsdWRlL2AgSSBnby4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MzMsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1ODo0NS41MTk3NDAzNDVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NzQ1OTIwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9tbV9pbmxpbmUuaD0xMDA9c3RhdGljIGlubGluZSBib29sIGxydV9nZW5fc3dpdGNoaW5nKHZvaWQpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwNi0jaWZkZWYgQ09ORklHX0xSVV9HRU5fRU5BQkxFRFxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTA3OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTEwOC17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExMy0jZWxzZVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MTE0OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTExNS17XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oPTMwNz1zdGF0aWMgaW5saW5lIHZvaWQgZm9saW9fbWlncmF0ZV9yZWZzKHN0cnVjdCBmb2xpbyAqbmV3LCBjb25zdCBzdHJ1Y3QgZm9saW8gKm9sZClcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmgtMzE0LVxcbmluY2x1ZGUvbGludXgvbW1faW5saW5lLmg6MzE1OnN0YXRpYyBpbmxpbmUgYm9vbCBscnVfZ2VuX2VuYWJsZWQodm9pZClcXG5pbmNsdWRlL2xpbnV4L21tX2lubGluZS5oLTMxNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU4OjQ1LjY2NzIwNjYyMVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDEzODc5ODY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgVGhvdWdodHMgb24gTFJVIEdlbmVyYXRpb24gQmVoYXZpb3IqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBzZXR0aW5nLiBJdCBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIHRoYXQncyBkZWZpbmVkLCBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGdvaW5nIHRvIHJldHVybiB0cnVlIGJ5IGRlZmF1bHQuIFRoYXQncyB0aGUgZXhwZWN0ZWQgYmVoYXZpb3IuIE5vdywgSSdtIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElmIGl0J3MgKmVuYWJsZWQqIGJ5IGRlZmF1bHQsIHRoZW4gYGxydV9nZW5fY2hhbmdlX3N0YXRlYCB3aWxsIGxpa2VseSAqb25seSogYmUgaW52b2tlZCB3aGVuIGEgdXNlcnNwYWNlIHByb2Nlc3MgZXhwbGljaXRseSBpbnRlcmFjdHMgd2l0aCBgL3N5cy9rZXJuZWwvbW0vbHJ1X2dlbi9lbmFibGVkYC4gRXNzZW50aWFsbHksIGl0J3MgYSBkaXNhYmxlL3JlLWVuYWJsZSBzd2l0Y2gsIHllYWg/XG5cbk5vdywgdGhlIG5leHQgdGhpbmcgdGhhdCBwb3BzIGludG8gbXkgaGVhZCBpcyBgZmlsbF9ldmljdGFibGVgLiBUaGlzIGZ1bmN0aW9uIGlzIHRpZWQgdG8gdGhlIGBlbmFibGVkYCBzdGF0ZS4gVGhlIGNyaXRpY2FsIHRoaW5nIGhlcmUgaXMgKndoZW4qIGBmaWxsX2V2aWN0YWJsZWAgaXMgYWN0dWFsbHkgY2FsbGVkLiBJZiB0aGUga2VybmVsIGJvb3RzIHdpdGggTUdMUlUgZW5hYmxlZCAtIGFuZCBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAgaXMgdHJ1ZSBieSBkZWZhdWx0IC0gSSBzZWUgdGhhdCBgZmlsbF9ldmljdGFibGVgIGRvZXMgKk5PVCogZ2V0IGNhbGxlZCBkdXJpbmcgdGhlIGluaXRpYWwgYm9vdCBwcm9jZXNzLiBJbnRlcmVzdGluZy4uLlxuXG5JIG5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLiBJIGNhbiBzZWUgaG93IHVzZXIgaW50ZXJhY3Rpb24gd2l0aCB0aGUgc3lzZnMgZW50cnkgd291bGQgaW5mbHVlbmNlIHRoaXMgd2hvbGUgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5OTgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NTAuMDgxMDg5MTM4WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNzExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MzY3LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MzY3OlxcdHN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG41MzY4OlxcdHtcXG41MzY5OlxcdFxcdHN0YXRpYyBERUZJTkVfTVVURVgoc3RhdGVfbXV0ZXgpO1xcbjUzNzA6XFx0XFxuNTM3MTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuNTM3MjpcXHRcXG41MzczOlxcdFxcdGNncm91cF9sb2NrKCk7XFxuNTM3NDpcXHRcXHRjcHVzX3JlYWRfbG9jaygpO1xcbjUzNzU6XFx0XFx0Z2V0X29ubGluZV9tZW1zKCk7XFxuNTM3NjpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZzdGF0ZV9tdXRleCk7XFxuNTM3NzpcXHRcXG41Mzc4OlxcdFxcdGlmIChlbmFibGVkID09IGxydV9nZW5fZW5hYmxlZCgpKVxcbjUzNzk6XFx0XFx0XFx0Z290byB1bmxvY2s7XFxuNTM4MDpcXHRcXG41MzgxOlxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9zd2l0Y2gpO1xcbjUzODI6XFx0XFxuNTM4MzpcXHRcXHRpZiAoZW5hYmxlZClcXG41Mzg0OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZW5hYmxlX2NwdXNsb2NrZWQoXFx1MDAyNmxydV9nZW5fY2Fwc1tMUlVfR0VOX0NPUkVdKTtcXG41Mzg1OlxcdFxcdGVsc2VcXG41Mzg2OlxcdFxcdFxcdHN0YXRpY19icmFuY2hfZGlzYWJsZV9jcHVzbG9ja2VkKFxcdTAwMjZscnVfZ2VuX2NhcHNbTFJVX0dFTl9DT1JFXSk7XFxuNTM4NzpcXHRcXG41Mzg4OlxcdFxcdG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIE5VTEwsIE5VTEwpO1xcbjUzODk6XFx0XFx0ZG8ge1xcbjUzOTA6XFx0XFx0XFx0aW50IG5pZDtcXG41MzkxOlxcdFxcbjUzOTI6XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcXG41MzkzOlxcdFxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYyA9IGdldF9scnV2ZWMobWVtY2csIG5pZCk7XFxuNTM5NDpcXHRcXG41Mzk1OlxcdFxcdFxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjUzOTY6XFx0XFxuNTM5NzpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXNlcV9pc192YWxpZChscnV2ZWMpKTtcXG41Mzk4OlxcdFxcdFxcdFxcdFZNX1dBUk5fT05fT05DRSghc3RhdGVfaXNfdmFsaWQobHJ1dmVjKSk7XFxuNTM5OTpcXHRcXG41NDAwOlxcdFxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbjU0MDE6XFx0XFxuNTQwMjpcXHRcXHRcXHRcXHR3aGlsZSAoIShlbmFibGVkID8gZmlsbF9ldmljdGFibGUobHJ1dmVjKSA6IGRyYWluX2V2aWN0YWJsZShscnV2ZWMpKSkge1xcbjU0MDM6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG41NDA0OlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MDU6XFx0XFx0XFx0XFx0XFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XFxuNTQwNjpcXHRcXHRcXHRcXHR9XFxuNTQwNzpcXHRcXG41NDA4OlxcdFxcdFxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTQwOTpcXHRcXHRcXHR9XFxuNTQxMDpcXHRcXG41NDExOlxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjU0MTI6XFx0XFx0fSB3aGlsZSAoKG1lbWNnID0gbWVtX2Nncm91cF9pdGVyKE5VTEwsIG1lbWNnLCBOVUxMKSkpO1xcbjU0MTM6XFx0XFxuNTQxNDpcXHRcXHRzdGF0aWNfYnJhbmNoX2Rpc2FibGVfY3B1c2xvY2tlZChcXHUwMDI2bHJ1X3N3aXRjaCk7XFxuNTQxNTpcXHRcXG41NDE2OlxcdHVubG9jazpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTg6NTAuMDgxNTE4NjA4WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNTMyODA0ODY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIE1HTFJVIFRvZ2dsZSoqXG5cbk9rYXksIHNvIGBmaWxsX2V2aWN0YWJsZWAgc2VlbXMgdG8gYmUgdGhlIGtleSBmdW5jdGlvbiBoZXJlLiBJdCdzIHRoZSBvbmUgdGhhdCBtb3ZlcyBwYWdlcyBiZXR3ZWVuIExSVSBsaXN0cyB3aGVuIE1HTFJVIGdldHMgZW5hYmxlZCBhdCBydW50aW1lLiBJZiBNR0xSVSBpcyBvbiBmcm9tIHRoZSBzdGFydCwgdGhvc2UgcGFnZXMgYXJlIGFscmVhZHkgaW4gdGhlIG11bHRpLWdlbiBMUlUgbGlzdHMuIEFuZCwgaWYgTUdMUlUgaXMgZGlzYWJsZWQgYXQgcnVudGltZSwgYGRyYWluX2V2aWN0YWJsZWAgaXMgY2FsbGVkIHRvIG1vdmUgcGFnZXMgYmFjay4gU28sIGBmaWxsX2V2aWN0YWJsZWAgaXMgb25seSBleGVjdXRlZCB3aGVuIE1HTFJVIGlzIHRvZ2dsZWQgb24uIEl0IHNvdW5kcyBsaWtlIHRoaXMgY291bGQgYmUgYSBnb29kIGFyZWEgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBtZW1vcnkgbWFuYWdlbWVudCAoTU0pIHN1YnN5c3RlbSBhbmQgdGhlIExSVSBsaXN0cyBzcGVjaWZpY2FsbHkuXG5cblRoaXMgcGF0Y2ggaXMgYWRkcmVzc2luZyBhbiBpc3N1ZSB3aGVyZSBmb2xpb3MgYXJlIGdldHRpbmcgYWRkZWQgdG8gdGhlIExSVSBsaXN0cyBpbiB0aGUgd3Jvbmcgb3JkZXIsIGNhdXNpbmcgYSBjb2xkL2hvdCBpbnZlcnNpb24gcHJvYmxlbS4gVG8gdGVzdCB0aGlzIHdpdGggc3l6a2FsbGVyLCBJJ2xsIG5lZWQgdG8gdG9nZ2xlIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBBaCwgc3l6a2FsbGVyIGNhbiB3cml0ZSB0byBzeXNmcyBmaWxlcyEgVGhhdCdzIGdvb2QuXG5cblRoZSBlbnRyeSBwb2ludCBmb3IgdGhlIHRvZ2dsZSBpcyB0aGUgYGxydV9nZW5fY2hhbmdlX3N0YXRlYCBmdW5jdGlvbi4gVGhlIHN5c2ZzIHN0b3JlIGZ1bmN0aW9uIGlzIGBlbmFibGVkX3N0b3JlYC4gU2hvdWxkIEkgZm9jdXMgb24gdGhlIGVudHJ5IHBvaW50IG9yIHRoZSBzeXNmcyBlbnRyeT8gYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBtb3JlIGRpcmVjdCBlbnRyeSBwb2ludC4gSG93ZXZlciwgaXQncyBhIHN0YXRpYyBmdW5jdGlvbi4gSG0sIGxldCBtZSBjaGVjayBpZiBpdCdzIGlubGluZWQuLi4gcHJvYmFibHkgbm90LCBnaXZlbiB0aGF0IHN5c2ZzIHN0b3JlIGZ1bmN0aW9ucyBhcmUgdXN1YWxseSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMuIExldCdzIGNoZWNrIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgYXMgd2VsbCwgaXQncyBhbHNvIHN0YXRpYywgYnV0IGl0J3MgY2FsbGVkIGZyb20gYGVuYWJsZWRfc3RvcmVgLiBgZmlsbF9ldmljdGFibGVgIGlzIGFsc28gc3RhdGljLCBzbyBJIGNhbiBmb2N1cyBvbiB0aG9zZSB0d28uIFdhaXQsIGBlbmFibGVkX3N0b3JlYCBpcyBwYXNzZWQgdG8gYF9fQVRUUl9SVyhlbmFibGVkKWAuXG5cbkkgc2hvdWxkIGNoZWNrIHRvIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgY2FsbGVycyBvZiBgZmlsbF9ldmljdGFibGVgLCBuby5cblxuSXQgbG9va3MgbGlrZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGlzbid0IG1vZGlmaWVkLCBidXQgaXQncyBjYWxsZWQgZGlmZmVyZW50bHkuIFRoZSBwYXRjaCBjaGFuZ2VzIGhvdyBmb2xpb3MgYXJlIGFkZGVkIHRvIExSVSBsaXN0cyB1c2luZyBgbHJ1X2dlbl9hZGRfZm9saW9gLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBNTSBzdWJzeXN0ZW0uXG5cbkknbGwgbmVlZCBgTFJVX0dFTmAgKHdoaWNoIGlzIGBDT05GSUdfTFJVX0dFTmApIGVuYWJsZWQsIHdoaWNoIGRlcGVuZHMgb24gYE1NVWAuIElzIHRoYXQgYWxsIEkgbmVlZD8gWWVzLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTFJVX0dFTmAgZGlyZWN0bHkgZW5hYmxlcyBNR0xSVS4gQW5kIGBlbmFibGVkX3N0b3JlYCBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBlbmFibGVkLCBzbyBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTgzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODMwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MDEuNjE0MzI2MjI3WiIsIlNlcSI6NDQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODA5OTg4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04Mjc9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgzMi1cXG5tbS92bXNjYW4uYzo4MzM6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtODM0LS8qXFxuLS1cXG5tbS92bXNjYW4uYz04NjI9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtODY1LX1cXG5tbS92bXNjYW4uYzo4NjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtODY3LVxcbi0tXFxubW0vdm1zY2FuLmM9MjY4MD1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjY5MS1cXG5tbS92bXNjYW4uYzoyNjkyOiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI2OTMtXFxubW0vdm1zY2FuLmM9MjY5ND1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNjk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjY5Ni1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI4ODA9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0yODk5LVxcbm1tL3Ztc2Nhbi5jOjI5MDA6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTI5MDEtXFxuLS1cXG5tbS92bXNjYW4uYz0zMDA5PXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzAzNy1cXG5tbS92bXNjYW4uYzozMDM4OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMDM5LVxcbi0tXFxubW0vdm1zY2FuLmM9NTk1Nz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNTk1OC1cXG5tbS92bXNjYW4uYzo1OTU5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTU5NjAtXFxuLS1cXG5tbS92bXNjYW4uYz01OTcxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy01OTc1LVxcbm1tL3Ztc2Nhbi5jOjU5NzY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNTk3Ny1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MDEuNjYyNDM0NzYyWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NTM5ODcyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIE11bHRpLUdlbiBMUlUgQ29uZmlndXJhdGlvbiBhbmQgRnV6emluZyBTdHJhdGVneSoqXG5cbk9rYXksIHNvIEkndmUgZ29uZSB0aHJvdWdoIHRoaXMgbG9naWMgYW5kIGhlcmUncyBteSB0aGlua2luZy4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBNdWx0aS1HZW4gTFJVIChMUlVfR0VOKSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyB0aGUga2V5IGhlcmUuIEl0IGxvb2tzIGxpa2UgYGVuYWJsZWRfc3RvcmVgIGlzIHRoZSBlbnRyeSBwb2ludCwgd3JhcHBlZCB3aXRoaW4gYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYW5kIGAjZWxzZSAvKiAhQ09ORklHX0xSVV9HRU4gKi9gLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiB0aGlzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIHVzZSBgRm9jdXNTeW1ib2xzYC4gU2luY2UgYGVuYWJsZWRfc3RvcmVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBJIGluaXRpYWxseSBhc3N1bWVkIGl0J3MgaW5saW5lZCBhbmQgU3l6a2FsbGVyIGNvdWxkbid0IHRhcmdldCBpdCBkaXJlY3RseS4gQnV0IHdhaXQsIGl0J3MgcGFzc2VkIGFzIGEgZnVuY3Rpb24gcG9pbnRlciB0byBgX19BVFRSX1JXYCwgc28gaXQgKmNhbm5vdCogYmUgaW5saW5lZC4gVGhhdCdzIGdvb2QgbmV3cy4gU28gdGhhdCBtYWtlcyBgZW5hYmxlZF9zdG9yZWAgYSB2aWFibGUgZm9jdXMgc3ltYm9sLCBlc3BlY2lhbGx5IHNpbmNlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXNuJ3QgaW5saW5lZCBlaXRoZXIuIEkgbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSBib3RoIGluIG15IGZvY3VzIHN5bWJvbHMuXG5cblRoZSBwcm9tcHQgc3BlY2lmaWNhbGx5IG1lbnRpb25zIHRoYXQgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIGFyZSBwcmVmZXJyZWQsIGJ1dCBJIGNvdWxkbid0IGZpbmQgYW55IG5vbi1zdGF0aWMgYWx0ZXJuYXRpdmVzIHRvIHRyaWdnZXIgdGhpcyBjaGFuZ2UuIFRoZSBvbmx5IHBhdGggc2VlbXMgdG8gYmUgdGhyb3VnaCB0aGUgc3lzZnMgY2FsbGJhY2ssIGBlbmFibGVkX3N0b3JlYC4gRXZlbiB0aG91Z2ggYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgIGFyZSBib3RoIHN0YXRpYywgdGhleSdyZSB2YWxpZCB0YXJnZXRzIGJlY2F1c2UgdGhleSBhcmUgbm90IGlubGluZWQuXG5cbkkgZG91YmxlLWNoZWNrZWQgdG8gc2VlIGlmIGBmaWxsX2V2aWN0YWJsZWAgaXMgY2FsbGVkIGZyb20gZWxzZXdoZXJlLCBidXQgaXQncyBvbmx5IGNhbGxlZCBmcm9tIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIEkgYWxzbyByZXZpZXdlZCB0aGUgcGF0Y2ggYWdhaW4uXG5cblRoaXMgbG9va3MgbGlrZSBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGBmaWxsX2V2aWN0YWJsZWAuIFRoaXMgZnVuY3Rpb24gaXMgcGFydCBvZiB0aGUgcHJvY2VzcyBvZiBwb3B1bGF0aW5nIHRoZSBtdWx0aS1nZW4gTFJVIGxpc3RzLCB3aGljaCBoYXBwZW5zIHdoZW4gTUdMUlUgaXMgZW5hYmxlZC4gVGh1cywgYFdvcnRoRnV6emluZz10cnVlYC5cblxuVGhlcmVmb3JlLCB0aGUgY29uZmlndXJhdGlvbnMgYXJlIHNldCB0byBgTFJVX0dFTmAsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyB3aWxsIGJlIGBlbmFibGVkX3N0b3JlYCBhbmQgYGxydV9nZW5fY2hhbmdlX3N0YXRlYC5cblxuQW5kIGFzIGEgZmluYWwgZG91YmxlIGNoZWNrLCBJIGFtIGNvbmZpcm1pbmcgdGhhdCB0aGUgZW50cnkgcG9pbnQgYGVuYWJsZWRfc3RvcmVgIGlzIGluZGVlZCB0aGUgb25seSB3YXkgdG8gZ2V0IHRvIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAuIFRoaXMgaXMgY29uZmlybWVkIHZpYSBjb2RlIGFuYWx5c2lzIHdoZXJlIGBscnVfZ2VuX2NoYW5nZV9zdGF0ZWAgaXMgb25seSBjYWxsZWQgZnJvbSB3aXRoaW4gYGVuYWJsZWRfc3RvcmVgLlxuXG5JJ3ZlIGFsc28gY2hlY2tlZCB0aGUgZGVwZW5kZW5jaWVzIGZvciBgTFJVX0dFTmAg4oCTIGl0IGRlcGVuZHMgb24gYE1NVWAsIGA2NEJJVGAsIGFuZCBgU1BBUlNFTUVNYC4gVGhlc2UgZGVwZW5kZW5jaWVzIGFyZSBtb3N0bHkgbGlrZWx5IHNhdGlzZmllZCBieSBkZWZhdWx0LiBUaGVyZWZvcmUsIEkgY2FuIG5vdyBjb25maWRlbnRseSBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3Mjk4LCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDI6NTk6MTYuMjAyMzEwMjU0WiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY4MzkxMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJlbmFibGVkX3N0b3JlXCIsXG4gICAgXCJscnVfZ2VuX2NoYW5nZV9zdGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBmaWxsX2V2aWN0YWJsZWAgaW4gdGhlIE11bHRpLUdlbiBMUlUgKE1HTFJVKSBzdWJzeXN0ZW0gdG8gZml4IGFuIGlzc3VlIHdpdGggY29sZC9ob3QgaW52ZXJzaW9uIHdoZW4gbW92aW5nIGZvbGlvcyBmcm9tIHRoZSBhY3RpdmUvaW5hY3RpdmUgbGlzdHMgdG8gdGhlIE1HTFJVIGxpc3RzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgaXMgcmVhY2hhYmxlIHdoZW4gTUdMUlUgaXMgdG9nZ2xlZCBhdCBydW50aW1lIHZpYSB0aGUgYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAgc3lzZnMgZmlsZSwgd2hpY2ggdHJpZ2dlcnMgYGVuYWJsZWRfc3RvcmVgIGFuZCBgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGVgLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzkxNTYxNDdaIiwiU2VxIjo0NywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNDI0MDkwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzk3MTk0NDZaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODI0MTg0MTkxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4MjVlMDkzZmY0NGI0MDhhODlkODE4MTA1NDU0YjliNWVmNTQxNmZjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDI6NTc6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5lNmJiMmFjN2E1N2FhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtNTMwMiw3ICs1MzAyLDE3IEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcbiBcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGhlYWQpKSB7XG4gXHRcdFx0Ym9vbCBzdWNjZXNzO1xuLVx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBscnVfdG9fZm9saW8oaGVhZCk7XG4rXHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbitcbitcdFx0XHQvKlxuK1x0XHRcdCAqIGxydV9nZW5fYWRkX2ZvbGlvKCkgdXNlcyBsaXN0X2FkZF90YWlsKCkgcmF0aGVyXG4rXHRcdFx0ICogdGhhbiBsaXN0X2FkZCgpIHdoZW4gcmVjbGFpbWluZyBpcyB0cnVlLiAgTWF0Y2hcbitcdFx0XHQgKiBpdHMgb3JkZXJpbmcgdG8gYXZvaWQgY29sZC9ob3QgaW52ZXJzaW9uLlxuK1x0XHRcdCAqL1xuK1x0XHRcdGlmIChhY3RpdmUpXG4rXHRcdFx0XHRmb2xpbyA9IGxydV90b19mb2xpbyhoZWFkKTtcbitcdFx0XHRlbHNlXG4rXHRcdFx0XHRmb2xpbyA9IGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpO1xuIFxuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSwgZm9saW8pO1xuIFx0XHRcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgIT0gYWN0aXZlLCBmb2xpbyk7XG5AQCAtNTMxMCw3ICs1MzIwLDExIEBAIHN0YXRpYyBib29sIGZpbGxfZXZpY3RhYmxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fbHJ1X2dlbihmb2xpbykgIT0gLTEsIGZvbGlvKTtcbiBcbiBcdFx0XHRscnV2ZWNfZGVsX2ZvbGlvKGxydXZlYywgZm9saW8pO1xuLVx0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCBmYWxzZSk7XG4rXHRcdFx0LypcbitcdFx0XHQgKiBCb3Jyb3cgcmVjbGFpbWluZz10cnVlIHRvIHBsYWNlIGluYWN0aXZlIGZvbGlvcyBpblxuK1x0XHRcdCAqIHRoZSBvbGRlciBnZW5zLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHN1Y2Nlc3MgPSBscnVfZ2VuX2FkZF9mb2xpbyhscnV2ZWMsIGZvbGlvLCAhYWN0aXZlKTtcbiBcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXN1Y2Nlc3MpO1xuIFxuIFx0XHRcdGlmICghLS1yZW1haW5pbmcpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwMjo1OToxNi4yNzk3MjAzOTZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODI0MTgxNzAzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBBIFF1aWNrIExvb2sgYXQgTFJVIEZvbGlvIFNlbGVjdGlvbioqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdHdlYWtpbmcgYGZpbGxfZXZpY3RhYmxlYCBpbiBgbW0vdm1zY2FuLmNgLiBCYXNpY2FsbHksIGl0J3MgYWJvdXQgaG93IHdlIGdyYWIgYSBgZm9saW9gIGZyb20gdGhlIGBoZWFkYCBvZiBhbiBMUlUgbGlzdCwgZGVwZW5kaW5nIG9uIHdoZXRoZXIgaXQncyBjdXJyZW50bHkgY29uc2lkZXJlZCBcImFjdGl2ZVwiIG9yIG5vdC4gSWYgaXQgKmlzKiBhY3RpdmUsIGl0IHVzZXMgYGxydV90b19mb2xpbyhoZWFkKWAg4oCTIHdoaWNoLCBpZiBJIHJlbWVtYmVyIGNvcnJlY3RseSwgaXMgdGhlIHNhbWUgYXMgYGxpc3RfbGFzdF9lbnRyeShoZWFkLCBzdHJ1Y3QgZm9saW8sIGxydSlgLiBPdGhlcndpc2UgKGlmIGl0J3Mgbm90IGFjdGl2ZSksIGl0IGdyYWJzIHRoZSBmaXJzdCBlbnRyeSAoYGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgc3RydWN0IGZvbGlvLCBscnUpYCkuIEl0J3MgYWxzbyBjaGFuZ2luZyB0aGUgdGhpcmQgYXJndW1lbnQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYCBmcm9tIGBmYWxzZWAgdG8gYCFhY3RpdmVgLlxuXG5UaGlzIGlzIGFsbCBwcmV0dHkgY2xlYXJseSBpbiB0aGUgcmVhbG0gb2YgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHNwZWNpZmljYWxseSwgZGVhbGluZyB3aXRoIExSVSBsaXN0cywgcGFnZSBldmljdGlvbiwgYW5kIHRoZSBmb2xpb3MgdGhlbXNlbHZlcy4gTm90aGluZyB1c2VyLWZhY2luZyBoZXJlLCBhbmQgSSdtIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIGJlaW5nIGFsbG9jYXRlZCBvciBpbml0aWFsaXplZC4gSXQncyBqdXN0IGEgbWF0dGVyIG9mIGNoYW5naW5nIHRoZSBvcmRlciBhbmQgcGFzc2luZyBhIGJvb2xlYW4gdG8gYSBmdW5jdGlvbi5cblxuR2l2ZW4gdGhlIG5hdHVyZSBvZiB0aGUgY2hhbmdlLCBhbnkgcG90ZW50aWFsIGJ1Z3MgYXJlIGxpa2VseSBnb2luZyB0byBiZSBsaXN0IGNvcnJ1cHRpb24sIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcywgb3Igc29tZSBraW5kIG9mIGxvZ2ljIGVycm9yIHdpdGhpbiB0aGUgTFJVIGV2aWN0aW9uIHByb2Nlc3MgaXRzZWxmLiBUaGVzZSBhcmUgZXhhY3RseSB0aGUgdHlwZXMgb2YgcHJvYmxlbXMgdGhhdCBLQVNBTiBhbmQgb3VyIHN0YW5kYXJkIGtlcm5lbCB0ZXN0aW5nIChtZW1vcnkgY29ycnVwdGlvbiBkZXRlY3RvcnMsIHBhZ2Ugc3RhdGUgY2hlY2tzLCBldGMuKSBhcmUgYnVpbHQgdG8gY2F0Y2guIFdlJ3JlIG5vdCB0YWxraW5nIGFib3V0IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhlcmUsIGFuZCB0aGVyZSdzIG5vIHdheSB0byBsZWFrIGluZm8gdG8gdGhlIHVzZXIuXG5cblNvLCBqdXN0IHRvIGJlICphYnNvbHV0ZWx5KiBzdXJlLCBJJ2xsIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgbHJ1X2dlbl9hZGRfZm9saW9gIGFuZCBgZmlsbF9ldmljdGFibGVgIGZ1bmN0aW9ucywgYnV0IGJhc2VkIG9uIHdoYXQgSSBzZWUsIHRoaXMgaXMgKmRlZmluaXRlbHkqIG5vdCBhIEtNU0FOIHRhcmdldC4gSSdsbCBtYXJrIHRoaXMgYXMgYE5lZWRzS01TQU49ZmFsc2VgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjc1LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDAyOjU5OjI0LjUyMTU0MTA1NloiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGZvciBzZWxlY3RpbmcgZm9saW9zIGZyb20gYW4gTFJVIGxpc3QgaW4gYGZpbGxfZXZpY3RhYmxlYCBhbmQgYWRqdXN0cyB0aGUgYHJlY2xhaW1pbmdgIGZsYWcgcGFzc2VkIHRvIGBscnVfZ2VuX2FkZF9mb2xpb2AuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBvcmRlcmluZyBvZiBmb2xpb3MgaW4gdGhlIExSVSBnZW5lcmF0aW9ucyAoYXZvaWRpbmcgY29sZC9ob3QgaW52ZXJzaW9uKSBhbmQgZG8gbm90IGludm9sdmUgdGhlIGFsbG9jYXRpb24gb2YgbmV3IG1lbW9yeSwgaW5pdGlhbGl6YXRpb24gb2Ygc3RydWN0dXJlcywgb3IgY29weWluZyBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgbWFuaWZlc3QgYXMgbGlzdCBjb3JydXB0aW9ucywgdXNlLWFmdGVyLWZyZWUsIG9yIGxvZ2ljIGVycm9ycyBpbiBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggYXJlIHdlbGwtY292ZXJlZCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9naWMgZm9yIHNlbGVjdGluZyBmb2xpb3MgZnJvbSBhbiBMUlUgbGlzdCBpbiBgZmlsbF9ldmljdGFibGVgIGFuZCBhZGp1c3RzIHRoZSBgcmVjbGFpbWluZ2AgZmxhZyBwYXNzZWQgdG8gYGxydV9nZW5fYWRkX2ZvbGlvYC4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIG9yZGVyaW5nIG9mIGZvbGlvcyBpbiB0aGUgTFJVIGdlbmVyYXRpb25zIChhdm9pZGluZyBjb2xkL2hvdCBpbnZlcnNpb24pIGFuZCBkbyBub3QgaW52b2x2ZSB0aGUgYWxsb2NhdGlvbiBvZiBuZXcgbWVtb3J5LCBpbml0aWFsaXphdGlvbiBvZiBzdHJ1Y3R1cmVzLCBvciBjb3B5aW5nIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBtYW5pZmVzdCBhcyBsaXN0IGNvcnJ1cHRpb25zLCB1c2UtYWZ0ZXItZnJlZSwgb3IgbG9naWMgZXJyb3JzIGluIG1lbW9yeSBtYW5hZ2VtZW50LCB3aGljaCBhcmUgd2VsbC1jb3ZlcmVkIGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[1] Phase: Succeeded StartedAt: 2026-08-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 02:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 02:59:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2] Phase: Succeeded StartedAt: 2026-08-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 02:59:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:35 +0000 UTC FinishedAt: 2026-08-21 02:59:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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-workflowzjqg5/series-workflowzjqg5-convert-artifact-2587651631/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:45 +0000 UTC FinishedAt: 2026-08-21 03:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:45 +0000 UTC FinishedAt: 2026-08-21 03:16:31 +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:*1d76b7d7-98a7-497c-93d9-6a7f90215762,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-workflowzjqg5/series-workflowzjqg5-convert-artifact-2587651631/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": "7cc3615e-b817-49d5-9c02-985af955d86f", "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-workflowzjqg5/series-workflowzjqg5-build-action-1013576693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 02:59:45 +0000 UTC FinishedAt: 2026-08-21 03:16:21 +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:*1d76b7d7-98a7-497c-93d9-6a7f90215762,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-workflowzjqg5/series-workflowzjqg5-convert-artifact-2587651631/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": "7cc3615e-b817-49d5-9c02-985af955d86f", "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-workflowzjqg5/series-workflowzjqg5-build-action-1013576693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:31 +0000 UTC FinishedAt: 2026-08-21 03:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:31 +0000 UTC FinishedAt: 2026-08-21 03:16:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:31 +0000 UTC FinishedAt: 2026-08-21 03:16:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:31 +0000 UTC FinishedAt: 2026-08-21 03:16:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-workflowzjqg5/series-workflowzjqg5-convert-artifact-293901182/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:41 +0000 UTC FinishedAt: 2026-08-21 03:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:16:41 +0000 UTC FinishedAt: 2026-08-21 03:18:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7cc3615e-b817-49d5-9c02-985af955d86f,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-workflowzjqg5/series-workflowzjqg5-build-action-1013576693/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-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:18:45 +0000 UTC FinishedAt: 2026-08-21 03:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:18:45 +0000 UTC FinishedAt: 2026-08-21 03:18:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:18:45 +0000 UTC FinishedAt: 2026-08-21 03:35:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:18:45 +0000 UTC FinishedAt: 2026-08-21 03:35:06 +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:*1d76b7d7-98a7-497c-93d9-6a7f90215762,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-workflowzjqg5/series-workflowzjqg5-convert-artifact-293901182/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": "3e705ea4-d2f5-4d5a-b8c4-98a2b6cb311d", "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-workflowzjqg5/series-workflowzjqg5-build-action-3388694482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:18:45 +0000 UTC FinishedAt: 2026-08-21 03:34: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:*1d76b7d7-98a7-497c-93d9-6a7f90215762,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-workflowzjqg5/series-workflowzjqg5-convert-artifact-293901182/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": "3e705ea4-d2f5-4d5a-b8c4-98a2b6cb311d", "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-workflowzjqg5/series-workflowzjqg5-build-action-3388694482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:35:06 +0000 UTC FinishedAt: 2026-08-21 03:35:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:35:06 +0000 UTC FinishedAt: 2026-08-21 03:35:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:35:06 +0000 UTC FinishedAt: 2026-08-21 03:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:35:06 +0000 UTC FinishedAt: 2026-08-21 03:37:00 +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:*3e705ea4-d2f5-4d5a-b8c4-98a2b6cb311d,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-workflowzjqg5/series-workflowzjqg5-build-action-3388694482/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-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +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":["enabled_store","lru_gen_change_state"],"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:*7cc3615e-b817-49d5-9c02-985af955d86f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e705ea4-d2f5-4d5a-b8c4-98a2b6cb311d,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-workflowzjqg5/series-workflowzjqg5-build-action-1013576693/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-workflowzjqg5/series-workflowzjqg5-build-action-3388694482/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 03:37:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 03:37:15 +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":["enabled_store","lru_gen_change_state"],"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-workflowzjqg5/series-workflowzjqg5-convert-artifact-4216612739/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 03:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 03:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:10 +0000 UTC FinishedAt: 2026-08-21 03:37:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:20 +0000 UTC FinishedAt: 2026-08-21 06:39:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzjqg5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","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":["enabled_store","lru_gen_change_state"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"5425e1a8f93c809cf379b0621c499d12701adfce","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"b10ca4b0-847e-45e6-9c8e-6eadae76d668","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-21 03:37:20 +0000 UTC FinishedAt: 2026-08-21 06:38:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*7cc3615e-b817-49d5-9c02-985af955d86f,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e705ea4-d2f5-4d5a-b8c4-98a2b6cb311d,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-workflowzjqg5/series-workflowzjqg5-build-action-1013576693/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-workflowzjqg5/series-workflowzjqg5-build-action-3388694482/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-workflowzjqg5/series-workflowzjqg5-convert-artifact-4216612739/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,}