Name: series-workflowzp75p Phase: Succeeded StartedAt: 2026-08-28 16:23:48 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[0] Phase: Succeeded StartedAt: 2026-08-28 16:23:48 +0000 UTC FinishedAt: 2026-08-28 17:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[0].run-triage Phase: Succeeded StartedAt: 2026-08-28 16:23:48 +0000 UTC FinishedAt: 2026-08-28 17:18:59 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "X86_64" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "X86_64" ], "series_id": "601d230c-e34d-46d7-b3a5-1ff1535697ec" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_get_unmapped_area", "arch_get_unmapped_area_topdown", "hugetlb_get_unmapped_area" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7LAogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cblxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTY6NDg6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcbmluZGV4IDc3NmFlNmZhN2YyZDYuLjZiMmJlMDY1MzA0ZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5AQCAtMTU3LDcgJiM0MzsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuJiM0MztcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiYjNDM7XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbkBAIC0yMjIsNyAmIzQzOzIyMyw4IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiBcbiBcdGlmIChmaWxwKSB7XG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApO1xuLVx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiYjNDM7XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4mIzQzO1x0XHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yNW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1g4Nl82NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWEmIzM0OywKICAgICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeDg2LTY0IGFkZHJlc3MgYWxsb2NhdGlvbiBsb2dpYyBpbiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKCkgYW5kIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpIHRvIHByZXZlbnQgYXBwbHlpbmcgZ2V0X2FsaWduX2JpdHMoKSBvZmZzZXQgd2hlbiBtYXBwaW5nIEh1Z2VUTEIgZmlsZXMuIFRoaXMgYWx0ZXJzIG1tYXAgYWRkcmVzcyBzZWxlY3Rpb24gZm9yIGh1Z2V0bGJmcyBtYXBwaW5ncyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgbW1hcCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IDc3NmFlNmZhN2YyZDYuLjZiMmJlMDY1MzA0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwpAQCAtMTU3LDcgJiM0MzsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCX0KIAlpZiAoZmlscCkgewogCQlpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTsKLQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiYjNDM7CQlpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQomIzQzOwkJCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwogCX0KIAogCXJldHVybiB2bV91bm1hcHBlZF9hcmVhKCZhbXA7aW5mbyk7CkBAIC0yMjIsNyAmIzQzOzIyMyw4IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCwKIAogCWlmIChmaWxwKSB7CiAJCWluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApOwotCQlpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTsKJiM0MzsJCWlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpCiYjNDM7CQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiAJfQogCWFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKCZhbXA7aW5mbyk7CiAJaWYgKCEoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5ICp3aGF0KiBpcyBiZWluZyBjaGFuZ2VkLiBUaGUgZGlmZiB0ZWxscyBtZSBpdCYjMzk7cyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gb24geDg2LTY0LCBteSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgY2hhbmdlcyBjYW4gaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHZlcnkgY2FyZWZ1bGx5LgoKVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDE1MCB0byAyNDAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb2YgdGhlIGRpZmYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjaGFuZ2VzIGluIHRoZSBhbGdvcml0aG0sIGFueSBuZXcgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgYWRkcmVzcyBzcGFjZSwgYW5kIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRpbmZvLmxlbmd0aCA9IGxlbjtcbiAxNTI6XHRcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XG4gMTUzOlx0XHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XG4gMTU0Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAxNTU6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAxNTY6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFx0aWYgKGZpbHApIHtcbiAxNTk6XHRcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4gMTYwOlx0XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gMTYxOlx0XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0dW5zaWduZWQgbG9uZ1xuIDE2ODpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiAxNjk6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3MDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xuIDE3NTpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTc2Olx0XG4gMTc3Olx0XHQvKiByZXF1ZXN0ZWQgbGVuZ3RoIHRvbyBiaWcgZm9yIGVudGlyZSBhZGRyZXNzIHNwYWNlICovXG4gMTc4Olx0XHRpZiAobGVuIFx1MDAzZSBUQVNLX1NJWkUpXG4gMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4MDpcdFxuIDE4MTpcdFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xuIDE4MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTgzOlx0XHRcdHJldHVybiBhZGRyO1xuIDE4NDpcdFxuIDE4NTpcdFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xuIDE4NjpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQXzMyQklUKSlcbiAxODc6XHRcdFx0Z290byBib3R0b211cDtcbiAxODg6XHRcbiAxODk6XHRcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXG4gMTkwOlx0XHRpZiAoYWRkcikge1xuIDE5MTpcdFx0XHRhZGRyIFx1MDAyNj0gUEFHRV9NQVNLO1xuIDE5MjpcdFx0XHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXG4gMTkzOlx0XHRcdFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xuIDE5NjpcdFx0XHRpZiAoIXZtYSB8fCBhZGRyICYjNDM7IGxlbiBcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxuIDE5NzpcdFx0XHRcdHJldHVybiBhZGRyO1xuIDE5ODpcdFx0fVxuIDE5OTpcdGdldF91bm1hcHBlZF9hcmVhOlxuIDIwMDpcdFxuIDIwMTpcdFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcbiAyMDI6XHRcdGluZm8ubGVuZ3RoID0gbGVuO1xuIDIwMzpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQX0FCT1ZFNEcpKVxuIDIwNDpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFNaXzRHO1xuIDIwNTpcdFx0ZWxzZVxuIDIwNjpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiAyMDc6XHRcbiAyMDg6XHRcdGluZm8uaGlnaF9saW1pdCA9IGdldF9tbWFwX2Jhc2UoMCk7XG4gMjA5Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAyMTA6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDIxMTpcdFx0XHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0LypcbiAyMTU6XHRcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcbiAyMTY6XHRcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXG4gMjE3Olx0XHQgKlxuIDIxODpcdFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXG4gMjE5Olx0XHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxuIDIyMDpcdFx0ICovXG4gMjIxOlx0XHRpZiAoYWRkciBcdTAwM2UgREVGQVVMVF9NQVBfV0lORE9XIFx1MDAyNlx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxuIDIyMjpcdFx0XHRpbmZvLmhpZ2hfbGltaXQgJiM0Mzs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZmlscCkge1xuIDIyNTpcdFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbiAyMjY6XHRcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAyMjc6XHRcdFx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuIDIzMDpcdFx0aWYgKCEoYWRkciBcdTAwMjYgflBBR0VfTUFTSykpXG4gMjMxOlx0XHRcdHJldHVybiBhZGRyO1xuIDIzMjpcdFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XG4gMjMzOlx0XG4gMjM0Olx0Ym90dG9tdXA6XG4gMjM1Olx0XHQvKlxuIDIzNjpcdFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxuIDIzNzpcdFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xuIDIzODpcdFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXG4gMjM5Olx0XHQgKiBhbGxvY2F0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEFsaWdubWVudCBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlc2UgYWxpZ25tZW50IGZ1bmN0aW9uczogYGdldF9hbGlnbl9tYXNrYCwgYGdldF9hbGlnbl9iaXRzYCwgYW5kIGBpc19maWxlX2h1Z2VwYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgbGFyZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gY2hlY2sgd2hhdCB0aGV5IGFyZSBkb2luZy4gTGV0JiMzOTtzIGZpbmQgdGhlaXIgZGVmaW5pdGlvbnMuIEdpdmVuIHRoZSBjb250ZXh0LCBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2Agc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGBnZXRfYWxpZ25fbWFza2AgYW5kIGBnZXRfYWxpZ25fYml0c2AsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9hbGlnbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yOC0gKi9cbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX21hc2soc3RydWN0IGZpbGUgKmZpbHApXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTMwLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTUyLSAqL1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzo1MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fYml0cyh2b2lkKVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01NC17XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjU1Olx0cmV0dXJuIHZhX2FsaWduLmJpdHMgXHUwMDI2IGdldF9hbGlnbl9tYXNrKE5VTEwpO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01Ni19XG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xMjc9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE1OC1cdGlmIChmaWxwKSB7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjE1OTpcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2MC1cdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTYxOlx0XHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjItXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjg9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMjI0LVx0aWYgKGZpbHApIHtcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MjI1Olx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMjI2LVx0XHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyMjc6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTIyOC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiB4ODYtNjQga2VybmVsIGV4cGVydDoKCioqRGl2aW5nIGludG8geDg2LTY0IFN5c3RlbSBDYWxscyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byBzdGFydCBieSBleGFtaW5pbmcgbGluZXMgMS03MCBvZiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGZpbGUgaXMgY3JpdGljYWwsIG9idmlvdXNseSwgYmVjYXVzZSBpdCBob3VzZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHg4Ni02NCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyB0aGUgY29yZSBvZiBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgb24geDg2LTY0LCB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIHRoZSBvbGRlciAzMi1iaXQgdmVyc2lvbnMsIHByb2JhYmx5IGludm9sdmluZyB0aGUgYHN5c2NhbGxgIGluc3RydWN0aW9uLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgd2lsbCBpbmNsdWRlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBkZWZpbml0aW9uIGFuZCBzb21lIGxvdy1sZXZlbCBzZXR1cCBvciBlbnRyeSBwb2ludCBjb2RlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBpbmxpbmVkLCBvciBjYWxscyBhbm90aGVyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlbS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXNnLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG0uaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3V0c25hbWUuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcnNvbmFsaXR5LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gIDIyOlx0XG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjYXNtL2VsZi5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjYXNtL2lhMzIuaFx1MDAzZVxuICAyNTpcdFxuICAyNjpcdC8qXG4gIDI3Olx0ICogQWxpZ24gYSB2aXJ0dWFsIGFkZHJlc3MgdG8gYXZvaWQgYWxpYXNpbmcgaW4gdGhlIEkkIG9uIEFNRCBGMTVoLlxuICAyODpcdCAqL1xuICAyOTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9hbGlnbl9tYXNrKHN0cnVjdCBmaWxlICpmaWxwKVxuICAzMDpcdHtcbiAgMzE6XHRcdGlmIChmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAgMzI6XHRcdFx0cmV0dXJuIGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuICAzMzpcdFx0LyogaGFuZGxlIDMyLSBhbmQgNjQtYml0IGNhc2Ugd2l0aCBhIHNpbmdsZSBjb25kaXRpb25hbCAqL1xuICAzNDpcdFx0aWYgKHZhX2FsaWduLmZsYWdzIFx1MDAzYyAwIHx8ICEodmFfYWxpZ24uZmxhZ3MgXHUwMDI2ICgyIC0gbW1hcF9pc19pYTMyKCkpKSlcbiAgMzU6XHRcdFx0cmV0dXJuIDA7XG4gIDM2Olx0XG4gIDM3Olx0XHRpZiAoIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9SQU5ET01JWkUpKVxuICAzODpcdFx0XHRyZXR1cm4gMDtcbiAgMzk6XHRcbiAgNDA6XHRcdHJldHVybiB2YV9hbGlnbi5tYXNrO1xuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHQvKlxuICA0NDpcdCAqIFRvIGF2b2lkIGFsaWFzaW5nIGluIHRoZSBJJCBvbiBBTUQgRjE1aCwgdGhlIGJpdHMgZGVmaW5lZCBieSB0aGVcbiAgNDU6XHQgKiB2YV9hbGlnbi5iaXRzLCBbMTI6dXBwZXJfYml0KSwgYXJlIHNldCB0byBhIHJhbmRvbSB2YWx1ZSBpbnN0ZWFkIG9mXG4gIDQ2Olx0ICogemVyb2luZyB0aGVtLiBUaGlzIHJhbmRvbSB2YWx1ZSBpcyBjb21wdXRlZCBvbmNlIHBlciBib290LiBUaGlzIGZvcm1cbiAgNDc6XHQgKiBvZiBBU0xSIGlzIGtub3duIGFzIFwmIzM0O3Blci1ib290IEFTTFJcJiMzNDsuXG4gIDQ4Olx0ICpcbiAgNDk6XHQgKiBUbyBhY2hpZXZlIHRoaXMsIHRoZSByYW5kb20gdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGluZm8uYWxpZ25fb2Zmc2V0XG4gIDUwOlx0ICogdmFsdWUgYmVmb3JlIGNhbGxpbmcgdm1fdW5tYXBwZWRfYXJlYSgpIG9yIE9SZWQgZGlyZWN0bHkgdG8gdGhlXG4gIDUxOlx0ICogYWRkcmVzcy5cbiAgNTI6XHQgKi9cbiAgNTM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fYml0cyh2b2lkKVxuICA1NDpcdHtcbiAgNTU6XHRcdHJldHVybiB2YV9hbGlnbi5iaXRzIFx1MDAyNiBnZXRfYWxpZ25fbWFzayhOVUxMKTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0c3RhdGljIGludCBfX2luaXQgY29udHJvbF92YV9hZGRyX2FsaWdubWVudChjaGFyICpzdHIpXG4gIDU5Olx0e1xuICA2MDpcdFx0LyogZ3VhcmQgYWdhaW5zdCBlbmFibGluZyB0aGlzIG9uIG90aGVyIENQVSBmYW1pbGllcyAqL1xuICA2MTpcdFx0aWYgKHZhX2FsaWduLmZsYWdzIFx1MDAzYyAwKVxuICA2MjpcdFx0XHRyZXR1cm4gMTtcbiAgNjM6XHRcbiAgNjQ6XHRcdGlmICgqc3RyID09IDApXG4gIDY1Olx0XHRcdHJldHVybiAxO1xuICA2NjpcdFxuICA2NzpcdFx0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDszMlwmIzM0OykpXG4gIDY4Olx0XHRcdHZhX2FsaWduLmZsYWdzID0gQUxJR05fVkFfMzI7XG4gIDY5Olx0XHRlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7NjRcJiMzNDspKVxuICA3MDpcdFx0XHR2YV9hbGlnbi5mbGFncyA9IEFMSUdOX1ZBXzY0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEh1Z2VwYWdlIEFsaWdubWVudCBCdWcqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDE1NC0xNTcsIHNwZWNpZmljYWxseSBob3cgYGluZm8uYWxpZ25fb2Zmc2V0YCBpcyBoYW5kbGVkLiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgc2VlbWVkIHByb2JsZW1hdGljIGZvciBodWdlcGFnZXMuIEl0IGxvb2tlZCBsaWtlLCBwcmV2aW91c2x5LCBgaW5mby5hbGlnbl9vZmZzZXRgIHdvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIG5vdCBiZSBzZXQuIFRoZW4sIGBpbmZvLmFsaWduX21hc2tgIHdvdWxkIGJlIHNldCB0byB0aGUgaHVnZXBhZ2UgbWFzayAobGlrZSAyTUIpLiBUaGUgdHJvdWJsZXNvbWUgbGluZSB3YXMgYGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO2AuIFRoaXMgc3VnZ2VzdGVkIHRoYXQsIGZvciBodWdlcGFnZXMsIHdlIHdlcmUgKmFkZGluZyogYW4gb2Zmc2V0IG1lYW50IGZvciA0SyBwYWdlIGNhY2hlIGFsaWFzaW5nIG9uIEFNRCBCdWxsZG96ZXIvRjE1aCB0byB0aGUgaHVnZXBhZ2UgYWxpZ25tZW50LCBlZmZlY3RpdmVseSBicmVha2luZyB0aGUgYWxpZ25tZW50IG9yIGFkZGluZyBhbiB1bm5lY2Vzc2FyeSBvbmUuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHZtX3VubWFwcGVkX2FyZWFgIHVzZXMgYGFsaWduX21hc2tgIGFuZCBgYWxpZ25fb2Zmc2V0YCBmb3IgYWRkcmVzcyBhbGlnbm1lbnQuIFRoZSBvbGQgbG9naWMgY291bGQgbWVzcyB0aGlzIHVwLiBCdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIHByb2JsZW1hdGljIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCBpcyBieXBhc3NlZCBpZiBpdCAqaXMqIGEgaHVnZXBhZ2UsIHdoaWNoIGlzIGdvb2QuCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgYm90aCByZWFjaGFibGUgYW5kIGZpeGluZyBhIHJlYWwgaXNzdWUuIEkga25vdyB0aGF0IGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgYXJlIHRoZSB4ODZfNjQgbW1hcCBhZGRyZXNzIHNlbGVjdGlvbiBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGNhbGxlZCBldmVyeSB0aW1lIGBtbWFwYCBpcyBpbnZva2VkIG9uIHg4Nl82NCB0byBmaW5kIGFuIHVubWFwcGVkIGFyZWEuIFNpbmNlIGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWAgaXMgdHJ1ZSB3aGVuIG1tYXBpbmcgaHVnZXRsYmZzIGZpbGVzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGNvcmUga2VybmVsIGZ1bmN0aW9ucyBvbiB4ODZfNjQgYW5kIGFyZSBhbHdheXMgaW52b2x2ZWQgaW4gdGhlIG1tYXAuIEluIHRoYXQgY2FzZSwgdGhpcyBsb2dpYyBpcyBjb3JlLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGludm9rZXMgYG1tYXAoKWAgb24gaHVnZXRsYmZzIGZpbGVzIG9yIG9yZGluYXJ5IGZpbGVzLiBTbywgdGhpcyBmaXggaXMgaW1wb3J0YW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGVzdGFibGlzaCBjb250ZXh0LiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYWxsb3dzIGBodWdldGxiZnNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGlzX2ZpbGVfaHVnZXBhZ2VzYCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2ZpbGVfaHVnZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTIxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUyMy17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MzItXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MzM6I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVx0XHRcdGZhbHNlXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MzQtc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIdWdlVExCIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBkZWZpbml0aW9uIHBvaW50IGZvciBIdWdlVExCIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTkuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGNvcmUgSHVnZVRMQiBvcGVyYXRpb25zIG1pZ2h0IHJlc2lkZSwgcHJvYmFibHkgc29tZSBraW5kIG9mIGRlZmluaXRpb24gb3Igc3RydWN0dXJlIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGluIG9yZGVyIHRvIHJlYXNvbiBhYm91dCB0aGlzIHNwZWNpZmljIGJlaGF2aW9yIEkmIzM5O20gdHJ5aW5nIHRvIGRlYnVnL21vZGlmeS91bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHR1bnNpZ25lZCBpbnQgc2VhbHM7XG4gNTExOlx0fTtcbiA1MTI6XHRcbiA1MTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqSFVHRVRMQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbiA1MTQ6XHR7XG4gNTE1Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4gNTE2Olx0fVxuIDUxNzpcdFxuIDUxODpcdGV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XG4gNTE5Olx0c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdCxcbiA1MjA6XHRcdFx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xuIDUyMTpcdFxuIDUyMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA1MjM6XHR7XG4gNTI0Olx0XHRyZXR1cm4gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0hVR0VfUEFHRVM7XG4gNTI1Olx0fVxuIDUyNjpcdFxuIDUyNzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbiA1Mjg6XHR7XG4gNTI5Olx0XHRyZXR1cm4gSFVHRVRMQkZTX1NCKGktXHUwMDNlaV9zYiktXHUwMDNlaHN0YXRlO1xuIDUzMDpcdH1cbiA1MzE6XHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJGUyAqL1xuIDUzMjpcdFxuIDUzMzpcdCNkZWZpbmUgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSlcdFx0XHRmYWxzZVxuIDUzNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxuIDUzNTpcdGh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdGZsYWcsXG4gNTM2Olx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpXG4gNTM3Olx0e1xuIDUzODpcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7XG4gNTM5Olx0fVxuIDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbiA1NDI6XHR7XG4gNTQzOlx0XHRyZXR1cm4gTlVMTDtcbiA1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEhVR0VUTEJGUyBhcmUgZWl0aGVyIGdvaW5nIHRvIGJlIHR1Y2tlZCBhd2F5IGluIGBmcy9LY29uZmlnYCBvciwgbW9yZSBsaWtlbHksIG92ZXIgaW4gYG1tL0tjb25maWdgLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBgbW0vS2NvbmZpZ2AgYmVjYXVzZSBodWdlIHBhZ2VzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBsaXZlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUsIGJ1dCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBmcy9LY29uZmlnYCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUga25vYnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCwgdGhlIGxpa2VseSBzdXNwZWN0IGlzIGx1cmtpbmcgaW4gYGZzL0tjb25maWdgLiBBbmQsIGdpdmVuIHRoZSB0eXBpY2FsIG9yZ2FuaXphdGlvbiBvZiB0aGVzZSBLY29uZmlnIGZpbGVzLCBJJiMzOTttIGJldHRpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gSSYjMzk7bSBhZnRlciBpcyBoYW5naW5nIGFyb3VuZCBsaW5lIDI1MC4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCwgYSByZWFzb25hYmxlIGp1bXBpbmctb2ZmIGxvY2F0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciBxdWlja2x5IHJlZmluZSBteSBzZWFyY2guIFRoaXMgbGluZSBpcyBtb3N0IGxpa2VseSB0aGUgc3RhcnQgb2Ygd2hhdCBJJiMzOTttIGFmdGVyLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0aGlzIG1lbW9yeSBpc3N1ZSwgYW5kIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEJ1dCBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBsZXZlbCBvZiBwZXJmb3JtYW5jZSBzY3J1dGlueS4gQmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIGNyb3NzLWNoZWNrIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG1pc2NvbmZpZ3VyYXRpb24gdGhlcmUgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UsIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgY29udHJpYnV0aW5nIGZhY3RvciwgdG8gd2hhdCBJJiMzOTttIHNlZWluZy4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIGNoYXNpbmcgZG93biBjb21wbGV4IGludGVyYWN0aW9ucyBpZiB0aGUgYmFzaWNzIGFyZW4mIzM5O3QgcmlnaHQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgaHVnZSBwYWdlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xMjk9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTM5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDItXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0NS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Ny1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNTA6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTEtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTEtXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjkzLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBIdWdldGxiZnMgU3VwcG9ydCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCAob3Igbm90IHN1cHBvcnRlZCkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbG9vayBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHN5bWJvbCwgbGlrZWx5IHNvbWV0aGluZyBkaXJlY3RseSByZWxhdGVkIHRvIGBIVUdFVExCRlNgIGl0c2VsZiwgcG90ZW50aWFsbHkgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gT2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHdvcnRoIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGNvbnRyb2wgaHVnZXRsYmZzIGZlYXR1cmVzIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIG9uIHg4Ni4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhlcmUgYXMgd2VsbCwgbWF5YmUgcmVsYXRpbmcgdG8gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLCBOVU1BIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEyNS1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuYXJjaC94ODYvS2NvbmZpZzoxMjY6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmFyY2gveDg2L0tjb25maWctMTI3LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1x0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVubWFwcGVkIEFyZWEgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZpbmRpbmcgdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbnMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgd2l0aGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQmIzM5O2xsIGluZmx1ZW5jZSB0aGVpciBzY29wZSBhbmQgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgY2FuIHV0aWxpemUgdGhlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIHNwZWNpZmljYWxseSBsaW5lIDEyNSwgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuIDEyMTpcdFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIDEyMjpcdFxuIDEyMzpcdFx0cmV0dXJuIDA7XG4gMTI0Olx0fVxuIDEyNTpcdFxuIDEyNjpcdHVuc2lnbmVkIGxvbmdcbiAxMjc6XHRhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIDEyODpcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxMjk6XHR7XG4gMTMwOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gMTMxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxMzI6XHRcdHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O1xuIDEzMzpcdFx0dW5zaWduZWQgbG9uZyBiZWdpbiwgZW5kO1xuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTM2Olx0XHRcdHJldHVybiBhZGRyO1xuIDEzNzpcdFxuIDEzODpcdFx0ZmluZF9zdGFydF9lbmQoYWRkciwgZmxhZ3MsIFx1MDAyNmJlZ2luLCBcdTAwMjZlbmQpO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgbWVudGlvbnMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYC4gVGhvc2UgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMsIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBjYWxsZWQgdGhyb3VnaCBgbW0tJmd0O2dldF91bm1hcHBlZF9hcmVhYCBvciBkaXJlY3RseSBgZ2V0X3VubWFwcGVkX2FyZWFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogaG90IHBhdGhzPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRhcmdldGluZyB0aGVtIGZvciBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gVGhlIGd1aWRhbmNlIGVtcGhhc2l6ZXMgZm9jdXNpbmcgZnV6emluZyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgaGVhdmlseSBmdXp6ZWQsIHNvIEkgbmVlZCB0byBhdm9pZCBqdXN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIFRoZXkgc3VnZ2VzdCBnb2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBiZWNhdXNlIHRoZSBoZWxwZXJzIGdldCBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXkgd29uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KClNvLCBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBzeW1ib2xzIGluIHZtbGludXg/IFRoYXTigJlzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgZGVjbGFyZWQgYW5kIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2lnbmlmaWNhbmNlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhleSBhcmUgd29ydGggaW5jbHVkaW5nIGluIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM9MTI2PXVuc2lnbmVkIGxvbmdcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTI3OmFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTEyOC1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjc9dW5zaWduZWQgbG9uZ1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoxNjg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjktXHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI0MC1cdCAqL1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyNDE6XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yNDItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhwbG9yaW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhc3BlY3QgYWdhaW4uIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBpdHMgcm9sZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIG1lYW4sIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFsIHdvcmtpbmdzIGlzIG9uZSB0aGluZywgYnV0IGtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byBpZGVudGlmeSB0aGUga2V5IHN1YnN5c3RlbXMgb3IgYXJlYXMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIG1hcCBvdXQgaXRzIHBsYWNlIGluIHRoZSBncmFuZCBzY2hlbWUgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoZXJlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBpcyBiZWluZyBjYWxsZWQgdGhyb3VnaG91dCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbWFwLmM9NzM3PXVuc2lnbmVkIGxvbmdcbm1tL21tYXAuYzo3Mzg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbW1hcC5jLTczOS1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbm1tL21tYXAuYz04MDU9dW5zaWduZWQgbG9uZ1xubW0vbW1hcC5jOjgwNjphcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21tYXAuYy04MDctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbm1tL21tYXAuYz04MTU9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21tYXAuYy04MTktXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cdTAwM2VtbSkpXG5tbS9tbWFwLmM6ODIwOlx0XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsXG5tbS9tbWFwLmMtODIxLVx0XHRcdFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG5tbS9tbWFwLmM6ODIyOlx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG5tbS9tbWFwLmMtODIzLVx0XHRcdHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBJdHMgVXNhZ2UgaW4gaHVnZXRsYmZzKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGZ1bmN0aW9ucyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaHVnZSBwYWdlcyBmaWxlIHN5c3RlbSAoYGh1Z2V0bGJmc2ApIGxldmVyYWdlcyBpdC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZTogaXQmIzM5O3MgYWxsIGFib3V0IGZpbmRpbmcgYSBzdWl0YWJsZSwgdW5tYXBwZWQgcmVnaW9uIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gQnV0IHRoZSBkZXRhaWxzLCB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQmIzM5O3MgKnVzZWQqIGJ5IGEgc3BlY2lhbGl6ZWQgc3lzdGVtIGxpa2UgaHVnZXRsYmZzIGFyZSB3aGF0IEkgbmVlZCB0byBzb2xpZGlmeSBpbiBteSBtaW5kLgoKSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY2FsbCwganVzdCBmaW5kaW5nIHRoZSBnYXA/IE9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggY29uc2lkZXJhdGlvbnMsIHBlcmhhcHMgaW52b2x2aW5nIE5VTUEgYWZmaW5pdHkgb3IgcGFnZSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIGh1Z2UgcGFnZXM/IERvZXMgdGhlIHN5c3RlbSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IHJlZ2lvbnMsIHNoYXJlZCBtZW1vcnksIG9yIGFub255bW91cyBtYXBwaW5ncz8gSSYjMzk7bGwgcHJvYmFibHkgYmUgY2hlY2tpbmcgaG93IGBnZXRfdW5tYXBwZWRfYXJlYWAgaXRzZWxmIHdvcmtzLCBidXQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGBodWdldGxiZnNgIHNldHMgdXAgdGhlIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIGl0LiBXaGF0IGZsYWdzIGFyZSB1c2VkPyBBcmUgdGhlcmUgY3VzdG9tIGNvbnN0cmFpbnRzIGltcG9zZWQgb24gdGhlIHNlYXJjaD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnJhZ21lbnRhdGlvbiwgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVuY3k/IEEgZm9jdXNlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiBjYWxsLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiBodWdlIHBhZ2VzLCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2VycyBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE3Mj11bnNpZ25lZCBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNzM6aHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTc0LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6XHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTItXHQubGxzZWVrXHRcdFx0PSBkZWZhdWx0X2xsc2Vlayxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01NDc9dW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTQ4Omh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU0OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGlub2RlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGdpdmVuIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyB0byByZXNpZGUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHN1Z2dlc3RzIHRoYXQgbGluZSAxNzMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsb3NlciBsb29rLiBUaGF0IGxpa2VseSBpbnZvbHZlcyBzb21lIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gd2hpY2ggd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdCAqL1xuIDE3MTpcdFxuIDE3MjpcdHVuc2lnbmVkIGxvbmdcbiAxNzM6XHRodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMTc0Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3NTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIDE3NjpcdHtcbiAxNzc6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjAgPSAwO1xuIDE3ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuIDE3OTpcdFxuIDE4MDpcdFx0aWYgKGxlbiBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKVxuIDE4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxODI6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1BUF9GSVhFRCkgXHUwMDI2XHUwMDI2IChhZGRyIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpKVxuIDE4MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxODQ6XHRcdGlmIChhZGRyKVxuIDE4NTpcdFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiAxODY6XHRcbiAxODc6XHRcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4gMTg4Olx0XHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiAxODk6XHR9XG4gMTkwOlx0XG4gMTkxOlx0LypcbiAxOTI6XHQgKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4gMTkzOlx0ICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbiAxOTQ6XHQgKiBIV1BPSVNPTiBwYWdlLlxuIDE5NTpcdCAqL1xuIDE5NjpcdHN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4gMTk3Olx0XHRcdHNpemVfdCBieXRlcylcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4gMjAwOlx0XHRzaXplX3Qgc2FmZV9ieXRlcztcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbiAyMDM6XHRcdFx0cmV0dXJuIDA7XG4gMjA0Olx0XHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4gMjA1Olx0XHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4gMjA2Olx0XHRwYWdlJiM0MzsmIzQzOztcbiAyMDc6XHRcbiAyMDg6XHRcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuIDIwOTpcdFx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBtbWFwIEJlaGF2aW9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG1tYXBgIGludGVyYWN0cyB3aXRoIGh1Z2V0bGJmcyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB0aGUgYG1tYXBgIGNhbGwgZG93biBpbnRvIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgcmVsYXRlZCB0byBhbGlnbm1lbnQuCgpTbywgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGtpY2tzIHRoaW5ncyBvZmYgYW5kLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgY2FsbGluZyBgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NgIHdoaWNoIHRoZW4gaGFuZHMgdGhpbmdzIHRvIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIG9yIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCwgcGFzc2luZyB0aGUgZmlsZSBwb2ludGVyIChgZmlscGApLiBUaGlzIHNlZW1zIHN0YW5kYXJkLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydC4gSW5zaWRlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCAoYW5kIHRoZSB0b3AtZG93biB2YXJpYW50KSwgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCBpcyBnZXR0aW5nIGV2YWx1YXRlZC4gR29vZC4gVGhpcyBpcyB0aGUga2V5LiBBbmQsIG5hdHVyYWxseSwgZm9yIGEgaHVnZXRsYmZzIGZpbGUsIHRoaXMgZXZhbHVhdGVzIHRvIGB0cnVlYC4KCkkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYSBwYXRjaCBwcmV2aW91c2x5IGFkZGVkIGBnZXRfYWxpZ25fYml0cygpYCB0byBgaW5mby5hbGlnbl9vZmZzZXRgLiBCdXQgbm93LCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsLiBUaGUgY29kZSAqbm93KiBjaGVja3MgYGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpYC4gVGhpcyBtZWFucywgYW5kIGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBleHBsaWNpdCwgdGhhdCBmb3IgYSBodWdldGxiZnMgZmlsZSAoYGZpbHBgKSwgdGhlIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCAqaXMgc2tpcHBlZCouIGBpbmZvLmFsaWduX29mZnNldGAgd2lsbCAqKm5vdCoqIGJlIG1vZGlmaWVkLCB3aGljaCBjaGFuZ2VzIHRoZSBvdXRjb21lIG9mIHRoZSBhbGlnbm1lbnQgY2FsY3VsYXRpb24hCgpPa2F5LCBzbyBJIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBsaWtlIGEgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYC4gSSBleHBlY3QgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCB0aGUgdG9wZG93biB2ZXJzaW9uLCBhcmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGBzeXNfeDg2XzY0Lm9gIGlzIGJ1aWx0LiBPZmYgdG8gYGFyY2gveDg2L2tlcm5lbC9NYWtlZmlsZWAgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBidWlsZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c194ODZfNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSUEzMl9FTVVMQVRJT04pXHQmIzQzOz0gc3lzX2lhMzIubyBzaWduYWxfMzIub1xuYXJjaC94ODYva2VybmVsL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19YODZfNjQpXHQmIzQzOz0gc3lzX3g4Nl82NC5vXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX1g4Nl9FU1BGSVg2NClcdCYjNDM7PSBlc3BmaXhfNjQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHN5c194ODZfNjQub2Agd2hpY2ggaXMgYnVpbHQgd2l0aCBgQ09ORklHX1g4Nl82NGAsIGFuZCB3ZSBoYXZlIGBIVUdFVExCRlNgIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX0hVR0VUTEJGU2AgZm9yIGh1Z2V0bGJmcyBzdXBwb3J0LiAgRmlyc3QsIGxldCBtZSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkgaGVyZS4KCkkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuIEl0IGxvb2tzIGxpa2UgaXQgZG9lc24mIzM5O3QgaW52b2x2ZSBjaGFuZ2VzIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLiBJdCYjMzk7cyBub3QganVzdCBjb3NtZXRpYyBsaWtlIGxvZ2dpbmcsIG5vciBkb2VzIGl0IGFsdGVyIGFueSBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgaW4gYSBub24tZnVuY3Rpb25hbCB3YXkuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGNvZGUgcGF0aHMgaW4gUUVNVS94ODZfNjQgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgbW1hcGAgc3lzY2FsbCBvbiBodWdldGxiZnMsIHNvIGl0JiMzOTtzICpub3QqIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhpcyBlbGltaW5hdGVzIHRoZSBsYXN0IHBvaW50LiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNlZW1zIHRvIGJlIGB0cnVlYCEKClNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29yZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChpbiBgYXJjaC9tbWApIGR1cmluZyBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gd2hlbiBtYXBwaW5nIGh1Z2V0bGJmcyBmaWxlcyBvbiB4ODZfNjQuIEl0IGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYGFsaWduX29mZnNldGAgY29ycnVwdGlvbiBvciBiaWFzLCB3aGVuIG1hcHBpbmcgaHVnZXRsYiBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZnVuY3Rpb25hbCwgYW5kICp3b3J0aCogZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgLCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCwgYW5kIGBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlc2UgYXJlIGFjdHVhbGx5IHVzYWJsZTogYW5kIHllcywgYWZ0ZXIgYSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIGNvZGUsIHRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgZm9yIHRoZSBzeXN0ZW0gdG8gdXNlOiBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIGFyZSBub24tc3RhdGljIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCwgYW5kIGBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhYCBpcyBhbHNvIG5vbi1zdGF0aWMgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4KCkZpbmFsbHksIGp1c3QgdG8gYmUgc3VyZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBYODZfNjRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgdmFsaWQsIGBIVUdFVExCRlNgIGVuYWJsZXMgdGhlIGh1Z2V0bGIgZmlsZXN5c3RlbSBhbmQgYWxsb3dzIGBpc19maWxlX2h1Z2VwYWdlcygpYCB0byByZXR1cm4gdHJ1ZS4gYFg4Nl82NGAgZW5hYmxlcyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEFsbCBjbGVhciEKCk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcgb25lIGxhc3QgdGltZS4gSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93biYjMzQ7LAogICAgJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93biYjMzQ7LAogICAgJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXG5cbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTY6NDg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwppbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKQEAgLTE1Nyw3ICYjNDM7MTU3LDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAl9CiAJaWYgKGZpbHApIHsKIAkJaW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7Ci0JCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwomIzQzOwkJaWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKJiM0MzsJCQlpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTsKIAl9CiAKIAlyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYSgmYW1wO2luZm8pOwpAQCAtMjIyLDcgJiM0MzsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsCiAKIAlpZiAoZmlscCkgewogCQlpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTsKLQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiYjNDM7CQlpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQomIzQzOwkJCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwogCX0KIAlhZGRyID0gdm1fdW5tYXBwZWRfYXJlYSgmYW1wO2luZm8pOwogCWlmICghKGFkZHIgJmFtcDsgflBBR0VfTUFTSykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgY2hhbmdlOgoKKipBbmFseXppbmcgdGhlIHg4Ni02NCBBcmNoaXRlY3R1cmUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGdyYWIgdGhlIHVzdWFsIHRvb2xzLiYjMzQ7IFRoYXQgbWVhbnMgSSYjMzk7bSBmaXJpbmcgdXAgbXkgZGlmZiB2aWV3ZXJzIGFuZCB3aGF0ZXZlciBzdGF0aWMgYW5hbHlzaXMgSSBoYXZlIGF0IGhhbmQgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGguIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHVzZXItc3BhY2UgYWRkcmVzcyBzcGFjZSBhbGxvY2F0aW9uIG9uIHRoZSB4ODYtNjQgYXJjaGl0ZWN0dXJlLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgYW5kIHN0YXJ0IHJlYWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3ZXJlIHRoZXNlIGZ1bmN0aW9ucyAqZG9pbmcqIGJlZm9yZSwgYW5kIHdoYXQgYXJlIHRoZXkgKmRvaW5nKiBub3c/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWd5LCB0aGUgYXZhaWxhYmxlIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzIHRoZSBhZGRyZXNzIHNwYWNlIGxheW91dCwgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGluZ3MgbGlrZSBBU0xSLCBvciBvdGhlciBzZWN1cml0eSBoYXJkZW5pbmcuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgbG9naWMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGVha3MsIG9yIHBvc3NpYmx5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0JiMzOTtzIG15IGluaXRpYWwgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRpbmZvLmxlbmd0aCA9IGxlbjtcbiAxNTI6XHRcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XG4gMTUzOlx0XHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XG4gMTU0Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAxNTU6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAxNTY6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFx0aWYgKGZpbHApIHtcbiAxNTk6XHRcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4gMTYwOlx0XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gMTYxOlx0XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0dW5zaWduZWQgbG9uZ1xuIDE2ODpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiAxNjk6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3MDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xuIDE3NTpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTc2Olx0XG4gMTc3Olx0XHQvKiByZXF1ZXN0ZWQgbGVuZ3RoIHRvbyBiaWcgZm9yIGVudGlyZSBhZGRyZXNzIHNwYWNlICovXG4gMTc4Olx0XHRpZiAobGVuIFx1MDAzZSBUQVNLX1NJWkUpXG4gMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4MDpcdFxuIDE4MTpcdFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xuIDE4MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTgzOlx0XHRcdHJldHVybiBhZGRyO1xuIDE4NDpcdFxuIDE4NTpcdFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xuIDE4NjpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQXzMyQklUKSlcbiAxODc6XHRcdFx0Z290byBib3R0b211cDtcbiAxODg6XHRcbiAxODk6XHRcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXG4gMTkwOlx0XHRpZiAoYWRkcikge1xuIDE5MTpcdFx0XHRhZGRyIFx1MDAyNj0gUEFHRV9NQVNLO1xuIDE5MjpcdFx0XHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXG4gMTkzOlx0XHRcdFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xuIDE5NjpcdFx0XHRpZiAoIXZtYSB8fCBhZGRyICYjNDM7IGxlbiBcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxuIDE5NzpcdFx0XHRcdHJldHVybiBhZGRyO1xuIDE5ODpcdFx0fVxuIDE5OTpcdGdldF91bm1hcHBlZF9hcmVhOlxuIDIwMDpcdFxuIDIwMTpcdFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcbiAyMDI6XHRcdGluZm8ubGVuZ3RoID0gbGVuO1xuIDIwMzpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQX0FCT1ZFNEcpKVxuIDIwNDpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFNaXzRHO1xuIDIwNTpcdFx0ZWxzZVxuIDIwNjpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiAyMDc6XHRcbiAyMDg6XHRcdGluZm8uaGlnaF9saW1pdCA9IGdldF9tbWFwX2Jhc2UoMCk7XG4gMjA5Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAyMTA6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDIxMTpcdFx0XHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0LypcbiAyMTU6XHRcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcbiAyMTY6XHRcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXG4gMjE3Olx0XHQgKlxuIDIxODpcdFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXG4gMjE5Olx0XHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxuIDIyMDpcdFx0ICovXG4gMjIxOlx0XHRpZiAoYWRkciBcdTAwM2UgREVGQVVMVF9NQVBfV0lORE9XIFx1MDAyNlx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxuIDIyMjpcdFx0XHRpbmZvLmhpZ2hfbGltaXQgJiM0Mzs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZmlscCkge1xuIDIyNTpcdFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbiAyMjY6XHRcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAyMjc6XHRcdFx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuIDIzMDpcdFx0aWYgKCEoYWRkciBcdTAwMjYgflBBR0VfTUFTSykpXG4gMjMxOlx0XHRcdHJldHVybiBhZGRyO1xuIDIzMjpcdFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XG4gMjMzOlx0XG4gMjM0Olx0Ym90dG9tdXA6XG4gMjM1Olx0XHQvKlxuIDIzNjpcdFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxuIDIzNzpcdFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xuIDIzODpcdFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXG4gMjM5Olx0XHQgKiBhbGxvY2F0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgSW5pdGlhbGl6YXRpb24gaW4geDg2XzY0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIHg4Nl82NCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaW5mb2AgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYC4gU28sIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lcyAxMjAtMTQwIG9mIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxvb2sgYXQgdGhlIGNyaXRpY2FsIHNldHVwIGFuZCBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB0aGVyZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIHRyaWNrcyBvciBjb25zaWRlcmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFET1dfU1RBQ0spXG4gMTIxOlx0XHRcdHJldHVybiBQQUdFX1NJWkU7XG4gMTIyOlx0XG4gMTIzOlx0XHRyZXR1cm4gMDtcbiAxMjQ6XHR9XG4gMTI1Olx0XG4gMTI2Olx0dW5zaWduZWQgbG9uZ1xuIDEyNzpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gMTI4Olx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxMzE6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDEzMjpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTMzOlx0XHR1bnNpZ25lZCBsb25nIGJlZ2luLCBlbmQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9GSVhFRClcbiAxMzY6XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTM3Olx0XG4gMTM4Olx0XHRmaW5kX3N0YXJ0X2VuZChhZGRyLCBmbGFncywgXHUwMDI2YmVnaW4sIFx1MDAyNmVuZCk7XG4gMTM5Olx0XG4gMTQwOlx0XHRpZiAobGVuIFx1MDAzZSBlbmQpXG4gMTQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKGFkZHIpIHtcbiAxNDQ6XHRcdFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWxpZ25tZW50IE9mZnNldCBmb3IgSHVnZXBhZ2VzIGluIE1lbW9yeSBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBmdW5jdGlvbnMuIEluaXRpYWxseSwgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O2AgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgaGFuZGxlIGBpbmZvLmFsaWduX29mZnNldGAgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgaHVnZXBhZ2VzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYC4KCkJlZm9yZSB0aGUgZml4LCB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgaXNzdWUuIElmIGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWAgd2FzIHRydWUsIGBpbmZvLmFsaWduX29mZnNldGAgcmVtYWluZWQgYXQgemVybyBhZnRlciB0aGUgaW5pdGlhbCB6ZXJvLWluaXRpYWxpemF0aW9uIChsaW5lcyAxNTQtMTU3IHdlcmUgc2tpcHBlZCkuIFRoZW4sIHRoZSBjb2RlICpsYXRlciogYWRkZWQgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgKGxpbmVzIDE1OC0xNjEpLiBUaGUgcGF0Y2ggbm93IGFkZHMgYGdldF9hbGlnbl9iaXRzKClgIHRvIHRoZSBgaW5mby5hbGlnbl9vZmZzZXRgIG9ubHkgaWYgdGhlIGZpbGUgaXMgKm5vdCogYSBodWdlcGFnZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgdGhlIGJpdHMgaW4gdGhhdCBzaXR1YXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCjEuICBJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgd3JpdHRlbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZT8gU2luY2UgYGluZm9gIGlzIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGl0IHNlZW1zIHdlJiMzOTtyZSBzYWZlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciByZWFkIG9yIGxlYWtlZCwgc28gdGhhdCYjMzk7cyBnb29kLgoKMi4gIEFyZSB3ZSBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXJzcGFjZT8gTm8sIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCByZXR1cm5zIG9ubHkgYW4gYHVuc2lnbmVkIGxvbmcgYWRkcmAsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBkaXJlY3QgbWVtb3J5IGxlYWtzIGhlcmUuCgozLiAgQ291bGQgdGhpcyBjaGFuZ2UgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8sIHRoZSBkZWNpc2lvbiB0byBza2lwIHRoZSBhbGlnbm1lbnQgYWRkaXRpb24gaXMgYmFzZWQgb24gYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCwgd2hpY2ggZXhhbWluZXMgdGhlIGZpbGUgcG9pbnRlci9maWxlIG9wZXJhdGlvbnMgd2hpY2ggaXMgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuIFRoYXQgc2hvdWxkbiYjMzk7dCBsZWFkIHRvIGlzc3Vlcy4KCjQuICBIb3cgZG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBvciBLQVNBTj8gS01TQU4gaXMgb3VyIGNvbmNlcm4sIGFzIGl0IGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gY2hhbmdlcyBpbnRyb2R1Y2VkIHRoYXQgbWFrZSBkYXRhIHVuaW5pdGlhbGl6ZWQgb3IgYWxsb3cgaXQgdG8gYmUgcmVhZCwgdGhlcmUmIzM5O3Mgbm8gS01TQU4gd29ycnkgaGVyZS4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgc2FmZSBmaXguIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG5vIHVzZXItc3BhY2UgbGVha3MsIGFuZCBubyBjb250cm9sIGZsb3cgaXNzdWVzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiAqKk5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBmYWxzZS4qKiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cblxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXG5cbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo0ODozNy4wODUxMTYzMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5ODQ4ODU3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiWDg2XzY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9nZXRfdW5tYXBwZWRfYXJlYVwiLFxuICAgIFwiYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duXCIsXG4gICAgXCJodWdldGxiX2dldF91bm1hcHBlZF9hcmVhXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXFxuXFxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeDg2LTY0IGFkZHJlc3MgYWxsb2NhdGlvbiBsb2dpYyBpbiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKCkgYW5kIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpIHRvIHByZXZlbnQgYXBwbHlpbmcgZ2V0X2FsaWduX2JpdHMoKSBvZmZzZXQgd2hlbiBtYXBwaW5nIEh1Z2VUTEIgZmlsZXMuIFRoaXMgYWx0ZXJzIG1tYXAgYWRkcmVzcyBzZWxlY3Rpb24gZm9yIGh1Z2V0bGJmcyBtYXBwaW5ncyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgbW1hcCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NDg6MzcuMDg1MTI1MDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwODQ3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE2OjQ4OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXFxuaW5kZXggNzc2YWU2ZmE3ZjJkNi4uNmIyYmUwNjUzMDRmMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xcbkBAIC0xNTcsNyArMTU3LDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0fVxcbiBcXHRpZiAoZmlscCkge1xcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG4tXFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4rXFx0XFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcXG4rXFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC0yMjIsNyArMjIzLDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbiBcXG4gXFx0aWYgKGZpbHApIHtcXG4gXFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuLVxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuK1xcdFxcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXFxuK1xcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuIFxcdH1cXG4gXFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiBcXHRpZiAoIShhZGRyIFxcdTAwMjYgflBBR0VfTUFTSykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjQ4OjM3LjU2OTE0MjE5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU0Mjc5Mjk2OTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93blwiLFxuICAgIFwiaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5pbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuQEAgLTE1Nyw3ICsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XG4rXHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4rXHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTIyMiw3ICsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXG4gXG4gXHRpZiAoZmlscCkge1xuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbi1cdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbitcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbitcdFx0XHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjQ4OjM3LjU2OTE0NDY0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTc0MjE1OTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSAqd2hhdCogaXMgYmVpbmcgY2hhbmdlZC4gVGhlIGRpZmYgdGVsbHMgbWUgaXQncyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gb24geDg2LTY0LCBteSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgY2hhbmdlcyBjYW4gaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEknbSBnb2luZyB0byBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gdmVyeSBjYXJlZnVsbHkuXG5cblRvIGRvIHRoYXQsIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDE1MCB0byAyNDAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb2YgdGhlIGRpZmYuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNoYW5nZXMgaW4gdGhlIGFsZ29yaXRobSwgYW55IG5ldyBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBhZGRyZXNzIHNwYWNlLCBhbmQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSXQncyB0aW1lIHRvIGRpdmUgaW4gYW5kIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTE6NTMuMzExMzA4MDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgZW5kKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChhZGRyKSB7XFxuIDE0NDpcXHRcXHRcXHRhZGRyID0gUEFHRV9BTElHTihhZGRyKTtcXG4gMTQ1OlxcdFxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4gMTQ2OlxcdFxcdFxcdGlmIChlbmQgLSBsZW4gXFx1MDAzZT0gYWRkciBcXHUwMDI2XFx1MDAyNlxcbiAxNDc6XFx0XFx0XFx0ICAgICghdm1hIHx8IGFkZHIgKyBsZW4gXFx1MDAzYz0gdm1fc3RhcnRfZ2FwKHZtYSkpKVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiAxNTI6XFx0XFx0aW5mby5sb3dfbGltaXQgPSBiZWdpbjtcXG4gMTUzOlxcdFxcdGluZm8uaGlnaF9saW1pdCA9IGVuZDtcXG4gMTU0OlxcdFxcdGlmICghKGZpbHAgXFx1MDAyNlxcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpKSB7XFxuIDE1NTpcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDE1NjpcXHRcXHRcXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuIDE1NzpcXHRcXHR9XFxuIDE1ODpcXHRcXHRpZiAoZmlscCkge1xcbiAxNTk6XFx0XFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuIDE2MDpcXHRcXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAxNjE6XFx0XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHR1bnNpZ25lZCBsb25nXFxuIDE2ODpcXHRhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXFxuIDE2OTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiAxNzA6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDE3MzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiAxNzQ6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gYWRkcjA7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm8gPSB7fTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0LyogcmVxdWVzdGVkIGxlbmd0aCB0b28gYmlnIGZvciBlbnRpcmUgYWRkcmVzcyBzcGFjZSAqL1xcbiAxNzg6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIFRBU0tfU0laRSlcXG4gMTc5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHQvKiBObyBhZGRyZXNzIGNoZWNraW5nLiBTZWUgY29tbWVudCBhdCBtbWFwX2FkZHJlc3NfaGludF92YWxpZCgpICovXFxuIDE4MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfRklYRUQpXFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gYWRkcjtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xcbiAxODY6XFx0XFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTUFQXzMyQklUKSlcXG4gMTg3OlxcdFxcdFxcdGdvdG8gYm90dG9tdXA7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXFxuIDE5MDpcXHRcXHRpZiAoYWRkcikge1xcbiAxOTE6XFx0XFx0XFx0YWRkciBcXHUwMDI2PSBQQUdFX01BU0s7XFxuIDE5MjpcXHRcXHRcXHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXFxuIDE5MzpcXHRcXHRcXHRcXHRnb3RvIGdldF91bm1hcHBlZF9hcmVhO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIDE5NjpcXHRcXHRcXHRpZiAoIXZtYSB8fCBhZGRyICsgbGVuIFxcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxcbiAxOTc6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE5ODpcXHRcXHR9XFxuIDE5OTpcXHRnZXRfdW5tYXBwZWRfYXJlYTpcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcXG4gMjAyOlxcdFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiAyMDM6XFx0XFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTUFQX0FCT1ZFNEcpKVxcbiAyMDQ6XFx0XFx0XFx0aW5mby5sb3dfbGltaXQgPSBTWl80RztcXG4gMjA1OlxcdFxcdGVsc2VcXG4gMjA2OlxcdFxcdFxcdGluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRpbmZvLmhpZ2hfbGltaXQgPSBnZXRfbW1hcF9iYXNlKDApO1xcbiAyMDk6XFx0XFx0aWYgKCEoZmlscCBcXHUwMDI2XFx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcXG4gMjEwOlxcdFxcdFxcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzKTtcXG4gMjExOlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ID0gcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0LypcXG4gMjE1OlxcdFxcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcXG4gMjE2OlxcdFxcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXFxuIDIxNzpcXHRcXHQgKlxcbiAyMTg6XFx0XFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXFxuIDIxOTpcXHRcXHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxcbiAyMjA6XFx0XFx0ICovXFxuIDIyMTpcXHRcXHRpZiAoYWRkciBcXHUwMDNlIERFRkFVTFRfTUFQX1dJTkRPVyBcXHUwMDI2XFx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxcbiAyMjI6XFx0XFx0XFx0aW5mby5oaWdoX2xpbWl0ICs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdGlmIChmaWxwKSB7XFxuIDIyNTpcXHRcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG4gMjI2OlxcdFxcdFxcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXFxuIDIyNzpcXHRcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiAyMzA6XFx0XFx0aWYgKCEoYWRkciBcXHUwMDI2IH5QQUdFX01BU0spKVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDIzMjpcXHRcXHRWTV9CVUdfT04oYWRkciAhPSAtRU5PTUVNKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0Ym90dG9tdXA6XFxuIDIzNTpcXHRcXHQvKlxcbiAyMzY6XFx0XFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxcbiAyMzc6XFx0XFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xcbiAyMzg6XFx0XFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXFxuIDIzOTpcXHRcXHQgKiBhbGxvY2F0aW9ucy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTE6NTMuMzExNDM3ODIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU2MzQxMDY0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBBbGlnbm1lbnQgTG9naWMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlc2UgYWxpZ25tZW50IGZ1bmN0aW9uczogYGdldF9hbGlnbl9tYXNrYCwgYGdldF9hbGlnbl9iaXRzYCwgYW5kIGBpc19maWxlX2h1Z2VwYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgbGFyZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gY2hlY2sgd2hhdCB0aGV5IGFyZSBkb2luZy4gTGV0J3MgZmluZCB0aGVpciBkZWZpbml0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYGdldF9hbGlnbl9tYXNrYCBhbmQgYGdldF9hbGlnbl9iaXRzYCwgc28gSSdsbCBzdGFydCB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBwcm92aWRlIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTI6MjguOTQ1NTQ2MTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjAyODM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfYWxpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI4LSAqL1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX21hc2soc3RydWN0IGZpbGUgKmZpbHApXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0zMC17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTUyLSAqL1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX2JpdHModm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTU0LXtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjU1OlxcdHJldHVybiB2YV9hbGlnbi5iaXRzIFxcdTAwMjYgZ2V0X2FsaWduX21hc2soTlVMTCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01Ni19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jPTEyNz1hcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNTgtXFx0aWYgKGZpbHApIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjE1OTpcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2MC1cXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTYxOlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjItXFx0fVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjg9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yMjQtXFx0aWYgKGZpbHApIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjIyNTpcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTIyNi1cXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MjI3OlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yMjgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1MjoyOS40Mzc1NzkyMjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTk1NDUzNzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiB4ODYtNjQga2VybmVsIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB4ODYtNjQgU3lzdGVtIENhbGxzKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGxpbmVzIDEtNzAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGZpbGUgaXMgY3JpdGljYWwsIG9idmlvdXNseSwgYmVjYXVzZSBpdCBob3VzZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHg4Ni02NCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIHRoZSBjb3JlIG9mIGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgb24gdGhpcyBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IG9uIHg4Ni02NCwgdGhlIHN5c3RlbSBjYWxsIG1lY2hhbmlzbSBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkZXIgMzItYml0IHZlcnNpb25zLCBwcm9iYWJseSBpbnZvbHZpbmcgdGhlIGBzeXNjYWxsYCBpbnN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlIHdpbGwgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGwgdGFibGUgZGVmaW5pdGlvbiBhbmQgc29tZSBsb3ctbGV2ZWwgc2V0dXAgb3IgZW50cnkgcG9pbnQgY29kZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgaW5saW5lZCwgb3IgY2FsbHMgYW5vdGhlciBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjUzOjExLjM5MjEyMDQzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VtLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNnLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYW4uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdXRzbmFtZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcnNvbmFsaXR5LmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9lbGYuaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2Nhc20vaWEzMi5oXFx1MDAzZVxcbiAgMjU6XFx0XFxuICAyNjpcXHQvKlxcbiAgMjc6XFx0ICogQWxpZ24gYSB2aXJ0dWFsIGFkZHJlc3MgdG8gYXZvaWQgYWxpYXNpbmcgaW4gdGhlIEkkIG9uIEFNRCBGMTVoLlxcbiAgMjg6XFx0ICovXFxuICAyOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fbWFzayhzdHJ1Y3QgZmlsZSAqZmlscClcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuIGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xcbiAgMzM6XFx0XFx0LyogaGFuZGxlIDMyLSBhbmQgNjQtYml0IGNhc2Ugd2l0aCBhIHNpbmdsZSBjb25kaXRpb25hbCAqL1xcbiAgMzQ6XFx0XFx0aWYgKHZhX2FsaWduLmZsYWdzIFxcdTAwM2MgMCB8fCAhKHZhX2FsaWduLmZsYWdzIFxcdTAwMjYgKDIgLSBtbWFwX2lzX2lhMzIoKSkpKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfUkFORE9NSVpFKSlcXG4gIDM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRyZXR1cm4gdmFfYWxpZ24ubWFzaztcXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0LypcXG4gIDQ0OlxcdCAqIFRvIGF2b2lkIGFsaWFzaW5nIGluIHRoZSBJJCBvbiBBTUQgRjE1aCwgdGhlIGJpdHMgZGVmaW5lZCBieSB0aGVcXG4gIDQ1OlxcdCAqIHZhX2FsaWduLmJpdHMsIFsxMjp1cHBlcl9iaXQpLCBhcmUgc2V0IHRvIGEgcmFuZG9tIHZhbHVlIGluc3RlYWQgb2ZcXG4gIDQ2OlxcdCAqIHplcm9pbmcgdGhlbS4gVGhpcyByYW5kb20gdmFsdWUgaXMgY29tcHV0ZWQgb25jZSBwZXIgYm9vdC4gVGhpcyBmb3JtXFxuICA0NzpcXHQgKiBvZiBBU0xSIGlzIGtub3duIGFzIFxcXCJwZXItYm9vdCBBU0xSXFxcIi5cXG4gIDQ4OlxcdCAqXFxuICA0OTpcXHQgKiBUbyBhY2hpZXZlIHRoaXMsIHRoZSByYW5kb20gdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGluZm8uYWxpZ25fb2Zmc2V0XFxuICA1MDpcXHQgKiB2YWx1ZSBiZWZvcmUgY2FsbGluZyB2bV91bm1hcHBlZF9hcmVhKCkgb3IgT1JlZCBkaXJlY3RseSB0byB0aGVcXG4gIDUxOlxcdCAqIGFkZHJlc3MuXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9hbGlnbl9iaXRzKHZvaWQpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRyZXR1cm4gdmFfYWxpZ24uYml0cyBcXHUwMDI2IGdldF9hbGlnbl9tYXNrKE5VTEwpO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHRzdGF0aWMgaW50IF9faW5pdCBjb250cm9sX3ZhX2FkZHJfYWxpZ25tZW50KGNoYXIgKnN0cilcXG4gIDU5OlxcdHtcXG4gIDYwOlxcdFxcdC8qIGd1YXJkIGFnYWluc3QgZW5hYmxpbmcgdGhpcyBvbiBvdGhlciBDUFUgZmFtaWxpZXMgKi9cXG4gIDYxOlxcdFxcdGlmICh2YV9hbGlnbi5mbGFncyBcXHUwMDNjIDApXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCpzdHIgPT0gMClcXG4gIDY1OlxcdFxcdFxcdHJldHVybiAxO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCIzMlxcXCIpKVxcbiAgNjg6XFx0XFx0XFx0dmFfYWxpZ24uZmxhZ3MgPSBBTElHTl9WQV8zMjtcXG4gIDY5OlxcdFxcdGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwiNjRcXFwiKSlcXG4gIDcwOlxcdFxcdFxcdHZhX2FsaWduLmZsYWdzID0gQUxJR05fVkFfNjQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjUzOjExLjM5MzI3NjUwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk5MjcxMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXBhZ2UgQWxpZ25tZW50IEJ1ZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBjb2RlLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMTU0LTE1Nywgc3BlY2lmaWNhbGx5IGhvdyBgaW5mby5hbGlnbl9vZmZzZXRgIGlzIGhhbmRsZWQuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBzZWVtZWQgcHJvYmxlbWF0aWMgZm9yIGh1Z2VwYWdlcy4gSXQgbG9va2VkIGxpa2UsIHByZXZpb3VzbHksIGBpbmZvLmFsaWduX29mZnNldGAgd291bGQgc3RhcnQgYXQgemVybywgb3Igbm90IGJlIHNldC4gVGhlbiwgYGluZm8uYWxpZ25fbWFza2Agd291bGQgYmUgc2V0IHRvIHRoZSBodWdlcGFnZSBtYXNrIChsaWtlIDJNQikuIFRoZSB0cm91Ymxlc29tZSBsaW5lIHdhcyBgaW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtgLiBUaGlzIHN1Z2dlc3RlZCB0aGF0LCBmb3IgaHVnZXBhZ2VzLCB3ZSB3ZXJlICphZGRpbmcqIGFuIG9mZnNldCBtZWFudCBmb3IgNEsgcGFnZSBjYWNoZSBhbGlhc2luZyBvbiBBTUQgQnVsbGRvemVyL0YxNWggdG8gdGhlIGh1Z2VwYWdlIGFsaWdubWVudCwgZWZmZWN0aXZlbHkgYnJlYWtpbmcgdGhlIGFsaWdubWVudCBvciBhZGRpbmcgYW4gdW5uZWNlc3Nhcnkgb25lLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHZtX3VubWFwcGVkX2FyZWFgIHVzZXMgYGFsaWduX21hc2tgIGFuZCBgYWxpZ25fb2Zmc2V0YCBmb3IgYWRkcmVzcyBhbGlnbm1lbnQuIFRoZSBvbGQgbG9naWMgY291bGQgbWVzcyB0aGlzIHVwLiBCdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIHByb2JsZW1hdGljIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCBpcyBieXBhc3NlZCBpZiBpdCAqaXMqIGEgaHVnZXBhZ2UsIHdoaWNoIGlzIGdvb2QuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBib3RoIHJlYWNoYWJsZSBhbmQgZml4aW5nIGEgcmVhbCBpc3N1ZS4gSSBrbm93IHRoYXQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBhcmUgdGhlIHg4Nl82NCBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZ1bmN0aW9ucy4gVGhleSdyZSBjYWxsZWQgZXZlcnkgdGltZSBgbW1hcGAgaXMgaW52b2tlZCBvbiB4ODZfNjQgdG8gZmluZCBhbiB1bm1hcHBlZCBhcmVhLiBTaW5jZSBgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgIGlzIHRydWUgd2hlbiBtbWFwaW5nIGh1Z2V0bGJmcyBmaWxlcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBjb3JlIGtlcm5lbCBmdW5jdGlvbnMgb24geDg2XzY0IGFuZCBhcmUgYWx3YXlzIGludm9sdmVkIGluIHRoZSBtbWFwLiBJbiB0aGF0IGNhc2UsIHRoaXMgbG9naWMgaXMgY29yZS4gSXQncyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGludm9rZXMgYG1tYXAoKWAgb24gaHVnZXRsYmZzIGZpbGVzIG9yIG9yZGluYXJ5IGZpbGVzLiBTbywgdGhpcyBmaXggaXMgaW1wb3J0YW50LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZXN0YWJsaXNoIGNvbnRleHQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbGxvd3MgYGh1Z2V0bGJmc2AuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciBkbyBhIHF1aWNrIGdyZXAgZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AgdG8gYmUgc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTQ6NTcuMzg1OTg5MTQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg2MTYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfZmlsZV9odWdlcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MjEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MjMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUzMi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MzM6I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVxcdFxcdFxcdGZhbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTM0LXN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1NDo1Ny45MTQ2MTQ4MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzODQ0MjU1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBkZWZpbml0aW9uIHBvaW50IGZvciBIdWdlVExCIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUxOS4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGNvcmUgSHVnZVRMQiBvcGVyYXRpb25zIG1pZ2h0IHJlc2lkZSwgcHJvYmFibHkgc29tZSBraW5kIG9mIGRlZmluaXRpb24gb3Igc3RydWN0dXJlIHRoYXQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gb3JkZXIgdG8gcmVhc29uIGFib3V0IHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IgSSdtIHRyeWluZyB0byBkZWJ1Zy9tb2RpZnkvdW5kZXJzdGFuZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTU6MTkuMjk5MDQyNzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFx0dW5zaWduZWQgaW50IHNlYWxzO1xcbiA1MTE6XFx0fTtcXG4gNTEyOlxcdFxcbiA1MTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKkhVR0VUTEJGU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDUxNDpcXHR7XFxuIDUxNTpcXHRcXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XFxuIDUxNjpcXHR9XFxuIDUxNzpcXHRcXG4gNTE4OlxcdGV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XFxuIDUxOTpcXHRzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCB2bWFfZmxhZ3NfdCBhY2N0LFxcbiA1MjA6XFx0XFx0XFx0XFx0XFx0aW50IGNyZWF0X2ZsYWdzLCBpbnQgcGFnZV9zaXplX2xvZyk7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNTIzOlxcdHtcXG4gNTI0OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfSFVHRV9QQUdFUztcXG4gNTI1OlxcdH1cXG4gNTI2OlxcdFxcbiA1Mjc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfaW5vZGUoc3RydWN0IGlub2RlICppKVxcbiA1Mjg6XFx0e1xcbiA1Mjk6XFx0XFx0cmV0dXJuIEhVR0VUTEJGU19TQihpLVxcdTAwM2VpX3NiKS1cXHUwMDNlaHN0YXRlO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0I2Vsc2UgLyogIUNPTkZJR19IVUdFVExCRlMgKi9cXG4gNTMyOlxcdFxcbiA1MzM6XFx0I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVxcdFxcdFxcdGZhbHNlXFxuIDUzNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpcXG4gNTM1OlxcdGh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdGZsYWcsXFxuIDUzNjpcXHRcXHRcXHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxcbiA1Mzc6XFx0e1xcbiA1Mzg6XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7XFxuIDUzOTpcXHR9XFxuIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcXG4gNTQyOlxcdHtcXG4gNTQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1NToxOS4yOTkxNDc2NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYzMjcyMjQ1OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBndXQgdGVsbHMgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSFVHRVRMQkZTIGFyZSBlaXRoZXIgZ29pbmcgdG8gYmUgdHVja2VkIGF3YXkgaW4gYGZzL0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgb3ZlciBpbiBgbW0vS2NvbmZpZ2AuIEknbSBsZWFuaW5nIHRvd2FyZHMgYG1tL0tjb25maWdgIGJlY2F1c2UgaHVnZSBwYWdlcyBhcmUgZnVuZGFtZW50YWxseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBsaXZlLiBMZXQncyBzdGFydCB0aGVyZSwgYnV0IEknbGwgcXVpY2tseSBjaGVjayBgZnMvS2NvbmZpZ2AganVzdCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjAyLjU3MTM5NzI1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjcyNzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjA0LjUyNDEyOTg4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc4NzI3MzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoLCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBpbiBgZnMvS2NvbmZpZ2AuIEFuZCwgZ2l2ZW4gdGhlIHR5cGljYWwgb3JnYW5pemF0aW9uIG9mIHRoZXNlIEtjb25maWcgZmlsZXMsIEknbSBiZXR0aW5nIHRoZSByZWxldmFudCBzZWN0aW9uIEknbSBhZnRlciBpcyBoYW5naW5nIGFyb3VuZCBsaW5lIDI1MC4gSXQncyBhIHN0YXJ0aW5nIHBvaW50LCBhIHJlYXNvbmFibGUganVtcGluZy1vZmYgbG9jYXRpb24uIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciBxdWlja2x5IHJlZmluZSBteSBzZWFyY2guIFRoaXMgbGluZSBpcyBtb3N0IGxpa2VseSB0aGUgc3RhcnQgb2Ygd2hhdCBJJ20gYWZ0ZXIuIExldCdzIHNlZSBpZiB0aGlzIGlzIHRoZSByaWdodCBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjM4LjMxMTQwNTg1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI2NzpcXHRcXHRoZWxwXFxuIDI2ODpcXHRcXHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xcbiAyNjk6XFx0XFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjM4LjMxMTQ3ODU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ3MTIxOTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBhbmQgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgbGlrZWx5IHN1c3BlY3RzLiBCdXQgSSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBsZXZlbCBvZiBwZXJmb3JtYW5jZSBzY3J1dGlueS4gQmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIGNyb3NzLWNoZWNrIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgbWlzY29uZmlndXJhdGlvbiB0aGVyZSBjb3VsZCBiZSB0aGUgcm9vdCBjYXVzZSwgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBjb250cmlidXRpbmcgZmFjdG9yLCB0byB3aGF0IEknbSBzZWVpbmcuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBjaGFzaW5nIGRvd24gY29tcGxleCBpbnRlcmFjdGlvbnMgaWYgdGhlIGJhc2ljcyBhcmVuJ3QgcmlnaHQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgaHVnZSBwYWdlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1OToxMy43ODI3MDAxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTMxMjU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1OToxNS43OTU4MzM5MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMjc5MjMwMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZXRsYmZzIFN1cHBvcnQgaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCAob3Igbm90IHN1cHBvcnRlZCkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzeW1ib2wsIGxpa2VseSBzb21ldGhpbmcgZGlyZWN0bHkgcmVsYXRlZCB0byBgSFVHRVRMQkZTYCBpdHNlbGYsIHBvdGVudGlhbGx5IGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIE9mIGNvdXJzZSwgaXQncyBhbHNvIHdvcnRoIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGNvbnRyb2wgaHVnZXRsYmZzIGZlYXR1cmVzIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIG9uIHg4Ni4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGVyZSBhcyB3ZWxsLCBtYXliZSByZWxhdGluZyB0byBzcGVjaWZpYyBDUFUgZmVhdHVyZXMsIE5VTUEgY29uZmlndXJhdGlvbnMsIG9yIG90aGVyIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MDI6MTkuMDc1MDY2MTAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNTI1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMjUtXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DXFxuYXJjaC94ODYvS2NvbmZpZzoxMjY6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC94ODYvS2NvbmZpZy0xMjctXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzowMjoxOS4xODczMjU4NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTc3OTY1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVW5tYXBwZWQgQXJlYSBBbGxvY2F0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZpbmRpbmcgdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbnMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgd2l0aGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQnbGwgaW5mbHVlbmNlIHRoZWlyIHNjb3BlIGFuZCBob3cgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBjYW4gdXRpbGl6ZSB0aGVtLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gaW4gYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBzcGVjaWZpY2FsbHkgbGluZSAxMjUsIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjAyOjUwLjE4NTEyNzM4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX1NIQURPV19TVEFDSylcXG4gMTIxOlxcdFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHJldHVybiAwO1xcbiAxMjQ6XFx0fVxcbiAxMjU6XFx0XFxuIDEyNjpcXHR1bnNpZ25lZCBsb25nXFxuIDEyNzpcXHRhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbiAxMjg6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiAxMzE6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDEzMjpcXHRcXHRzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm8gPSB7fTtcXG4gMTMzOlxcdFxcdHVuc2lnbmVkIGxvbmcgYmVnaW4sIGVuZDtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKVxcbiAxMzY6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGZpbmRfc3RhcnRfZW5kKGFkZHIsIGZsYWdzLCBcXHUwMDI2YmVnaW4sIFxcdTAwMjZlbmQpO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgZW5kKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChhZGRyKSB7XFxuIDE0NDpcXHRcXHRcXHRhZGRyID0gUEFHRV9BTElHTihhZGRyKTtcXG4gMTQ1OlxcdFxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4gMTQ2OlxcdFxcdFxcdGlmIChlbmQgLSBsZW4gXFx1MDAzZT0gYWRkciBcXHUwMDI2XFx1MDAyNlxcbiAxNDc6XFx0XFx0XFx0ICAgICghdm1hIHx8IGFkZHIgKyBsZW4gXFx1MDAzYz0gdm1fc3RhcnRfZ2FwKHZtYSkpKVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE0OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjAyOjUwLjE4NzI5NDQ3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1MzU3MTY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgbWVudGlvbnMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYC4gVGhvc2UgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMsIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBjYWxsZWQgdGhyb3VnaCBgbW0tXHUwMDNlZ2V0X3VubWFwcGVkX2FyZWFgIG9yIGRpcmVjdGx5IGBnZXRfdW5tYXBwZWRfYXJlYWAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IHRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGhvdCBwYXRocz8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRhcmdldGluZyB0aGVtIGZvciBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgZ3VpZGFuY2UgZW1waGFzaXplcyBmb2N1c2luZyBmdXp6aW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBoZWF2aWx5IGZ1enplZCwgc28gSSBuZWVkIHRvIGF2b2lkIGp1c3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlIHRoZSB0ZXN0cyB3aWxsIGJlIHNrZXdlZC4gVGhleSBzdWdnZXN0IGdvaW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMsIGJlY2F1c2UgdGhlIGhlbHBlcnMgZ2V0IGlubGluZWQuIFRoaXMgbWVhbnMgdGhleSB3b24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuXG5cblNvLCBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBzeW1ib2xzIGluIHZtbGludXg/IFRoYXTigJlzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgZGVjbGFyZWQgYW5kIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2lnbmlmaWNhbmNlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhleSBhcmUgd29ydGggaW5jbHVkaW5nIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA2OjEwLjcyMzAxNTA4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzMwMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM9MTI2PXVuc2lnbmVkIGxvbmdcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjEyNzphcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMTI4LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjc9dW5zaWduZWQgbG9uZ1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTY4OmFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2OS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yNDAtXFx0ICovXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyNDE6XFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA2OjEwLjgzMjc1MTQ3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjEyMTQ3NzU3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhwbG9yaW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYXNwZWN0IGFnYWluLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBpdHMgcm9sZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIG1lYW4sIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFsIHdvcmtpbmdzIGlzIG9uZSB0aGluZywgYnV0IGtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3Vic3lzdGVtcyBvciBhcmVhcyB0aGF0IGRlcGVuZCBvbiBpdC4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gbWFwIG91dCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hlcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdob3V0IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjEyLjA0NzUzNjc5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTAzNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tYXAuYz03Mzc9dW5zaWduZWQgbG9uZ1xcbm1tL21tYXAuYzo3Mzg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21tYXAuYy03MzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxubW0vbW1hcC5jPTgwNT11bnNpZ25lZCBsb25nXFxubW0vbW1hcC5jOjgwNjphcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tbWFwLmMtODA3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tLVxcbm1tL21tYXAuYz04MTU9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbW1hcC5jLTgxOS1cXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cXHUwMDNlbW0pKVxcbm1tL21tYXAuYzo4MjA6XFx0XFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLFxcbm1tL21tYXAuYy04MjEtXFx0XFx0XFx0XFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxubW0vbW1hcC5jOjgyMjpcXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG5tbS9tbWFwLmMtODIzLVxcdFxcdFxcdHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjEyLjE2MjA0NzI2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU4NzU3OTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIEl0cyBVc2FnZSBpbiBodWdldGxiZnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGZ1bmN0aW9ucyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaHVnZSBwYWdlcyBmaWxlIHN5c3RlbSAoYGh1Z2V0bGJmc2ApIGxldmVyYWdlcyBpdC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZTogaXQncyBhbGwgYWJvdXQgZmluZGluZyBhIHN1aXRhYmxlLCB1bm1hcHBlZCByZWdpb24gb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlLiBCdXQgdGhlIGRldGFpbHMsIHRoZSBudWFuY2VzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCdzICp1c2VkKiBieSBhIHNwZWNpYWxpemVkIHN5c3RlbSBsaWtlIGh1Z2V0bGJmcyBhcmUgd2hhdCBJIG5lZWQgdG8gc29saWRpZnkgaW4gbXkgbWluZC5cblxuSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY2FsbCwganVzdCBmaW5kaW5nIHRoZSBnYXA/IE9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggY29uc2lkZXJhdGlvbnMsIHBlcmhhcHMgaW52b2x2aW5nIE5VTUEgYWZmaW5pdHkgb3IgcGFnZSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIGh1Z2UgcGFnZXM/IERvZXMgdGhlIHN5c3RlbSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IHJlZ2lvbnMsIHNoYXJlZCBtZW1vcnksIG9yIGFub255bW91cyBtYXBwaW5ncz8gSSdsbCBwcm9iYWJseSBiZSBjaGVja2luZyBob3cgYGdldF91bm1hcHBlZF9hcmVhYCBpdHNlbGYgd29ya3MsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBob3cgYGh1Z2V0bGJmc2Agc2V0cyB1cCB0aGUgcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgaXQuIFdoYXQgZmxhZ3MgYXJlIHVzZWQ/IEFyZSB0aGVyZSBjdXN0b20gY29uc3RyYWludHMgaW1wb3NlZCBvbiB0aGUgc2VhcmNoPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeT8gQSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGNhbGwsIGNvbnNpZGVyaW5nIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIGh1Z2UgcGFnZXMsIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvci4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjQ0Ljc0OTYzMTA5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MjA3NTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2dldF91bm1hcHBlZF9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE3Mj11bnNpZ25lZCBsb25nXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTczOmh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNzQtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMC1cXHQuZnN5bmNcXHRcXHRcXHQ9IG5vb3BfZnN5bmMsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpcXHQuZ2V0X3VubWFwcGVkX2FyZWFcXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMi1cXHQubGxzZWVrXFx0XFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU0Nz11bnNpZ25lZCBsb25nXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTQ4Omh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01NDktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzowODo0Ny4xOTE3MTUyNTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcyODExNjMyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSHVnZVRMQiBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGlub2RlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGdpdmVuIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGlub2RlLXJlbGF0ZWQgbG9naWMgdG8gcmVzaWRlLiBOb3csIGxldCdzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHN1Z2dlc3RzIHRoYXQgbGluZSAxNzMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsb3NlciBsb29rLiBUaGF0IGxpa2VseSBpbnZvbHZlcyBzb21lIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gd2hpY2ggd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjEwOjE0LjQ3Mjg4MTE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdCAqL1xcbiAxNzE6XFx0XFxuIDE3MjpcXHR1bnNpZ25lZCBsb25nXFxuIDE3MzpcXHRodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDE3NDpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuIDE3NTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gMTc2OlxcdHtcXG4gMTc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjAgPSAwO1xcbiAxNzg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRpZiAobGVuIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKVxcbiAxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE4MjpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKSBcXHUwMDI2XFx1MDAyNiAoYWRkciBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkpXFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTg0OlxcdFxcdGlmIChhZGRyKVxcbiAxODU6XFx0XFx0XFx0YWRkcjAgPSBBTElHTihhZGRyLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuIDE4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdC8qXFxuIDE5MjpcXHQgKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXFxuIDE5MzpcXHQgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xcbiAxOTQ6XFx0ICogSFdQT0lTT04gcGFnZS5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4gMTk3OlxcdFxcdFxcdHNpemVfdCBieXRlcylcXG4gMTk4OlxcdHtcXG4gMTk5OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcXG4gMjAwOlxcdFxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuIDIwMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjA0OlxcdFxcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4gMjA1OlxcdFxcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4gMjA2OlxcdFxcdHBhZ2UrKztcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuIDIwOTpcXHRcXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxMDoxNC40NzI5OTM2NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4NTUwMjg1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgbW1hcCBCZWhhdmlvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGBtbWFwYCBpbnRlcmFjdHMgd2l0aCBodWdldGxiZnMgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB0aGUgYG1tYXBgIGNhbGwgZG93biBpbnRvIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgcmVsYXRlZCB0byBhbGlnbm1lbnQuXG5cblNvLCBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAga2lja3MgdGhpbmdzIG9mZiBhbmQsIGFzIGV4cGVjdGVkLCBpdCdzIGNhbGxpbmcgYG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYCB3aGljaCB0aGVuIGhhbmRzIHRoaW5ncyB0byBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBvciBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAsIHBhc3NpbmcgdGhlIGZpbGUgcG9pbnRlciAoYGZpbHBgKS4gVGhpcyBzZWVtcyBzdGFuZGFyZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydC4gSW5zaWRlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCAoYW5kIHRoZSB0b3AtZG93biB2YXJpYW50KSwgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCBpcyBnZXR0aW5nIGV2YWx1YXRlZC4gR29vZC4gVGhpcyBpcyB0aGUga2V5LiBBbmQsIG5hdHVyYWxseSwgZm9yIGEgaHVnZXRsYmZzIGZpbGUsIHRoaXMgZXZhbHVhdGVzIHRvIGB0cnVlYC5cblxuSSdtIHJlY2FsbGluZyB0aGF0IGEgcGF0Y2ggcHJldmlvdXNseSBhZGRlZCBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YC4gQnV0IG5vdywgdGhlcmUncyBhIGNvbmRpdGlvbmFsLiBUaGUgY29kZSAqbm93KiBjaGVja3MgYGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpYC4gVGhpcyBtZWFucywgYW5kIGl0J3MgaW1wb3J0YW50IHRvIGJlIGV4cGxpY2l0LCB0aGF0IGZvciBhIGh1Z2V0bGJmcyBmaWxlIChgZmlscGApLCB0aGUgYWRkaXRpb24gb2YgYGdldF9hbGlnbl9iaXRzKClgICppcyBza2lwcGVkKi4gYGluZm8uYWxpZ25fb2Zmc2V0YCB3aWxsICoqbm90KiogYmUgbW9kaWZpZWQsIHdoaWNoIGNoYW5nZXMgdGhlIG91dGNvbWUgb2YgdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbiFcblxuT2theSwgc28gSSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNvZGUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEkgZXhwZWN0IGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgdGhlIHRvcGRvd24gdmVyc2lvbiwgYXJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgc3lzX3g4Nl82NC5vYCBpcyBidWlsdC4gT2ZmIHRvIGBhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVgIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgYnVpbGQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjExOjExLjMyODAyNzc3NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzAwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c194ODZfNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKVxcdCs9IHN5c19pYTMyLm8gc2lnbmFsXzMyLm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX1g4Nl82NClcXHQrPSBzeXNfeDg2XzY0Lm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX1g4Nl9FU1BGSVg2NClcXHQrPSBlc3BmaXhfNjQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxMToxMS40NDMzMzg0ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4ODQyMzIwMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gV2UncmUgZGVhbGluZyB3aXRoIGBzeXNfeDg2XzY0Lm9gIHdoaWNoIGlzIGJ1aWx0IHdpdGggYENPTkZJR19YODZfNjRgLCBhbmQgd2UgaGF2ZSBgSFVHRVRMQkZTYCBlbmFibGVkIHRocm91Z2ggYENPTkZJR19IVUdFVExCRlNgIGZvciBodWdldGxiZnMgc3VwcG9ydC4gIEZpcnN0LCBsZXQgbWUgY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhdCBwbGF5IGhlcmUuXG5cbkkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgXCJXb3J0aEZ1enppbmdcIi4gIExldCdzIHJ1biB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gSXQgbG9va3MgbGlrZSBpdCBkb2Vzbid0IGludm9sdmUgY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cy4gSXQncyBub3QganVzdCBjb3NtZXRpYyBsaWtlIGxvZ2dpbmcsIG5vciBkb2VzIGl0IGFsdGVyIGFueSBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgaW4gYSBub24tZnVuY3Rpb25hbCB3YXkuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBwYXRjaCBhZGRyZXNzZXMgY29kZSBwYXRocyBpbiBRRU1VL3g4Nl82NCB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBtbWFwYCBzeXNjYWxsIG9uIGh1Z2V0bGJmcywgc28gaXQncyAqbm90KiBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIFRoaXMgZWxpbWluYXRlcyB0aGUgbGFzdCBwb2ludC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzZWVtcyB0byBiZSBgdHJ1ZWAhXG5cblNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29yZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChpbiBgYXJjaC9tbWApIGR1cmluZyBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gd2hlbiBtYXBwaW5nIGh1Z2V0bGJmcyBmaWxlcyBvbiB4ODZfNjQuIEl0IGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYGFsaWduX29mZnNldGAgY29ycnVwdGlvbiBvciBiaWFzLCB3aGVuIG1hcHBpbmcgaHVnZXRsYiBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZnVuY3Rpb25hbCwgYW5kICp3b3J0aCogZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAsIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gLCBhbmQgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgLiBMZXQncyBjb25maXJtIHRoZXNlIGFyZSBhY3R1YWxseSB1c2FibGU6IGFuZCB5ZXMsIGFmdGVyIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSBjb2RlLCB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIGZvciB0aGUgc3lzdGVtIHRvIHVzZTogYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBhcmUgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIGFuZCBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAgaXMgYWxzbyBub24tc3RhdGljIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgc3VyZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBYODZfNjRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgdmFsaWQsIGBIVUdFVExCRlNgIGVuYWJsZXMgdGhlIGh1Z2V0bGIgZmlsZXN5c3RlbSBhbmQgYWxsb3dzIGBpc19maWxlX2h1Z2VwYWdlcygpYCB0byByZXR1cm4gdHJ1ZS4gYFg4Nl82NGAgZW5hYmxlcyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEFsbCBjbGVhciFcblxuT2theSwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxNDoyMC4yODU2NjE1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDQ2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93blwiLFxuICAgIFwiaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2dldF91bm1hcHBlZF9hcmVhXCIsXG4gICAgXCJhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25cIixcbiAgICBcImh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ODYtNjQgYWRkcmVzcyBhbGxvY2F0aW9uIGxvZ2ljIGluIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKSBhbmQgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKCkgdG8gcHJldmVudCBhcHBseWluZyBnZXRfYWxpZ25fYml0cygpIG9mZnNldCB3aGVuIG1hcHBpbmcgSHVnZVRMQiBmaWxlcy4gVGhpcyBhbHRlcnMgbW1hcCBhZGRyZXNzIHNlbGVjdGlvbiBmb3IgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBpcyByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBtbWFwIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxNDoyMC4zNjIxMTUzNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU3MTg0ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE0OjIwLjM2MjYxNjQ4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NjU3MTM0MjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKWAgaW4gYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgIHRvIHByZXZlbnQgYWRkaW5nIGBnZXRfYWxpZ25fYml0cygpYCB0byBgaW5mby5hbGlnbl9vZmZzZXRgIGZvciBodWdlcGFnZS1iYWNrZWQgZmlsZXMgKGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWApLlxcblxcbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5pbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuQEAgLTE1Nyw3ICsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XG4rXHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4rXHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTIyMiw3ICsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXG4gXG4gXHRpZiAoZmlscCkge1xuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbi1cdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbitcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbitcdFx0XHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE0OjIwLjM2MjYxNzM1NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjA2MDIxODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSBjaGFuZ2U6XG5cbioqQW5hbHl6aW5nIHRoZSB4ODYtNjQgQXJjaGl0ZWN0dXJlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIHRoaW5raW5nLCBcIkxldCdzIGdyYWIgdGhlIHVzdWFsIHRvb2xzLlwiIFRoYXQgbWVhbnMgSSdtIGZpcmluZyB1cCBteSBkaWZmIHZpZXdlcnMgYW5kIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyBJIGhhdmUgYXQgaGFuZCB0byBzZWUgd2hhdCB3ZSdyZSByZWFsbHkgZGVhbGluZyB3aXRoLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIGZ1bmN0aW9ucy4gU28sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB1c2VyLXNwYWNlIGFkZHJlc3Mgc3BhY2UgYWxsb2NhdGlvbiBvbiB0aGUgeDg2LTY0IGFyY2hpdGVjdHVyZS5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgYW5kIHN0YXJ0IHJlYWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3ZXJlIHRoZXNlIGZ1bmN0aW9ucyAqZG9pbmcqIGJlZm9yZSwgYW5kIHdoYXQgYXJlIHRoZXkgKmRvaW5nKiBub3c/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWd5LCB0aGUgYXZhaWxhYmxlIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgY2hhbmdlIHRvdWNoZXMgdGhlIGFkZHJlc3Mgc3BhY2UgbGF5b3V0LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoaW5ncyBsaWtlIEFTTFIsIG9yIG90aGVyIHNlY3VyaXR5IGhhcmRlbmluZy4gSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIGxvZ2ljLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBhZGRyZXNzIHNwYWNlIGxlYWtzLCBvciBwb3NzaWJseSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhhdCdzIG15IGluaXRpYWwgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE1OjIyLjQyMjgzOTU5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGVuZClcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoYWRkcikge1xcbiAxNDQ6XFx0XFx0XFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XFxuIDE0NTpcXHRcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIDE0NjpcXHRcXHRcXHRpZiAoZW5kIC0gbGVuIFxcdTAwM2U9IGFkZHIgXFx1MDAyNlxcdTAwMjZcXG4gMTQ3OlxcdFxcdFxcdCAgICAoIXZtYSB8fCBhZGRyICsgbGVuIFxcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKSlcXG4gMTQ4OlxcdFxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpbmZvLmxlbmd0aCA9IGxlbjtcXG4gMTUyOlxcdFxcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XFxuIDE1MzpcXHRcXHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XFxuIDE1NDpcXHRcXHRpZiAoIShmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKSkge1xcbiAxNTU6XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiAxNTY6XFx0XFx0XFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xcbiAxNTc6XFx0XFx0fVxcbiAxNTg6XFx0XFx0aWYgKGZpbHApIHtcXG4gMTU5OlxcdFxcdFxcdGluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApO1xcbiAxNjA6XFx0XFx0XFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcXG4gMTYxOlxcdFxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFxcdTAwMjZpbmZvKTtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0dW5zaWduZWQgbG9uZ1xcbiAxNjg6XFx0YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4gMTcwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiAxNzM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xcbiAxNzU6XFx0XFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdC8qIHJlcXVlc3RlZCBsZW5ndGggdG9vIGJpZyBmb3IgZW50aXJlIGFkZHJlc3Mgc3BhY2UgKi9cXG4gMTc4OlxcdFxcdGlmIChsZW4gXFx1MDAzZSBUQVNLX1NJWkUpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xcbiAxODI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKVxcbiAxODM6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdC8qIGZvciBNQVBfMzJCSVQgbWFwcGluZ3Mgd2UgZm9yY2UgdGhlIGxlZ2FjeSBtbWFwIGJhc2UgKi9cXG4gMTg2OlxcdFxcdGlmICghaW5fMzJiaXRfc3lzY2FsbCgpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1BUF8zMkJJVCkpXFxuIDE4NzpcXHRcXHRcXHRnb3RvIGJvdHRvbXVwO1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHQvKiByZXF1ZXN0aW5nIGEgc3BlY2lmaWMgYWRkcmVzcyAqL1xcbiAxOTA6XFx0XFx0aWYgKGFkZHIpIHtcXG4gMTkxOlxcdFxcdFxcdGFkZHIgXFx1MDAyNj0gUEFHRV9NQVNLO1xcbiAxOTI6XFx0XFx0XFx0aWYgKCFtbWFwX2FkZHJlc3NfaGludF92YWxpZChhZGRyLCBsZW4pKVxcbiAxOTM6XFx0XFx0XFx0XFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xcbiAxOTY6XFx0XFx0XFx0aWYgKCF2bWEgfHwgYWRkciArIGxlbiBcXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSlcXG4gMTk3OlxcdFxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxOTg6XFx0XFx0fVxcbiAxOTk6XFx0Z2V0X3VubWFwcGVkX2FyZWE6XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdGluZm8uZmxhZ3MgPSBWTV9VTk1BUFBFRF9BUkVBX1RPUERPV047XFxuIDIwMjpcXHRcXHRpbmZvLmxlbmd0aCA9IGxlbjtcXG4gMjAzOlxcdFxcdGlmICghaW5fMzJiaXRfc3lzY2FsbCgpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1BUF9BQk9WRTRHKSlcXG4gMjA0OlxcdFxcdFxcdGluZm8ubG93X2xpbWl0ID0gU1pfNEc7XFxuIDIwNTpcXHRcXHRlbHNlXFxuIDIwNjpcXHRcXHRcXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0aW5mby5oaWdoX2xpbWl0ID0gZ2V0X21tYXBfYmFzZSgwKTtcXG4gMjA5OlxcdFxcdGlmICghKGZpbHAgXFx1MDAyNlxcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpKSB7XFxuIDIxMDpcXHRcXHRcXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuIDIxMTpcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDIxMjpcXHRcXHR9XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdC8qXFxuIDIxNTpcXHRcXHQgKiBJZiBoaW50IGFkZHJlc3MgaXMgYWJvdmUgREVGQVVMVF9NQVBfV0lORE9XLCBsb29rIGZvciB1bm1hcHBlZCBhcmVhXFxuIDIxNjpcXHRcXHQgKiBpbiB0aGUgZnVsbCBhZGRyZXNzIHNwYWNlLlxcbiAyMTc6XFx0XFx0ICpcXG4gMjE4OlxcdFxcdCAqICFpbl8zMmJpdF9zeXNjYWxsKCkgY2hlY2sgdG8gYXZvaWQgaGlnaCBhZGRyZXNzZXMgZm9yIHgzMlxcbiAyMTk6XFx0XFx0ICogKGFuZCBtYWtlIGl0IG5vIG9wIG9uIG5hdGl2ZSBpMzg2KS5cXG4gMjIwOlxcdFxcdCAqL1xcbiAyMjE6XFx0XFx0aWYgKGFkZHIgXFx1MDAzZSBERUZBVUxUX01BUF9XSU5ET1cgXFx1MDAyNlxcdTAwMjYgIWluXzMyYml0X3N5c2NhbGwoKSlcXG4gMjIyOlxcdFxcdFxcdGluZm8uaGlnaF9saW1pdCArPSBUQVNLX1NJWkVfTUFYIC0gREVGQVVMVF9NQVBfV0lORE9XO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoZmlscCkge1xcbiAyMjU6XFx0XFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuIDIyNjpcXHRcXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAyMjc6XFx0XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gMjI4OlxcdFxcdH1cXG4gMjI5OlxcdFxcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFxcdTAwMjZpbmZvKTtcXG4gMjMwOlxcdFxcdGlmICghKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSlcXG4gMjMxOlxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAyMzI6XFx0XFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdGJvdHRvbXVwOlxcbiAyMzU6XFx0XFx0LypcXG4gMjM2OlxcdFxcdCAqIEEgZmFpbGVkIG1tYXAoKSB2ZXJ5IGxpa2VseSBjYXVzZXMgYXBwbGljYXRpb24gZmFpbHVyZSxcXG4gMjM3OlxcdFxcdCAqIHNvIGZhbGwgYmFjayB0byB0aGUgYm90dG9tLXVwIGZ1bmN0aW9uIGhlcmUuIFRoaXMgc2NlbmFyaW9cXG4gMjM4OlxcdFxcdCAqIGNhbiBoYXBwZW4gd2l0aCBsYXJnZSBzdGFjayBsaW1pdHMgYW5kIGxhcmdlIG1tYXAoKVxcbiAyMzk6XFx0XFx0ICogYWxsb2NhdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE1OjIyLjQyMjkyMjM3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODAwMDY1ODEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIEluaXRpYWxpemF0aW9uIGluIHg4Nl82NCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgeDg2XzY0IHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmZvYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB3aXRoaW4gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gbGluZXMgMTIwLTE0MCBvZiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsb29rIGF0IHRoZSBjcml0aWNhbCBzZXR1cCBhbmQgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB0aGVyZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBwcm9jZXNzLiBJJ20gbG9va2luZyBmb3IgYW55IHVudXN1YWwgdHJpY2tzIG9yIGNvbnNpZGVyYXRpb25zIGZvciB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDMsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE2OjQwLjQyMzU4MzIyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFET1dfU1RBQ0spXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyZXR1cm4gMDtcXG4gMTI0OlxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0dW5zaWduZWQgbG9uZ1xcbiAxMjc6XFx0YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gMTI4OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiAxMzI6XFx0XFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XFxuIDEzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGJlZ2luLCBlbmQ7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1BUF9GSVhFRClcXG4gMTM2OlxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRmaW5kX3N0YXJ0X2VuZChhZGRyLCBmbGFncywgXFx1MDAyNmJlZ2luLCBcXHUwMDI2ZW5kKTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGVuZClcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoYWRkcikge1xcbiAxNDQ6XFx0XFx0XFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE2OjQwLjQyMzY1MDY5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjY1MTAyODYxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgT2Zmc2V0IGZvciBIdWdlcGFnZXMgaW4gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBmdW5jdGlvbnMuIEluaXRpYWxseSwgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O2AgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgaGFuZGxlIGBpbmZvLmFsaWduX29mZnNldGAgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgaHVnZXBhZ2VzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYC5cblxuQmVmb3JlIHRoZSBmaXgsIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCB3YXMgdHJ1ZSwgYGluZm8uYWxpZ25fb2Zmc2V0YCByZW1haW5lZCBhdCB6ZXJvIGFmdGVyIHRoZSBpbml0aWFsIHplcm8taW5pdGlhbGl6YXRpb24gKGxpbmVzIDE1NC0xNTcgd2VyZSBza2lwcGVkKS4gVGhlbiwgdGhlIGNvZGUgKmxhdGVyKiBhZGRlZCBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCAobGluZXMgMTU4LTE2MSkuIFRoZSBwYXRjaCBub3cgYWRkcyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gdGhlIGBpbmZvLmFsaWduX29mZnNldGAgb25seSBpZiB0aGUgZmlsZSBpcyAqbm90KiBhIGh1Z2VwYWdlLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiB0aGUgYml0cyBpbiB0aGF0IHNpdHVhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuMS4gIElzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlPyBTaW5jZSBgaW5mb2AgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBpdCBzZWVtcyB3ZSdyZSBzYWZlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciByZWFkIG9yIGxlYWtlZCwgc28gdGhhdCdzIGdvb2QuXG5cbjIuICBBcmUgd2UgY29weWluZyBhbnkgYnVmZmVycyB0byB1c2Vyc3BhY2U/IE5vLCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgcmV0dXJucyBvbmx5IGFuIGB1bnNpZ25lZCBsb25nIGFkZHJgLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBkaXJlY3QgbWVtb3J5IGxlYWtzIGhlcmUuXG5cbjMuICBDb3VsZCB0aGlzIGNoYW5nZSBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyBObywgdGhlIGRlY2lzaW9uIHRvIHNraXAgdGhlIGFsaWdubWVudCBhZGRpdGlvbiBpcyBiYXNlZCBvbiBgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgLCB3aGljaCBleGFtaW5lcyB0aGUgZmlsZSBwb2ludGVyL2ZpbGUgb3BlcmF0aW9ucyB3aGljaCBpcyBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS4gVGhhdCBzaG91bGRuJ3QgbGVhZCB0byBpc3N1ZXMuXG5cbjQuICBIb3cgZG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBvciBLQVNBTj8gS01TQU4gaXMgb3VyIGNvbmNlcm4sIGFzIGl0IGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gY2hhbmdlcyBpbnRyb2R1Y2VkIHRoYXQgbWFrZSBkYXRhIHVuaW5pdGlhbGl6ZWQgb3IgYWxsb3cgaXQgdG8gYmUgcmVhZCwgdGhlcmUncyBubyBLTVNBTiB3b3JyeSBoZXJlLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNhZmUgZml4LiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG5vIHVzZXItc3BhY2UgbGVha3MsIGFuZCBubyBjb250cm9sIGZsb3cgaXNzdWVzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiAqKk5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBmYWxzZS4qKiBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1NCwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxODo0Ni45MzM5Mzk0NjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cXG5cXG5JbiBib3RoIGZ1bmN0aW9ucywgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mb2AgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayB2aWEgYD0ge31gLiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBhbGlnbm1lbnQgY2FsY3VsYXRpb24gbG9naWMgZm9yIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgYWxsb2NhdGlvbiB3aXRob3V0IGFsbG9jYXRpbmcsIHJlYWRpbmcsIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXFxuXFxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-28 16:23:48 +0000 UTC FinishedAt: 2026-08-28 17:18:49 +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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "X86_64" ], "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": "d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS", "X86_64" ], "series_id": "601d230c-e34d-46d7-b3a5-1ff1535697ec" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "arch_get_unmapped_area", "arch_get_unmapped_area_topdown", "hugetlb_get_unmapped_area" ], "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+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MzBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtIVUdFVExCRlMmIzM0OywKICAgICYjMzQ7WDg2XzY0JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7LAogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24mIzM0OywKICAgICYjMzQ7aHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cblxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjggMTY6NDg6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcbmluZGV4IDc3NmFlNmZhN2YyZDYuLjZiMmJlMDY1MzA0ZjEgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5AQCAtMTU3LDcgJiM0MzsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuJiM0MztcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiYjNDM7XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbkBAIC0yMjIsNyAmIzQzOzIyMyw4IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiBcbiBcdGlmIChmaWxwKSB7XG4gXHRcdGluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApO1xuLVx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiYjNDM7XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4mIzQzO1x0XHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4yNW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDssCiAgICAmIzM0O1g4Nl82NCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWEmIzM0OywKICAgICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgeDg2LTY0IGFkZHJlc3MgYWxsb2NhdGlvbiBsb2dpYyBpbiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKCkgYW5kIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpIHRvIHByZXZlbnQgYXBwbHlpbmcgZ2V0X2FsaWduX2JpdHMoKSBvZmZzZXQgd2hlbiBtYXBwaW5nIEh1Z2VUTEIgZmlsZXMuIFRoaXMgYWx0ZXJzIG1tYXAgYWRkcmVzcyBzZWxlY3Rpb24gZm9yIGh1Z2V0bGJmcyBtYXBwaW5ncyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgbW1hcCBzeXNjYWxscy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCmluZGV4IDc3NmFlNmZhN2YyZDYuLjZiMmJlMDY1MzA0ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwpAQCAtMTU3LDcgJiM0MzsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLAogCX0KIAlpZiAoZmlscCkgewogCQlpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTsKLQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiYjNDM7CQlpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQomIzQzOwkJCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwogCX0KIAogCXJldHVybiB2bV91bm1hcHBlZF9hcmVhKCZhbXA7aW5mbyk7CkBAIC0yMjIsNyAmIzQzOzIyMyw4IEBAIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCwKIAogCWlmIChmaWxwKSB7CiAJCWluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApOwotCQlpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTsKJiM0MzsJCWlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpCiYjNDM7CQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiAJfQogCWFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKCZhbXA7aW5mbyk7CiAJaWYgKCEoYWRkciAmYW1wOyB+UEFHRV9NQVNLKSkKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI2NgoJCQkJCQkJb3V0cHV0OiA0NwoJCQkJCQkJdGhvdWdodHM6IDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkRpdmluZyBpbnRvIHRoZSBDb2RlIENoYW5nZSoqCgpPa2F5LCBzbyB3ZSBoYXZlIGEgcGF0Y2guIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGdldCBhIGhhbmRsZSBvbiBleGFjdGx5ICp3aGF0KiBpcyBiZWluZyBjaGFuZ2VkLiBUaGUgZGlmZiB0ZWxscyBtZSBpdCYjMzk7cyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gb24geDg2LTY0LCBteSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgY2hhbmdlcyBjYW4gaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEkmIzM5O20gZ29pbmcgdG8gbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoaXMgbW9kaWZpY2F0aW9uIHZlcnkgY2FyZWZ1bGx5LgoKVG8gZG8gdGhhdCwgSSYjMzk7bSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDE1MCB0byAyNDAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb2YgdGhlIGRpZmYuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjaGFuZ2VzIGluIHRoZSBhbGdvcml0aG0sIGFueSBuZXcgYXNzdW1wdGlvbnMgbWFkZSBhYm91dCB0aGUgYWRkcmVzcyBzcGFjZSwgYW5kIGFueSBwb3RlbnRpYWwgZWRnZSBjYXNlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQuIEl0JiMzOTtzIHRpbWUgdG8gZGl2ZSBpbiBhbmQgZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRpbmZvLmxlbmd0aCA9IGxlbjtcbiAxNTI6XHRcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XG4gMTUzOlx0XHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XG4gMTU0Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAxNTU6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAxNTY6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFx0aWYgKGZpbHApIHtcbiAxNTk6XHRcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4gMTYwOlx0XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gMTYxOlx0XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0dW5zaWduZWQgbG9uZ1xuIDE2ODpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiAxNjk6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3MDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xuIDE3NTpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTc2Olx0XG4gMTc3Olx0XHQvKiByZXF1ZXN0ZWQgbGVuZ3RoIHRvbyBiaWcgZm9yIGVudGlyZSBhZGRyZXNzIHNwYWNlICovXG4gMTc4Olx0XHRpZiAobGVuIFx1MDAzZSBUQVNLX1NJWkUpXG4gMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4MDpcdFxuIDE4MTpcdFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xuIDE4MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTgzOlx0XHRcdHJldHVybiBhZGRyO1xuIDE4NDpcdFxuIDE4NTpcdFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xuIDE4NjpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQXzMyQklUKSlcbiAxODc6XHRcdFx0Z290byBib3R0b211cDtcbiAxODg6XHRcbiAxODk6XHRcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXG4gMTkwOlx0XHRpZiAoYWRkcikge1xuIDE5MTpcdFx0XHRhZGRyIFx1MDAyNj0gUEFHRV9NQVNLO1xuIDE5MjpcdFx0XHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXG4gMTkzOlx0XHRcdFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xuIDE5NjpcdFx0XHRpZiAoIXZtYSB8fCBhZGRyICYjNDM7IGxlbiBcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxuIDE5NzpcdFx0XHRcdHJldHVybiBhZGRyO1xuIDE5ODpcdFx0fVxuIDE5OTpcdGdldF91bm1hcHBlZF9hcmVhOlxuIDIwMDpcdFxuIDIwMTpcdFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcbiAyMDI6XHRcdGluZm8ubGVuZ3RoID0gbGVuO1xuIDIwMzpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQX0FCT1ZFNEcpKVxuIDIwNDpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFNaXzRHO1xuIDIwNTpcdFx0ZWxzZVxuIDIwNjpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiAyMDc6XHRcbiAyMDg6XHRcdGluZm8uaGlnaF9saW1pdCA9IGdldF9tbWFwX2Jhc2UoMCk7XG4gMjA5Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAyMTA6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDIxMTpcdFx0XHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0LypcbiAyMTU6XHRcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcbiAyMTY6XHRcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXG4gMjE3Olx0XHQgKlxuIDIxODpcdFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXG4gMjE5Olx0XHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxuIDIyMDpcdFx0ICovXG4gMjIxOlx0XHRpZiAoYWRkciBcdTAwM2UgREVGQVVMVF9NQVBfV0lORE9XIFx1MDAyNlx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxuIDIyMjpcdFx0XHRpbmZvLmhpZ2hfbGltaXQgJiM0Mzs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZmlscCkge1xuIDIyNTpcdFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbiAyMjY6XHRcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAyMjc6XHRcdFx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuIDIzMDpcdFx0aWYgKCEoYWRkciBcdTAwMjYgflBBR0VfTUFTSykpXG4gMjMxOlx0XHRcdHJldHVybiBhZGRyO1xuIDIzMjpcdFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XG4gMjMzOlx0XG4gMjM0Olx0Ym90dG9tdXA6XG4gMjM1Olx0XHQvKlxuIDIzNjpcdFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxuIDIzNzpcdFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xuIDIzODpcdFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXG4gMjM5Olx0XHQgKiBhbGxvY2F0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTkyCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIEFsaWdubWVudCBMb2dpYyoqCgpPa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlc2UgYWxpZ25tZW50IGZ1bmN0aW9uczogYGdldF9hbGlnbl9tYXNrYCwgYGdldF9hbGlnbl9iaXRzYCwgYW5kIGBpc19maWxlX2h1Z2VwYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgbGFyZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gY2hlY2sgd2hhdCB0aGV5IGFyZSBkb2luZy4gTGV0JiMzOTtzIGZpbmQgdGhlaXIgZGVmaW5pdGlvbnMuIEdpdmVuIHRoZSBjb250ZXh0LCBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2Agc2VlbXMgbGlrZSBhIGxpa2VseSBjYW5kaWRhdGUgZm9yIGBnZXRfYWxpZ25fbWFza2AgYW5kIGBnZXRfYWxpZ25fYml0c2AsIHNvIEkmIzM5O2xsIHN0YXJ0IHRoZXJlLiBIb3BlZnVsbHksIHRoYXQgc2hvdWxkIHByb3ZpZGUgc29tZSBjbGFyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9hbGlnbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yOC0gKi9cbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX21hc2soc3RydWN0IGZpbGUgKmZpbHApXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTMwLXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTUyLSAqL1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzo1MzpzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fYml0cyh2b2lkKVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01NC17XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjU1Olx0cmV0dXJuIHZhX2FsaWduLmJpdHMgXHUwMDI2IGdldF9hbGlnbl9tYXNrKE5VTEwpO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01Ni19XG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xMjc9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE1OC1cdGlmIChmaWxwKSB7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjE1OTpcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2MC1cdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTYxOlx0XHRcdGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjItXHR9XG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjg9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxuLS1cbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMjI0LVx0aWYgKGZpbHApIHtcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MjI1Olx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMjI2LVx0XHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyMjc6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTIyOC1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MTQ4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGUgcHJvdmlkZWQgdGV4dCwgYXNzdW1pbmcgSSYjMzk7bSBhbiB4ODYtNjQga2VybmVsIGV4cGVydDoKCioqRGl2aW5nIGludG8geDg2LTY0IFN5c3RlbSBDYWxscyoqCgpPa2F5LCBzbyB0aGUgcHJvbXB0IGlzIGFza2luZyBtZSB0byBzdGFydCBieSBleGFtaW5pbmcgbGluZXMgMS03MCBvZiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGZpbGUgaXMgY3JpdGljYWwsIG9idmlvdXNseSwgYmVjYXVzZSBpdCBob3VzZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHg4Ni02NCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCBpdCBpcyB0aGUgY29yZSBvZiBob3cgdXNlciBzcGFjZSBpbnRlcmFjdHMgd2l0aCB0aGUga2VybmVsIG9uIHRoaXMgYXJjaGl0ZWN0dXJlLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgb24geDg2LTY0LCB0aGUgc3lzdGVtIGNhbGwgbWVjaGFuaXNtIGlzIGEgYml0IGRpZmZlcmVudCBmcm9tIHRoZSBvbGRlciAzMi1iaXQgdmVyc2lvbnMsIHByb2JhYmx5IGludm9sdmluZyB0aGUgYHN5c2NhbGxgIGluc3RydWN0aW9uLiBNeSBpbml0aWFsIGd1ZXNzIGlzIHRoYXQgdGhlIGJlZ2lubmluZyBvZiB0aGlzIGZpbGUgd2lsbCBpbmNsdWRlIHRoZSBzeXN0ZW0gY2FsbCB0YWJsZSBkZWZpbml0aW9uIGFuZCBzb21lIGxvdy1sZXZlbCBzZXR1cCBvciBlbnRyeSBwb2ludCBjb2RlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgY29kZSBpcyBpbmxpbmVkLCBvciBjYWxscyBhbm90aGVyIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGF0LmhcdTAwM2VcbiAgIDM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnJuby5oXHUwMDNlXG4gICA0Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuICAgNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAgIDY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNjYWxscy5oXHUwMDNlXG4gICA3Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICAgODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZzLmhcdTAwM2VcbiAgIDk6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zbXAuaFx1MDAzZVxuICAxMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlbS5oXHUwMDNlXG4gIDExOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbXNnLmhcdTAwM2VcbiAgMTI6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9zaG0uaFx1MDAzZVxuICAxMzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXQuaFx1MDAzZVxuICAxNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuICAxNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2ZpbGUuaFx1MDAzZVxuICAxNjpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3V0c25hbWUuaFx1MDAzZVxuICAxNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3BlcnNvbmFsaXR5LmhcdTAwM2VcbiAgMTg6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICAxOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3VhY2Nlc3MuaFx1MDAzZVxuICAyMDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2VsZi5oXHUwMDNlXG4gIDIxOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvaHVnZXRsYi5oXHUwMDNlXG4gIDIyOlx0XG4gIDIzOlx0I2luY2x1ZGUgXHUwMDNjYXNtL2VsZi5oXHUwMDNlXG4gIDI0Olx0I2luY2x1ZGUgXHUwMDNjYXNtL2lhMzIuaFx1MDAzZVxuICAyNTpcdFxuICAyNjpcdC8qXG4gIDI3Olx0ICogQWxpZ24gYSB2aXJ0dWFsIGFkZHJlc3MgdG8gYXZvaWQgYWxpYXNpbmcgaW4gdGhlIEkkIG9uIEFNRCBGMTVoLlxuICAyODpcdCAqL1xuICAyOTpcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9hbGlnbl9tYXNrKHN0cnVjdCBmaWxlICpmaWxwKVxuICAzMDpcdHtcbiAgMzE6XHRcdGlmIChmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAgMzI6XHRcdFx0cmV0dXJuIGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xuICAzMzpcdFx0LyogaGFuZGxlIDMyLSBhbmQgNjQtYml0IGNhc2Ugd2l0aCBhIHNpbmdsZSBjb25kaXRpb25hbCAqL1xuICAzNDpcdFx0aWYgKHZhX2FsaWduLmZsYWdzIFx1MDAzYyAwIHx8ICEodmFfYWxpZ24uZmxhZ3MgXHUwMDI2ICgyIC0gbW1hcF9pc19pYTMyKCkpKSlcbiAgMzU6XHRcdFx0cmV0dXJuIDA7XG4gIDM2Olx0XG4gIDM3Olx0XHRpZiAoIShjdXJyZW50LVx1MDAzZWZsYWdzIFx1MDAyNiBQRl9SQU5ET01JWkUpKVxuICAzODpcdFx0XHRyZXR1cm4gMDtcbiAgMzk6XHRcbiAgNDA6XHRcdHJldHVybiB2YV9hbGlnbi5tYXNrO1xuICA0MTpcdH1cbiAgNDI6XHRcbiAgNDM6XHQvKlxuICA0NDpcdCAqIFRvIGF2b2lkIGFsaWFzaW5nIGluIHRoZSBJJCBvbiBBTUQgRjE1aCwgdGhlIGJpdHMgZGVmaW5lZCBieSB0aGVcbiAgNDU6XHQgKiB2YV9hbGlnbi5iaXRzLCBbMTI6dXBwZXJfYml0KSwgYXJlIHNldCB0byBhIHJhbmRvbSB2YWx1ZSBpbnN0ZWFkIG9mXG4gIDQ2Olx0ICogemVyb2luZyB0aGVtLiBUaGlzIHJhbmRvbSB2YWx1ZSBpcyBjb21wdXRlZCBvbmNlIHBlciBib290LiBUaGlzIGZvcm1cbiAgNDc6XHQgKiBvZiBBU0xSIGlzIGtub3duIGFzIFwmIzM0O3Blci1ib290IEFTTFJcJiMzNDsuXG4gIDQ4Olx0ICpcbiAgNDk6XHQgKiBUbyBhY2hpZXZlIHRoaXMsIHRoZSByYW5kb20gdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGluZm8uYWxpZ25fb2Zmc2V0XG4gIDUwOlx0ICogdmFsdWUgYmVmb3JlIGNhbGxpbmcgdm1fdW5tYXBwZWRfYXJlYSgpIG9yIE9SZWQgZGlyZWN0bHkgdG8gdGhlXG4gIDUxOlx0ICogYWRkcmVzcy5cbiAgNTI6XHQgKi9cbiAgNTM6XHRzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fYml0cyh2b2lkKVxuICA1NDpcdHtcbiAgNTU6XHRcdHJldHVybiB2YV9hbGlnbi5iaXRzIFx1MDAyNiBnZXRfYWxpZ25fbWFzayhOVUxMKTtcbiAgNTY6XHR9XG4gIDU3Olx0XG4gIDU4Olx0c3RhdGljIGludCBfX2luaXQgY29udHJvbF92YV9hZGRyX2FsaWdubWVudChjaGFyICpzdHIpXG4gIDU5Olx0e1xuICA2MDpcdFx0LyogZ3VhcmQgYWdhaW5zdCBlbmFibGluZyB0aGlzIG9uIG90aGVyIENQVSBmYW1pbGllcyAqL1xuICA2MTpcdFx0aWYgKHZhX2FsaWduLmZsYWdzIFx1MDAzYyAwKVxuICA2MjpcdFx0XHRyZXR1cm4gMTtcbiAgNjM6XHRcbiAgNjQ6XHRcdGlmICgqc3RyID09IDApXG4gIDY1Olx0XHRcdHJldHVybiAxO1xuICA2NjpcdFxuICA2NzpcdFx0aWYgKCFzdHJjbXAoc3RyLCBcJiMzNDszMlwmIzM0OykpXG4gIDY4Olx0XHRcdHZhX2FsaWduLmZsYWdzID0gQUxJR05fVkFfMzI7XG4gIDY5Olx0XHRlbHNlIGlmICghc3RyY21wKHN0ciwgXCYjMzQ7NjRcJiMzNDspKVxuICA3MDpcdFx0XHR2YV9hbGlnbi5mbGFncyA9IEFMSUdOX1ZBXzY0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA4MTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIEh1Z2VwYWdlIEFsaWdubWVudCBCdWcqKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhpcyBjb2RlLiBJJiMzOTttIGZvY3VzaW5nIG9uIGxpbmVzIDE1NC0xNTcsIHNwZWNpZmljYWxseSBob3cgYGluZm8uYWxpZ25fb2Zmc2V0YCBpcyBoYW5kbGVkLiBJbml0aWFsbHksIHRoZSBjb2RlIGhhZCBhIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgc2VlbWVkIHByb2JsZW1hdGljIGZvciBodWdlcGFnZXMuIEl0IGxvb2tlZCBsaWtlLCBwcmV2aW91c2x5LCBgaW5mby5hbGlnbl9vZmZzZXRgIHdvdWxkIHN0YXJ0IGF0IHplcm8sIG9yIG5vdCBiZSBzZXQuIFRoZW4sIGBpbmZvLmFsaWduX21hc2tgIHdvdWxkIGJlIHNldCB0byB0aGUgaHVnZXBhZ2UgbWFzayAobGlrZSAyTUIpLiBUaGUgdHJvdWJsZXNvbWUgbGluZSB3YXMgYGluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpO2AuIFRoaXMgc3VnZ2VzdGVkIHRoYXQsIGZvciBodWdlcGFnZXMsIHdlIHdlcmUgKmFkZGluZyogYW4gb2Zmc2V0IG1lYW50IGZvciA0SyBwYWdlIGNhY2hlIGFsaWFzaW5nIG9uIEFNRCBCdWxsZG96ZXIvRjE1aCB0byB0aGUgaHVnZXBhZ2UgYWxpZ25tZW50LCBlZmZlY3RpdmVseSBicmVha2luZyB0aGUgYWxpZ25tZW50IG9yIGFkZGluZyBhbiB1bm5lY2Vzc2FyeSBvbmUuCgpNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHZtX3VubWFwcGVkX2FyZWFgIHVzZXMgYGFsaWduX21hc2tgIGFuZCBgYWxpZ25fb2Zmc2V0YCBmb3IgYWRkcmVzcyBhbGlnbm1lbnQuIFRoZSBvbGQgbG9naWMgY291bGQgbWVzcyB0aGlzIHVwLiBCdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIHByb2JsZW1hdGljIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCBpcyBieXBhc3NlZCBpZiBpdCAqaXMqIGEgaHVnZXBhZ2UsIHdoaWNoIGlzIGdvb2QuCgpTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoaXMgaXMgYm90aCByZWFjaGFibGUgYW5kIGZpeGluZyBhIHJlYWwgaXNzdWUuIEkga25vdyB0aGF0IGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgYXJlIHRoZSB4ODZfNjQgbW1hcCBhZGRyZXNzIHNlbGVjdGlvbiBmdW5jdGlvbnMuIFRoZXkmIzM5O3JlIGNhbGxlZCBldmVyeSB0aW1lIGBtbWFwYCBpcyBpbnZva2VkIG9uIHg4Nl82NCB0byBmaW5kIGFuIHVubWFwcGVkIGFyZWEuIFNpbmNlIGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWAgaXMgdHJ1ZSB3aGVuIG1tYXBpbmcgaHVnZXRsYmZzIGZpbGVzLCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoZXNlIGZ1bmN0aW9ucyBhcmUgaW5kZWVkIGNvcmUga2VybmVsIGZ1bmN0aW9ucyBvbiB4ODZfNjQgYW5kIGFyZSBhbHdheXMgaW52b2x2ZWQgaW4gdGhlIG1tYXAuIEluIHRoYXQgY2FzZSwgdGhpcyBsb2dpYyBpcyBjb3JlLiBJdCYjMzk7cyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGludm9rZXMgYG1tYXAoKWAgb24gaHVnZXRsYmZzIGZpbGVzIG9yIG9yZGluYXJ5IGZpbGVzLiBTbywgdGhpcyBmaXggaXMgaW1wb3J0YW50LgoKRmluYWxseSwgSSBuZWVkIHRvIGVzdGFibGlzaCBjb250ZXh0LiBJIGhhdmUgdG8gdmVyaWZ5IHRoYXQgdGhlIGNvbmZpZ3VyYXRpb24gYWxsb3dzIGBodWdldGxiZnNgLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzIG9yIGRvIGEgcXVpY2sgZ3JlcCBmb3IgYGlzX2ZpbGVfaHVnZXBhZ2VzYCB0byBiZSBzdXJlIHRoYXQgdGhlIGNvZGUgaXMgcmVsZXZhbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lzX2ZpbGVfaHVnZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTIxLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUyMy17XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MzItXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MzM6I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVx0XHRcdGZhbHNlXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MzQtc3RhdGljIGlubGluZSBzdHJ1Y3QgZmlsZSAqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwMjQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBIdWdlVExCIEhlYWRlcioqCgpPa2F5LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhpcy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgIGhlYWRlciBmaWxlLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBkZWZpbml0aW9uIHBvaW50IGZvciBIdWdlVExCIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSYjMzk7bSBnb2luZyB0byBsb29rIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA1MTkuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LCBhcyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGNvcmUgSHVnZVRMQiBvcGVyYXRpb25zIG1pZ2h0IHJlc2lkZSwgcHJvYmFibHkgc29tZSBraW5kIG9mIGRlZmluaXRpb24gb3Igc3RydWN0dXJlIHRoYXQgSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGluIG9yZGVyIHRvIHJlYXNvbiBhYm91dCB0aGlzIHNwZWNpZmljIGJlaGF2aW9yIEkmIzM5O20gdHJ5aW5nIHRvIGRlYnVnL21vZGlmeS91bmRlcnN0YW5kLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgdGhlcmUuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNTEwOlx0XHR1bnNpZ25lZCBpbnQgc2VhbHM7XG4gNTExOlx0fTtcbiA1MTI6XHRcbiA1MTM6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqSFVHRVRMQkZTX0koc3RydWN0IGlub2RlICppbm9kZSlcbiA1MTQ6XHR7XG4gNTE1Olx0XHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XG4gNTE2Olx0fVxuIDUxNzpcdFxuIDUxODpcdGV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XG4gNTE5Olx0c3RydWN0IGZpbGUgKmh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdCxcbiA1MjA6XHRcdFx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpO1xuIDUyMTpcdFxuIDUyMjpcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiA1MjM6XHR7XG4gNTI0Olx0XHRyZXR1cm4gZmlsZS1cdTAwM2VmX29wLVx1MDAzZWZvcF9mbGFncyBcdTAwMjYgRk9QX0hVR0VfUEFHRVM7XG4gNTI1Olx0fVxuIDUyNjpcdFxuIDUyNzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbiA1Mjg6XHR7XG4gNTI5Olx0XHRyZXR1cm4gSFVHRVRMQkZTX1NCKGktXHUwMDNlaV9zYiktXHUwMDNlaHN0YXRlO1xuIDUzMDpcdH1cbiA1MzE6XHQjZWxzZSAvKiAhQ09ORklHX0hVR0VUTEJGUyAqL1xuIDUzMjpcdFxuIDUzMzpcdCNkZWZpbmUgaXNfZmlsZV9odWdlcGFnZXMoZmlsZSlcdFx0XHRmYWxzZVxuIDUzNDpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxuIDUzNTpcdGh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdGZsYWcsXG4gNTM2Olx0XHRcdGludCBjcmVhdF9mbGFncywgaW50IHBhZ2Vfc2l6ZV9sb2cpXG4gNTM3Olx0e1xuIDUzODpcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7XG4gNTM5Olx0fVxuIDU0MDpcdFxuIDU0MTpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcbiA1NDI6XHR7XG4gNTQzOlx0XHRyZXR1cm4gTlVMTDtcbiA1NDQ6XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg3OTMKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlOgoKKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpZyBpbi4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIEhVR0VUTEJGUyBhcmUgZWl0aGVyIGdvaW5nIHRvIGJlIHR1Y2tlZCBhd2F5IGluIGBmcy9LY29uZmlnYCBvciwgbW9yZSBsaWtlbHksIG92ZXIgaW4gYG1tL0tjb25maWdgLiBJJiMzOTttIGxlYW5pbmcgdG93YXJkcyBgbW0vS2NvbmZpZ2AgYmVjYXVzZSBodWdlIHBhZ2VzIGFyZSBmdW5kYW1lbnRhbGx5IGFib3V0IG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgdGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBsaXZlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUsIGJ1dCBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBmcy9LY29uZmlnYCBqdXN0IHRvIGJlIHRob3JvdWdoLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBhdmFpbGFibGUga25vYnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTY6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhVR0VUTEJGUyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9LY29uZmlnPTI0Nz1jb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI0OS1cbmZzL0tjb25maWc6MjUwOm1lbnVjb25maWcgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI1MS1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwNDEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJiMzOTttIHdvcmtpbmcgd2l0aCwgdGhlIGxpa2VseSBzdXNwZWN0IGlzIGx1cmtpbmcgaW4gYGZzL0tjb25maWdgLiBBbmQsIGdpdmVuIHRoZSB0eXBpY2FsIG9yZ2FuaXphdGlvbiBvZiB0aGVzZSBLY29uZmlnIGZpbGVzLCBJJiMzOTttIGJldHRpbmcgdGhlIHJlbGV2YW50IHNlY3Rpb24gSSYjMzk7bSBhZnRlciBpcyBoYW5naW5nIGFyb3VuZCBsaW5lIDI1MC4gSXQmIzM5O3MgYSBzdGFydGluZyBwb2ludCwgYSByZWFzb25hYmxlIGp1bXBpbmctb2ZmIGxvY2F0aW9uLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBuZWVkIHRvIHVzZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciBxdWlja2x5IHJlZmluZSBteSBzZWFyY2guIFRoaXMgbGluZSBpcyBtb3N0IGxpa2VseSB0aGUgc3RhcnQgb2Ygd2hhdCBJJiMzOTttIGFmdGVyLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgdGhlIHJpZ2h0IHBsYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE2OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7bSBhbHJlYWR5IGRlZXAgaW50byB0aGlzIG1lbW9yeSBpc3N1ZSwgYW5kIEkmIzM5O3ZlIGdvdCBhIGdvb2QgaGFuZGxlIG9uIHRoZSBsaWtlbHkgc3VzcGVjdHMuIEJ1dCBJIGNhbiYjMzk7dCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBsZXZlbCBvZiBwZXJmb3JtYW5jZSBzY3J1dGlueS4gQmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIGNyb3NzLWNoZWNrIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGFzcGVjdCBvZiBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIG1pc2NvbmZpZ3VyYXRpb24gdGhlcmUgY291bGQgYmUgdGhlIHJvb3QgY2F1c2UsIG9yIGF0IGxlYXN0IGEgc2lnbmlmaWNhbnQgY29udHJpYnV0aW5nIGZhY3RvciwgdG8gd2hhdCBJJiMzOTttIHNlZWluZy4gTm8gcG9pbnQgd2FzdGluZyB0aW1lIGNoYXNpbmcgZG93biBjb21wbGV4IGludGVyYWN0aW9ucyBpZiB0aGUgYmFzaWNzIGFyZW4mIzM5O3QgcmlnaHQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgaHVnZSBwYWdlIHNldHRpbmdzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQl9QQUdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvc2gvbW0vS2NvbmZpZz0xMjk9Y2hvaWNlXG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzU6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0S1xuYXJjaC9zaC9tbS9LY29uZmlnLTEzNi1cdGJvb2wgXCYjMzQ7NjRrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xMzgtXG5hcmNoL3NoL21tL0tjb25maWc6MTM5OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8yNTZLXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVx0Ym9vbCBcJiMzNDsyNTZrQlwmIzM0O1xuLS1cbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDItXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDQtXHRib29sIFwmIzM0OzFNQlwmIzM0O1xuYXJjaC9zaC9tbS9LY29uZmlnLTE0NS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Ny1cdGJvb2wgXCYjMzQ7NE1CXCYjMzQ7XG4tLVxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cbmFyY2gvc2gvbW0vS2NvbmZpZzoxNTA6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzY0TUJcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNTEtXHRib29sIFwmIzM0OzY0TUJcJiMzNDtcbi0tXG5mcy9LY29uZmlnPTI2Mj1pZiBIVUdFVExCRlNcbmZzL0tjb25maWc6MjYzOmNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXG5mcy9LY29uZmlnLTI2NC1cdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuLS1cbmZzL0tjb25maWc9MjcxPWVuZGlmICMgSFVHRVRMQkZTXG5mcy9LY29uZmlnLTI3Mi1cbmZzL0tjb25maWc6MjczOmNvbmZpZyBIVUdFVExCX1BBR0VcbmZzL0tjb25maWctMjc0LVx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4tLVxuZnMvS2NvbmZpZy0yNzYtXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcbmZzL0tjb25maWctMjc4LVx0ZGVmX2Jvb2wgSFVHRVRMQl9QQUdFXG4tLVxubW0vS2NvbmZpZz02ODk9Y29uZmlnIEFSQ0hfSEFTX1BNRF9TT0ZUTEVBVkVTXG4tLVxubW0vS2NvbmZpZy02OTEtXG5tbS9LY29uZmlnOjY5Mjpjb25maWcgSFVHRVRMQl9QQUdFX1NJWkVfVkFSSUFCTEVcbm1tL0tjb25maWctNjkzLVx0ZGVmX2Jvb2wgblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNjo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ1MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBIdWdldGxiZnMgU3VwcG9ydCBpbiB0aGUgeDg2IEFyY2hpdGVjdHVyZSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCAob3Igbm90IHN1cHBvcnRlZCkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgY29uZmlndXJhdGlvbiBvcHRpb25zLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBhcmNoL3g4Ni9LY29uZmlnYCBmaWxlLiBUaGF0JiMzOTtzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zLiBJIG5lZWQgdG8gbG9vayBmb3IgYSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIHN5bWJvbCwgbGlrZWx5IHNvbWV0aGluZyBkaXJlY3RseSByZWxhdGVkIHRvIGBIVUdFVExCRlNgIGl0c2VsZiwgcG90ZW50aWFsbHkgYEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTYC4gT2YgY291cnNlLCBpdCYjMzk7cyBhbHNvIHdvcnRoIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGNvbnRyb2wgaHVnZXRsYmZzIGZlYXR1cmVzIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIG9uIHg4Ni4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkmIzM5O3JlIGludGVuZGVkIHRvIGJlIHVzZWQuIEkgZXhwZWN0IHRvIGZpbmQgc29tZSBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMgdGhlcmUgYXMgd2VsbCwgbWF5YmUgcmVsYXRpbmcgdG8gc3BlY2lmaWMgQ1BVIGZlYXR1cmVzLCBOVU1BIGNvbmZpZ3VyYXRpb25zLCBvciBvdGhlciBhcmNoaXRlY3R1cmFsIGNvbnNpZGVyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtBUkNIX1NVUFBPUlRTX0hVR0VUTEJGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTEyNS1cdHNlbGVjdCBBUkNIX1NVUFBPUlRTX0RFQlVHX1BBR0VBTExPQ1xuYXJjaC94ODYvS2NvbmZpZzoxMjY6XHRzZWxlY3QgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcbmFyY2gveDg2L0tjb25maWctMTI3LVx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1x0aWYgWDg2XzY0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwODU3CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIFVubWFwcGVkIEFyZWEgQWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZpbmRpbmcgdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbnMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgd2l0aGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQmIzM5O2xsIGluZmx1ZW5jZSB0aGVpciBzY29wZSBhbmQgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwgY2FuIHV0aWxpemUgdGhlbS4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgZGVmaW5pdGlvbiBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIHNwZWNpZmljYWxseSBsaW5lIDEyNSwgc2hvdWxkIGdpdmUgbWUgdGhlIGFuc3dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDMwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMjA6XHRcdGlmICh2bV9mbGFncyBcdTAwMjYgVk1fU0hBRE9XX1NUQUNLKVxuIDEyMTpcdFx0XHRyZXR1cm4gUEFHRV9TSVpFO1xuIDEyMjpcdFxuIDEyMzpcdFx0cmV0dXJuIDA7XG4gMTI0Olx0fVxuIDEyNTpcdFxuIDEyNjpcdHVuc2lnbmVkIGxvbmdcbiAxMjc6XHRhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIDEyODpcdFx0XHQgICAgICAgdW5zaWduZWQgbG9uZyBwZ29mZiwgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxMjk6XHR7XG4gMTMwOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXHUwMDNlbW07XG4gMTMxOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxMzI6XHRcdHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O1xuIDEzMzpcdFx0dW5zaWduZWQgbG9uZyBiZWdpbiwgZW5kO1xuIDEzNDpcdFxuIDEzNTpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTM2Olx0XHRcdHJldHVybiBhZGRyO1xuIDEzNzpcdFxuIDEzODpcdFx0ZmluZF9zdGFydF9lbmQoYWRkciwgZmxhZ3MsIFx1MDAyNmJlZ2luLCBcdTAwMjZlbmQpO1xuIDEzOTpcdFxuIDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjAyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTk1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgZm9yIEZ1enppbmcgRm9jdXMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgbWVudGlvbnMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYC4gVGhvc2UgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMsIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBjYWxsZWQgdGhyb3VnaCBgbW0tJmd0O2dldF91bm1hcHBlZF9hcmVhYCBvciBkaXJlY3RseSBgZ2V0X3VubWFwcGVkX2FyZWFgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLCBidXQgdGhlIHF1ZXN0aW9uIGlzLCBhcmUgdGhlc2UgZnVuY3Rpb25zICphY3R1YWxseSogaG90IHBhdGhzPyBUaGF0JiMzOTtzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRhcmdldGluZyB0aGVtIGZvciBmdXp6aW5nLgoKTXkgaW1tZWRpYXRlIG5leHQgdGhvdWdodCBpcyB0byByZXZpZXcgdGhlIGluc3RydWN0aW9ucy4gVGhlIGd1aWRhbmNlIGVtcGhhc2l6ZXMgZm9jdXNpbmcgZnV6emluZyBvbiBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgKnNob3VsZCogYmUgaGVhdmlseSBmdXp6ZWQsIHNvIEkgbmVlZCB0byBhdm9pZCBqdXN0IGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMsIG90aGVyd2lzZSB0aGUgdGVzdHMgd2lsbCBiZSBza2V3ZWQuIFRoZXkgc3VnZ2VzdCBnb2luZyBmb3Igbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzIHJhdGhlciB0aGFuIGludGVybmFsIHN0YXRpYyBoZWxwZXJzLCBiZWNhdXNlIHRoZSBoZWxwZXJzIGdldCBpbmxpbmVkLiBUaGlzIG1lYW5zIHRoZXkgd29uJiMzOTt0IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3Nlcy4KClNvLCBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBzeW1ib2xzIGluIHZtbGludXg/IFRoYXTigJlzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgZGVjbGFyZWQgYW5kIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2lnbmlmaWNhbmNlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhleSBhcmUgd29ydGggaW5jbHVkaW5nIGluIGBGb2N1c1N5bWJvbHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM9MTI2PXVuc2lnbmVkIGxvbmdcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTI3OmFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTEyOC1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXG4tLVxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjc9dW5zaWduZWQgbG9uZ1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoxNjg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjktXHRcdFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI0MC1cdCAqL1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyNDE6XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsIDApO1xuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yNDItfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjQ3OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRXhwbG9yaW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBhc3BlY3QgYWdhaW4uIEkmIzM5O3ZlIGJlZW4gZm9jdXNpbmcgb24gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBpdHMgcm9sZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIG1lYW4sIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFsIHdvcmtpbmdzIGlzIG9uZSB0aGluZywgYnV0IGtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byB0cmFjZSBpdHMgcmVmZXJlbmNlcyB0byBpZGVudGlmeSB0aGUga2V5IHN1YnN5c3RlbXMgb3IgYXJlYXMgdGhhdCBkZXBlbmQgb24gaXQuIFRoaXMgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwIHRvIG1hcCBvdXQgaXRzIHBsYWNlIGluIHRoZSBncmFuZCBzY2hlbWUgb2Yga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoZXJlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBpcyBiZWluZyBjYWxsZWQgdGhyb3VnaG91dCB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YXJjaF9nZXRfdW5tYXBwZWRfYXJlYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tbWFwLmM9NzM3PXVuc2lnbmVkIGxvbmdcbm1tL21tYXAuYzo3Mzg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbW1hcC5jLTczOS1cdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbm1tL21tYXAuYz04MDU9dW5zaWduZWQgbG9uZ1xubW0vbW1hcC5jOjgwNjphcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL21tYXAuYy04MDctXHRcdFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuLS1cbm1tL21tYXAuYz04MTU9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL21tYXAuYy04MTktXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cdTAwM2VtbSkpXG5tbS9tbWFwLmM6ODIwOlx0XHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsXG5tbS9tbWFwLmMtODIxLVx0XHRcdFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG5tbS9tbWFwLmM6ODIyOlx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkciwgbGVuLCBwZ29mZiwgZmxhZ3MsXG5tbS9tbWFwLmMtODIzLVx0XHRcdHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMDU1CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBJdHMgVXNhZ2UgaW4gaHVnZXRsYmZzKioKClJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGZ1bmN0aW9ucyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaHVnZSBwYWdlcyBmaWxlIHN5c3RlbSAoYGh1Z2V0bGJmc2ApIGxldmVyYWdlcyBpdC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZTogaXQmIzM5O3MgYWxsIGFib3V0IGZpbmRpbmcgYSBzdWl0YWJsZSwgdW5tYXBwZWQgcmVnaW9uIG9mIHZpcnR1YWwgYWRkcmVzcyBzcGFjZS4gQnV0IHRoZSBkZXRhaWxzLCB0aGUgbnVhbmNlcyBvZiB0aGUgaW1wbGVtZW50YXRpb24sIGFuZCBob3cgaXQmIzM5O3MgKnVzZWQqIGJ5IGEgc3BlY2lhbGl6ZWQgc3lzdGVtIGxpa2UgaHVnZXRsYmZzIGFyZSB3aGF0IEkgbmVlZCB0byBzb2xpZGlmeSBpbiBteSBtaW5kLgoKSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY2FsbCwganVzdCBmaW5kaW5nIHRoZSBnYXA/IE9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggY29uc2lkZXJhdGlvbnMsIHBlcmhhcHMgaW52b2x2aW5nIE5VTUEgYWZmaW5pdHkgb3IgcGFnZSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIGh1Z2UgcGFnZXM/IERvZXMgdGhlIHN5c3RlbSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IHJlZ2lvbnMsIHNoYXJlZCBtZW1vcnksIG9yIGFub255bW91cyBtYXBwaW5ncz8gSSYjMzk7bGwgcHJvYmFibHkgYmUgY2hlY2tpbmcgaG93IGBnZXRfdW5tYXBwZWRfYXJlYWAgaXRzZWxmIHdvcmtzLCBidXQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGBodWdldGxiZnNgIHNldHMgdXAgdGhlIHBhcmFtZXRlcnMgd2hlbiBjYWxsaW5nIGl0LiBXaGF0IGZsYWdzIGFyZSB1c2VkPyBBcmUgdGhlcmUgY3VzdG9tIGNvbnN0cmFpbnRzIGltcG9zZWQgb24gdGhlIHNlYXJjaD8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBmb3IgZnJhZ21lbnRhdGlvbiwgcGVyZm9ybWFuY2UsIGFuZCBvdmVyYWxsIG1lbW9yeSBtYW5hZ2VtZW50IGVmZmljaWVuY3k/IEEgZm9jdXNlZCBleGFtaW5hdGlvbiBvZiB0aGUgY29kZSBhcm91bmQgdGhhdCBmdW5jdGlvbiBjYWxsLCBjb25zaWRlcmluZyB0aGUgc3BlY2lmaWMgY29udGV4dCBvZiBodWdlIHBhZ2VzLCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2VycyBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE3Mj11bnNpZ25lZCBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNzM6aHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTc0LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6XHQuZ2V0X3VubWFwcGVkX2FyZWFcdD0gaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTItXHQubGxzZWVrXHRcdFx0PSBkZWZhdWx0X2xsc2Vlayxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaD01NDc9dW5zaWduZWQgbG9uZ1xuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTQ4Omh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTU0OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3MjkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEh1Z2VUTEIgRmlsZXN5c3RlbSBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGlub2RlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGdpdmVuIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdGhlIGNvcmUgaW5vZGUtcmVsYXRlZCBsb2dpYyB0byByZXNpZGUuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHN1Z2dlc3RzIHRoYXQgbGluZSAxNzMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsb3NlciBsb29rLiBUaGF0IGxpa2VseSBpbnZvbHZlcyBzb21lIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gd2hpY2ggd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE3MDpcdCAqL1xuIDE3MTpcdFxuIDE3MjpcdHVuc2lnbmVkIGxvbmdcbiAxNzM6XHRodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gMTc0Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3NTpcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIDE3NjpcdHtcbiAxNzc6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjAgPSAwO1xuIDE3ODpcdFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xuIDE3OTpcdFxuIDE4MDpcdFx0aWYgKGxlbiBcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKVxuIDE4MTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxODI6XHRcdGlmICgoZmxhZ3MgXHUwMDI2IE1BUF9GSVhFRCkgXHUwMDI2XHUwMDI2IChhZGRyIFx1MDAyNiB+aHVnZV9wYWdlX21hc2soaCkpKVxuIDE4MzpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAxODQ6XHRcdGlmIChhZGRyKVxuIDE4NTpcdFx0XHRhZGRyMCA9IEFMSUdOKGFkZHIsIGh1Z2VfcGFnZV9zaXplKGgpKTtcbiAxODY6XHRcbiAxODc6XHRcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXG4gMTg4Olx0XHRcdFx0XHRcdCAgICAgRU1QVFlfVk1BX0ZMQUdTKTtcbiAxODk6XHR9XG4gMTkwOlx0XG4gMTkxOlx0LypcbiAxOTI6XHQgKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXG4gMTkzOlx0ICogUmV0dXJucyB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgb25lIGNhbiByZWFkIHdpdGhvdXQgdG91Y2hpbmcgdGhlIDFzdCByYXdcbiAxOTQ6XHQgKiBIV1BPSVNPTiBwYWdlLlxuIDE5NTpcdCAqL1xuIDE5NjpcdHN0YXRpYyBzaXplX3QgYWRqdXN0X3JhbmdlX2h3cG9pc29uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHNpemVfdCBvZmZzZXQsXG4gMTk3Olx0XHRcdHNpemVfdCBieXRlcylcbiAxOTg6XHR7XG4gMTk5Olx0XHRzdHJ1Y3QgcGFnZSAqcGFnZSA9IGZvbGlvX3BhZ2UoZm9saW8sIG9mZnNldCAvIFBBR0VfU0laRSk7XG4gMjAwOlx0XHRzaXplX3Qgc2FmZV9ieXRlcztcbiAyMDE6XHRcbiAyMDI6XHRcdGlmIChpc19yYXdfaHdwb2lzb25fcGFnZV9pbl9odWdlcGFnZShwYWdlKSlcbiAyMDM6XHRcdFx0cmV0dXJuIDA7XG4gMjA0Olx0XHQvKiBTYWZlIHRvIHJlYWQgdGhlIHJlbWFpbmluZyBieXRlcyBpbiB0aGlzIHBhZ2UuICovXG4gMjA1Olx0XHRzYWZlX2J5dGVzID0gUEFHRV9TSVpFIC0gKG9mZnNldCAlIFBBR0VfU0laRSk7XG4gMjA2Olx0XHRwYWdlJiM0MzsmIzQzOztcbiAyMDc6XHRcbiAyMDg6XHRcdC8qIENoZWNrIGVhY2ggcmVtYWluaW5nIHBhZ2UgYXMgbG9uZyBhcyB3ZSBhcmUgbm90IGRvbmUgeWV0LiAqL1xuIDIwOTpcdFx0Zm9yICg7IHNhZmVfYnl0ZXMgXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICYjNDM7PSBQQUdFX1NJWkUsIHBhZ2UmIzQzOyYjNDM7KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDU4MQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSHVnZVRMQiBtbWFwIEJlaGF2aW9yKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBob3cgYG1tYXBgIGludGVyYWN0cyB3aXRoIGh1Z2V0bGJmcyBmaWxlcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB0aGUgYG1tYXBgIGNhbGwgZG93biBpbnRvIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgcmVsYXRlZCB0byBhbGlnbm1lbnQuCgpTbywgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGtpY2tzIHRoaW5ncyBvZmYgYW5kLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgY2FsbGluZyBgbW1fZ2V0X3VubWFwcGVkX2FyZWFfdm1hZmxhZ3NgIHdoaWNoIHRoZW4gaGFuZHMgdGhpbmdzIHRvIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIG9yIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCwgcGFzc2luZyB0aGUgZmlsZSBwb2ludGVyIChgZmlscGApLiBUaGlzIHNlZW1zIHN0YW5kYXJkLgoKTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydC4gSW5zaWRlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCAoYW5kIHRoZSB0b3AtZG93biB2YXJpYW50KSwgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCBpcyBnZXR0aW5nIGV2YWx1YXRlZC4gR29vZC4gVGhpcyBpcyB0aGUga2V5LiBBbmQsIG5hdHVyYWxseSwgZm9yIGEgaHVnZXRsYmZzIGZpbGUsIHRoaXMgZXZhbHVhdGVzIHRvIGB0cnVlYC4KCkkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYSBwYXRjaCBwcmV2aW91c2x5IGFkZGVkIGBnZXRfYWxpZ25fYml0cygpYCB0byBgaW5mby5hbGlnbl9vZmZzZXRgLiBCdXQgbm93LCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsLiBUaGUgY29kZSAqbm93KiBjaGVja3MgYGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpYC4gVGhpcyBtZWFucywgYW5kIGl0JiMzOTtzIGltcG9ydGFudCB0byBiZSBleHBsaWNpdCwgdGhhdCBmb3IgYSBodWdldGxiZnMgZmlsZSAoYGZpbHBgKSwgdGhlIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCAqaXMgc2tpcHBlZCouIGBpbmZvLmFsaWduX29mZnNldGAgd2lsbCAqKm5vdCoqIGJlIG1vZGlmaWVkLCB3aGljaCBjaGFuZ2VzIHRoZSBvdXRjb21lIG9mIHRoZSBhbGlnbm1lbnQgY2FsY3VsYXRpb24hCgpPa2F5LCBzbyBJIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiB0aGUgY29kZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIHNvbWV0aGluZyBvYnZpb3VzLCBsaWtlIGEgcmVxdWlyZWQgY29uZmlndXJhdGlvbiBvcHRpb24uIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGJ1aWxkIHByb2Nlc3MgZm9yIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYC4gSSBleHBlY3QgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCB0aGUgdG9wZG93biB2ZXJzaW9uLCBhcmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaG93IGBzeXNfeDg2XzY0Lm9gIGlzIGJ1aWx0LiBPZmYgdG8gYGFyY2gveDg2L2tlcm5lbC9NYWtlZmlsZWAgdG8gY2hlY2sgZm9yIGFueSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBmbGFncyBvciBidWlsZCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5c194ODZfNjQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rZXJuZWwvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZT04MD1vYmotJChDT05GSUdfSUEzMl9FTVVMQVRJT04pXHQmIzQzOz0gc3lzX2lhMzIubyBzaWduYWxfMzIub1xuYXJjaC94ODYva2VybmVsL01ha2VmaWxlOjgxOm9iai0kKENPTkZJR19YODZfNjQpXHQmIzQzOz0gc3lzX3g4Nl82NC5vXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX1g4Nl9FU1BGSVg2NClcdCYjNDM7PSBlc3BmaXhfNjQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNQoJCQkJCQkJb3V0cHV0OiAxNTgKCQkJCQkJCXRob3VnaHRzOiA2NjEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgRnV6emluZyBXb3J0aGluZXNzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0aGlua2luZyBhYm91dCBpdHMgZnV6emluZyBwb3RlbnRpYWwuIFdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYHN5c194ODZfNjQub2Agd2hpY2ggaXMgYnVpbHQgd2l0aCBgQ09ORklHX1g4Nl82NGAsIGFuZCB3ZSBoYXZlIGBIVUdFVExCRlNgIGVuYWJsZWQgdGhyb3VnaCBgQ09ORklHX0hVR0VUTEJGU2AgZm9yIGh1Z2V0bGJmcyBzdXBwb3J0LiAgRmlyc3QsIGxldCBtZSBjb25maXJtIHRoZXJlIGFyZSBubyBvdGhlciBjcnVjaWFsIGNvbmZpZ3VyYXRpb25zIGF0IHBsYXkgaGVyZS4KCkkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgJiMzNDtXb3J0aEZ1enppbmcmIzM0Oy4gIExldCYjMzk7cyBydW4gdGhyb3VnaCB0aGUgY3JpdGVyaWEuIEl0IGxvb2tzIGxpa2UgaXQgZG9lc24mIzM5O3QgaW52b2x2ZSBjaGFuZ2VzIHRvIGRvY3VtZW50YXRpb24sIEtjb25maWcsIG9yIGNvbW1lbnRzLiBJdCYjMzk7cyBub3QganVzdCBjb3NtZXRpYyBsaWtlIGxvZ2dpbmcsIG5vciBkb2VzIGl0IGFsdGVyIGFueSBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgaW4gYSBub24tZnVuY3Rpb25hbCB3YXkuIE5vdywgaGVyZSYjMzk7cyB3aGVyZSBpdCBnZXRzIGludGVyZXN0aW5nOiB0aGUgcGF0Y2ggYWRkcmVzc2VzIGNvZGUgcGF0aHMgaW4gUUVNVS94ODZfNjQgdXNlciBzcGFjZSB0aHJvdWdoIHRoZSBgbW1hcGAgc3lzY2FsbCBvbiBodWdldGxiZnMsIHNvIGl0JiMzOTtzICpub3QqIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiAgVGhpcyBlbGltaW5hdGVzIHRoZSBsYXN0IHBvaW50LiBUaGVyZWZvcmUsIGBXb3J0aEZ1enppbmdgIHNlZW1zIHRvIGJlIGB0cnVlYCEKClNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29yZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChpbiBgYXJjaC9tbWApIGR1cmluZyBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gd2hlbiBtYXBwaW5nIGh1Z2V0bGJmcyBmaWxlcyBvbiB4ODZfNjQuIEl0IGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYGFsaWduX29mZnNldGAgY29ycnVwdGlvbiBvciBiaWFzLCB3aGVuIG1hcHBpbmcgaHVnZXRsYiBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZnVuY3Rpb25hbCwgYW5kICp3b3J0aCogZnV6emluZy4KCk15IHByaW1hcnkgZm9jdXMgc3ltYm9scyBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgLCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCwgYW5kIGBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhlc2UgYXJlIGFjdHVhbGx5IHVzYWJsZTogYW5kIHllcywgYWZ0ZXIgYSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIGNvZGUsIHRoZXkgYXJlIG5vbi1zdGF0aWMgYW5kIGV4cG9zZWQgZm9yIHRoZSBzeXN0ZW0gdG8gdXNlOiBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIGFyZSBub24tc3RhdGljIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCwgYW5kIGBodWdldGxiX2dldF91bm1hcHBlZF9hcmVhYCBpcyBhbHNvIG5vbi1zdGF0aWMgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4KCkZpbmFsbHksIGp1c3QgdG8gYmUgc3VyZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBYODZfNjRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgdmFsaWQsIGBIVUdFVExCRlNgIGVuYWJsZXMgdGhlIGh1Z2V0bGIgZmlsZXN5c3RlbSBhbmQgYWxsb3dzIGBpc19maWxlX2h1Z2VwYWdlcygpYCB0byByZXR1cm4gdHJ1ZS4gYFg4Nl82NGAgZW5hYmxlcyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEFsbCBjbGVhciEKCk9rYXksIHRpbWUgdG8gZG91YmxlLWNoZWNrIGV2ZXJ5dGhpbmcgb25lIGxhc3QgdGltZS4gSSYjMzk7bSByZWFkeSB0byBwcmVwYXJlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93biYjMzQ7LAogICAgJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7LAogICAgJiMzNDtYODZfNjQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthcmNoX2dldF91bm1hcHBlZF9hcmVhJiMzNDssCiAgICAmIzM0O2FyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93biYjMzQ7LAogICAgJiMzNDtodWdldGxiX2dldF91bm1hcHBlZF9hcmVhJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjRtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTQ8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXG5cbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjggMTY6NDg6MzUgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYwppbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMKQEAgLTE1Nyw3ICYjNDM7MTU3LDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbiwKIAl9CiAJaWYgKGZpbHApIHsKIAkJaW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7Ci0JCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwomIzQzOwkJaWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkKJiM0MzsJCQlpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTsKIAl9CiAKIAlyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYSgmYW1wO2luZm8pOwpAQCAtMjIyLDcgJiM0MzsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsCiAKIAlpZiAoZmlscCkgewogCQlpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTsKLQkJaW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7CiYjNDM7CQlpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKQomIzQzOwkJCWluZm8uYWxpZ25fb2Zmc2V0ICYjNDM7PSBnZXRfYWxpZ25fYml0cygpOwogCX0KIAlhZGRyID0gdm1fdW5tYXBwZWRfYXJlYSgmYW1wO2luZm8pOwogCWlmICghKGFkZHIgJmFtcDsgflBBR0VfTUFTSykpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMjYzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBob3cgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGNvZGUgY2hhbmdlOgoKKipBbmFseXppbmcgdGhlIHg4Ni02NCBBcmNoaXRlY3R1cmUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKQWxyaWdodCwgSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7TGV0JiMzOTtzIGdyYWIgdGhlIHVzdWFsIHRvb2xzLiYjMzQ7IFRoYXQgbWVhbnMgSSYjMzk7bSBmaXJpbmcgdXAgbXkgZGlmZiB2aWV3ZXJzIGFuZCB3aGF0ZXZlciBzdGF0aWMgYW5hbHlzaXMgSSBoYXZlIGF0IGhhbmQgdG8gc2VlIHdoYXQgd2UmIzM5O3JlIHJlYWxseSBkZWFsaW5nIHdpdGguIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBTbywgbXkgbWluZCBpbW1lZGlhdGVseSBqdW1wcyB0byBtZW1vcnkgYWxsb2NhdGlvbiwgc3BlY2lmaWNhbGx5IHVzZXItc3BhY2UgYWRkcmVzcyBzcGFjZSBhbGxvY2F0aW9uIG9uIHRoZSB4ODYtNjQgYXJjaGl0ZWN0dXJlLgoKTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgYW5kIHN0YXJ0IHJlYWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3ZXJlIHRoZXNlIGZ1bmN0aW9ucyAqZG9pbmcqIGJlZm9yZSwgYW5kIHdoYXQgYXJlIHRoZXkgKmRvaW5nKiBub3c/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWd5LCB0aGUgYXZhaWxhYmxlIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSYjMzk7bSBsb29raW5nIGZvciB3aGVyZSB0aGlzIGNoYW5nZSB0b3VjaGVzIHRoZSBhZGRyZXNzIHNwYWNlIGxheW91dCwgYW5kIGFueSBpbnRlcmFjdGlvbnMgd2l0aCB0aGluZ3MgbGlrZSBBU0xSLCBvciBvdGhlciBzZWN1cml0eSBoYXJkZW5pbmcuIEkmIzM5O2xsIGJlIHNjcnV0aW5pemluZyB0aGUgbG9naWMsIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBidWdzIG9yIHZ1bG5lcmFiaWxpdGllcyByZWxhdGVkIHRvIGFkZHJlc3Mgc3BhY2UgbGVha3MsIG9yIHBvc3NpYmx5IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVzLiBUaGF0JiMzOTtzIG15IGluaXRpYWwgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDE0MDpcdFx0aWYgKGxlbiBcdTAwM2UgZW5kKVxuIDE0MTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbiAxNDI6XHRcbiAxNDM6XHRcdGlmIChhZGRyKSB7XG4gMTQ0Olx0XHRcdGFkZHIgPSBQQUdFX0FMSUdOKGFkZHIpO1xuIDE0NTpcdFx0XHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XG4gMTQ2Olx0XHRcdGlmIChlbmQgLSBsZW4gXHUwMDNlPSBhZGRyIFx1MDAyNlx1MDAyNlxuIDE0NzpcdFx0XHQgICAgKCF2bWEgfHwgYWRkciAmIzQzOyBsZW4gXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSkpXG4gMTQ4Olx0XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTQ5Olx0XHR9XG4gMTUwOlx0XG4gMTUxOlx0XHRpbmZvLmxlbmd0aCA9IGxlbjtcbiAxNTI6XHRcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XG4gMTUzOlx0XHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XG4gMTU0Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAxNTU6XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAxNTY6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDE1NzpcdFx0fVxuIDE1ODpcdFx0aWYgKGZpbHApIHtcbiAxNTk6XHRcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4gMTYwOlx0XHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4gMTYxOlx0XHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgJiM0Mzs9IGdldF9hbGlnbl9iaXRzKCk7XG4gMTYyOlx0XHR9XG4gMTYzOlx0XG4gMTY0Olx0XHRyZXR1cm4gdm1fdW5tYXBwZWRfYXJlYShcdTAwMjZpbmZvKTtcbiAxNjU6XHR9XG4gMTY2Olx0XG4gMTY3Olx0dW5zaWduZWQgbG9uZ1xuIDE2ODpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcbiAxNjk6XHRcdFx0XHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxuIDE3MDpcdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcbiAxNzE6XHR7XG4gMTcyOlx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNzM6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xuIDE3NTpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTc2Olx0XG4gMTc3Olx0XHQvKiByZXF1ZXN0ZWQgbGVuZ3RoIHRvbyBiaWcgZm9yIGVudGlyZSBhZGRyZXNzIHNwYWNlICovXG4gMTc4Olx0XHRpZiAobGVuIFx1MDAzZSBUQVNLX1NJWkUpXG4gMTc5Olx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE4MDpcdFxuIDE4MTpcdFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xuIDE4MjpcdFx0aWYgKGZsYWdzIFx1MDAyNiBNQVBfRklYRUQpXG4gMTgzOlx0XHRcdHJldHVybiBhZGRyO1xuIDE4NDpcdFxuIDE4NTpcdFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xuIDE4NjpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQXzMyQklUKSlcbiAxODc6XHRcdFx0Z290byBib3R0b211cDtcbiAxODg6XHRcbiAxODk6XHRcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXG4gMTkwOlx0XHRpZiAoYWRkcikge1xuIDE5MTpcdFx0XHRhZGRyIFx1MDAyNj0gUEFHRV9NQVNLO1xuIDE5MjpcdFx0XHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXG4gMTkzOlx0XHRcdFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcbiAxOTQ6XHRcbiAxOTU6XHRcdFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xuIDE5NjpcdFx0XHRpZiAoIXZtYSB8fCBhZGRyICYjNDM7IGxlbiBcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxuIDE5NzpcdFx0XHRcdHJldHVybiBhZGRyO1xuIDE5ODpcdFx0fVxuIDE5OTpcdGdldF91bm1hcHBlZF9hcmVhOlxuIDIwMDpcdFxuIDIwMTpcdFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcbiAyMDI6XHRcdGluZm8ubGVuZ3RoID0gbGVuO1xuIDIwMzpcdFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXHUwMDI2XHUwMDI2IChmbGFncyBcdTAwMjYgTUFQX0FCT1ZFNEcpKVxuIDIwNDpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFNaXzRHO1xuIDIwNTpcdFx0ZWxzZVxuIDIwNjpcdFx0XHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcbiAyMDc6XHRcbiAyMDg6XHRcdGluZm8uaGlnaF9saW1pdCA9IGdldF9tbWFwX2Jhc2UoMCk7XG4gMjA5Olx0XHRpZiAoIShmaWxwIFx1MDAyNlx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcbiAyMTA6XHRcdFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xuIDIxMTpcdFx0XHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUO1xuIDIxMjpcdFx0fVxuIDIxMzpcdFxuIDIxNDpcdFx0LypcbiAyMTU6XHRcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcbiAyMTY6XHRcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXG4gMjE3Olx0XHQgKlxuIDIxODpcdFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXG4gMjE5Olx0XHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxuIDIyMDpcdFx0ICovXG4gMjIxOlx0XHRpZiAoYWRkciBcdTAwM2UgREVGQVVMVF9NQVBfV0lORE9XIFx1MDAyNlx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxuIDIyMjpcdFx0XHRpbmZvLmhpZ2hfbGltaXQgJiM0Mzs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XG4gMjIzOlx0XG4gMjI0Olx0XHRpZiAoZmlscCkge1xuIDIyNTpcdFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbiAyMjY6XHRcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbiAyMjc6XHRcdFx0XHRpbmZvLmFsaWduX29mZnNldCAmIzQzOz0gZ2V0X2FsaWduX2JpdHMoKTtcbiAyMjg6XHRcdH1cbiAyMjk6XHRcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuIDIzMDpcdFx0aWYgKCEoYWRkciBcdTAwMjYgflBBR0VfTUFTSykpXG4gMjMxOlx0XHRcdHJldHVybiBhZGRyO1xuIDIzMjpcdFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XG4gMjMzOlx0XG4gMjM0Olx0Ym90dG9tdXA6XG4gMjM1Olx0XHQvKlxuIDIzNjpcdFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxuIDIzNzpcdFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xuIDIzODpcdFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXG4gMjM5Olx0XHQgKiBhbGxvY2F0aW9ucy5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjggMTc6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0MwoJCQkJCQkJb3V0cHV0OiA0NgoJCQkJCQkJdGhvdWdodHM6IDUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgSW5pdGlhbGl6YXRpb24gaW4geDg2XzY0KioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhlIHg4Nl82NCBzeXN0ZW0gY2FsbCBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBgaW5mb2AgdmFyaWFibGUgaXMgaW5pdGlhbGl6ZWQgd2l0aGluIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYC4gU28sIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCB0byBsaW5lcyAxMjAtMTQwIG9mIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGxvb2sgYXQgdGhlIGNyaXRpY2FsIHNldHVwIGFuZCBpbml0aWFsaXphdGlvbiBwaGFzZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB0aGVyZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBwcm9jZXNzLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIHRyaWNrcyBvciBjb25zaWRlcmF0aW9ucyBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBsYXRmb3JtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yOCAxNzoxNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDEyMDpcdFx0aWYgKHZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFET1dfU1RBQ0spXG4gMTIxOlx0XHRcdHJldHVybiBQQUdFX1NJWkU7XG4gMTIyOlx0XG4gMTIzOlx0XHRyZXR1cm4gMDtcbiAxMjQ6XHR9XG4gMTI1Olx0XG4gMTI2Olx0dW5zaWduZWQgbG9uZ1xuIDEyNzpcdGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBsZW4sXG4gMTI4Olx0XHRcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxuIDEyOTpcdHtcbiAxMzA6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gY3VycmVudC1cdTAwM2VtbTtcbiAxMzE6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDEzMjpcdFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XG4gMTMzOlx0XHR1bnNpZ25lZCBsb25nIGJlZ2luLCBlbmQ7XG4gMTM0Olx0XG4gMTM1Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE1BUF9GSVhFRClcbiAxMzY6XHRcdFx0cmV0dXJuIGFkZHI7XG4gMTM3Olx0XG4gMTM4Olx0XHRmaW5kX3N0YXJ0X2VuZChhZGRyLCBmbGFncywgXHUwMDI2YmVnaW4sIFx1MDAyNmVuZCk7XG4gMTM5Olx0XG4gMTQwOlx0XHRpZiAobGVuIFx1MDAzZSBlbmQpXG4gMTQxOlx0XHRcdHJldHVybiAtRU5PTUVNO1xuIDE0MjpcdFxuIDE0MzpcdFx0aWYgKGFkZHIpIHtcbiAxNDQ6XHRcdFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ4NTQKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogNTI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQWxpZ25tZW50IE9mZnNldCBmb3IgSHVnZXBhZ2VzIGluIE1lbW9yeSBNYXBwaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBmdW5jdGlvbnMuIEluaXRpYWxseSwgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O2AgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgaGFuZGxlIGBpbmZvLmFsaWduX29mZnNldGAgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgaHVnZXBhZ2VzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYC4KCkJlZm9yZSB0aGUgZml4LCB0aGVyZSB3YXMgYSBwb3RlbnRpYWwgaXNzdWUuIElmIGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWAgd2FzIHRydWUsIGBpbmZvLmFsaWduX29mZnNldGAgcmVtYWluZWQgYXQgemVybyBhZnRlciB0aGUgaW5pdGlhbCB6ZXJvLWluaXRpYWxpemF0aW9uIChsaW5lcyAxNTQtMTU3IHdlcmUgc2tpcHBlZCkuIFRoZW4sIHRoZSBjb2RlICpsYXRlciogYWRkZWQgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgKGxpbmVzIDE1OC0xNjEpLiBUaGUgcGF0Y2ggbm93IGFkZHMgYGdldF9hbGlnbl9iaXRzKClgIHRvIHRoZSBgaW5mby5hbGlnbl9vZmZzZXRgIG9ubHkgaWYgdGhlIGZpbGUgaXMgKm5vdCogYSBodWdlcGFnZSwgZWZmZWN0aXZlbHkgcHJldmVudGluZyB0aGUgYWRkaXRpb24gb2YgdGhlIGJpdHMgaW4gdGhhdCBzaXR1YXRpb24uCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyBhYm91dCB1bmluaXRpYWxpemVkIG1lbW9yeS4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCjEuICBJcyB0aGVyZSBhIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYmVpbmcgcmVhZCwgd3JpdHRlbiwgb3IgbGVha2VkIHRvIHVzZXJzcGFjZT8gU2luY2UgYGluZm9gIGlzIHplcm8taW5pdGlhbGl6ZWQsIGFuZCB0aGlzIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMsIGl0IHNlZW1zIHdlJiMzOTtyZSBzYWZlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciByZWFkIG9yIGxlYWtlZCwgc28gdGhhdCYjMzk7cyBnb29kLgoKMi4gIEFyZSB3ZSBjb3B5aW5nIGFueSBidWZmZXJzIHRvIHVzZXJzcGFjZT8gTm8sIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCByZXR1cm5zIG9ubHkgYW4gYHVuc2lnbmVkIGxvbmcgYWRkcmAsIHNvIHdlIGRvbiYjMzk7dCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBkaXJlY3QgbWVtb3J5IGxlYWtzIGhlcmUuCgozLiAgQ291bGQgdGhpcyBjaGFuZ2UgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YT8gTm8sIHRoZSBkZWNpc2lvbiB0byBza2lwIHRoZSBhbGlnbm1lbnQgYWRkaXRpb24gaXMgYmFzZWQgb24gYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCwgd2hpY2ggZXhhbWluZXMgdGhlIGZpbGUgcG9pbnRlci9maWxlIG9wZXJhdGlvbnMgd2hpY2ggaXMgaW5pdGlhbGl6ZWQga2VybmVsIGRhdGEuIFRoYXQgc2hvdWxkbiYjMzk7dCBsZWFkIHRvIGlzc3Vlcy4KCjQuICBIb3cgZG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBvciBLQVNBTj8gS01TQU4gaXMgb3VyIGNvbmNlcm4sIGFzIGl0IGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gY2hhbmdlcyBpbnRyb2R1Y2VkIHRoYXQgbWFrZSBkYXRhIHVuaW5pdGlhbGl6ZWQgb3IgYWxsb3cgaXQgdG8gYmUgcmVhZCwgdGhlcmUmIzM5O3Mgbm8gS01TQU4gd29ycnkgaGVyZS4KClNvLCBpbiBzdW1tYXJ5LCB0aGlzIHBhdGNoIGlzIGEgc2FmZSBmaXguIFRoZXJlJiMzOTtzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG5vIHVzZXItc3BhY2UgbGVha3MsIGFuZCBubyBjb250cm9sIGZsb3cgaXNzdWVzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiAqKk5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBmYWxzZS4qKiBJJiMzOTttIGNvbmZpZGVudCBpbiB0aGlzIGFzc2Vzc21lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI4IDE3OjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cblxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXG5cbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo0ODozNy4wODUxMTYzMDVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA5ODQ4ODU3NjkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiLFxuICAgIFwiWDg2XzY0XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYXJjaF9nZXRfdW5tYXBwZWRfYXJlYVwiLFxuICAgIFwiYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duXCIsXG4gICAgXCJodWdldGxiX2dldF91bm1hcHBlZF9hcmVhXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXFxuXFxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgeDg2LTY0IGFkZHJlc3MgYWxsb2NhdGlvbiBsb2dpYyBpbiBhcmNoX2dldF91bm1hcHBlZF9hcmVhKCkgYW5kIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpIHRvIHByZXZlbnQgYXBwbHlpbmcgZ2V0X2FsaWduX2JpdHMoKSBvZmZzZXQgd2hlbiBtYXBwaW5nIEh1Z2VUTEIgZmlsZXMuIFRoaXMgYWx0ZXJzIG1tYXAgYWRkcmVzcyBzZWxlY3Rpb24gZm9yIGh1Z2V0bGJmcyBtYXBwaW5ncyBhbmQgaXMgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgbW1hcCBzeXNjYWxscy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NDg6MzcuMDg1MTI1MDg1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMwODQ3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzODAxZGM2NTZjOGMwMDM2MGRmY2M2MzQ0YjAzNGFkOTcxZjBkNmVlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDI4IDE2OjQ4OjM1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXFxuaW5kZXggNzc2YWU2ZmE3ZjJkNi4uNmIyYmUwNjUzMDRmMSAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXFxuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xcbkBAIC0xNTcsNyArMTU3LDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gXFx0fVxcbiBcXHRpZiAoZmlscCkge1xcbiBcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG4tXFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4rXFx0XFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcXG4rXFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbkBAIC0yMjIsNyArMjIzLDggQEAgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbiBcXG4gXFx0aWYgKGZpbHApIHtcXG4gXFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuLVxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuK1xcdFxcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXFxuK1xcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuIFxcdH1cXG4gXFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiBcXHRpZiAoIShhZGRyIFxcdTAwMjYgflBBR0VfTUFTSykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjQ4OjM3LjU2OTE0MjE5MloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTU0Mjc5Mjk2OTM3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93blwiLFxuICAgIFwiaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5pbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuQEAgLTE1Nyw3ICsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XG4rXHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4rXHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTIyMiw3ICsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXG4gXG4gXHRpZiAoZmlscCkge1xuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbi1cdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbitcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbitcdFx0XHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjQ4OjM3LjU2OTE0NDY0MVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjE5NTc0MjE1OTM2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqRGl2aW5nIGludG8gdGhlIENvZGUgQ2hhbmdlKipcblxuT2theSwgc28gd2UgaGF2ZSBhIHBhdGNoLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBnZXQgYSBoYW5kbGUgb24gZXhhY3RseSAqd2hhdCogaXMgYmVpbmcgY2hhbmdlZC4gVGhlIGRpZmYgdGVsbHMgbWUgaXQncyB0b3VjaGluZyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgZnVuY3Rpb25zLiBHaXZlbiB0aGlzIGlzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb2RlIGZvciBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gb24geDg2LTY0LCBteSBzcGlkZXIgc2Vuc2UgaXMgdGluZ2xpbmcuIFRoaXMgaXMgYW4gYXJlYSB3aGVyZSBzdWJ0bGUgY2hhbmdlcyBjYW4gaGF2ZSBhIHJpcHBsZSBlZmZlY3QuIEknbSBnb2luZyB0byBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhpcyBtb2RpZmljYXRpb24gdmVyeSBjYXJlZnVsbHkuXG5cblRvIGRvIHRoYXQsIEknbSBnb2luZyB0byB6ZXJvIGluIG9uIGxpbmVzIDE1MCB0byAyNDAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGxvZ2ljIHN1cnJvdW5kaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQgdGhlIGltbWVkaWF0ZSBpbXBhY3Qgb2YgdGhlIGRpZmYuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNoYW5nZXMgaW4gdGhlIGFsZ29yaXRobSwgYW55IG5ldyBhc3N1bXB0aW9ucyBtYWRlIGFib3V0IHRoZSBhZGRyZXNzIHNwYWNlLCBhbmQgYW55IHBvdGVudGlhbCBlZGdlIGNhc2VzIHRoYXQgbWlnaHQgYmUgaW50cm9kdWNlZC4gSXQncyB0aW1lIHRvIGRpdmUgaW4gYW5kIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI2NiwiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTE6NTMuMzExMzA4MDczWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI3MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE0MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgZW5kKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChhZGRyKSB7XFxuIDE0NDpcXHRcXHRcXHRhZGRyID0gUEFHRV9BTElHTihhZGRyKTtcXG4gMTQ1OlxcdFxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4gMTQ2OlxcdFxcdFxcdGlmIChlbmQgLSBsZW4gXFx1MDAzZT0gYWRkciBcXHUwMDI2XFx1MDAyNlxcbiAxNDc6XFx0XFx0XFx0ICAgICghdm1hIHx8IGFkZHIgKyBsZW4gXFx1MDAzYz0gdm1fc3RhcnRfZ2FwKHZtYSkpKVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE0OTpcXHRcXHR9XFxuIDE1MDpcXHRcXG4gMTUxOlxcdFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiAxNTI6XFx0XFx0aW5mby5sb3dfbGltaXQgPSBiZWdpbjtcXG4gMTUzOlxcdFxcdGluZm8uaGlnaF9saW1pdCA9IGVuZDtcXG4gMTU0OlxcdFxcdGlmICghKGZpbHAgXFx1MDAyNlxcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpKSB7XFxuIDE1NTpcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDE1NjpcXHRcXHRcXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuIDE1NzpcXHRcXHR9XFxuIDE1ODpcXHRcXHRpZiAoZmlscCkge1xcbiAxNTk6XFx0XFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuIDE2MDpcXHRcXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAxNjE6XFx0XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gMTYyOlxcdFxcdH1cXG4gMTYzOlxcdFxcbiAxNjQ6XFx0XFx0cmV0dXJuIHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiAxNjU6XFx0fVxcbiAxNjY6XFx0XFxuIDE2NzpcXHR1bnNpZ25lZCBsb25nXFxuIDE2ODpcXHRhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXFxuIDE2OTpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbiAxNzA6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiAxNzE6XFx0e1xcbiAxNzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDE3MzpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiAxNzQ6XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyID0gYWRkcjA7XFxuIDE3NTpcXHRcXHRzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm8gPSB7fTtcXG4gMTc2OlxcdFxcbiAxNzc6XFx0XFx0LyogcmVxdWVzdGVkIGxlbmd0aCB0b28gYmlnIGZvciBlbnRpcmUgYWRkcmVzcyBzcGFjZSAqL1xcbiAxNzg6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIFRBU0tfU0laRSlcXG4gMTc5OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxODA6XFx0XFxuIDE4MTpcXHRcXHQvKiBObyBhZGRyZXNzIGNoZWNraW5nLiBTZWUgY29tbWVudCBhdCBtbWFwX2FkZHJlc3NfaGludF92YWxpZCgpICovXFxuIDE4MjpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBNQVBfRklYRUQpXFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gYWRkcjtcXG4gMTg0OlxcdFxcbiAxODU6XFx0XFx0LyogZm9yIE1BUF8zMkJJVCBtYXBwaW5ncyB3ZSBmb3JjZSB0aGUgbGVnYWN5IG1tYXAgYmFzZSAqL1xcbiAxODY6XFx0XFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTUFQXzMyQklUKSlcXG4gMTg3OlxcdFxcdFxcdGdvdG8gYm90dG9tdXA7XFxuIDE4ODpcXHRcXG4gMTg5OlxcdFxcdC8qIHJlcXVlc3RpbmcgYSBzcGVjaWZpYyBhZGRyZXNzICovXFxuIDE5MDpcXHRcXHRpZiAoYWRkcikge1xcbiAxOTE6XFx0XFx0XFx0YWRkciBcXHUwMDI2PSBQQUdFX01BU0s7XFxuIDE5MjpcXHRcXHRcXHRpZiAoIW1tYXBfYWRkcmVzc19oaW50X3ZhbGlkKGFkZHIsIGxlbikpXFxuIDE5MzpcXHRcXHRcXHRcXHRnb3RvIGdldF91bm1hcHBlZF9hcmVhO1xcbiAxOTQ6XFx0XFxuIDE5NTpcXHRcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIDE5NjpcXHRcXHRcXHRpZiAoIXZtYSB8fCBhZGRyICsgbGVuIFxcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKVxcbiAxOTc6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE5ODpcXHRcXHR9XFxuIDE5OTpcXHRnZXRfdW5tYXBwZWRfYXJlYTpcXG4gMjAwOlxcdFxcbiAyMDE6XFx0XFx0aW5mby5mbGFncyA9IFZNX1VOTUFQUEVEX0FSRUFfVE9QRE9XTjtcXG4gMjAyOlxcdFxcdGluZm8ubGVuZ3RoID0gbGVuO1xcbiAyMDM6XFx0XFx0aWYgKCFpbl8zMmJpdF9zeXNjYWxsKCkgXFx1MDAyNlxcdTAwMjYgKGZsYWdzIFxcdTAwMjYgTUFQX0FCT1ZFNEcpKVxcbiAyMDQ6XFx0XFx0XFx0aW5mby5sb3dfbGltaXQgPSBTWl80RztcXG4gMjA1OlxcdFxcdGVsc2VcXG4gMjA2OlxcdFxcdFxcdGluZm8ubG93X2xpbWl0ID0gUEFHRV9TSVpFO1xcbiAyMDc6XFx0XFxuIDIwODpcXHRcXHRpbmZvLmhpZ2hfbGltaXQgPSBnZXRfbW1hcF9iYXNlKDApO1xcbiAyMDk6XFx0XFx0aWYgKCEoZmlscCBcXHUwMDI2XFx1MDAyNiBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSkpIHtcXG4gMjEwOlxcdFxcdFxcdGluZm8uc3RhcnRfZ2FwID0gc3RhY2tfZ3VhcmRfcGxhY2VtZW50KHZtX2ZsYWdzKTtcXG4gMjExOlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ID0gcGdvZmYgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVDtcXG4gMjEyOlxcdFxcdH1cXG4gMjEzOlxcdFxcbiAyMTQ6XFx0XFx0LypcXG4gMjE1OlxcdFxcdCAqIElmIGhpbnQgYWRkcmVzcyBpcyBhYm92ZSBERUZBVUxUX01BUF9XSU5ET1csIGxvb2sgZm9yIHVubWFwcGVkIGFyZWFcXG4gMjE2OlxcdFxcdCAqIGluIHRoZSBmdWxsIGFkZHJlc3Mgc3BhY2UuXFxuIDIxNzpcXHRcXHQgKlxcbiAyMTg6XFx0XFx0ICogIWluXzMyYml0X3N5c2NhbGwoKSBjaGVjayB0byBhdm9pZCBoaWdoIGFkZHJlc3NlcyBmb3IgeDMyXFxuIDIxOTpcXHRcXHQgKiAoYW5kIG1ha2UgaXQgbm8gb3Agb24gbmF0aXZlIGkzODYpLlxcbiAyMjA6XFx0XFx0ICovXFxuIDIyMTpcXHRcXHRpZiAoYWRkciBcXHUwMDNlIERFRkFVTFRfTUFQX1dJTkRPVyBcXHUwMDI2XFx1MDAyNiAhaW5fMzJiaXRfc3lzY2FsbCgpKVxcbiAyMjI6XFx0XFx0XFx0aW5mby5oaWdoX2xpbWl0ICs9IFRBU0tfU0laRV9NQVggLSBERUZBVUxUX01BUF9XSU5ET1c7XFxuIDIyMzpcXHRcXG4gMjI0OlxcdFxcdGlmIChmaWxwKSB7XFxuIDIyNTpcXHRcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG4gMjI2OlxcdFxcdFxcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXFxuIDIyNzpcXHRcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xcbiAyMjg6XFx0XFx0fVxcbiAyMjk6XFx0XFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXFx1MDAyNmluZm8pO1xcbiAyMzA6XFx0XFx0aWYgKCEoYWRkciBcXHUwMDI2IH5QQUdFX01BU0spKVxcbiAyMzE6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDIzMjpcXHRcXHRWTV9CVUdfT04oYWRkciAhPSAtRU5PTUVNKTtcXG4gMjMzOlxcdFxcbiAyMzQ6XFx0Ym90dG9tdXA6XFxuIDIzNTpcXHRcXHQvKlxcbiAyMzY6XFx0XFx0ICogQSBmYWlsZWQgbW1hcCgpIHZlcnkgbGlrZWx5IGNhdXNlcyBhcHBsaWNhdGlvbiBmYWlsdXJlLFxcbiAyMzc6XFx0XFx0ICogc28gZmFsbCBiYWNrIHRvIHRoZSBib3R0b20tdXAgZnVuY3Rpb24gaGVyZS4gVGhpcyBzY2VuYXJpb1xcbiAyMzg6XFx0XFx0ICogY2FuIGhhcHBlbiB3aXRoIGxhcmdlIHN0YWNrIGxpbWl0cyBhbmQgbGFyZ2UgbW1hcCgpXFxuIDIzOTpcXHRcXHQgKiBhbGxvY2F0aW9ucy5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTE6NTMuMzExNDM3ODIzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzU2MzQxMDY0NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBBbGlnbm1lbnQgTG9naWMqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpc3NlY3QgdGhlc2UgYWxpZ25tZW50IGZ1bmN0aW9uczogYGdldF9hbGlnbl9tYXNrYCwgYGdldF9hbGlnbl9iaXRzYCwgYW5kIGBpc19maWxlX2h1Z2VwYWdlc2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZWlyIGludGVyYWN0aW9ucyBhbmQgaG93IHRoZXkgY29udHJpYnV0ZSB0byB0aGUgbGFyZ2VyIHBpY3R1cmUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgdG8gY2hlY2sgd2hhdCB0aGV5IGFyZSBkb2luZy4gTGV0J3MgZmluZCB0aGVpciBkZWZpbml0aW9ucy4gR2l2ZW4gdGhlIGNvbnRleHQsIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCBzZWVtcyBsaWtlIGEgbGlrZWx5IGNhbmRpZGF0ZSBmb3IgYGdldF9hbGlnbl9tYXNrYCBhbmQgYGdldF9hbGlnbl9iaXRzYCwgc28gSSdsbCBzdGFydCB0aGVyZS4gSG9wZWZ1bGx5LCB0aGF0IHNob3VsZCBwcm92aWRlIHNvbWUgY2xhcml0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE5MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTI6MjguOTQ1NTQ2MTkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjAyODM0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfYWxpZ25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI4LSAqL1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6Mjk6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX21hc2soc3RydWN0IGZpbGUgKmZpbHApXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0zMC17XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTUyLSAqL1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6NTM6c3RhdGljIHVuc2lnbmVkIGxvbmcgZ2V0X2FsaWduX2JpdHModm9pZClcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTU0LXtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjU1OlxcdHJldHVybiB2YV9hbGlnbi5iaXRzIFxcdTAwMjYgZ2V0X2FsaWduX21hc2soTlVMTCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy01Ni19XFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jPTEyNz1hcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNTgtXFx0aWYgKGZpbHApIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjE1OTpcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2MC1cXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTYxOlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0xNjItXFx0fVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjg9YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yMjQtXFx0aWYgKGZpbHApIHtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjIyNTpcXHRcXHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTIyNi1cXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MjI3OlxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yMjgtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1MjoyOS40Mzc1NzkyMjdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTk1NDUzNzQ3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGluaXRpYWwgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhlIHByb3ZpZGVkIHRleHQsIGFzc3VtaW5nIEknbSBhbiB4ODYtNjQga2VybmVsIGV4cGVydDpcblxuKipEaXZpbmcgaW50byB4ODYtNjQgU3lzdGVtIENhbGxzKipcblxuT2theSwgc28gdGhlIHByb21wdCBpcyBhc2tpbmcgbWUgdG8gc3RhcnQgYnkgZXhhbWluaW5nIGxpbmVzIDEtNzAgb2YgYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBUaGF0J3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50LiBUaGlzIGZpbGUgaXMgY3JpdGljYWwsIG9idmlvdXNseSwgYmVjYXVzZSBpdCBob3VzZXMgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgb2YgdGhlIHg4Ni02NCBzeXN0ZW0gY2FsbCBpbnRlcmZhY2UuIEknbSBhc3N1bWluZyB0aGF0IGl0IGlzIHRoZSBjb3JlIG9mIGhvdyB1c2VyIHNwYWNlIGludGVyYWN0cyB3aXRoIHRoZSBrZXJuZWwgb24gdGhpcyBhcmNoaXRlY3R1cmUuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IG9uIHg4Ni02NCwgdGhlIHN5c3RlbSBjYWxsIG1lY2hhbmlzbSBpcyBhIGJpdCBkaWZmZXJlbnQgZnJvbSB0aGUgb2xkZXIgMzItYml0IHZlcnNpb25zLCBwcm9iYWJseSBpbnZvbHZpbmcgdGhlIGBzeXNjYWxsYCBpbnN0cnVjdGlvbi4gTXkgaW5pdGlhbCBndWVzcyBpcyB0aGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBmaWxlIHdpbGwgaW5jbHVkZSB0aGUgc3lzdGVtIGNhbGwgdGFibGUgZGVmaW5pdGlvbiBhbmQgc29tZSBsb3ctbGV2ZWwgc2V0dXAgb3IgZW50cnkgcG9pbnQgY29kZS4gSSB3YW50IHRvIHNlZSBpZiB0aGlzIGNvZGUgaXMgaW5saW5lZCwgb3IgY2FsbHMgYW5vdGhlciBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE0OCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjUzOjExLjM5MjEyMDQzN1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNTI5NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY29tcGF0LmhcXHUwMDNlXFxuICAgMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gICA0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbiAgIDU6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbS5oXFx1MDAzZVxcbiAgIDg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzLmhcXHUwMDNlXFxuICAgOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc21wLmhcXHUwMDNlXFxuICAxMDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VtLmhcXHUwMDNlXFxuICAxMTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvbXNnLmhcXHUwMDNlXFxuICAxMjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc2htLmhcXHUwMDNlXFxuICAxMzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdC5oXFx1MDAzZVxcbiAgMTQ6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYW4uaFxcdTAwM2VcXG4gIDE1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9maWxlLmhcXHUwMDNlXFxuICAxNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdXRzbmFtZS5oXFx1MDAzZVxcbiAgMTc6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BlcnNvbmFsaXR5LmhcXHUwMDNlXFxuICAxODpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICAxOTpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvdWFjY2Vzcy5oXFx1MDAzZVxcbiAgMjA6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbiAgMjE6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2h1Z2V0bGIuaFxcdTAwM2VcXG4gIDIyOlxcdFxcbiAgMjM6XFx0I2luY2x1ZGUgXFx1MDAzY2FzbS9lbGYuaFxcdTAwM2VcXG4gIDI0OlxcdCNpbmNsdWRlIFxcdTAwM2Nhc20vaWEzMi5oXFx1MDAzZVxcbiAgMjU6XFx0XFxuICAyNjpcXHQvKlxcbiAgMjc6XFx0ICogQWxpZ24gYSB2aXJ0dWFsIGFkZHJlc3MgdG8gYXZvaWQgYWxpYXNpbmcgaW4gdGhlIEkkIG9uIEFNRCBGMTVoLlxcbiAgMjg6XFx0ICovXFxuICAyOTpcXHRzdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfYWxpZ25fbWFzayhzdHJ1Y3QgZmlsZSAqZmlscClcXG4gIDMwOlxcdHtcXG4gIDMxOlxcdFxcdGlmIChmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAgMzI6XFx0XFx0XFx0cmV0dXJuIGh1Z2VfcGFnZV9tYXNrX2FsaWduKGZpbHApO1xcbiAgMzM6XFx0XFx0LyogaGFuZGxlIDMyLSBhbmQgNjQtYml0IGNhc2Ugd2l0aCBhIHNpbmdsZSBjb25kaXRpb25hbCAqL1xcbiAgMzQ6XFx0XFx0aWYgKHZhX2FsaWduLmZsYWdzIFxcdTAwM2MgMCB8fCAhKHZhX2FsaWduLmZsYWdzIFxcdTAwMjYgKDIgLSBtbWFwX2lzX2lhMzIoKSkpKVxcbiAgMzU6XFx0XFx0XFx0cmV0dXJuIDA7XFxuICAzNjpcXHRcXG4gIDM3OlxcdFxcdGlmICghKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfUkFORE9NSVpFKSlcXG4gIDM4OlxcdFxcdFxcdHJldHVybiAwO1xcbiAgMzk6XFx0XFxuICA0MDpcXHRcXHRyZXR1cm4gdmFfYWxpZ24ubWFzaztcXG4gIDQxOlxcdH1cXG4gIDQyOlxcdFxcbiAgNDM6XFx0LypcXG4gIDQ0OlxcdCAqIFRvIGF2b2lkIGFsaWFzaW5nIGluIHRoZSBJJCBvbiBBTUQgRjE1aCwgdGhlIGJpdHMgZGVmaW5lZCBieSB0aGVcXG4gIDQ1OlxcdCAqIHZhX2FsaWduLmJpdHMsIFsxMjp1cHBlcl9iaXQpLCBhcmUgc2V0IHRvIGEgcmFuZG9tIHZhbHVlIGluc3RlYWQgb2ZcXG4gIDQ2OlxcdCAqIHplcm9pbmcgdGhlbS4gVGhpcyByYW5kb20gdmFsdWUgaXMgY29tcHV0ZWQgb25jZSBwZXIgYm9vdC4gVGhpcyBmb3JtXFxuICA0NzpcXHQgKiBvZiBBU0xSIGlzIGtub3duIGFzIFxcXCJwZXItYm9vdCBBU0xSXFxcIi5cXG4gIDQ4OlxcdCAqXFxuICA0OTpcXHQgKiBUbyBhY2hpZXZlIHRoaXMsIHRoZSByYW5kb20gdmFsdWUgaXMgYWRkZWQgdG8gdGhlIGluZm8uYWxpZ25fb2Zmc2V0XFxuICA1MDpcXHQgKiB2YWx1ZSBiZWZvcmUgY2FsbGluZyB2bV91bm1hcHBlZF9hcmVhKCkgb3IgT1JlZCBkaXJlY3RseSB0byB0aGVcXG4gIDUxOlxcdCAqIGFkZHJlc3MuXFxuICA1MjpcXHQgKi9cXG4gIDUzOlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIGdldF9hbGlnbl9iaXRzKHZvaWQpXFxuICA1NDpcXHR7XFxuICA1NTpcXHRcXHRyZXR1cm4gdmFfYWxpZ24uYml0cyBcXHUwMDI2IGdldF9hbGlnbl9tYXNrKE5VTEwpO1xcbiAgNTY6XFx0fVxcbiAgNTc6XFx0XFxuICA1ODpcXHRzdGF0aWMgaW50IF9faW5pdCBjb250cm9sX3ZhX2FkZHJfYWxpZ25tZW50KGNoYXIgKnN0cilcXG4gIDU5OlxcdHtcXG4gIDYwOlxcdFxcdC8qIGd1YXJkIGFnYWluc3QgZW5hYmxpbmcgdGhpcyBvbiBvdGhlciBDUFUgZmFtaWxpZXMgKi9cXG4gIDYxOlxcdFxcdGlmICh2YV9hbGlnbi5mbGFncyBcXHUwMDNjIDApXFxuICA2MjpcXHRcXHRcXHRyZXR1cm4gMTtcXG4gIDYzOlxcdFxcbiAgNjQ6XFx0XFx0aWYgKCpzdHIgPT0gMClcXG4gIDY1OlxcdFxcdFxcdHJldHVybiAxO1xcbiAgNjY6XFx0XFxuICA2NzpcXHRcXHRpZiAoIXN0cmNtcChzdHIsIFxcXCIzMlxcXCIpKVxcbiAgNjg6XFx0XFx0XFx0dmFfYWxpZ24uZmxhZ3MgPSBBTElHTl9WQV8zMjtcXG4gIDY5OlxcdFxcdGVsc2UgaWYgKCFzdHJjbXAoc3RyLCBcXFwiNjRcXFwiKSlcXG4gIDcwOlxcdFxcdFxcdHZhX2FsaWduLmZsYWdzID0gQUxJR05fVkFfNjQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjUzOjExLjM5MzI3NjUwN1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwNTk5MjcxMDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSHVnZXBhZ2UgQWxpZ25tZW50IEJ1ZyoqXG5cbk9rYXksIGxldCdzIGRpc3NlY3QgdGhpcyBjb2RlLiBJJ20gZm9jdXNpbmcgb24gbGluZXMgMTU0LTE1Nywgc3BlY2lmaWNhbGx5IGhvdyBgaW5mby5hbGlnbl9vZmZzZXRgIGlzIGhhbmRsZWQuIEluaXRpYWxseSwgdGhlIGNvZGUgaGFkIGEgY29uZGl0aW9uYWwgYmxvY2sgdGhhdCBzZWVtZWQgcHJvYmxlbWF0aWMgZm9yIGh1Z2VwYWdlcy4gSXQgbG9va2VkIGxpa2UsIHByZXZpb3VzbHksIGBpbmZvLmFsaWduX29mZnNldGAgd291bGQgc3RhcnQgYXQgemVybywgb3Igbm90IGJlIHNldC4gVGhlbiwgYGluZm8uYWxpZ25fbWFza2Agd291bGQgYmUgc2V0IHRvIHRoZSBodWdlcGFnZSBtYXNrIChsaWtlIDJNQikuIFRoZSB0cm91Ymxlc29tZSBsaW5lIHdhcyBgaW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtgLiBUaGlzIHN1Z2dlc3RlZCB0aGF0LCBmb3IgaHVnZXBhZ2VzLCB3ZSB3ZXJlICphZGRpbmcqIGFuIG9mZnNldCBtZWFudCBmb3IgNEsgcGFnZSBjYWNoZSBhbGlhc2luZyBvbiBBTUQgQnVsbGRvemVyL0YxNWggdG8gdGhlIGh1Z2VwYWdlIGFsaWdubWVudCwgZWZmZWN0aXZlbHkgYnJlYWtpbmcgdGhlIGFsaWdubWVudCBvciBhZGRpbmcgYW4gdW5uZWNlc3Nhcnkgb25lLlxuXG5NeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYHZtX3VubWFwcGVkX2FyZWFgIHVzZXMgYGFsaWduX21hc2tgIGFuZCBgYWxpZ25fb2Zmc2V0YCBmb3IgYWRkcmVzcyBhbGlnbm1lbnQuIFRoZSBvbGQgbG9naWMgY291bGQgbWVzcyB0aGlzIHVwLiBCdXQgbm93LCB3aXRoIHRoZSBwYXRjaCwgdGhlIHByb2JsZW1hdGljIGFkZGl0aW9uIG9mIGBnZXRfYWxpZ25fYml0cygpYCBpcyBieXBhc3NlZCBpZiBpdCAqaXMqIGEgaHVnZXBhZ2UsIHdoaWNoIGlzIGdvb2QuXG5cblNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhpcyBpcyBib3RoIHJlYWNoYWJsZSBhbmQgZml4aW5nIGEgcmVhbCBpc3N1ZS4gSSBrbm93IHRoYXQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBhcmUgdGhlIHg4Nl82NCBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZ1bmN0aW9ucy4gVGhleSdyZSBjYWxsZWQgZXZlcnkgdGltZSBgbW1hcGAgaXMgaW52b2tlZCBvbiB4ODZfNjQgdG8gZmluZCBhbiB1bm1hcHBlZCBhcmVhLiBTaW5jZSBgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgIGlzIHRydWUgd2hlbiBtbWFwaW5nIGh1Z2V0bGJmcyBmaWxlcywgSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCB0aGVzZSBmdW5jdGlvbnMgYXJlIGluZGVlZCBjb3JlIGtlcm5lbCBmdW5jdGlvbnMgb24geDg2XzY0IGFuZCBhcmUgYWx3YXlzIGludm9sdmVkIGluIHRoZSBtbWFwLiBJbiB0aGF0IGNhc2UsIHRoaXMgbG9naWMgaXMgY29yZS4gSXQncyBjYWxsZWQgd2hlbiB1c2VyIHNwYWNlIGludm9rZXMgYG1tYXAoKWAgb24gaHVnZXRsYmZzIGZpbGVzIG9yIG9yZGluYXJ5IGZpbGVzLiBTbywgdGhpcyBmaXggaXMgaW1wb3J0YW50LlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gZXN0YWJsaXNoIGNvbnRleHQuIEkgaGF2ZSB0byB2ZXJpZnkgdGhhdCB0aGUgY29uZmlndXJhdGlvbiBhbGxvd3MgYGh1Z2V0bGJmc2AuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlcyBvciBkbyBhIHF1aWNrIGdyZXAgZm9yIGBpc19maWxlX2h1Z2VwYWdlc2AgdG8gYmUgc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHJlbGV2YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDgzLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTQ6NTcuMzg1OTg5MTQ5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mjg2MTYyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXNfZmlsZV9odWdlcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTE5PXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsIHZtYV9mbGFnc190IGFjY3QsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MjEtXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTIyOnN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01MjMte1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg9NTI3PXN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oLTUzMi1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaDo1MzM6I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVxcdFxcdFxcdGZhbHNlXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmgtNTM0LXN0YXRpYyBpbmxpbmUgc3RydWN0IGZpbGUgKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1NDo1Ny45MTQ2MTQ4MzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjEzODQ0MjU1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEh1Z2VUTEIgSGVhZGVyKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoaXMuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiB0aGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBoZWFkZXIgZmlsZS4gSXQncyB0aGUgY2VudHJhbCBkZWZpbml0aW9uIHBvaW50IGZvciBIdWdlVExCIGZ1bmN0aW9uYWxpdHkgaW4gdGhlIGtlcm5lbC4gSSdtIGdvaW5nIHRvIGxvb2sgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDUxOS4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludCwgYXMgdGhhdCdzIG9mdGVuIHdoZXJlIGtleSBkYXRhIHN0cnVjdHVyZXMgb3IgZnVuY3Rpb24gcHJvdG90eXBlcyByZWxhdGVkIHRvIGNvcmUgSHVnZVRMQiBvcGVyYXRpb25zIG1pZ2h0IHJlc2lkZSwgcHJvYmFibHkgc29tZSBraW5kIG9mIGRlZmluaXRpb24gb3Igc3RydWN0dXJlIHRoYXQgSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaW4gb3JkZXIgdG8gcmVhc29uIGFib3V0IHRoaXMgc3BlY2lmaWMgYmVoYXZpb3IgSSdtIHRyeWluZyB0byBkZWJ1Zy9tb2RpZnkvdW5kZXJzdGFuZC4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDI0LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTY6NTU6MTkuMjk5MDQyNzc0WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjk5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1MTAsXG4gIFwiTGluZUNvdW50XCI6IDM1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1MTA6XFx0XFx0dW5zaWduZWQgaW50IHNlYWxzO1xcbiA1MTE6XFx0fTtcXG4gNTEyOlxcdFxcbiA1MTM6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKkhVR0VUTEJGU19JKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIDUxNDpcXHR7XFxuIDUxNTpcXHRcXHRyZXR1cm4gY29udGFpbmVyX29mKGlub2RlLCBzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8sIHZmc19pbm9kZSk7XFxuIDUxNjpcXHR9XFxuIDUxNzpcXHRcXG4gNTE4OlxcdGV4dGVybiBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaHVnZXRsYl92bV9vcHM7XFxuIDUxOTpcXHRzdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLCB2bWFfZmxhZ3NfdCBhY2N0LFxcbiA1MjA6XFx0XFx0XFx0XFx0XFx0aW50IGNyZWF0X2ZsYWdzLCBpbnQgcGFnZV9zaXplX2xvZyk7XFxuIDUyMTpcXHRcXG4gNTIyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBpc19maWxlX2h1Z2VwYWdlcyhjb25zdCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4gNTIzOlxcdHtcXG4gNTI0OlxcdFxcdHJldHVybiBmaWxlLVxcdTAwM2VmX29wLVxcdTAwM2Vmb3BfZmxhZ3MgXFx1MDAyNiBGT1BfSFVHRV9QQUdFUztcXG4gNTI1OlxcdH1cXG4gNTI2OlxcdFxcbiA1Mjc6XFx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaHN0YXRlICpoc3RhdGVfaW5vZGUoc3RydWN0IGlub2RlICppKVxcbiA1Mjg6XFx0e1xcbiA1Mjk6XFx0XFx0cmV0dXJuIEhVR0VUTEJGU19TQihpLVxcdTAwM2VpX3NiKS1cXHUwMDNlaHN0YXRlO1xcbiA1MzA6XFx0fVxcbiA1MzE6XFx0I2Vsc2UgLyogIUNPTkZJR19IVUdFVExCRlMgKi9cXG4gNTMyOlxcdFxcbiA1MzM6XFx0I2RlZmluZSBpc19maWxlX2h1Z2VwYWdlcyhmaWxlKVxcdFxcdFxcdGZhbHNlXFxuIDUzNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBmaWxlICpcXG4gNTM1OlxcdGh1Z2V0bGJfZmlsZV9zZXR1cChjb25zdCBjaGFyICpuYW1lLCBzaXplX3Qgc2l6ZSwgdm1hX2ZsYWdzX3QgYWNjdGZsYWcsXFxuIDUzNjpcXHRcXHRcXHRpbnQgY3JlYXRfZmxhZ3MsIGludCBwYWdlX3NpemVfbG9nKVxcbiA1Mzc6XFx0e1xcbiA1Mzg6XFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT1NZUyk7XFxuIDUzOTpcXHR9XFxuIDU0MDpcXHRcXG4gNTQxOlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGhzdGF0ZSAqaHN0YXRlX2lub2RlKHN0cnVjdCBpbm9kZSAqaSlcXG4gNTQyOlxcdHtcXG4gNTQzOlxcdFxcdHJldHVybiBOVUxMO1xcbiA1NDQ6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1NToxOS4yOTkxNDc2NTRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTYzMjcyMjQ1OTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZTpcblxuKipJbnZlc3RpZ2F0aW5nIEh1Z2UgUGFnZXMgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGluLiBNeSBndXQgdGVsbHMgbWUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3IgSFVHRVRMQkZTIGFyZSBlaXRoZXIgZ29pbmcgdG8gYmUgdHVja2VkIGF3YXkgaW4gYGZzL0tjb25maWdgIG9yLCBtb3JlIGxpa2VseSwgb3ZlciBpbiBgbW0vS2NvbmZpZ2AuIEknbSBsZWFuaW5nIHRvd2FyZHMgYG1tL0tjb25maWdgIGJlY2F1c2UgaHVnZSBwYWdlcyBhcmUgZnVuZGFtZW50YWxseSBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHRoaW5ncyBsaXZlLiBMZXQncyBzdGFydCB0aGVyZSwgYnV0IEknbGwgcXVpY2tseSBjaGVjayBgZnMvS2NvbmZpZ2AganVzdCB0byBiZSB0aG9yb3VnaC4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYXZhaWxhYmxlIGtub2JzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3OTMsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjAyLjU3MTM5NzI1NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1MjcyNzkzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSFVHRVRMQkZTXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9MjQ3PWNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbi0tXFxuZnMvS2NvbmZpZy0yNDktXFxuZnMvS2NvbmZpZzoyNTA6bWVudWNvbmZpZyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI1MS1cXHRib29sIFxcXCJIdWdlVExCIGZpbGUgc3lzdGVtIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjA0LjUyNDEyOTg4NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzc4NzI3MzI2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgc28gSSBuZWVkIHRvIHplcm8gaW4gb24gYSBzcGVjaWZpYyBwYXJ0IG9mIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gQmFzZWQgb24gd2hhdCBJJ20gd29ya2luZyB3aXRoLCB0aGUgbGlrZWx5IHN1c3BlY3QgaXMgbHVya2luZyBpbiBgZnMvS2NvbmZpZ2AuIEFuZCwgZ2l2ZW4gdGhlIHR5cGljYWwgb3JnYW5pemF0aW9uIG9mIHRoZXNlIEtjb25maWcgZmlsZXMsIEknbSBiZXR0aW5nIHRoZSByZWxldmFudCBzZWN0aW9uIEknbSBhZnRlciBpcyBoYW5naW5nIGFyb3VuZCBsaW5lIDI1MC4gSXQncyBhIHN0YXJ0aW5nIHBvaW50LCBhIHJlYXNvbmFibGUganVtcGluZy1vZmYgbG9jYXRpb24uIEZyb20gdGhlcmUsIEknbGwgbmVlZCB0byB1c2UgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgYXJjaGl0ZWN0dXJlIGFuZCB0aGUgY29uZmlnIG9wdGlvbnMgdG8gZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBodW5jaCBvciBxdWlja2x5IHJlZmluZSBteSBzZWFyY2guIFRoaXMgbGluZSBpcyBtb3N0IGxpa2VseSB0aGUgc3RhcnQgb2Ygd2hhdCBJJ20gYWZ0ZXIuIExldCdzIHNlZSBpZiB0aGlzIGlzIHRoZSByaWdodCBwbGFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjM4LjMxMTQwNTg1MloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI0NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI0NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDI0NjpcXHRcXG4gMjQ3OlxcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNDg6XFx0XFx0ZGVmX2Jvb2wgblxcbiAyNDk6XFx0XFxuIDI1MDpcXHRtZW51Y29uZmlnIEhVR0VUTEJGU1xcbiAyNTE6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBmaWxlIHN5c3RlbSBzdXBwb3J0XFxcIlxcbiAyNTI6XFx0XFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xcbiAyNTM6XFx0XFx0c2VsZWN0IE1FTUZEX0NSRUFURVxcbiAyNTQ6XFx0XFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcXG4gMjU1OlxcdFxcdGhlbHBcXG4gMjU2OlxcdFxcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxcbiAyNTc6XFx0XFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXFxuIDI1ODpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vaHVnZXRsYnBhZ2UucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMjU5OlxcdFxcbiAyNjA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNjE6XFx0XFxuIDI2MjpcXHRpZiBIVUdFVExCRlNcXG4gMjYzOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUF9ERUZBVUxUX09OXFxuIDI2NDpcXHRcXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbiAyNjU6XFx0XFx0ZGVmYXVsdCBuXFxuIDI2NjpcXHRcXHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXFxuIDI2NzpcXHRcXHRoZWxwXFxuIDI2ODpcXHRcXHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xcbiAyNjk6XFx0XFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE2OjU4OjM4LjMxMTQ3ODU1MloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTQ3MTIxOTIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqSW52ZXN0aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDb25maWd1cmF0aW9uKipcblxuQWxyaWdodCwgSSdtIGFscmVhZHkgZGVlcCBpbnRvIHRoaXMgbWVtb3J5IGlzc3VlLCBhbmQgSSd2ZSBnb3QgYSBnb29kIGhhbmRsZSBvbiB0aGUgbGlrZWx5IHN1c3BlY3RzLiBCdXQgSSBjYW4ndCBhZmZvcmQgdG8gb3Zlcmxvb2sgYW55dGhpbmcsIGVzcGVjaWFsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhpcyBsZXZlbCBvZiBwZXJmb3JtYW5jZSBzY3J1dGlueS4gQmVmb3JlIEkgZGlnIGFueSBkZWVwZXIsIEkgc2hvdWxkIGNyb3NzLWNoZWNrIHRoZSBgSFVHRVRMQl9QQUdFYCBjb25maWd1cmF0aW9uLiBJdCdzIGEgZnVuZGFtZW50YWwgYXNwZWN0IG9mIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgbWlzY29uZmlndXJhdGlvbiB0aGVyZSBjb3VsZCBiZSB0aGUgcm9vdCBjYXVzZSwgb3IgYXQgbGVhc3QgYSBzaWduaWZpY2FudCBjb250cmlidXRpbmcgZmFjdG9yLCB0byB3aGF0IEknbSBzZWVpbmcuIE5vIHBvaW50IHdhc3RpbmcgdGltZSBjaGFzaW5nIGRvd24gY29tcGxleCBpbnRlcmFjdGlvbnMgaWYgdGhlIGJhc2ljcyBhcmVuJ3QgcmlnaHQuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhvc2UgaHVnZSBwYWdlIHNldHRpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjY4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1OToxMy43ODI3MDAxOTlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwMTMxMjU4NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJfUEFHRVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3NoL21tL0tjb25maWc9MTI5PWNob2ljZVxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTEzNC1cXG5hcmNoL3NoL21tL0tjb25maWc6MTM1OmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NEtcXG5hcmNoL3NoL21tL0tjb25maWctMTM2LVxcdGJvb2wgXFxcIjY0a0JcXFwiXFxuLS1cXG5hcmNoL3NoL21tL0tjb25maWctMTM4LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxMzk6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzI1NktcXG5hcmNoL3NoL21tL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIjI1NmtCXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0Mi1cXG5hcmNoL3NoL21tL0tjb25maWc6MTQzOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV8xTUJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ0LVxcdGJvb2wgXFxcIjFNQlxcXCJcXG5hcmNoL3NoL21tL0tjb25maWctMTQ1LVxcbmFyY2gvc2gvbW0vS2NvbmZpZzoxNDY6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFXzRNQlxcbmFyY2gvc2gvbW0vS2NvbmZpZy0xNDctXFx0Ym9vbCBcXFwiNE1CXFxcIlxcbi0tXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE0OS1cXG5hcmNoL3NoL21tL0tjb25maWc6MTUwOmNvbmZpZyBIVUdFVExCX1BBR0VfU0laRV82NE1CXFxuYXJjaC9zaC9tbS9LY29uZmlnLTE1MS1cXHRib29sIFxcXCI2NE1CXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNjI9aWYgSFVHRVRMQkZTXFxuZnMvS2NvbmZpZzoyNjM6Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cXG5mcy9LY29uZmlnLTI2NC1cXHRib29sIFxcXCJIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9uXFxcIlxcbi0tXFxuZnMvS2NvbmZpZz0yNzE9ZW5kaWYgIyBIVUdFVExCRlNcXG5mcy9LY29uZmlnLTI3Mi1cXG5mcy9LY29uZmlnOjI3Mzpjb25maWcgSFVHRVRMQl9QQUdFXFxuZnMvS2NvbmZpZy0yNzQtXFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXFxuLS1cXG5mcy9LY29uZmlnLTI3Ni1cXG5mcy9LY29uZmlnOjI3Nzpjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBcXG5mcy9LY29uZmlnLTI3OC1cXHRkZWZfYm9vbCBIVUdFVExCX1BBR0VcXG4tLVxcbm1tL0tjb25maWc9Njg5PWNvbmZpZyBBUkNIX0hBU19QTURfU09GVExFQVZFU1xcbi0tXFxubW0vS2NvbmZpZy02OTEtXFxubW0vS2NvbmZpZzo2OTI6Y29uZmlnIEhVR0VUTEJfUEFHRV9TSVpFX1ZBUklBQkxFXFxubW0vS2NvbmZpZy02OTMtXFx0ZGVmX2Jvb2wgblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNjo1OToxNS43OTU4MzM5MTZaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTgzMjc5MjMwMDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZXRsYmZzIFN1cHBvcnQgaW4gdGhlIHg4NiBBcmNoaXRlY3R1cmUqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgaHVnZXRsYmZzIGlzIHN1cHBvcnRlZCAob3Igbm90IHN1cHBvcnRlZCkgZm9yIHRoZSB4ODYgYXJjaGl0ZWN0dXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIG9wdGlvbnMuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYGFyY2gveDg2L0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgZ28tdG8gbG9jYXRpb24gZm9yIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gSSBuZWVkIHRvIGxvb2sgZm9yIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzeW1ib2wsIGxpa2VseSBzb21ldGhpbmcgZGlyZWN0bHkgcmVsYXRlZCB0byBgSFVHRVRMQkZTYCBpdHNlbGYsIHBvdGVudGlhbGx5IGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AuIE9mIGNvdXJzZSwgaXQncyBhbHNvIHdvcnRoIGtlZXBpbmcgYW4gZXllIG91dCBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBtaWdodCBpbmRpcmVjdGx5IGNvbnRyb2wgaHVnZXRsYmZzIGZlYXR1cmVzIG9yIHJlbGF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQgY2FwYWJpbGl0aWVzIG9uIHg4Ni4gVGhpcyBpbml0aWFsIHNlYXJjaCBzaG91bGQgZ2l2ZSBtZSBhIHByZXR0eSBnb29kIG92ZXJ2aWV3IG9mIHRoZSBvcHRpb25zIGF2YWlsYWJsZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gYmUgdXNlZC4gSSBleHBlY3QgdG8gZmluZCBzb21lIGNvbmRpdGlvbmFsIGRlcGVuZGVuY2llcyB0aGVyZSBhcyB3ZWxsLCBtYXliZSByZWxhdGluZyB0byBzcGVjaWZpYyBDUFUgZmVhdHVyZXMsIE5VTUEgY29uZmlndXJhdGlvbnMsIG9yIG90aGVyIGFyY2hpdGVjdHVyYWwgY29uc2lkZXJhdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjhUMTc6MDI6MTkuMDc1MDY2MTAzWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTIyNTI1MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0xMjUtXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfREVCVUdfUEFHRUFMTE9DXFxuYXJjaC94ODYvS2NvbmZpZzoxMjY6XFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfSFVHRVRMQkZTXFxuYXJjaC94ODYvS2NvbmZpZy0xMjctXFx0c2VsZWN0IEFSQ0hfU1VQUE9SVFNfUEFHRV9UQUJMRV9DSEVDS1xcdGlmIFg4Nl82NFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzowMjoxOS4xODczMjU4NTRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5OTc3OTY1MzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgVW5tYXBwZWQgQXJlYSBBbGxvY2F0aW9uIEZ1bmN0aW9ucyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUgY29yZSBvZiBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIGZpbmRpbmcgdW5tYXBwZWQgbWVtb3J5IHJlZ2lvbnMuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVyYWN0aW9uIG9mIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bmAgd2l0aGluIHRoZSB4ODZfNjQgYXJjaGl0ZWN0dXJlLiBJIG5lZWQgdG8gcXVpY2tseSBhc2NlcnRhaW4gd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGRlY2xhcmVkIGFzIHN0YXRpYyBvciBub3QsIHNpbmNlIHRoYXQnbGwgaW5mbHVlbmNlIHRoZWlyIHNjb3BlIGFuZCBob3cgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBjYW4gdXRpbGl6ZSB0aGVtLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGRlZmluaXRpb24gaW4gYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgLiBzcGVjaWZpY2FsbHkgbGluZSAxMjUsIHNob3VsZCBnaXZlIG1lIHRoZSBhbnN3ZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwODU3LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjAyOjUwLjE4NTEyNzM4OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYyNTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTIwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTIwOlxcdFxcdGlmICh2bV9mbGFncyBcXHUwMDI2IFZNX1NIQURPV19TVEFDSylcXG4gMTIxOlxcdFxcdFxcdHJldHVybiBQQUdFX1NJWkU7XFxuIDEyMjpcXHRcXG4gMTIzOlxcdFxcdHJldHVybiAwO1xcbiAxMjQ6XFx0fVxcbiAxMjU6XFx0XFxuIDEyNjpcXHR1bnNpZ25lZCBsb25nXFxuIDEyNzpcXHRhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbiAxMjg6XFx0XFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgcGdvZmYsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MpXFxuIDEyOTpcXHR7XFxuIDEzMDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGN1cnJlbnQtXFx1MDAzZW1tO1xcbiAxMzE6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDEzMjpcXHRcXHRzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm8gPSB7fTtcXG4gMTMzOlxcdFxcdHVuc2lnbmVkIGxvbmcgYmVnaW4sIGVuZDtcXG4gMTM0OlxcdFxcbiAxMzU6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKVxcbiAxMzY6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDEzNzpcXHRcXG4gMTM4OlxcdFxcdGZpbmRfc3RhcnRfZW5kKGFkZHIsIGZsYWdzLCBcXHUwMDI2YmVnaW4sIFxcdTAwMjZlbmQpO1xcbiAxMzk6XFx0XFxuIDE0MDpcXHRcXHRpZiAobGVuIFxcdTAwM2UgZW5kKVxcbiAxNDE6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIDE0MjpcXHRcXG4gMTQzOlxcdFxcdGlmIChhZGRyKSB7XFxuIDE0NDpcXHRcXHRcXHRhZGRyID0gUEFHRV9BTElHTihhZGRyKTtcXG4gMTQ1OlxcdFxcdFxcdHZtYSA9IGZpbmRfdm1hKG1tLCBhZGRyKTtcXG4gMTQ2OlxcdFxcdFxcdGlmIChlbmQgLSBsZW4gXFx1MDAzZT0gYWRkciBcXHUwMDI2XFx1MDAyNlxcbiAxNDc6XFx0XFx0XFx0ICAgICghdm1hIHx8IGFkZHIgKyBsZW4gXFx1MDAzYz0gdm1fc3RhcnRfZ2FwKHZtYSkpKVxcbiAxNDg6XFx0XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE0OTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjAyOjUwLjE4NzI5NDQ3OVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMDA1MzU3MTY0MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBmb3IgRnV6emluZyBGb2N1cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBob3cgdG8gaW1wcm92ZSBvdXIgZnV6emluZyBjb3ZlcmFnZSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBtZW1vcnkgbWFuYWdlbWVudC4gVGhlIGNvZGUgbWVudGlvbnMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYC4gVGhvc2UgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmdW5jdGlvbnMsIGV4cG9ydGVkIGFuZCBub24tc3RhdGljLCBjYWxsZWQgdGhyb3VnaCBgbW0tXHUwMDNlZ2V0X3VubWFwcGVkX2FyZWFgIG9yIGRpcmVjdGx5IGBnZXRfdW5tYXBwZWRfYXJlYWAuIFRoYXQncyBpbnRlcmVzdGluZywgYnV0IHRoZSBxdWVzdGlvbiBpcywgYXJlIHRoZXNlIGZ1bmN0aW9ucyAqYWN0dWFsbHkqIGhvdCBwYXRocz8gVGhhdCdzIHdoYXQgSSBuZWVkIHRvIGRldGVybWluZSBiZWZvcmUgSSBldmVuIHRoaW5rIGFib3V0IHRhcmdldGluZyB0aGVtIGZvciBmdXp6aW5nLlxuXG5NeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzIHRvIHJldmlldyB0aGUgaW5zdHJ1Y3Rpb25zLiBUaGUgZ3VpZGFuY2UgZW1waGFzaXplcyBmb2N1c2luZyBmdXp6aW5nIG9uIHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCAqc2hvdWxkKiBiZSBoZWF2aWx5IGZ1enplZCwgc28gSSBuZWVkIHRvIGF2b2lkIGp1c3QgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucywgb3RoZXJ3aXNlIHRoZSB0ZXN0cyB3aWxsIGJlIHNrZXdlZC4gVGhleSBzdWdnZXN0IGdvaW5nIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgcmF0aGVyIHRoYW4gaW50ZXJuYWwgc3RhdGljIGhlbHBlcnMsIGJlY2F1c2UgdGhlIGhlbHBlcnMgZ2V0IGlubGluZWQuIFRoaXMgbWVhbnMgdGhleSB3b24ndCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMuXG5cblNvLCBhcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBzeW1ib2xzIGluIHZtbGludXg/IFRoYXTigJlzIHdoYXQgSSBuZWVkIHRvIHZlcmlmeS4gTXkgbmV4dCBzdGVwIHdpbGwgYmUgdG8gY2hlY2sgd2hlcmUgdGhleSBhcmUgZGVjbGFyZWQgYW5kIHVzZWQgdG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlaXIgc2lnbmlmaWNhbmNlLiBLbm93aW5nIHRoZSBjYWxsIGdyYXBoIHdpbGwgaGVscCBtZSBkZXRlcm1pbmUgaWYgdGhleSBhcmUgd29ydGggaW5jbHVkaW5nIGluIGBGb2N1c1N5bWJvbHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTU5NSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA2OjEwLjcyMzAxNTA4MVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NzMwMjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM9MTI2PXVuc2lnbmVkIGxvbmdcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jOjEyNzphcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMtMTI4LVxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYz0xNjc9dW5zaWduZWQgbG9uZ1xcbmFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmM6MTY4OmFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyMCxcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTE2OS1cXHRcXHRcXHQgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYy0yNDAtXFx0ICovXFxuYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuYzoyNDE6XFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoZmlscCwgYWRkcjAsIGxlbiwgcGdvZmYsIGZsYWdzLCAwKTtcXG5hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jLTI0Mi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA2OjEwLjgzMjc1MTQ3M1oiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjEyMTQ3NzU3MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6XG5cbioqRXhwbG9yaW5nIEtlcm5lbCBNZW1vcnkgQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYXNwZWN0IGFnYWluLiBJJ3ZlIGJlZW4gZm9jdXNpbmcgb24gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBpdHMgcm9sZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgcmVhbGx5IHNvbGlkIGdyYXNwIG9uIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUga2VybmVsLiBJIG1lYW4sIHVuZGVyc3RhbmRpbmcgaXRzIGludGVybmFsIHdvcmtpbmdzIGlzIG9uZSB0aGluZywgYnV0IGtub3dpbmcgdGhlIGNhbGxpbmcgY29udGV4dHMgaXMgY3J1Y2lhbCBmb3IgYSBjb21wbGV0ZSBwaWN0dXJlLiBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIHRyYWNlIGl0cyByZWZlcmVuY2VzIHRvIGlkZW50aWZ5IHRoZSBrZXkgc3Vic3lzdGVtcyBvciBhcmVhcyB0aGF0IGRlcGVuZCBvbiBpdC4gVGhpcyBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgdG8gbWFwIG91dCBpdHMgcGxhY2UgaW4gdGhlIGdyYW5kIHNjaGVtZSBvZiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hlcmUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGlzIGJlaW5nIGNhbGxlZCB0aHJvdWdob3V0IHRoZSBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjQ3OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjEyLjA0NzUzNjc5MloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0NTAzNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21tYXAuYz03Mzc9dW5zaWduZWQgbG9uZ1xcbm1tL21tYXAuYzo3Mzg6YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbm1tL21tYXAuYy03MzktXFx0XFx0ICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxubW0vbW1hcC5jPTgwNT11bnNpZ25lZCBsb25nXFxubW0vbW1hcC5jOjgwNjphcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tbWFwLmMtODA3LVxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4tLVxcbm1tL21tYXAuYz04MTU9dW5zaWduZWQgbG9uZyBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbW1hcC5jLTgxOS1cXHRpZiAobW1fZmxhZ3NfdGVzdChNTUZfVE9QRE9XTiwgY3VycmVudC1cXHUwMDNlbW0pKVxcbm1tL21tYXAuYzo4MjA6XFx0XFx0cmV0dXJuIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bihmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLFxcbm1tL21tYXAuYy04MjEtXFx0XFx0XFx0XFx0ZmxhZ3MsIHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxubW0vbW1hcC5jOjgyMjpcXHRyZXR1cm4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYShmaWxwLCBhZGRyLCBsZW4sIHBnb2ZmLCBmbGFncyxcXG5tbS9tbWFwLmMtODIzLVxcdFxcdFxcdHZtYV9mbGFnc190b19sZWdhY3kodm1hX2ZsYWdzKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjEyLjE2MjA0NzI2M1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjU4NzU3OTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIEl0cyBVc2FnZSBpbiBodWdldGxiZnMqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgIGZ1bmN0aW9ucyBhbmQgc3BlY2lmaWNhbGx5IGhvdyB0aGUgaHVnZSBwYWdlcyBmaWxlIHN5c3RlbSAoYGh1Z2V0bGJmc2ApIGxldmVyYWdlcyBpdC4gSSBrbm93IHRoZSBjb3JlIHByaW5jaXBsZTogaXQncyBhbGwgYWJvdXQgZmluZGluZyBhIHN1aXRhYmxlLCB1bm1hcHBlZCByZWdpb24gb2YgdmlydHVhbCBhZGRyZXNzIHNwYWNlLiBCdXQgdGhlIGRldGFpbHMsIHRoZSBudWFuY2VzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbiwgYW5kIGhvdyBpdCdzICp1c2VkKiBieSBhIHNwZWNpYWxpemVkIHN5c3RlbSBsaWtlIGh1Z2V0bGJmcyBhcmUgd2hhdCBJIG5lZWQgdG8gc29saWRpZnkgaW4gbXkgbWluZC5cblxuSXMgaXQgYSBzdHJhaWdodGZvcndhcmQgY2FsbCwganVzdCBmaW5kaW5nIHRoZSBnYXA/IE9yIGFyZSB0aGVyZSBtb3JlIGNvbXBsZXggY29uc2lkZXJhdGlvbnMsIHBlcmhhcHMgaW52b2x2aW5nIE5VTUEgYWZmaW5pdHkgb3IgcGFnZSBzaXplIGNvbnN0cmFpbnRzIHNwZWNpZmljIHRvIGh1Z2UgcGFnZXM/IERvZXMgdGhlIHN5c3RlbSBuZWVkIHRvIGNvbnNpZGVyIGhvdyB0aGUgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW50ZXJhY3RzIHdpdGggb3RoZXIgbWVtb3J5IHJlZ2lvbnMsIHNoYXJlZCBtZW1vcnksIG9yIGFub255bW91cyBtYXBwaW5ncz8gSSdsbCBwcm9iYWJseSBiZSBjaGVja2luZyBob3cgYGdldF91bm1hcHBlZF9hcmVhYCBpdHNlbGYgd29ya3MsIGJ1dCBtb3JlIGltcG9ydGFudGx5LCBob3cgYGh1Z2V0bGJmc2Agc2V0cyB1cCB0aGUgcGFyYW1ldGVycyB3aGVuIGNhbGxpbmcgaXQuIFdoYXQgZmxhZ3MgYXJlIHVzZWQ/IEFyZSB0aGVyZSBjdXN0b20gY29uc3RyYWludHMgaW1wb3NlZCBvbiB0aGUgc2VhcmNoPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGZvciBmcmFnbWVudGF0aW9uLCBwZXJmb3JtYW5jZSwgYW5kIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgZWZmaWNpZW5jeT8gQSBmb2N1c2VkIGV4YW1pbmF0aW9uIG9mIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGZ1bmN0aW9uIGNhbGwsIGNvbnNpZGVyaW5nIHRoZSBzcGVjaWZpYyBjb250ZXh0IG9mIGh1Z2UgcGFnZXMsIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXJzIEknbSBsb29raW5nIGZvci4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzA1NSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjA4OjQ0Ljc0OTYzMTA5N1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ0MjA3NTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX2dldF91bm1hcHBlZF9hcmVhXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE3Mj11bnNpZ25lZCBsb25nXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTczOmh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNzQtXFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTIwNz1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMC1cXHQuZnN5bmNcXHRcXHRcXHQ9IG5vb3BfZnN5bmMsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpcXHQuZ2V0X3VubWFwcGVkX2FyZWFcXHQ9IGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxMi1cXHQubGxzZWVrXFx0XFx0XFx0PSBkZWZhdWx0X2xsc2VlayxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZXRsYi5oPTU0Nz11bnNpZ25lZCBsb25nXFxuaW5jbHVkZS9saW51eC9odWdldGxiLmg6NTQ4Omh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaC01NDktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzowODo0Ny4xOTE3MTUyNTJaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODcyODExNjMyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgSHVnZVRMQiBGaWxlc3lzdGVtIEltcGxlbWVudGF0aW9uKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGUgSHVnZVRMQiBmaWxlc3lzdGVtIGltcGxlbWVudGF0aW9uLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IGlub2RlcyBhcmUgaGFuZGxlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGdpdmVuIHRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRoZSBjb3JlIGlub2RlLXJlbGF0ZWQgbG9naWMgdG8gcmVzaWRlLiBOb3csIGxldCdzIHNlZS4uLiBhIHF1aWNrIG1lbnRhbCBzY2FuIHN1Z2dlc3RzIHRoYXQgbGluZSAxNzMgbWlnaHQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIGNsb3NlciBsb29rLiBUaGF0IGxpa2VseSBpbnZvbHZlcyBzb21lIGZ1bmN0aW9uIGRlZmluaXRpb24gb3IgdmFyaWFibGUgaW5pdGlhbGl6YXRpb24gd2hpY2ggd2lsbCBoZWxwIG1lIHF1aWNrbHkgdW5kZXJzdGFuZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb250cm9sIGZsb3cuIExldCdzIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzcyOSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjEwOjE0LjQ3Mjg4MTE5OVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAzNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTcwOlxcdCAqL1xcbiAxNzE6XFx0XFxuIDE3MjpcXHR1bnNpZ25lZCBsb25nXFxuIDE3MzpcXHRodWdldGxiX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIDE3NDpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXFxuIDE3NTpcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBmbGFncylcXG4gMTc2OlxcdHtcXG4gMTc3OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjAgPSAwO1xcbiAxNzg6XFx0XFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9maWxlKGZpbGUpO1xcbiAxNzk6XFx0XFxuIDE4MDpcXHRcXHRpZiAobGVuIFxcdTAwMjYgfmh1Z2VfcGFnZV9tYXNrKGgpKVxcbiAxODE6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDE4MjpcXHRcXHRpZiAoKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKSBcXHUwMDI2XFx1MDAyNiAoYWRkciBcXHUwMDI2IH5odWdlX3BhZ2VfbWFzayhoKSkpXFxuIDE4MzpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMTg0OlxcdFxcdGlmIChhZGRyKVxcbiAxODU6XFx0XFx0XFx0YWRkcjAgPSBBTElHTihhZGRyLCBodWdlX3BhZ2Vfc2l6ZShoKSk7XFxuIDE4NjpcXHRcXG4gMTg3OlxcdFxcdHJldHVybiBtbV9nZXRfdW5tYXBwZWRfYXJlYV92bWFmbGFncyhmaWxlLCBhZGRyMCwgbGVuLCBwZ29mZiwgZmxhZ3MsXFxuIDE4ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgIEVNUFRZX1ZNQV9GTEFHUyk7XFxuIDE4OTpcXHR9XFxuIDE5MDpcXHRcXG4gMTkxOlxcdC8qXFxuIDE5MjpcXHQgKiBTb21lb25lIHdhbnRzIHRvIHJlYWQgQGJ5dGVzIGZyb20gYSBIV1BPSVNPTiBodWdldGxiIEBmb2xpbyBmcm9tIEBvZmZzZXQuXFxuIDE5MzpcXHQgKiBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvbmUgY2FuIHJlYWQgd2l0aG91dCB0b3VjaGluZyB0aGUgMXN0IHJhd1xcbiAxOTQ6XFx0ICogSFdQT0lTT04gcGFnZS5cXG4gMTk1OlxcdCAqL1xcbiAxOTY6XFx0c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcXG4gMTk3OlxcdFxcdFxcdHNpemVfdCBieXRlcylcXG4gMTk4OlxcdHtcXG4gMTk5OlxcdFxcdHN0cnVjdCBwYWdlICpwYWdlID0gZm9saW9fcGFnZShmb2xpbywgb2Zmc2V0IC8gUEFHRV9TSVpFKTtcXG4gMjAwOlxcdFxcdHNpemVfdCBzYWZlX2J5dGVzO1xcbiAyMDE6XFx0XFxuIDIwMjpcXHRcXHRpZiAoaXNfcmF3X2h3cG9pc29uX3BhZ2VfaW5faHVnZXBhZ2UocGFnZSkpXFxuIDIwMzpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMjA0OlxcdFxcdC8qIFNhZmUgdG8gcmVhZCB0aGUgcmVtYWluaW5nIGJ5dGVzIGluIHRoaXMgcGFnZS4gKi9cXG4gMjA1OlxcdFxcdHNhZmVfYnl0ZXMgPSBQQUdFX1NJWkUgLSAob2Zmc2V0ICUgUEFHRV9TSVpFKTtcXG4gMjA2OlxcdFxcdHBhZ2UrKztcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0LyogQ2hlY2sgZWFjaCByZW1haW5pbmcgcGFnZSBhcyBsb25nIGFzIHdlIGFyZSBub3QgZG9uZSB5ZXQuICovXFxuIDIwOTpcXHRcXHRmb3IgKDsgc2FmZV9ieXRlcyBcXHUwMDNjIGJ5dGVzOyBzYWZlX2J5dGVzICs9IFBBR0VfU0laRSwgcGFnZSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxMDoxNC40NzI5OTM2NjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTY4NTUwMjg1NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEh1Z2VUTEIgbW1hcCBCZWhhdmlvcioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgaG93IGBtbWFwYCBpbnRlcmFjdHMgd2l0aCBodWdldGxiZnMgZmlsZXMuIFNwZWNpZmljYWxseSwgSSdtIHRyYWNpbmcgdGhlIHBhdGggZnJvbSB0aGUgYG1tYXBgIGNhbGwgZG93biBpbnRvIHRoZSBrZXJuZWwuIFRoZSBnb2FsIGhlcmUgaXMgdG8gZGV0ZXJtaW5lIHRoZSBpbXBhY3Qgb2YgYSBjaGFuZ2UgcmVsYXRlZCB0byBhbGlnbm1lbnQuXG5cblNvLCBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAga2lja3MgdGhpbmdzIG9mZiBhbmQsIGFzIGV4cGVjdGVkLCBpdCdzIGNhbGxpbmcgYG1tX2dldF91bm1hcHBlZF9hcmVhX3ZtYWZsYWdzYCB3aGljaCB0aGVuIGhhbmRzIHRoaW5ncyB0byBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBvciBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAsIHBhc3NpbmcgdGhlIGZpbGUgcG9pbnRlciAoYGZpbHBgKS4gVGhpcyBzZWVtcyBzdGFuZGFyZC5cblxuTm93LCB0aGUgaW50ZXJlc3RpbmcgcGFydC4gSW5zaWRlIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCAoYW5kIHRoZSB0b3AtZG93biB2YXJpYW50KSwgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCBpcyBnZXR0aW5nIGV2YWx1YXRlZC4gR29vZC4gVGhpcyBpcyB0aGUga2V5LiBBbmQsIG5hdHVyYWxseSwgZm9yIGEgaHVnZXRsYmZzIGZpbGUsIHRoaXMgZXZhbHVhdGVzIHRvIGB0cnVlYC5cblxuSSdtIHJlY2FsbGluZyB0aGF0IGEgcGF0Y2ggcHJldmlvdXNseSBhZGRlZCBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YC4gQnV0IG5vdywgdGhlcmUncyBhIGNvbmRpdGlvbmFsLiBUaGUgY29kZSAqbm93KiBjaGVja3MgYGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpYC4gVGhpcyBtZWFucywgYW5kIGl0J3MgaW1wb3J0YW50IHRvIGJlIGV4cGxpY2l0LCB0aGF0IGZvciBhIGh1Z2V0bGJmcyBmaWxlIChgZmlscGApLCB0aGUgYWRkaXRpb24gb2YgYGdldF9hbGlnbl9iaXRzKClgICppcyBza2lwcGVkKi4gYGluZm8uYWxpZ25fb2Zmc2V0YCB3aWxsICoqbm90KiogYmUgbW9kaWZpZWQsIHdoaWNoIGNoYW5nZXMgdGhlIG91dGNvbWUgb2YgdGhlIGFsaWdubWVudCBjYWxjdWxhdGlvbiFcblxuT2theSwgc28gSSB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3Mgb2YgdGhlIGNvZGUuIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3Npbmcgc29tZXRoaW5nIG9idmlvdXMsIGxpa2UgYSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbi4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBidWlsZCBwcm9jZXNzIGZvciBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEkgZXhwZWN0IGBhcmNoX2dldF91bm1hcHBlZF9hcmVhYCBhbmQgdGhlIHRvcGRvd24gdmVyc2lvbiwgYXJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIGhvdyBgc3lzX3g4Nl82NC5vYCBpcyBidWlsdC4gT2ZmIHRvIGBhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGVgIHRvIGNoZWNrIGZvciBhbnkgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZmxhZ3Mgb3IgYnVpbGQgZGVwZW5kZW5jaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDU4MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjExOjExLjMyODAyNzc3NloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE1MzAwMzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5c194ODZfNjRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva2VybmVsL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU9ODA9b2JqLSQoQ09ORklHX0lBMzJfRU1VTEFUSU9OKVxcdCs9IHN5c19pYTMyLm8gc2lnbmFsXzMyLm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGU6ODE6b2JqLSQoQ09ORklHX1g4Nl82NClcXHQrPSBzeXNfeDg2XzY0Lm9cXG5hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUtODItb2JqLSQoQ09ORklHX1g4Nl9FU1BGSVg2NClcXHQrPSBlc3BmaXhfNjQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxMToxMS40NDMzMzg0ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTg4ODQyMzIwMDkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoaW5raW5nIGFib3V0IGl0cyBmdXp6aW5nIHBvdGVudGlhbC4gV2UncmUgZGVhbGluZyB3aXRoIGBzeXNfeDg2XzY0Lm9gIHdoaWNoIGlzIGJ1aWx0IHdpdGggYENPTkZJR19YODZfNjRgLCBhbmQgd2UgaGF2ZSBgSFVHRVRMQkZTYCBlbmFibGVkIHRocm91Z2ggYENPTkZJR19IVUdFVExCRlNgIGZvciBodWdldGxiZnMgc3VwcG9ydC4gIEZpcnN0LCBsZXQgbWUgY29uZmlybSB0aGVyZSBhcmUgbm8gb3RoZXIgY3J1Y2lhbCBjb25maWd1cmF0aW9ucyBhdCBwbGF5IGhlcmUuXG5cbkkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBjaGFuZ2UgaXMgXCJXb3J0aEZ1enppbmdcIi4gIExldCdzIHJ1biB0aHJvdWdoIHRoZSBjcml0ZXJpYS4gSXQgbG9va3MgbGlrZSBpdCBkb2Vzbid0IGludm9sdmUgY2hhbmdlcyB0byBkb2N1bWVudGF0aW9uLCBLY29uZmlnLCBvciBjb21tZW50cy4gSXQncyBub3QganVzdCBjb3NtZXRpYyBsaWtlIGxvZ2dpbmcsIG5vciBkb2VzIGl0IGFsdGVyIGFueSBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgaW4gYSBub24tZnVuY3Rpb25hbCB3YXkuIE5vdywgaGVyZSdzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3Rpbmc6IHRoZSBwYXRjaCBhZGRyZXNzZXMgY29kZSBwYXRocyBpbiBRRU1VL3g4Nl82NCB1c2VyIHNwYWNlIHRocm91Z2ggdGhlIGBtbWFwYCBzeXNjYWxsIG9uIGh1Z2V0bGJmcywgc28gaXQncyAqbm90KiBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gIFRoaXMgZWxpbWluYXRlcyB0aGUgbGFzdCBwb2ludC4gVGhlcmVmb3JlLCBgV29ydGhGdXp6aW5nYCBzZWVtcyB0byBiZSBgdHJ1ZWAhXG5cblNwZWNpZmljYWxseSwgdGhpcyBjaGFuZ2UgbW9kaWZpZXMgY29yZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIChpbiBgYXJjaC9tbWApIGR1cmluZyBhZGRyZXNzIHNwYWNlIGFsbG9jYXRpb24gd2hlbiBtYXBwaW5nIGh1Z2V0bGJmcyBmaWxlcyBvbiB4ODZfNjQuIEl0IGlzIGRlc2lnbmVkIHRvIHByZXZlbnQgYGFsaWduX29mZnNldGAgY29ycnVwdGlvbiBvciBiaWFzLCB3aGVuIG1hcHBpbmcgaHVnZXRsYiBmaWxlcy4gVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZnVuY3Rpb25hbCwgYW5kICp3b3J0aCogZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGFyZSBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAsIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gLCBhbmQgYGh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFgLiBMZXQncyBjb25maXJtIHRoZXNlIGFyZSBhY3R1YWxseSB1c2FibGU6IGFuZCB5ZXMsIGFmdGVyIGEgcXVpY2sgY2hlY2sgb2YgdGhlIHNvdXJjZSBjb2RlLCB0aGV5IGFyZSBub24tc3RhdGljIGFuZCBleHBvc2VkIGZvciB0aGUgc3lzdGVtIHRvIHVzZTogYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBhcmUgbm9uLXN0YXRpYyBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AsIGFuZCBgaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYWAgaXMgYWxzbyBub24tc3RhdGljIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgc3VyZSwgdGhlIGBFbmFibGVDb25maWdzYCBhcmUgYEhVR0VUTEJGU2AgYW5kIGBYODZfNjRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBjb25maWd1cmF0aW9ucyBhcmUgdmFsaWQsIGBIVUdFVExCRlNgIGVuYWJsZXMgdGhlIGh1Z2V0bGIgZmlsZXN5c3RlbSBhbmQgYWxsb3dzIGBpc19maWxlX2h1Z2VwYWdlcygpYCB0byByZXR1cm4gdHJ1ZS4gYFg4Nl82NGAgZW5hYmxlcyBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIEFsbCBjbGVhciFcblxuT2theSwgdGltZSB0byBkb3VibGUtY2hlY2sgZXZlcnl0aGluZyBvbmUgbGFzdCB0aW1lLiBJJ20gcmVhZHkgdG8gcHJlcGFyZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NTE1LCJPdXRwdXRUb2tlbnMiOjE1OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY2MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxNDoyMC4yODU2NjE1NFoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDQ2NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIixcbiAgICBcIlg4Nl82NFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFcIixcbiAgICBcImFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93blwiLFxuICAgIFwiaHVnZXRsYl9nZXRfdW5tYXBwZWRfYXJlYVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHg4Ni02NCBhZGRyZXNzIGFsbG9jYXRpb24gbG9naWMgaW4gYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpIGFuZCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKSB0byBwcmV2ZW50IGFwcGx5aW5nIGdldF9hbGlnbl9iaXRzKCkgb2Zmc2V0IHdoZW4gbWFwcGluZyBIdWdlVExCIGZpbGVzLiBUaGlzIGFsdGVycyBtbWFwIGFkZHJlc3Mgc2VsZWN0aW9uIGZvciBodWdldGxiZnMgbWFwcGluZ3MgYW5kIGlzIHJlYWNoYWJsZSB2aWEgdXNlcnNwYWNlIG1tYXAgc3lzY2FsbHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSFVHRVRMQkZTXCIsXG4gICAgXCJYODZfNjRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhcmNoX2dldF91bm1hcHBlZF9hcmVhXCIsXG4gICAgXCJhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25cIixcbiAgICBcImh1Z2V0bGJfZ2V0X3VubWFwcGVkX2FyZWFcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB4ODYtNjQgYWRkcmVzcyBhbGxvY2F0aW9uIGxvZ2ljIGluIGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKSBhbmQgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKCkgdG8gcHJldmVudCBhcHBseWluZyBnZXRfYWxpZ25fYml0cygpIG9mZnNldCB3aGVuIG1hcHBpbmcgSHVnZVRMQiBmaWxlcy4gVGhpcyBhbHRlcnMgbW1hcCBhZGRyZXNzIHNlbGVjdGlvbiBmb3IgaHVnZXRsYmZzIG1hcHBpbmdzIGFuZCBpcyByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBtbWFwIHN5c2NhbGxzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxNDoyMC4zNjIxMTUzNzRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2NjU3MTg0ODIyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE0OjIwLjM2MjYxNjQ4NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI2NjU3MTM0MjY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWEoKWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oKWAgaW4gYGFyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmNgIHRvIHByZXZlbnQgYWRkaW5nIGBnZXRfYWxpZ25fYml0cygpYCB0byBgaW5mby5hbGlnbl9vZmZzZXRgIGZvciBodWdlcGFnZS1iYWNrZWQgZmlsZXMgKGBpc19maWxlX2h1Z2VwYWdlcyhmaWxwKWApLlxcblxcbkluIGJvdGggZnVuY3Rpb25zLCBgc3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvYCBpcyBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgb24gdGhlIHN0YWNrIHZpYSBgPSB7fWAuIFRoZSBjaGFuZ2VzIG9ubHkgYWRqdXN0IGFsaWdubWVudCBjYWxjdWxhdGlvbiBsb2dpYyBmb3IgdmlydHVhbCBtZW1vcnkgYWRkcmVzcyBhbGxvY2F0aW9uIHdpdGhvdXQgYWxsb2NhdGluZywgcmVhZGluZywgb3IgbGVha2luZyBhbnkgdW5pbml0aWFsaXplZCBzdGFjayBvciBoZWFwIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3Iga2VybmVsIGxvZ2ljLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDM4MDFkYzY1NmM4YzAwMzYwZGZjYzYzNDRiMDM0YWQ5NzFmMGQ2ZWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyOCAxNjo0ODozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9zeXNfeDg2XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXG5pbmRleCA3NzZhZTZmYTdmMmQ2Li42YjJiZTA2NTMwNGYxIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuKysrIGIvYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY1xuQEAgLTE1Nyw3ICsxNTcsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLFxuIFx0fVxuIFx0aWYgKGZpbHApIHtcbiBcdFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XG4tXHRcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XG4rXHRcdGlmICghaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpXG4rXHRcdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbiBcdH1cbiBcbiBcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFx1MDAyNmluZm8pO1xuQEAgLTIyMiw3ICsyMjMsOCBAQCBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd24oc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcjAsXG4gXG4gXHRpZiAoZmlscCkge1xuIFx0XHRpbmZvLmFsaWduX21hc2sgPSBnZXRfYWxpZ25fbWFzayhmaWxwKTtcbi1cdFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcbitcdFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcbitcdFx0XHRpbmZvLmFsaWduX29mZnNldCArPSBnZXRfYWxpZ25fYml0cygpO1xuIFx0fVxuIFx0YWRkciA9IHZtX3VubWFwcGVkX2FyZWEoXHUwMDI2aW5mbyk7XG4gXHRpZiAoIShhZGRyIFx1MDAyNiB+UEFHRV9NQVNLKSlcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE0OjIwLjM2MjYxNzM1NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MjA2MDIxODk1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgY29kZSBjaGFuZ2U6XG5cbioqQW5hbHl6aW5nIHRoZSB4ODYtNjQgQXJjaGl0ZWN0dXJlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSdtIHRoaW5raW5nLCBcIkxldCdzIGdyYWIgdGhlIHVzdWFsIHRvb2xzLlwiIFRoYXQgbWVhbnMgSSdtIGZpcmluZyB1cCBteSBkaWZmIHZpZXdlcnMgYW5kIHdoYXRldmVyIHN0YXRpYyBhbmFseXNpcyBJIGhhdmUgYXQgaGFuZCB0byBzZWUgd2hhdCB3ZSdyZSByZWFsbHkgZGVhbGluZyB3aXRoLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgYW5kIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhX3RvcGRvd25gIGZ1bmN0aW9ucy4gU28sIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gbWVtb3J5IGFsbG9jYXRpb24sIHNwZWNpZmljYWxseSB1c2VyLXNwYWNlIGFkZHJlc3Mgc3BhY2UgYWxsb2NhdGlvbiBvbiB0aGUgeDg2LTY0IGFyY2hpdGVjdHVyZS5cblxuTm93LCBteSBuZXh0IG1vdmUgaXMgdG8gY3JhY2sgb3BlbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgYW5kIHN0YXJ0IHJlYWRpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSAqY29udGV4dCogb2YgdGhlc2UgY2hhbmdlcy4gV2hhdCB3ZXJlIHRoZXNlIGZ1bmN0aW9ucyAqZG9pbmcqIGJlZm9yZSwgYW5kIHdoYXQgYXJlIHRoZXkgKmRvaW5nKiBub3c/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGV4aXN0aW5nIG1lbW9yeSBtYXBwaW5nIHN0cmF0ZWd5LCB0aGUgYXZhaWxhYmxlIGFkZHJlc3Mgc3BhY2UsIGFuZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucy4gSSdtIGxvb2tpbmcgZm9yIHdoZXJlIHRoaXMgY2hhbmdlIHRvdWNoZXMgdGhlIGFkZHJlc3Mgc3BhY2UgbGF5b3V0LCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoaW5ncyBsaWtlIEFTTFIsIG9yIG90aGVyIHNlY3VyaXR5IGhhcmRlbmluZy4gSSdsbCBiZSBzY3J1dGluaXppbmcgdGhlIGxvZ2ljLCBsb29raW5nIGZvciBwb3RlbnRpYWwgYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgcmVsYXRlZCB0byBhZGRyZXNzIHNwYWNlIGxlYWtzLCBvciBwb3NzaWJseSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlcy4gVGhhdCdzIG15IGluaXRpYWwgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyNjMsIk91dHB1dFRva2VucyI6NDcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE1OjIyLjQyMjgzOTU5NFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MDQ2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0MCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNDA6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGVuZClcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoYWRkcikge1xcbiAxNDQ6XFx0XFx0XFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XFxuIDE0NTpcXHRcXHRcXHR2bWEgPSBmaW5kX3ZtYShtbSwgYWRkcik7XFxuIDE0NjpcXHRcXHRcXHRpZiAoZW5kIC0gbGVuIFxcdTAwM2U9IGFkZHIgXFx1MDAyNlxcdTAwMjZcXG4gMTQ3OlxcdFxcdFxcdCAgICAoIXZtYSB8fCBhZGRyICsgbGVuIFxcdTAwM2M9IHZtX3N0YXJ0X2dhcCh2bWEpKSlcXG4gMTQ4OlxcdFxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxNDk6XFx0XFx0fVxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpbmZvLmxlbmd0aCA9IGxlbjtcXG4gMTUyOlxcdFxcdGluZm8ubG93X2xpbWl0ID0gYmVnaW47XFxuIDE1MzpcXHRcXHRpbmZvLmhpZ2hfbGltaXQgPSBlbmQ7XFxuIDE1NDpcXHRcXHRpZiAoIShmaWxwIFxcdTAwMjZcXHUwMDI2IGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKSkge1xcbiAxNTU6XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgPSBwZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiAxNTY6XFx0XFx0XFx0aW5mby5zdGFydF9nYXAgPSBzdGFja19ndWFyZF9wbGFjZW1lbnQodm1fZmxhZ3MpO1xcbiAxNTc6XFx0XFx0fVxcbiAxNTg6XFx0XFx0aWYgKGZpbHApIHtcXG4gMTU5OlxcdFxcdFxcdGluZm8uYWxpZ25fbWFzayA9IGdldF9hbGlnbl9tYXNrKGZpbHApO1xcbiAxNjA6XFx0XFx0XFx0aWYgKCFpc19maWxlX2h1Z2VwYWdlcyhmaWxwKSlcXG4gMTYxOlxcdFxcdFxcdFxcdGluZm8uYWxpZ25fb2Zmc2V0ICs9IGdldF9hbGlnbl9iaXRzKCk7XFxuIDE2MjpcXHRcXHR9XFxuIDE2MzpcXHRcXG4gMTY0OlxcdFxcdHJldHVybiB2bV91bm1hcHBlZF9hcmVhKFxcdTAwMjZpbmZvKTtcXG4gMTY1OlxcdH1cXG4gMTY2OlxcdFxcbiAxNjc6XFx0dW5zaWduZWQgbG9uZ1xcbiAxNjg6XFx0YXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBsb25nIGFkZHIwLFxcbiAxNjk6XFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4gMTcwOlxcdFxcdFxcdFxcdCAgdW5zaWduZWQgbG9uZyBmbGFncywgdm1fZmxhZ3NfdCB2bV9mbGFncylcXG4gMTcxOlxcdHtcXG4gMTcyOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiAxNzM6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gMTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciA9IGFkZHIwO1xcbiAxNzU6XFx0XFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XFxuIDE3NjpcXHRcXG4gMTc3OlxcdFxcdC8qIHJlcXVlc3RlZCBsZW5ndGggdG9vIGJpZyBmb3IgZW50aXJlIGFkZHJlc3Mgc3BhY2UgKi9cXG4gMTc4OlxcdFxcdGlmIChsZW4gXFx1MDAzZSBUQVNLX1NJWkUpXFxuIDE3OTpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gMTgwOlxcdFxcbiAxODE6XFx0XFx0LyogTm8gYWRkcmVzcyBjaGVja2luZy4gU2VlIGNvbW1lbnQgYXQgbW1hcF9hZGRyZXNzX2hpbnRfdmFsaWQoKSAqL1xcbiAxODI6XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTUFQX0ZJWEVEKVxcbiAxODM6XFx0XFx0XFx0cmV0dXJuIGFkZHI7XFxuIDE4NDpcXHRcXG4gMTg1OlxcdFxcdC8qIGZvciBNQVBfMzJCSVQgbWFwcGluZ3Mgd2UgZm9yY2UgdGhlIGxlZ2FjeSBtbWFwIGJhc2UgKi9cXG4gMTg2OlxcdFxcdGlmICghaW5fMzJiaXRfc3lzY2FsbCgpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1BUF8zMkJJVCkpXFxuIDE4NzpcXHRcXHRcXHRnb3RvIGJvdHRvbXVwO1xcbiAxODg6XFx0XFxuIDE4OTpcXHRcXHQvKiByZXF1ZXN0aW5nIGEgc3BlY2lmaWMgYWRkcmVzcyAqL1xcbiAxOTA6XFx0XFx0aWYgKGFkZHIpIHtcXG4gMTkxOlxcdFxcdFxcdGFkZHIgXFx1MDAyNj0gUEFHRV9NQVNLO1xcbiAxOTI6XFx0XFx0XFx0aWYgKCFtbWFwX2FkZHJlc3NfaGludF92YWxpZChhZGRyLCBsZW4pKVxcbiAxOTM6XFx0XFx0XFx0XFx0Z290byBnZXRfdW5tYXBwZWRfYXJlYTtcXG4gMTk0OlxcdFxcbiAxOTU6XFx0XFx0XFx0dm1hID0gZmluZF92bWEobW0sIGFkZHIpO1xcbiAxOTY6XFx0XFx0XFx0aWYgKCF2bWEgfHwgYWRkciArIGxlbiBcXHUwMDNjPSB2bV9zdGFydF9nYXAodm1hKSlcXG4gMTk3OlxcdFxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxOTg6XFx0XFx0fVxcbiAxOTk6XFx0Z2V0X3VubWFwcGVkX2FyZWE6XFxuIDIwMDpcXHRcXG4gMjAxOlxcdFxcdGluZm8uZmxhZ3MgPSBWTV9VTk1BUFBFRF9BUkVBX1RPUERPV047XFxuIDIwMjpcXHRcXHRpbmZvLmxlbmd0aCA9IGxlbjtcXG4gMjAzOlxcdFxcdGlmICghaW5fMzJiaXRfc3lzY2FsbCgpIFxcdTAwMjZcXHUwMDI2IChmbGFncyBcXHUwMDI2IE1BUF9BQk9WRTRHKSlcXG4gMjA0OlxcdFxcdFxcdGluZm8ubG93X2xpbWl0ID0gU1pfNEc7XFxuIDIwNTpcXHRcXHRlbHNlXFxuIDIwNjpcXHRcXHRcXHRpbmZvLmxvd19saW1pdCA9IFBBR0VfU0laRTtcXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0aW5mby5oaWdoX2xpbWl0ID0gZ2V0X21tYXBfYmFzZSgwKTtcXG4gMjA5OlxcdFxcdGlmICghKGZpbHAgXFx1MDAyNlxcdTAwMjYgaXNfZmlsZV9odWdlcGFnZXMoZmlscCkpKSB7XFxuIDIxMDpcXHRcXHRcXHRpbmZvLnN0YXJ0X2dhcCA9IHN0YWNrX2d1YXJkX3BsYWNlbWVudCh2bV9mbGFncyk7XFxuIDIxMTpcXHRcXHRcXHRpbmZvLmFsaWduX29mZnNldCA9IHBnb2ZmIFxcdTAwM2NcXHUwMDNjIFBBR0VfU0hJRlQ7XFxuIDIxMjpcXHRcXHR9XFxuIDIxMzpcXHRcXG4gMjE0OlxcdFxcdC8qXFxuIDIxNTpcXHRcXHQgKiBJZiBoaW50IGFkZHJlc3MgaXMgYWJvdmUgREVGQVVMVF9NQVBfV0lORE9XLCBsb29rIGZvciB1bm1hcHBlZCBhcmVhXFxuIDIxNjpcXHRcXHQgKiBpbiB0aGUgZnVsbCBhZGRyZXNzIHNwYWNlLlxcbiAyMTc6XFx0XFx0ICpcXG4gMjE4OlxcdFxcdCAqICFpbl8zMmJpdF9zeXNjYWxsKCkgY2hlY2sgdG8gYXZvaWQgaGlnaCBhZGRyZXNzZXMgZm9yIHgzMlxcbiAyMTk6XFx0XFx0ICogKGFuZCBtYWtlIGl0IG5vIG9wIG9uIG5hdGl2ZSBpMzg2KS5cXG4gMjIwOlxcdFxcdCAqL1xcbiAyMjE6XFx0XFx0aWYgKGFkZHIgXFx1MDAzZSBERUZBVUxUX01BUF9XSU5ET1cgXFx1MDAyNlxcdTAwMjYgIWluXzMyYml0X3N5c2NhbGwoKSlcXG4gMjIyOlxcdFxcdFxcdGluZm8uaGlnaF9saW1pdCArPSBUQVNLX1NJWkVfTUFYIC0gREVGQVVMVF9NQVBfV0lORE9XO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRcXHRpZiAoZmlscCkge1xcbiAyMjU6XFx0XFx0XFx0aW5mby5hbGlnbl9tYXNrID0gZ2V0X2FsaWduX21hc2soZmlscCk7XFxuIDIyNjpcXHRcXHRcXHRpZiAoIWlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApKVxcbiAyMjc6XFx0XFx0XFx0XFx0aW5mby5hbGlnbl9vZmZzZXQgKz0gZ2V0X2FsaWduX2JpdHMoKTtcXG4gMjI4OlxcdFxcdH1cXG4gMjI5OlxcdFxcdGFkZHIgPSB2bV91bm1hcHBlZF9hcmVhKFxcdTAwMjZpbmZvKTtcXG4gMjMwOlxcdFxcdGlmICghKGFkZHIgXFx1MDAyNiB+UEFHRV9NQVNLKSlcXG4gMjMxOlxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAyMzI6XFx0XFx0Vk1fQlVHX09OKGFkZHIgIT0gLUVOT01FTSk7XFxuIDIzMzpcXHRcXG4gMjM0OlxcdGJvdHRvbXVwOlxcbiAyMzU6XFx0XFx0LypcXG4gMjM2OlxcdFxcdCAqIEEgZmFpbGVkIG1tYXAoKSB2ZXJ5IGxpa2VseSBjYXVzZXMgYXBwbGljYXRpb24gZmFpbHVyZSxcXG4gMjM3OlxcdFxcdCAqIHNvIGZhbGwgYmFjayB0byB0aGUgYm90dG9tLXVwIGZ1bmN0aW9uIGhlcmUuIFRoaXMgc2NlbmFyaW9cXG4gMjM4OlxcdFxcdCAqIGNhbiBoYXBwZW4gd2l0aCBsYXJnZSBzdGFjayBsaW1pdHMgYW5kIGxhcmdlIG1tYXAoKVxcbiAyMzk6XFx0XFx0ICogYWxsb2NhdGlvbnMuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE1OjIyLjQyMjkyMjM3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3ODAwMDY1ODEzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIEluaXRpYWxpemF0aW9uIGluIHg4Nl82NCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgZ3V0cyBvZiB0aGUgeDg2XzY0IHN5c3RlbSBjYWxsIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGBpbmZvYCB2YXJpYWJsZSBpcyBpbml0aWFsaXplZCB3aXRoaW4gYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgLiBTbywgSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gbGluZXMgMTIwLTE0MCBvZiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsb29rIGF0IHRoZSBjcml0aWNhbCBzZXR1cCBhbmQgaW5pdGlhbGl6YXRpb24gcGhhc2UuIEknbSBleHBlY3RpbmcgdG8gc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHJlcXVpcmVtZW50cyBhcmUgaGFuZGxlZCB0aGVyZSwgcGFydGljdWxhcmx5IGluIHJlbGF0aW9uIHRvIHRoZSBtZW1vcnkgbWFwcGluZyBwcm9jZXNzLiBJJ20gbG9va2luZyBmb3IgYW55IHVudXN1YWwgdHJpY2tzIG9yIGNvbnNpZGVyYXRpb25zIGZvciB0aGlzIHBhcnRpY3VsYXIgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDMsIk91dHB1dFRva2VucyI6NDYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE2OjQwLjQyMzU4MzIyMloiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTA0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEyMCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEyMDpcXHRcXHRpZiAodm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFET1dfU1RBQ0spXFxuIDEyMTpcXHRcXHRcXHRyZXR1cm4gUEFHRV9TSVpFO1xcbiAxMjI6XFx0XFxuIDEyMzpcXHRcXHRyZXR1cm4gMDtcXG4gMTI0OlxcdH1cXG4gMTI1OlxcdFxcbiAxMjY6XFx0dW5zaWduZWQgbG9uZ1xcbiAxMjc6XFx0YXJjaF9nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGxlbixcXG4gMTI4OlxcdFxcdFxcdCAgICAgICB1bnNpZ25lZCBsb25nIHBnb2ZmLCB1bnNpZ25lZCBsb25nIGZsYWdzLCB2bV9mbGFnc190IHZtX2ZsYWdzKVxcbiAxMjk6XFx0e1xcbiAxMzA6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBjdXJyZW50LVxcdTAwM2VtbTtcXG4gMTMxOlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbiAxMzI6XFx0XFx0c3RydWN0IHZtX3VubWFwcGVkX2FyZWFfaW5mbyBpbmZvID0ge307XFxuIDEzMzpcXHRcXHR1bnNpZ25lZCBsb25nIGJlZ2luLCBlbmQ7XFxuIDEzNDpcXHRcXG4gMTM1OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE1BUF9GSVhFRClcXG4gMTM2OlxcdFxcdFxcdHJldHVybiBhZGRyO1xcbiAxMzc6XFx0XFxuIDEzODpcXHRcXHRmaW5kX3N0YXJ0X2VuZChhZGRyLCBmbGFncywgXFx1MDAyNmJlZ2luLCBcXHUwMDI2ZW5kKTtcXG4gMTM5OlxcdFxcbiAxNDA6XFx0XFx0aWYgKGxlbiBcXHUwMDNlIGVuZClcXG4gMTQxOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiAxNDI6XFx0XFxuIDE0MzpcXHRcXHRpZiAoYWRkcikge1xcbiAxNDQ6XFx0XFx0XFx0YWRkciA9IFBBR0VfQUxJR04oYWRkcik7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI4VDE3OjE2OjQwLjQyMzY1MDY5MloiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMjY1MTAyODYxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBbGlnbm1lbnQgT2Zmc2V0IGZvciBIdWdlcGFnZXMgaW4gTWVtb3J5IE1hcHBpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBob3cgaXQgYWZmZWN0cyB0aGUgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duYCBmdW5jdGlvbnMuIEluaXRpYWxseSwgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mbyA9IHt9O2AgaXMgemVyby1pbml0aWFsaXplZCwgd2hpY2ggaXMgc3RhbmRhcmQuIFRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIHNlZW1zIHRvIGJlIGFyb3VuZCBob3cgd2UgaGFuZGxlIGBpbmZvLmFsaWduX29mZnNldGAgd2hlbiBkZWFsaW5nIHdpdGggZmlsZS1iYWNrZWQgaHVnZXBhZ2VzLCBzcGVjaWZpY2FsbHkgdXNpbmcgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYC5cblxuQmVmb3JlIHRoZSBmaXgsIHRoZXJlIHdhcyBhIHBvdGVudGlhbCBpc3N1ZS4gSWYgYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCB3YXMgdHJ1ZSwgYGluZm8uYWxpZ25fb2Zmc2V0YCByZW1haW5lZCBhdCB6ZXJvIGFmdGVyIHRoZSBpbml0aWFsIHplcm8taW5pdGlhbGl6YXRpb24gKGxpbmVzIDE1NC0xNTcgd2VyZSBza2lwcGVkKS4gVGhlbiwgdGhlIGNvZGUgKmxhdGVyKiBhZGRlZCBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCAobGluZXMgMTU4LTE2MSkuIFRoZSBwYXRjaCBub3cgYWRkcyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gdGhlIGBpbmZvLmFsaWduX29mZnNldGAgb25seSBpZiB0aGUgZmlsZSBpcyAqbm90KiBhIGh1Z2VwYWdlLCBlZmZlY3RpdmVseSBwcmV2ZW50aW5nIHRoZSBhZGRpdGlvbiBvZiB0aGUgYml0cyBpbiB0aGF0IHNpdHVhdGlvbi5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgYWJvdXQgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuMS4gIElzIHRoZXJlIGEgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB3cml0dGVuLCBvciBsZWFrZWQgdG8gdXNlcnNwYWNlPyBTaW5jZSBgaW5mb2AgaXMgemVyby1pbml0aWFsaXplZCwgYW5kIHRoaXMgcGF0Y2ggZG9lc24ndCBpbnRyb2R1Y2UgYW55IG5ldyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzLCBpdCBzZWVtcyB3ZSdyZSBzYWZlLiBObyB1bmluaXRpYWxpemVkIGRhdGEgaXMgZXZlciByZWFkIG9yIGxlYWtlZCwgc28gdGhhdCdzIGdvb2QuXG5cbjIuICBBcmUgd2UgY29weWluZyBhbnkgYnVmZmVycyB0byB1c2Vyc3BhY2U/IE5vLCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYWAgcmV0dXJucyBvbmx5IGFuIGB1bnNpZ25lZCBsb25nIGFkZHJgLCBzbyB3ZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGFueSBkaXJlY3QgbWVtb3J5IGxlYWtzIGhlcmUuXG5cbjMuICBDb3VsZCB0aGlzIGNoYW5nZSBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhPyBObywgdGhlIGRlY2lzaW9uIHRvIHNraXAgdGhlIGFsaWdubWVudCBhZGRpdGlvbiBpcyBiYXNlZCBvbiBgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgLCB3aGljaCBleGFtaW5lcyB0aGUgZmlsZSBwb2ludGVyL2ZpbGUgb3BlcmF0aW9ucyB3aGljaCBpcyBpbml0aWFsaXplZCBrZXJuZWwgZGF0YS4gVGhhdCBzaG91bGRuJ3QgbGVhZCB0byBpc3N1ZXMuXG5cbjQuICBIb3cgZG9lcyB0aGlzIGFmZmVjdCBLTVNBTiBvciBLQVNBTj8gS01TQU4gaXMgb3VyIGNvbmNlcm4sIGFzIGl0IGRldGVjdHMgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEJ1dCBzaW5jZSB0aGVyZSBhcmUgbm8gY2hhbmdlcyBpbnRyb2R1Y2VkIHRoYXQgbWFrZSBkYXRhIHVuaW5pdGlhbGl6ZWQgb3IgYWxsb3cgaXQgdG8gYmUgcmVhZCwgdGhlcmUncyBubyBLTVNBTiB3b3JyeSBoZXJlLlxuXG5TbywgaW4gc3VtbWFyeSwgdGhpcyBwYXRjaCBpcyBhIHNhZmUgZml4LiBUaGVyZSdzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIG5vIHVzZXItc3BhY2UgbGVha3MsIGFuZCBubyBjb250cm9sIGZsb3cgaXNzdWVzIHN0ZW1taW5nIGZyb20gdW5pbml0aWFsaXplZCBkYXRhLiAqKk5lZWRzS01TQU4gaXMgZGVmaW5pdGVseSBmYWxzZS4qKiBJJ20gY29uZmlkZW50IGluIHRoaXMgYXNzZXNzbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDg1NCwiT3V0cHV0VG9rZW5zIjoxOTIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yOFQxNzoxODo0Ni45MzM5Mzk0NjZaIiwiU2VxIjo0MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGBhcmNoX2dldF91bm1hcHBlZF9hcmVhKClgIGFuZCBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYV90b3Bkb3duKClgIGluIGBhcmNoL3g4Ni9rZXJuZWwvc3lzX3g4Nl82NC5jYCB0byBwcmV2ZW50IGFkZGluZyBgZ2V0X2FsaWduX2JpdHMoKWAgdG8gYGluZm8uYWxpZ25fb2Zmc2V0YCBmb3IgaHVnZXBhZ2UtYmFja2VkIGZpbGVzIChgaXNfZmlsZV9odWdlcGFnZXMoZmlscClgKS5cXG5cXG5JbiBib3RoIGZ1bmN0aW9ucywgYHN0cnVjdCB2bV91bm1hcHBlZF9hcmVhX2luZm8gaW5mb2AgaXMgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIG9uIHRoZSBzdGFjayB2aWEgYD0ge31gLiBUaGUgY2hhbmdlcyBvbmx5IGFkanVzdCBhbGlnbm1lbnQgY2FsY3VsYXRpb24gbG9naWMgZm9yIHZpcnR1YWwgbWVtb3J5IGFkZHJlc3MgYWxsb2NhdGlvbiB3aXRob3V0IGFsbG9jYXRpbmcsIHJlYWRpbmcsIG9yIGxlYWtpbmcgYW55IHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGtlcm5lbCBsb2dpYy4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBgYXJjaF9nZXRfdW5tYXBwZWRfYXJlYSgpYCBhbmQgYGFyY2hfZ2V0X3VubWFwcGVkX2FyZWFfdG9wZG93bigpYCBpbiBgYXJjaC94ODYva2VybmVsL3N5c194ODZfNjQuY2AgdG8gcHJldmVudCBhZGRpbmcgYGdldF9hbGlnbl9iaXRzKClgIHRvIGBpbmZvLmFsaWduX29mZnNldGAgZm9yIGh1Z2VwYWdlLWJhY2tlZCBmaWxlcyAoYGlzX2ZpbGVfaHVnZXBhZ2VzKGZpbHApYCkuXFxuXFxuSW4gYm90aCBmdW5jdGlvbnMsIGBzdHJ1Y3Qgdm1fdW5tYXBwZWRfYXJlYV9pbmZvIGluZm9gIGlzIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdmlhIGA9IHt9YC4gVGhlIGNoYW5nZXMgb25seSBhZGp1c3QgYWxpZ25tZW50IGNhbGN1bGF0aW9uIGxvZ2ljIGZvciB2aXJ0dWFsIG1lbW9yeSBhZGRyZXNzIGFsbG9jYXRpb24gd2l0aG91dCBhbGxvY2F0aW5nLCByZWFkaW5nLCBvciBsZWFraW5nIGFueSB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgbWVtb3J5IHRvIHVzZXJzcGFjZSBvciBrZXJuZWwgbG9naWMuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[1] Phase: Succeeded StartedAt: 2026-08-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 17:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 17:18:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2] Phase: Succeeded StartedAt: 2026-08-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 17:19:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:18:59 +0000 UTC FinishedAt: 2026-08-28 17:19:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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-workflowzp75p/series-workflowzp75p-convert-artifact-3206239272/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:19:09 +0000 UTC FinishedAt: 2026-08-28 17:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:19:09 +0000 UTC FinishedAt: 2026-08-28 17:35:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*2c31ad7c-28ba-42bb-a99a-7cc3bdebf456,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-workflowzp75p/series-workflowzp75p-convert-artifact-3206239272/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": "f941601c-6d96-4ee8-82a8-223deed7e05e", "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-workflowzp75p/series-workflowzp75p-build-action-737921694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:19:09 +0000 UTC FinishedAt: 2026-08-28 17:35:32 +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:*2c31ad7c-28ba-42bb-a99a-7cc3bdebf456,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-workflowzp75p/series-workflowzp75p-convert-artifact-3206239272/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": "f941601c-6d96-4ee8-82a8-223deed7e05e", "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-workflowzp75p/series-workflowzp75p-build-action-737921694/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:42 +0000 UTC FinishedAt: 2026-08-28 17:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:42 +0000 UTC FinishedAt: 2026-08-28 17:35:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:42 +0000 UTC FinishedAt: 2026-08-28 17:35:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:42 +0000 UTC FinishedAt: 2026-08-28 17:35:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-workflowzp75p/series-workflowzp75p-convert-artifact-3979316239/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:52 +0000 UTC FinishedAt: 2026-08-28 17:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:35:52 +0000 UTC FinishedAt: 2026-08-28 17:37:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f941601c-6d96-4ee8-82a8-223deed7e05e,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-workflowzp75p/series-workflowzp75p-build-action-737921694/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-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:37:39 +0000 UTC FinishedAt: 2026-08-28 17:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:37:39 +0000 UTC FinishedAt: 2026-08-28 17:37:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:37:39 +0000 UTC FinishedAt: 2026-08-28 17:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:37:39 +0000 UTC FinishedAt: 2026-08-28 17:53:57 +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:*2c31ad7c-28ba-42bb-a99a-7cc3bdebf456,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-workflowzp75p/series-workflowzp75p-convert-artifact-3979316239/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": "c0b457e8-6e72-4019-9270-441f4f6a0baa", "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-workflowzp75p/series-workflowzp75p-build-action-2166910243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:37:39 +0000 UTC FinishedAt: 2026-08-28 17:53:47 +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:*2c31ad7c-28ba-42bb-a99a-7cc3bdebf456,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-workflowzp75p/series-workflowzp75p-convert-artifact-3979316239/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": "c0b457e8-6e72-4019-9270-441f4f6a0baa", "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-workflowzp75p/series-workflowzp75p-build-action-2166910243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:53:57 +0000 UTC FinishedAt: 2026-08-28 17:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:53:57 +0000 UTC FinishedAt: 2026-08-28 17:53:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:53:57 +0000 UTC FinishedAt: 2026-08-28 17:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:53:57 +0000 UTC FinishedAt: 2026-08-28 17:56:01 +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:*c0b457e8-6e72-4019-9270-441f4f6a0baa,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-workflowzp75p/series-workflowzp75p-build-action-2166910243/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-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"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:*f941601c-6d96-4ee8-82a8-223deed7e05e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0b457e8-6e72-4019-9270-441f4f6a0baa,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-workflowzp75p/series-workflowzp75p-build-action-737921694/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-workflowzp75p/series-workflowzp75p-build-action-2166910243/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 17:56:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 17:56:16 +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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"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-workflowzp75p/series-workflowzp75p-convert-artifact-1165105096/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 17:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 17:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:11 +0000 UTC FinishedAt: 2026-08-28 17:56:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:21 +0000 UTC FinishedAt: 2026-08-28 21:00:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzp75p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"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":["arch_get_unmapped_area","arch_get_unmapped_area_topdown","hugetlb_get_unmapped_area"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"d2aad7fdcda7ae8a726926f2d6de7fe9e8ee7563","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS","X86_64"],"series_id":"601d230c-e34d-46d7-b3a5-1ff1535697ec","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-28 17:56:21 +0000 UTC FinishedAt: 2026-08-28 21:00:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f941601c-6d96-4ee8-82a8-223deed7e05e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c0b457e8-6e72-4019-9270-441f4f6a0baa,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-workflowzp75p/series-workflowzp75p-build-action-737921694/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-workflowzp75p/series-workflowzp75p-build-action-2166910243/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-workflowzp75p/series-workflowzp75p-convert-artifact-1165105096/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,}