Name: series-workflows2crf Phase: Succeeded StartedAt: 2026-08-11 00:13:39 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[0] Phase: Succeeded StartedAt: 2026-08-11 00:13:39 +0000 UTC FinishedAt: 2026-08-11 01:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[0].run-triage Phase: Succeeded StartedAt: 2026-08-11 00:13:39 +0000 UTC FinishedAt: 2026-08-11 01:15:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ae2998ab62e40b3e134590dc5a233ae3367a7a2b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ae2998ab62e40b3e134590dc5a233ae3367a7a2b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "ea6c41e6-7494-44cd-af34-a49deb4d8cdf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_conn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXHUwMDNlb3V0X3NlcWAuIFRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCBpbiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZSgpYCBhbmQgaXMgdW5pbml0aWFsaXplZC4gXG5cblRoaXMgYnVnIGhhcyB0d28gY29uc2VxdWVuY2VzOlxuMS4gSXQgcmVhZHMgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSBmcm9tIGBwYCBhbmQgY29ycnVwdHMgdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlLlxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cblxuS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlcy4gU2luY2UgYWxsIG1lbW9yeSBhY2Nlc3NlcyBoZXJlIGFyZSB3aXRoaW4gYm91bmRzIGFuZCBvbiBsaXZlIG9iamVjdHMsIEtBU0FOIHdpbGwgbm90IGRldGVjdCB0aGlzIGJ1Zy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCkgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIHBhY2tldCBidWZmZXIgZGF0YSwgd2hpbGUgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBJUFZTIHN5bmMgZGFlbW9uIGlzIHJ1bm5pbmcgaW4gTUFTVEVSIHN0YXRlIGFuZCBwcm9jZXNzaW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmM1MjMzMTI0N2VlMzU4OTBlZDBlY2JkYjE5MzYwMjRmYjY3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDE6MTE6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtNzQ3LDkgJiM0Mzs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtcbiYjNDM7XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZW91dF9zZXEpO1xuJiM0MztcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX2Nvbm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZSBidWcgaW4gYGlwX3ZzX3N5bmNfY29ubmAgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXFgIHdlcmUgc3dhcHBlZC4gVGhpcyBjYXVzZWQgdGhlIGNvbm5lY3Rpb24gc3RhdGUgKGBjcC1cdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmZjNTIzMzEyNDdlZTM1ODkwZWQwZWNiZGIxOTM2MDI0ZmI2NzZhMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDAxOjExOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggOTMwMzhhYmJmNWUwNC4uZjZlYTZjOTUzNWViMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC03NDcsOSAmIzQzOzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7Ci0JCWh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O291dF9zZXEpOwomIzQzOwkJaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7b3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwogCX0KIAkvKiBIYW5kbGUgcGUgZGF0YSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyBhIE5ldGZpbHRlci9JUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqCgpSaWdodCwgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBDbGFzc2ljLiBJdCBzZWVtcyB0byBiZSBmaWRkbGluZyB3aXRoIHRoZSBhcmd1bWVudCBvcmRlciBmb3IgYGh0b25fc2VxYC4gSG1tLCBJIHdvbmRlciB3aHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdG8gdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJndW1lbnQgc3dhcC4gSXMgaXQgcmVsYXRlZCB0byBlbmRpYW5uZXNzIGNvbmNlcm5zPyBJcyB0aGVyZSBhbiBvcHRpbWl6YXRpb24gb3IgYSBidWcgZml4IHJlbGF0ZWQgdG8gc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nPyBMZXQgbWUgZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LiBQcm9iYWJseSBhIHN1YnRsZSwgeWV0IGNydWNpYWwsIGFkanVzdG1lbnQgdG8gaG93IHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdvcmtzLiBCZXN0IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBhcyBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMgYXJlIG5vdG9yaW91c2x5IGhhcmQgdG8gZGVidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRvbl9zZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXHRcdC8qIFVzZWQgZm9yIG50b2hfc2VxIGFuZCBodG9uX3NlcSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI4Mz1zdGF0aWMgdm9pZCBudG9oX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpubywgc3RydWN0IGlwX3ZzX3NlcSAqaG8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI5NTpzdGF0aWMgdm9pZCBodG9uX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpobywgc3RydWN0IGlwX3ZzX3NlcSAqbm8pXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5Ni17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXHRcdCoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1MDpcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzUyOlx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTMtXHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5ldHdvcmsgQnVnIEZpeCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBjb3JyZWN0aW5nIHRoZSBhcmd1bWVudCBvcmRlciB3aXRoaW4gdGhlIGBodG9uX3NlcWAgZnVuY3Rpb24gY2FsbC4gTGV0JiMzOTtzIHNlZS4uLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGNhbGwgd2FzOiBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtpbl9zZXEpO2AuIEFuZCBub3csIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG86IGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gVGhhdCYjMzk7cyBhIGNsZWFyIHN3YXAsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYnVnLiBUaGUgb3JpZ2luYWwgb3JkZXIgbWlnaHQgaGF2ZSBiZWVuIG1pc2ludGVycHJldGluZyB3aGljaCBkYXRhIHRvIHRyZWF0IGFzIHRoZSBzb3VyY2UgdmVyc3VzIHRoZSBkZXN0aW5hdGlvbiBpbiB0aGUgaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiBwcm9jZXNzLgoKVGhlIHRoaW5nIHRvIGRvIGlzIGRlbHZlIGludG8gdGhlIGBodG9uX3NlcWAgZGVmaW5pdGlvbiBpdHNlbGYgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZS4gVW5kZXJzdGFuZGluZyBpdHMgZXhwZWN0ZWQgaW5wdXQgYW5kIG91dHB1dCBpcyBjcnVjaWFsIHRvIGRldGVybWluZSBpZiB0aGlzIHN3YXAgaXMgY29ycmVjdC4gSXMgYCZhbXA7Y3AtJmd0O2luX3NlcWAgbWVhbnQgdG8gYmUgdGhlIHZhbHVlIHRvIGNvbnZlcnQsIGFuZCBgKHN0cnVjdCBpcF92c19zZXEgKilwYCBwcm92aWRpbmcgc29tZSBjb250ZXh0PyBPciB2aWNlIHZlcnNhPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgcm9sZXMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XG4gMjkxOlx0LypcbiAyOTI6XHQgKiBDb3B5IG9mIHN0cnVjdCBpcF92c19zZXFcbiAyOTM6XHQgKiBGcm9tIEFsaWduZWQgaG9zdCBvcmRlciB0byB1bmFsaWduZWQgbmV0d29yayBvcmRlclxuIDI5NDpcdCAqL1xuIDI5NTpcdHN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbiAyOTY6XHR7XG4gMjk3Olx0XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlaW5pdF9zZXEsIFx1MDAyNm5vLVx1MDAzZWluaXRfc2VxKTtcbiAyOTg6XHRcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VkZWx0YSwgXHUwMDI2bm8tXHUwMDNlZGVsdGEpO1xuIDI5OTpcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZXByZXZpb3VzX2RlbHRhLCBcdTAwMjZuby1cdTAwM2VwcmV2aW91c19kZWx0YSk7XG4gMzAwOlx0fVxuIDMwMTpcdFxuIDMwMjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG4gMzAzOlx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuIDMwNDpcdHtcbiAzMDU6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuIDMwNjpcdFxuIDMwNzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbiAzMDg6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zLVx1MDAzZXN5bmNfcXVldWUpKSB7XG4gMzA5Olx0XHRcdHNiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBTZXF1ZW5jZSBOdW1iZXIgQ29udmVyc2lvbioqCgpPa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHNlcXVlbmNlIG51bWJlciBoYW5kbGluZyBpbiBgaXBfdnNfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnZlcnRpbmcgc2VxdWVuY2UgbnVtYmVycyBiZXR3ZWVuIGhvc3QgYW5kIG5ldHdvcmsgYnl0ZSBvcmRlciB1c2luZyB0aGUgYGh0b25fc2VxYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBpcF92c19zZXFgIHN0cnVjdHVyZS4KCkJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBkb2luZyBpdCBjb21wbGV0ZWx5IHdyb25nLiBUaGUgZnVuY3Rpb24gY2FsbCBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtpbl9zZXEpYCB3YXMgdXNpbmcgYHBgLCB3aGljaCByZXByZXNlbnRzIHRoZSBuZXR3b3JrIHBhY2tldCBidWZmZXIsIGFzIHRoZSBzb3VyY2UgKGBob2ApLCBhbmQgYCZhbXA7Y3AtJmd0O2luX3NlcWAgKHBhcnQgb2YgYSBob3N0LW9yZGVyIHN0cnVjdHVyZSkgYXMgdGhlIGRlc3RpbmF0aW9uIChgbm9gKS4gVGhlIHByb2JsZW0gaXMgdGhhdCBgcGAgaXMgdW5pbml0aWFsaXplZCBhdCB0aGlzIHBvaW50ISBXZSYjMzk7cmUgZXNzZW50aWFsbHkgY29weWluZyBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgZnJvbSBhIGJ1ZmZlciB0aGF0IGhhc24mIzM5O3QgYmVlbiBwb3B1bGF0ZWQgKmludG8qIGEgaG9zdC1vcmRlciBzZXF1ZW5jZSBudW1iZXIgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgd2FpdGluZyB0byBoYXBwZW4uIFBsdXMsIHdlJiMzOTtyZSB3cml0aW5nIHRvIGBjcC0mZ3Q7aW5fc2VxYCB3aGVuIHdlIHNob3VsZG4mIzM5O3QgYmUuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcy4gTm93LCB0aGUgY2FsbCBpcyBgaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7aW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApYC4gVGhpcyByZXZlcnNlcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4gYCZhbXA7Y3AtJmd0O2luX3NlcWAgaXMgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVyIHN0cnVjdHVyZSwgYW5kIGBwYCBpcyBub3cgdGhlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLiAgVGhpcyBtYWtlcyBzZW5zZSEgV2UmIzM5O3JlIGNvcnJlY3RseSAqcmVhZGluZyogdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIGEgaG9zdC1vcmRlciBzdHJ1Y3R1cmUgKGAmYW1wO2NwLSZndDtpbl9zZXFgKSBhbmQgd3JpdGluZyB0aGUgKmNvbnZlcnRlZCogbmV0d29yay1vcmRlciBzZXF1ZW5jZSBudW1iZXIgaW50byB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyIChgcGApLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgZHVyaW5nIHN5bmNocm9uaXphdGlvbi4KClRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiBpbiBgaXBfdnNfc3luY19jb25uYCwgYW5kIGEgY3JpdGljYWwgb25lIGF0IHRoYXQuIEdpdmVuIHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgcmVsZXZhbnQgSVBWUyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMgbm93LWNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSVBfVlNgIC0gdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBzd2l0Y2gsIHRoZSBtYWluIHN3aXRjaCB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIGVsc2UuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gaGVyZT8gTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBhIG1vcmUgc3BlY2lmaWMgcGFyYW1ldGVyLiBUaGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGlzIGBpcF92c19zeW5jX2Nvbm5gLiBJdCYjMzk7cyBlc3NlbnRpYWwgd2UgY2hlY2sgdGhlIHNldHRpbmdzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNTgtXHQgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5Olx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cdGVsc2UgaWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFx1MDAyNlx1MDAyNiBjcC1cdTAwM2Vjb250cm9sKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjcwOlx0XHQvKiBpbmNyZW1lbnQgaXMgZG9uZSBpbnNpZGUgaXBfdnNfc3luY19jb25uIHRvbyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjcxLVx0XHRhdG9taWNfaW5jKFx1MDAyNmNwLVx1MDAzZWNvbnRyb2wtXHUwMDNlaW5fcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcJiMzNDtpcF92c19zeW5jX2Nvbm5fb3B0aW9uc1wmIzM0OyB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjktICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MS1cdF9fdThcdFx0XHRyZXNlcnZlZDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4OTpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cdHN0cnVjdCBpcF92c19zZXEgICAgICAgIGluX3NlcTsgICAgICAgICAvKiBpbmNvbWluZyBzZXEuIHN0cnVjdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NS1cdHN0cnVjdCBpcF92c19zeW5jX3Y0XHR2NDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE5Nj1zdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDQtLyogVmVyc2lvbiAwIGRlZmluaXRpb24gb2YgcGFja2V0IHNpemVzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTojZGVmaW5lIFNJTVBMRV9DT05OX1NJWkUgIChzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjQ1PXN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTA6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1MS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjYwLVx0X191MTZcdFx0XHRzcGFyZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjYxOlx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDU4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXHRcdFx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOTpzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVx0XHRcdCAgICAgICBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0Mi1cdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0NC1cdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NTpcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg4LVx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTg5Olx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXHUwMDNlaGVhZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjAyLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjAzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNDpcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA1LVx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMS1cdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzMjpcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMzLVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0MC1cdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDE6XHRcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Mi1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ3LXNsb29wOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDg6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDktXHRcdGdvdG8gY29udHJvbDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3Ny1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OC1cdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQ5Olx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTAtXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTc4Nz1zdGF0aWMgaW5saW5lIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3ODg6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzg5LVx0XHRcdCAgIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ1LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIF9fdTMyIGZ3bWFyayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODQ2Olx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk1OD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2MS1cdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYyOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2NC1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTc3Olx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc4LVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk4MTpcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVx0XHRcdHAgJiM0Mzs9IEZVTExfQ09OTl9TSVpFO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTAyNz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3NlcW9wdChfX3U4ICpwLCB1bnNpZ25lZCBpbnQgcGxlbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAyOC1cdFx0XHRcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDI5Olx0XHRcdFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDMwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMzpcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzNTpcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXG5cJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2OT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3MC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwNzE6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcyOlx0dW5pb24gIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3My1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDgxOlx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMDM9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVx0XHRmb3IgKGk9MDsgaVx1MDAzY25yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjMyOlx0XHRcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cdFx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDAtXHRcdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjQxOlx0XHRcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI0Mi1cdFx0XHRzaXplID0gbnRvaHMocy1cdTAwM2V2NC52ZXJfc2l6ZSkgXHUwMDI2IFNWRVJfTUFTSztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3Mzg9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUwLVx0SVBfVlNfREJHKDcsIFwmIzM0OyVzKCk6IHBpZCAlZFxcblwmIzM0OywgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1MTpcdElQX1ZTX0RCRyg3LCBcJiMzNDtFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTI6XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCdWcgSHVudGluZzogSVBWUyBTeW5jIENvbm5lY3Rpb24gSXNzdWUqKgoKT2theSwgc28gdGhlIGlzc3VlIGlzIGRlZmluaXRlbHkgaW4gYGlwX3ZzX3N5bmNfY29ubmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIElQVlMgaXMgaW4gdGhlIE1BU1RFUiBzeW5jIHN0YXRlLCB3aGljaCwgb2YgY291cnNlLCBpcyBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeW5jIGRhZW1vbiBpcyBydW5uaW5nLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJldmVudGluZyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHNpZGUgZWZmZWN0cy4KCldhaXQgYSBzZWNvbmQuLi4gKmBodG9uX3NlcWAqIHdhcyB3cml0aW5nIGRpcmVjdGx5IHRvIGBjcC0mZ3Q7aW5fc2VxYCBhbmQgYGNwLSZndDtvdXRfc2VxYCBpbnN0ZWFkIG9mIHRoZSBidWZmZXIgKmBwYCo/IFRoYXQmIzM5O3MuLi4geWVhaCwgdGhhdCYjMzk7cyBiYWQuIFRoYXQgbWVhbnMgaXQgd2FzIGNvcnJ1cHRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXRzZWxmIOKAkyB0aG9zZSBzZXF1ZW5jZSBudW1iZXJzIOKAkyBhbmQgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQhIFNvLCBhIGNvbm5lY3Rpb24gY291bGQgYmUgbWVzc2VkIHVwIGJlY2F1c2Ugb2YgdGhlc2UgaW5jb3JyZWN0IHNlcXVlbmNlIG51bWJlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbWFrZSBzb21lIGNvbm5lY3Rpb25zIHVudXNhYmxlLgoKVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgaGlnaCwgZXNwZWNpYWxseSBpZiB3ZSBjYW4gY3JhZnQgcGFja2V0cyB0aGF0IHRyaWdnZXIgdGhpcyBjb25kaXRpb24gcmVsaWFibHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHNldCB1cCBjb3JyZWN0bHkgZm9yIHRlc3RpbmcuCgpSaWdodCwgdGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYElQX1ZTYC4gQW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTmVlZCB0byBtYWtlIHN1cmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1NZTkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUFZTIENvbmZpZ3VyYXRpb24gQ2xhcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQVlMgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgdGhlIGRvY3VtZW50YXRpb24gbWlnaHQgYmUgYSBsaXR0bGUgbWlzbGVhZGluZywgb3IgcGVyaGFwcyBvdXRkYXRlZC4gSSB3YXMgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBgSVBfVlNfU1lOQ2AgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCYjMzk7cyBqdXN0Li4uIG5vdCB0aGVyZS4gQWZ0ZXIgYSBsaXR0bGUgZGlnZ2luZywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYElQX1ZTX1NZTkNgIGlzbiYjMzk7dCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBidWlsdC1pbiBhbmQgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gYElQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC4KClRpbWUgdG8gY29uZmlybSB0aGlzIGh1bmNoIGJ5IGNoZWNraW5nIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gaG93IHRoZSBzeW5jaHJvbml6YXRpb24gZmVhdHVyZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXkgYXJlIGRlcGVuZGVudCBvbiBvdGhlciwgYnJvYWRlciBJUFZTIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHRvIGVuc3VyZSBwcm9wZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBJUFZTIG1vZHVsZXMgb24gdG9wIG9mIElQdjQuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdCMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxuICAgNzpcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxuICAgODpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdGNwLm9cbiAgIDk6XHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3VkcC5vXG4gIDEwOlx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xuICAxMTpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xuICAxMjpcdFxuICAxMzpcdGlwX3ZzLWV4dHJhX29ianMteSA6PVxuICAxNDpcdGlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgJiM0Mzs9IGlwX3ZzX25mY3Qub1xuICAxNTpcdFxuICAxNjpcdGlwX3ZzLW9ianMgOj1cdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1x0ICAgXFxcbiAgMTc6XHRcdFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1x0ICAgXHRcdCAgIFxcXG4gIDE4Olx0XHRcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1x0XHRcdCAgIFxcXG4gIDE5Olx0XHRcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBWUyBCdWlsZCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGlwX3ZzX3N5bmMub2AgaGVyZS4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgdGhlbiBgaXBfdnNfc3luYy5vYCAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBUaGF0JiMzOTtzIGp1c3QgdGhlIHdheSBpdCB3b3Jrcy4gQnV0IG5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHdvbmRlciBpZiBgSVBfVlNgIGl0c2VsZiBoYXMgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJUF9WU2AgYW5kIG90aGVyIG1vZHVsZXMgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVwc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yOT1jb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQwLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNTQ6XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBfVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYElQX1ZTYCBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZWxpZXMgaGVhdmlseSBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIE1ha2VzIHNlbnNlLiBCdXQgSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgZm9jdXMgb24gYElQX1ZTYCBpdHNlbGYsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCgpNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBgaXBfdnNfc3luY19jb25uYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgc29tZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gQ2hlY2tpbmcgaXRzIHNpZ25hdHVyZSwgYHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKWAsIG5vcGUsIGl0JiMzOTtzIG5vdCBzdGF0aWMuIEdvb2QuIFRoYXQgZXhwYW5kcyBteSBzZWFyY2ggc29tZXdoYXQuCgpBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb24gbmFtZXMgaW4gcmVsYXRpb24gdG8gdGhpcyBjb2RlPyBJIHNlZSBgaHRvbl9zZXFgIGlzIGBzdGF0aWNgLiBBbmQgbWF5YmUgaW5saW5lZD8gT3IganVzdCBgc3RhdGljYD8gRG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIGNvZGUsIHRob3VnaC4gSXQgc2VlbXMgYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgYGlwX3ZzX3N5bmNfY29ubmAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRob3NlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N5bmNfY29ublxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNTgtXHQgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5Olx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cdGVsc2UgaWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFx1MDAyNlx1MDAyNiBjcC1cdTAwM2Vjb250cm9sKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJUFZTIFN5bmNocm9uaXphdGlvbiBDb250ZXh0KioKClJpZ2h0LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHRyYWNlIGhlcmUuIEkga25vdyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYC4gVGhlIGZpcnN0LCBgaXBfdnNfaW5faG9va2AsIGlzIHRoZSBuZXRmaWx0ZXIgaG9vayBmb3IgSVBWUywgc28gdGhhdCYjMzk7cyB3aGVyZSBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZyBoYXBwZW5zLiBBbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYCBkZWFscyB3aXRoLCB3ZWxsLCBleHBpcmluZyBjb25uZWN0aW9ucy4gTWFrZXMgc2Vuc2UgdG8gd2FudCB0byBzeW5jIHRoZW0gYm90aC4gYGlwX3ZzX3N5bmNfY29ubmAgZmVlbHMgbGlrZSBhIGdvb2QsIGZvY3VzZWQgc3ltYm9sIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLgoKQnV0IGhvbGQgb24sIGBpcF92c19zeW5jX2Nvbm5gIGlzbiYjMzk7dCAqYWx3YXlzKiBjYWxsZWQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgYmFzZWQgb24gdGhlIGBpcHZzLSZndDtzeW5jX3N0YXRlYCBhbmQgdGhlIGBJUF9WU19TVEFURV9NQVNURVJgIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYHN5bmNfc3RhdGVgIHZhcmlhYmxlIGdldHMgc2V0LiBXaGVyZSYjMzk7cyB0aGUgY29udHJvbCBwbGFuZSBmb3IgdGhpcz8gSSYjMzk7bSBndWVzc2luZyB0aGF0IHN0YXJ0aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gZGFlbW9uIGlzIHRoZSBjcml0aWNhbCBmYWN0b3IuIFdoZXJlIGlzIHRoYXQgZGFlbW9uIGNvbmZpZ3VyZWQ/CgpJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24uIFNvLCBsZXQmIzM5O3MgZXhwbG9yZSBgaXBfdnNfZ2VubF9zZXRfY21kYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGluIHRoZSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlIGNvZGUgZm9yIElQVlMuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBzdGF0ZSBiaXRzIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1NUQVRFX01BU1RFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzMzpcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzNC1cdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHRpZiAoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXHRcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM3MzM9ZG9faXBfdnNfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjU6XHRcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjY6XHRcdFx0ZFswXS5zdGF0ZSA9IElQX1ZTX1NUQVRFX01BU1RFUjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNzY3LVx0XHRcdHN0cnNjcHkoZFswXS5tY2FzdF9pZm4sIGlwdnMtXHUwMDNlbWNmZy5tY2FzdF9pZm4sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0ODg9c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGFlbW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk0LVx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0OTU6XHRpZiAoKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSBcdTAwMjZcdTAwMjYgIWNiLVx1MDAzZWFyZ3NbMF0pIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDk2Olx0XHRpZiAoaXBfdnNfZ2VubF9kdW1wX2RhZW1vbihza2IsIElQX1ZTX1NUQVRFX01BU1RFUixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk3LVx0XHRcdFx0XHQgICBcdTAwMjZpcHZzLVx1MDAzZW1jZmcsIGNiKSBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTM2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2JfcXVldWVfdGFpbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2Ni1cdHNwaW5fbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM2NzpcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzY4LVx0ICAgIG1zLVx1MDAzZXN5bmNfcXVldWVfbGVuIFx1MDAzYyBzeXNjdGxfc3luY19xbGVuX21heChpcHZzKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTk6XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTYwLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2MS1cdHNwaW5fbG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjYyOlx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2My1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzM4PWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTgyNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTgyNzpcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTgyOC1cdFx0cmVzdWx0ID0gLUVFWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDg6XHRpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDktXHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODAtXHRcdHRpbmZvLVx1MDAzZWlkID0gaWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4ODE6XHRcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODItXHRcdFx0cmVzdWx0ID0gbWFrZV9zZW5kX3NvY2soaXB2cywgaWQsIGRldiwgXHUwMDI2dGluZm8tXHUwMDNlc29jayk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODk3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODk4Olx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg5OS1cdFx0aXB2cy1cdTAwM2VtYXN0ZXJfdGluZm8gPSB0aTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5MjItXHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5MjM6XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTkyNC1cdFx0a2ZyZWUoaXB2cy1cdTAwM2Vtcyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTYyLVx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTYzOlx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTY0LVx0XHRyZXRjID0gLUVTUkNIO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ni1cdFx0c3Bpbl9sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk3NzpcdFx0aXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNj0gfklQX1ZTX1NUQVRFX01BU1RFUjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3OC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjA1MD12b2lkIGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDU0Olx0cmV0YyA9IHN0b3Bfc3luY190aHJlYWQoaXB2cywgSVBfVlNfU1RBVEVfTUFTVEVSKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cdGlmIChyZXRjIFx1MDAyNlx1MDAyNiByZXRjICE9IC1FU1JDSClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjMKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyB0aGUgZGFlbW9uLCBpbml0aWF0ZWQgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGlwX3ZzX2dlbmxfc2V0X2NtZGAgYW5kIHRoZSBgc3RhcnRfc3luY190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGZ1bGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBwYWNrZXRzLCB3aGljaCBpcyBhIGtleSBhdHRhY2sgdmVjdG9yLiBUaGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGhlcmUgaXMgYElQX1ZTYCAtIHRoYXQmIzM5O3MgdGhlIG1haW4gb25lIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcyBhIHNhZmVndWFyZCwganVzdCBpbiBjYXNlLCBidXQgYElQX1ZTYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYC4uLiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFyZSByZXF1aXJlZC4gYE5GX0NPTk5UUkFDS2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkIHRvbywgZXZlbiBpZiBpdCYjMzk7cyBvcHRpb25hbC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX2Nvbm5gIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24uIFRoZXJlJiMzOTtzIGFuIG9sZGVyIGZ1bmN0aW9uIGBpcF92c19zeW5jX2Nvbm5fdjBgLCBidXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgaXBfdnNfc3luY19jb25uYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvZGUgaW4gYGlwX3ZzX3N5bmMuY2AuCgpJJiMzOTt2ZSBnb3QgdGhlIHBhdGNoIGluIGZyb250IG9mIG1lOgpgYGBjCkBAIC03NDcsOSAmIzQzOzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7Ci0JCWh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O291dF9zZXEpOwomIzQzOwkJaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7b3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwogCX0KIAkvKiBIYW5kbGUgcGUgZGF0YSAqLwpgYGAKClllcywgdGhhdCBjb25maXJtcyBpdDogaXQmIzM5O3MgYWxsIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBTbyBgRm9jdXNTeW1ib2xzYCBpcyBgaXBfdnNfc3luY19jb25uYCwgYW5kIHRoZSBwcmltYXJ5IGBFbmFibGVDb25maWdzYCBpcyBgSVBfVlNgLiBMZXQgbWUgdmVyaWZ5IHRoaXMgb25lIG1vcmUgdGltZS4KCll1cCwgYENPTkZJR19JUF9WU2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gIGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIGJ1dCB0aGV5IGFyZSBzdGlsbCBpbXBvcnRhbnQuIEkmIzM5O2xsIGFkZCBgSVBfVlNgIHRvIEVuYWJsZUNvbmZpZ3MuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gSVBWUyBpcyBhIHNvZnR3YXJlIGxvYWQgYmFsYW5jZXIsIG5vdCBoYXJkd2FyZS1kZXBlbmRlbnQuIENvbmZpZ3VyYXRpb24gaGFwcGVucyBvdmVyIG5ldGxpbmssIGFuZCB0aGVuIHBhY2tldCB0cmlnZ2VycyBpdCwgbWFraW5nIGl0IGFjY2Vzc2libGUgZXZlbiBpbiB2aXJ0dWFsIG1hY2hpbmVzLgoKU28sIHRoZSByb290IG9mIHRoZSBpc3N1ZTogdGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSBpbiBgaXBfdnNfc3luY19jb25uYC4gVGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXFgIHdlcmUgc3dhcHBlZCwgbGVhZGluZyB0byB0aGUgY29ubmVjdGlvbiBzdGF0ZSwgc3BlY2lmaWNhbGx5IGBjcC0mZ3Q7aW5fc2VxYCBhbmQgYGNwLSZndDtvdXRfc2VxYCwgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciwgd2hpbGUgKmFsc28qIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBtb2RlIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIHJlYWwgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFuZCB0aGlzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgZm9jdXMgZm9yIGZ1enppbmcuCgpOb3cgSSBhbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCkgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIHBhY2tldCBidWZmZXIgZGF0YSwgd2hpbGUgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBJUFZTIHN5bmMgZGFlbW9uIGlzIHJ1bm5pbmcgaW4gTUFTVEVSIHN0YXRlIGFuZCBwcm9jZXNzaW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcSgpYCB3ZXJlIHN3YXBwZWQuIEJlY2F1c2Ugb2YgdGhpcyBzd2FwLCB0aGUgY29kZSB3YXMgcmVhZGluZyBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciBwb2ludGVyIGBwYCBhbmQgd3JpdGluZyB0byB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUgYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcblxuVGhpcyBidWcgaGFzIHR3byBjb25zZXF1ZW5jZXM6XG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXG4yLiBJdCBsZWF2ZXMgdGhlIG5ldHdvcmsgYnVmZmVyIGBwYCB1bmluaXRpYWxpemVkIGF0IHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIHNlcXVlbmNlIG51bWJlcnMgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuLiBUaGlzIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGlzIHN1YnNlcXVlbnRseSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgdmlhIGBrZXJuZWxfc2VuZG1zZygpYCBpbiB0aGUgc3luYyB0aHJlYWQsIHJlc3VsdGluZyBpbiBhbiBpbmZvLWxlYWsgb2Yga2VybmVsIGhlYXAgbWVtb3J5IHRvIHRoZSBuZXR3b3JrLlxuXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmYzUyMzMxMjQ3ZWUzNTg5MGVkMGVjYmRiMTkzNjAyNGZiNjc2YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtNzQ3LDkgJiM0Mzs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgewogCQkqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBOwogCQkqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSk7CiYjNDM7CQlodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CiAJCXAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTsKLQkJaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtvdXRfc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O291dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CiAJCXAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTsKIAl9CiAJLyogSGFuZGxlIHBlIGRhdGEgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUFZTIFN5bmNocm9uaXphdGlvbiBCdWcqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGEgYml0IHVudXN1YWwuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBmbGlwcGVkIHRoZSBhcmd1bWVudHMgdG8gdGhlIGBodG9uX3NlcWAgZnVuY3Rpb24gY2FsbHMuIEl0JiMzOTtzIGdvaW5nIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgIHRvIGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YCBhbmQgdGhlIHNhbWUgY2hhbmdlIGlzIGRvbmUgZm9yIGBvdXRfc2VxYC4gVGhhdCYjMzk7cyBub3QgdGhlIHR5cGljYWwgd2F5IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aG9zZSBjYWxscyBjb25zdHJ1Y3RlZC4gVGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpbiB0aGVzZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCwgc28gdGhpcyBpbW1lZGlhdGVseSB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGlvbiBvZiBgaHRvbl9zZXFgIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgaWYgaXQmIzM5O3MgdGhlIGNvcnJlY3Rpb24gb2YgYSBidWcsIG9yIGFuIGludHJvZHVjdGlvbiBvZiBhIG5ldyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBgIGFuZCBgY3AtJmd0O2luX3NlcWAgcmVwcmVzZW50IGluIHRlcm1zIG9mIHRoZWlyIGludGVuZGVkIHJvbGVzIGluIHRoZSBkYXRhIHN0cnVjdHVyZSwgYW5kIGhvdyBgaHRvbl9zZXFgIGFjdHVhbGx5IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodG9uX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM6I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcdFx0LyogVXNlZCBmb3IgbnRvaF9zZXEgYW5kIGh0b25fc2VxICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjgzPXN0YXRpYyB2b2lkIG50b2hfc2VxKHN0cnVjdCBpcF92c19zZXEgKm5vLCBzdHJ1Y3QgaXBfdnNfc2VxICpobylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5NC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk1OnN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OS1cdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzUwOlx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1MS1cdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1My1cdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIHRoZSBgaHRvbl9zZXFgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGBodG9uX3NlcWAgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgZ2VuZXJhbCBpZGVhIC0gaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiwgcHJvYmFibHkgZm9yIHNlcXVlbmNlIG51bWJlcnMgb3Igc29tZSBvdGhlciBpbnRlZ2VyIGRhdGEuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgY2FuIHByb2JhYmx5IGd1ZXNzIHRoZSBjb250ZXh0LCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhpcyBxdWlja2x5LCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gVGhlIGZpcnN0IHRoaW5nIEkgd2lsbCBkbyBpcyByZWFkIHRoZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCBmb2N1cyBvbiBkYXRhIHR5cGVzIHVzZWQsIGJpdHdpc2Ugb3BlcmF0aW9ucyBlbXBsb3llZCwgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBhc3BlY3RzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IGludGVnZXIgc2l6ZXMgKGUuZy4sIDE2LWJpdCwgMzItYml0LCA2NC1iaXQpLiBUaGUgZ29hbCBpcyBub3QganVzdCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIGJ1dCB0byBpbmZlciB0aGUgcmVhc29uaW5nIGJlaGluZCBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgYW5kIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEl0JiMzOTtzIGxpa2VseSBJJiMzOTtsbCBiZSBhYmxlIHRvIGNvbXBhcmUgaXQgdG8gb3RoZXIgaW1wbGVtZW50YXRpb25zIEkmIzM5O3ZlIHNlZW4sIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMuIElmIGl0IGlzIGludGVyZXN0aW5nLCBJIG1heSBiZSBpbmNsaW5lZCB0byBjb21wYXJlIGl0IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIEkgaGF2ZSBjb21lIGFjcm9zcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcbiAyOTE6XHQvKlxuIDI5MjpcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxuIDI5MzpcdCAqIEZyb20gQWxpZ25lZCBob3N0IG9yZGVyIHRvIHVuYWxpZ25lZCBuZXR3b3JrIG9yZGVyXG4gMjk0Olx0ICovXG4gMjk1Olx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxuIDI5NjpcdHtcbiAyOTc6XHRcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2Vpbml0X3NlcSwgXHUwMDI2bm8tXHUwMDNlaW5pdF9zZXEpO1xuIDI5ODpcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWRlbHRhLCBcdTAwMjZuby1cdTAwM2VkZWx0YSk7XG4gMjk5Olx0XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlcHJldmlvdXNfZGVsdGEsIFx1MDAyNm5vLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbiAzMDA6XHR9XG4gMzAxOlx0XG4gMzAyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbiAzMDM6XHRzYl9kZXF1ZXVlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXG4gMzA0Olx0e1xuIDMwNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG4gMzA2Olx0XG4gMzA3Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuIDMwODpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXMtXHUwMDNlc3luY19xdWV1ZSkpIHtcbiAzMDk6XHRcdFx0c2IgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKgoKT2theSwgc28gYGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylgIC0gcmlnaHQsIGhvc3Qgb3JkZXIgZmlyc3QsIG5ldHdvcmsgb3JkZXIgc2Vjb25kLiBUaGUgcGF0Y2ggc3dhcHBlZCB0aGUgYXJndW1lbnRzIGluIHRoZSBjYWxsIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgIHRvIGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHkuCgpCZWZvcmUsIGBob2Agd2FzIGFzc2lnbmVkIGAoc3RydWN0IGlwX3ZzX3NlcSAqKXBgIGFuZCBgbm9gIHdhcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYC4gVGhhdCBtZWFucyBpdCB3YXMgcmVhZGluZyBzZXF1ZW5jZSBpbmZvcm1hdGlvbiAqZnJvbSogdW5pbml0aWFsaXplZCBtZW1vcnkgcG9pbnRlZCB0byBieSBgcGAsIGFuZCB3cml0aW5nIHRoZSBjb252ZXJ0ZWQgbmV0d29yay1vcmRlcmVkIHNlcXVlbmNlICp0byogYCZhbXA7Y3AtJmd0O2luX3NlcWAuIFRoaXMgaXMgYmFkLCB0aGUgbWVtb3J5IGF0IGBwYCBpcyBub3QgaW5pdGlhbGl6ZWQgd2hlbiByZWFkaW5nLgoKQnV0IHdhaXQsIGBwYCAqaXMqIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UmIzM5O3JlIGJ1aWxkaW5nISBUaGF0IGNvbnRleHQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgbG9va3MgbGlrZSBhIHNlcmlvdXMgYnVnLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIGluIGBpcF92c19zeW5jX2Nvbm5gIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzA6XHRcdHMtXHUwMDNldjQudGltZW91dCA9IGh0b25sKGNwLVx1MDAzZXRpbWVvdXQgLyBIWik7XG4gNzMxOlx0XHRtLVx1MDAzZW5yX2Nvbm5zJiM0MzsmIzQzOztcbiA3MzI6XHRcbiA3MzM6XHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiA3MzQ6XHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuIDczNTpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xuIDczNjpcdFx0XHRzLVx1MDAzZXY2LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaW42O1xuIDczNzpcdFx0XHRzLVx1MDAzZXY2LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuIDczODpcdFx0XHRzLVx1MDAzZXY2LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuIDczOTpcdFx0fSBlbHNlXG4gNzQwOlx0I2VuZGlmXG4gNzQxOlx0XHR7XG4gNzQyOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XHQvKiBvcHRpb25zIHB0ciAqL1xuIDc0MzpcdFx0XHRzLVx1MDAzZXY0LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gNzQ0Olx0XHRcdHMtXHUwMDNldjQudmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiA3NDU6XHRcdFx0cy1cdTAwM2V2NC5kYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuIDc0NjpcdFx0fVxuIDc0NzpcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA3NDg6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiA3NDk6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiA3NTA6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIDc1MTpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gNzUyOlx0XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzUzOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTQ6XHRcdH1cbiA3NTU6XHRcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4gNzU2Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4gXHUwMDI2XHUwMDI2IGNwLVx1MDAzZXBlX2RhdGEpIHtcbiA3NTc6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9QRV9EQVRBO1xuIDc1ODpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc1OTpcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGVfZGF0YSwgY3AtXHUwMDNlcGVfZGF0YV9sZW4pO1xuIDc2MDpcdFx0XHRwICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbjtcbiA3NjE6XHRcdFx0aWYgKHBlX25hbWVfbGVuKSB7XG4gNzYyOlx0XHRcdFx0LyogQWRkIFBFX05BTUUgKi9cbiA3NjM6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX05BTUU7XG4gNzY0Olx0XHRcdFx0KihwJiM0MzsmIzQzOykgPSBwZV9uYW1lX2xlbjtcbiA3NjU6XHRcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGUtXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xuIDc2NjpcdFx0XHRcdHAgJiM0Mzs9IHBlX25hbWVfbGVuO1xuIDc2NzpcdFx0XHR9XG4gNzY4Olx0XHR9XG4gNzY5Olx0XG4gNzcwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3NzE6XHRcbiA3NzI6XHRjb250cm9sOlxuIDc3MzpcdFx0Lyogc3luY2hyb25pemUgaXRzIGNvbnRyb2xsZXIgaWYgaXQgaGFzICovXG4gNzc0Olx0XHRjcCA9IGNwLVx1MDAzZWNvbnRyb2w7XG4gNzc1Olx0XHRpZiAoIWNwKVxuIDc3NjpcdFx0XHRyZXR1cm47XG4gNzc3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbiA3Nzg6XHRcdFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmNwLVx1MDAzZWluX3BrdHMpO1xuIDc3OTpcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDE3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnl0ZSBTd2FwIFNlcXVlbmNlIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBhdCBob3cgdGhpcyBgaHRvbl9zZXFgIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIHNwb3R0ZWQgYSBidWcuIFJpZ2h0LCBzbyBgcGAgaXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UmIzM5O3JlIGNvbnN0cnVjdGluZy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIGNhbGxpbmcgYGh0b25fc2VxYCBsaWtlIHRoaXM6IGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQmIzM5O3MgcmVhZGluZyBmcm9tIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBgcGAgYW5kIHdyaXRpbmcgdG8gYCZhbXA7Y3AtJmd0O2luX3NlcWAsIHdoaWNoIGlzIGEgZmllbGQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS4KCkJ1dCBoYW5nIG9u4oCmIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGh0b25fc2VxYCByZWFsIHF1aWNrLiBBaCwgcmlnaHQuIGBodG9uX3NlcWAgKnJlYWRzKiBmcm9tIHRoZSAqZmlyc3QqIGFyZ3VtZW50IGFuZCAqd3JpdGVzKiB0byB0aGUgKnNlY29uZCogYXJndW1lbnQuIFNvLCB3aXRoIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSlgLCBpdCYjMzk7cyByZWFkaW5nIGZyb20gYHBgIOKAkyB3aGljaCBwb2ludHMgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIOKAkyBhbmQgd3JpdGluZyB0byBgJmFtcDtjcC0mZ3Q7aW5fc2VxYC4KCk9rYXksIEkgc2VlIHRoZSBwcm9ibGVtIG5vdy4gVGhpcyBpcyBhIGNsYXNzaWMgcmVhZC1mcm9tLXVuaW5pdGlhbGl6ZWQtbWVtb3J5LWFuZC1vdmVyd3JpdGUtYS1zdHJ1Y3R1cmUgYnVnLiBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlICpjb3JyZWN0KiBgY3AtJmd0O2luX3NlcWAgdmFsdWVzIHRvIHRoZSBidWZmZXIsIGl0JiMzOTtzIHRha2luZyB3aGF0ZXZlciBnYXJiYWdlIGlzIGN1cnJlbnRseSBpbiB0aGUgYnVmZmVyIGF0IHRoZSBhZGRyZXNzIGBwYCBhbmQgKm92ZXJ3cml0aW5nKiBgY3AtJmd0O2luX3NlcWAgd2l0aCB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSEgVGhhdCBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uJiMzOTtzIHNlcXVlbmNlIG51bWJlciBpcyBiZWluZyBzZXQgdG8gcmFuZG9tIHZhbHVlcywgd2hpY2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byBjYXVzZSBwcm9ibGVtcy4KCldhaXQgYSBzZWNvbmQsIGlmIHRoZSBjb2RlIGlzIHJlYWRpbmcgZnJvbSBgcGAgKHdoaWNoIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBhbmQgd3JpdGluZyB0byBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCwgdGhlbiB0aGUgY29udGVudHMgb2YgYGNwLSZndDtpbl9zZXFgIHdvdWxkIGJlIHNldCB0byB3aGF0ZXZlciByYW5kb20gZGF0YSBoYXBwZW5lZCB0byBiZSBhdCB0aGF0IG1lbW9yeSBsb2NhdGlvbiBpbiB0aGUgYnVmZmVyLCB3aGljaCBsZWFkcyB0byBhIHVzZS1hZnRlci1pbml0aWFsaXphdGlvbiBwcm9ibGVtIGFuZCBsaWtlbHkgZGF0YSBjb3JydXB0aW9uLgoKVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgcHJldHR5IGdvb2QgYXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCAqcmVhZHMqIGZyb20gYHBgLCB3aGljaCBpcyB1bmluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGZsYWdnZWQgaXQhIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZHVyaW5nIHRlc3RpbmcuCgpOb3cgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgcGAgY29tZXMgZnJvbSB0byBiZSBzdXJlIHRoZSBidWZmZXIgaXMsIGluIGZhY3QsIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgZmxhdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjI5Olx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gNjMwOlx0e1xuIDYzMTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcbiA2MzI6XHRcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbiA2MzM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gNjM0Olx0XHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4gNjM1Olx0XHRpbnQgaWQ7XG4gNjM2Olx0XHRfX3U4ICpwO1xuIDYzNzpcdFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcbiA2Mzg6XHRcbiA2Mzk6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDA6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0MTpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0MjpcdFx0XHRyZXR1cm47XG4gNjQzOlx0XHR9XG4gNjQ0Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ1Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0NjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjQ3Olx0c2xvb3A6XG4gNjQ4Olx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0XG4gNjUxOlx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjUyOlx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjUzOlx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTQ6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU1Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NTY6XHRcdFx0XHRyZXR1cm47XG4gNjU3Olx0XHRcdH1cbiA2NTg6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY1OTpcdFx0fVxuIDY2MDpcdFxuIDY2MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2MjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjYzOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NDpcdFx0XHRyZXR1cm47XG4gNjY1Olx0XHR9XG4gNjY2Olx0XG4gNjY3Olx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2Njg6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjY5Olx0XG4gNjcwOlx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjcxOlx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjcyOlx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjczOlx0XHRlbHNlXG4gNjc0Olx0I2VuZGlmXG4gNjc1Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjc2Olx0XG4gNjc3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcbiA2Nzg6XHRcdFx0bGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyO1xuIDY3OTpcdFxuIDY4MDpcdFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuIDY4MTpcdFx0XHRsZW4gJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuICYjNDM7IDI7XHQvKiAmIzQzOyBQYXJhbSBoZHIgZmllbGQgKi9cbiA2ODI6XHRcdGlmIChwZV9uYW1lX2xlbilcbiA2ODM6XHRcdFx0bGVuICYjNDM7PSBwZV9uYW1lX2xlbiAmIzQzOyAyO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogY2hlY2sgaWYgdGhlcmUgaXMgYSBzcGFjZSBmb3IgdGhpcyBvbmUgICovXG4gNjg2Olx0XHRwYWQgPSAwO1xuIDY4NzpcdFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbiA2ODg6XHRcdGlmIChidWZmKSB7XG4gNjg5Olx0XHRcdG0gPSBidWZmLVx1MDAzZW1lc2c7XG4gNjkwOlx0XHRcdHBhZCA9ICg0IC0gKHNpemVfdCkgYnVmZi1cdTAwM2VoZWFkKSBcdTAwMjYgMztcbiA2OTE6XHRcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYwICovXG4gNjkyOlx0XHRcdGlmIChidWZmLVx1MDAzZWhlYWQgJiM0MzsgbGVuICYjNDM7IHBhZCBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgbS1cdTAwM2VyZXNlcnZlZCkge1xuIDY5MzpcdFx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xuIDY5NDpcdFx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4gNjk1Olx0XHRcdFx0YnVmZiA9IE5VTEw7XG4gNjk2Olx0XHRcdFx0cGFkID0gMDtcbiA2OTc6XHRcdFx0fVxuIDY5ODpcdFx0fVxuIDY5OTpcdFxuIDcwMDpcdFx0aWYgKCFidWZmKSB7XG4gNzAxOlx0XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XG4gNzAyOlx0XHRcdGlmICghYnVmZikge1xuIDcwMzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDcwNDpcdFx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xuIDcwNTpcdFx0XHRcdHJldHVybjtcbiA3MDY6XHRcdFx0fVxuIDcwNzpcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBidWZmO1xuIDcwODpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDcwOTpcdFx0fVxuIDcxMDpcdFxuIDcxMTpcdFx0cCA9IGJ1ZmYtXHUwMDNlaGVhZDtcbiA3MTI6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gcGFkICYjNDM7IGxlbjtcbiA3MTM6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgcGFkICYjNDM7IGxlbik7XG4gNzE0Olx0XHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cbiA3MTU6XHRcdHdoaWxlIChwYWQtLSlcbiA3MTY6XHRcdFx0KihwJiM0MzsmIzQzOykgPSAwO1xuIDcxNzpcdFxuIDcxODpcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xuIDcxOTpcdFxuIDcyMDpcdFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIDcyMTpcdFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIDcyMjpcdFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuIDcyMzpcdFx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gNzI0Olx0XHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIDcyNTpcdFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIDcyNjpcdFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuIDcyNzpcdFx0cy1cdTAwM2V2NC52cG9ydCA9IGNwLVx1MDAzZXZwb3J0O1xuIDcyODpcdFx0cy1cdTAwM2V2NC5kcG9ydCA9IGNwLVx1MDAzZWRwb3J0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgYnVmZmAgaXMgYWxsb2NhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXRzZWxmIHRvIGRldGVybWluZSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgdW5kZXJzdGFuZCBpdHMgbnVhbmNlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhbGxvY2F0aW9uIHByb2Nlc3MgdGFrZXMgcGxhY2UsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRcdHNiID0gTlVMTDtcbiA0MDE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDQwMjpcdFx0cmV0dXJuIHNiO1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgaW5saW5lIGludFxuIDQwNjpcdHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gNDA3Olx0e1xuIDQwODpcdFx0cmV0dXJuICgobG9uZykgY3AgXHUwMDNlXHUwMDNlICgxICYjNDM7IGlsb2cyKHNpemVvZigqY3ApKSkpIFx1MDAyNiBpcHZzLVx1MDAzZXRocmVhZHNfbWFzaztcbiA0MDk6XHR9XG4gNDEwOlx0XG4gNDExOlx0LypcbiA0MTI6XHQgKiBDcmVhdGUgYSBuZXcgc3luYyBidWZmZXIgZm9yIFZlcnNpb24gMCBwcm90by5cbiA0MTM6XHQgKi9cbiA0MTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxuIDQxNTpcdGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBsZW4pXG4gNDE2Olx0e1xuIDQxNzpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG4gNDE4Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptZXNnO1xuIDQxOTpcdFxuIDQyMDpcdFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxuIDQyMTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0MjI6XHRcbiA0MjM6XHRcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKSxcbiA0MjQ6XHRcdFx0ICAgIGlwdnMtXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XG4gNDI1Olx0XHRzYi1cdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIDQyNjpcdFx0aWYgKCFzYi1cdTAwM2VtZXNnKSB7XG4gNDI3Olx0XHRcdGtmcmVlKHNiKTtcbiA0Mjg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDI5Olx0XHR9XG4gNDMwOlx0XHRtZXNnID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilzYi1cdTAwM2VtZXNnO1xuIDQzMTpcdFx0bWVzZy1cdTAwM2Vucl9jb25ucyA9IDA7XG4gNDMyOlx0XHRtZXNnLVx1MDAzZXN5bmNpZCA9IGlwdnMtXHUwMDNlbWNmZy5zeW5jaWQ7XG4gNDMzOlx0XHRtZXNnLVx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xuIDQzNDpcdFx0c2ItXHUwMDNlaGVhZCA9ICh1bnNpZ25lZCBjaGFyICopbWVzZyAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCk7XG4gNDM1Olx0XHRzYi1cdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKW1lc2cgJiM0MzsgbGVuO1xuIDQzNjpcdFx0c2ItXHUwMDNlZmlyc3R1c2UgPSBqaWZmaWVzO1xuIDQzNzpcdFx0cmV0dXJuIHNiO1xuIDQzODpcdH1cbiA0Mzk6XHRcbiA0NDA6XHQvKiBDaGVjayBpZiBjb25uZWN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgcGVyc2lzdGVuY2UgKi9cbiA0NDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIDQ0MjpcdHtcbiA0NDM6XHRcdGZvciAoY3AgPSBjcC1cdTAwM2Vjb250cm9sOyBjcDsgY3AgPSBjcC1cdTAwM2Vjb250cm9sKSB7XG4gNDQ0Olx0XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDQ0NTpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDQ0ODpcdH1cbiA0NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBCdWZmZXJzKioKClJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIGhlcmU6IEkgd2FzIGxvb2tpbmcgYXQgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgLCBidXQgSSBnb3Qgc2lkZXRyYWNrZWQgYXNzdW1pbmcgaXQgd2FzIHRoZSBvbGRlciB2ZXJzaW9uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCwgbm90IHRoZSB2MCB2ZXJzaW9uLiBJIGhhdmUgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gYW5hbHl6aW5nIHRoZSByaWdodCBjb2RlIHBhdGguIExldCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTU6aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU3OC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01ODMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwMTpcdFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoaXB2cywgbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAyLVx0XHRpZiAoIWJ1ZmYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAzLVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDQ6XHRcdFx0cHJfZXJyKFwmIzM0O2lwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcblwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwNS1cdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBhbmQgaXRzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgbG9hZCBiYWxhbmNlciBpbnN0YW5jZXMuIEkmIzM5O20gYXNzdW1pbmcgJiMzNDtzeW5jX2J1ZmYmIzM0OyByZWZlcnMgdG8gc29tZSBraW5kIG9mIGJ1ZmZlciBvciBzdHJ1Y3R1cmUgZGVzaWduZWQgdG8gaG9sZCBpbmZvcm1hdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCwgbGlrZSBjb25uZWN0aW9uIHN0YXRlLCBzZXJ2aWNlIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIE5BVCBtYXBwaW5ncy4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbW1lZGlhdGVseS4gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBhbnkga2V5IGRhdGEgc3RydWN0dXJlcz8gUGVyaGFwcyBpdCYjMzk7cyBzZXR0aW5nIHVwIHNlbWFwaG9yZXMgb3IgbXV0ZXhlcyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgc3luY2hyb25pemF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIGl0JiMzOTtzIHRha2luZyBhcyBpbnB1dCwgYW5kIHdoYXQgaXTigJlzIHJldHVybmluZy4gQSBzdWNjZXNzZnVsIGNyZWF0aW9uIGltcGxpZXMgYSB2YWxpZCBzeW5jaHJvbml6YXRpb24gYnVmZmVyIGlzIHJlYWR5IGZvciB1c2UsIGxpa2VseSBmb3IgdHJhbnNmZXJyaW5nIHN0YXRlIGluZm9ybWF0aW9uLiBBbiBlcnJvciByZXR1cm4gaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBzZXQgdXAgdGhlIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGltcHJvcGVyIGluaXRpYWxpemF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZXJyb3JzLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXA/IE9yIGlzIGl0IHBhcnQgb2YgYSBkeW5hbWljIHVwZGF0ZSBwcm9jZXNzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyByb2J1c3QgdGhlIGVycm9yIGhhbmRsaW5nIG5lZWRzIHRvIGJlLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBvcGVyYXRpb24/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGFzc2Vzc2luZyBob3cgaXTigJlzIHRpZWQgaW50byB0aGUgYmlnZ2VyIElQVlMgZnJhbWV3b3JrLCBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZm9yd2FyZGluZyBtZWNoYW5pc21zLgoKVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgaGVhZCBhcmU6CiogICBXaGF0IGRhdGEgaXMgZ2V0dGluZyBwYWNrYWdlZCBpbiB0aGlzIGJ1ZmZlcj8KKiAgIEhvdyBpcyB0aGlzIGJ1ZmZlciBpbnRlZ3JhdGVkIGludG8gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzPwoqICAgSG93IGlzIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBidWZmZXIgbWFuYWdlZCwgaW5jbHVkaW5nIGl0cyBldmVudHVhbCBkZXN0cnVjdGlvbj8KKiAgIFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzLCBhbmQgYXJlIHRoZXkgaGFuZGxlZCBncmFjZWZ1bGx5PwoqICAgSXMgdGhpcyBmdW5jdGlvbiB0aHJlYWQtc2FmZT8KClRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0ICogQ3JlYXRlIGEgbmV3IHN5bmMgYnVmZmVyIGZvciBWZXJzaW9uIDEgcHJvdG8uXG4gMzI2Olx0ICovXG4gMzI3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbiAzMjg6XHRpcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxuIDMzMzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzMzQ6XHRcbiAzMzU6XHRcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcbiAzMzY6XHRcdFx0ICAgIGlwdnMtXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XG4gMzM3Olx0XHRzYi1cdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIDMzODpcdFx0aWYgKCFzYi1cdTAwM2VtZXNnKSB7XG4gMzM5Olx0XHRcdGtmcmVlKHNiKTtcbiAzNDA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzQxOlx0XHR9XG4gMzQyOlx0XHRzYi1cdTAwM2VtZXNnLVx1MDAzZXJlc2VydmVkID0gMDsgIC8qIG9sZCBucl9jb25ucyBpLmUuIG11c3QgYmUgemVybyBub3cgKi9cbiAzNDM6XHRcdHNiLVx1MDAzZW1lc2ctXHUwMDNldmVyc2lvbiA9IFNZTkNfUFJPVE9fVkVSO1xuIDM0NDpcdFx0c2ItXHUwMDNlbWVzZy1cdTAwM2VzeW5jaWQgPSBpcHZzLVx1MDAzZW1jZmcuc3luY2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXR5IGluIENvbm5lY3Rpb24gU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggYHNiLSZndDttZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO2AuIEkga25vdyBga21hbGxvY2AgY2FuIGxlYXZlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoZW4gSSBzZWUgYHAgPSBidWZmLSZndDtoZWFkO2Ag4oCTIGBwYCBub3cgcG9pbnRzIHRvIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdyBoZXJlIGNvbWVzIHRoZSByZWFsIGtpY2tlcjogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgLiBUaGlzIGlzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGdvIG9mZi4KCkl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgaXMgKnJlYWRpbmcqIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBwYCBhbmQgKndyaXRpbmcqIHRvIGAmYW1wO2NwLSZndDtpbl9zZXFgLiBIb2xkIG9uLi4uIHRoYXQgbWVhbnMgYGNwLSZndDtpbl9zZXFgLCB3aGljaCBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwX3ZzX2Nvbm5gLCBpcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBnYXJiYWdlIGZyb20gdGhlIGBrbWFsbG9jYCYjMzk7ZCBidWZmZXIhCgpBbmQgaWYgYGNwLSZndDtpbl9zZXFgIGlzIGJlaW5nIGNsb2JiZXJlZCB3aXRoIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhLCB0aGVuIGFueSBmdXR1cmUgdXNlIG9mIGBjcC0mZ3Q7aW5fc2VxYCBpcyBnb2luZyB0byBiZSB1c2luZyB0aGF0IGdhcmJhZ2UuIElzIGBjcC0mZ3Q7aW5fc2VxYCB1c2VkIGxhdGVyPyBPaCB5ZXMsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZS4KCkJ1dCBoYW5nIG9uLCBpc24mIzM5O3QgdGhlIHdob2xlICpwb2ludCogb2YgYGlwX3ZzX3N5bmNfY29ubmAgdG8gc2VyaWFsaXplIHRoZSAqY3VycmVudCogc3RhdGUgb2YgYGNwLSZndDtpbl9zZXFgIGludG8gdGhlIGJ1ZmZlciBgcGA/IEl0JiMzOTtzIGEgc3luYyBtZXNzYWdlLCBpbnRlbmRlZCB0byBiZSBzZW50IGFjcm9zcyB0aGUgbmV0d29yayEgV2UmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIHByZXBhcmluZyB0byB0cmFuc21pdCB0aGUgKmNvcnJlY3QqIGN1cnJlbnQgY29ubmVjdGlvbiBzZXF1ZW5jZSBudW1iZXIhCgpPa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGBpcF92c19zeW5jX2Nvbm5gIG5vdy4gVGhpcyBsb29rcyBsaWtlIGEgc2VyaW91cyBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQ3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuIDc0ODpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIDc0OTpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIDc1MDpcdFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzUxOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTI6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiA3NTM6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIDc1NDpcdFx0fVxuIDc1NTpcdFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiA3NTY6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbiBcdTAwMjZcdTAwMjYgY3AtXHUwMDNlcGVfZGF0YSkge1xuIDc1NzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX0RBVEE7XG4gNzU4Olx0XHRcdCoocCYjNDM7JiM0MzspID0gY3AtXHUwMDNlcGVfZGF0YV9sZW47XG4gNzU5Olx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZV9kYXRhLCBjcC1cdTAwM2VwZV9kYXRhX2xlbik7XG4gNzYwOlx0XHRcdHAgJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2MTpcdFx0XHRpZiAocGVfbmFtZV9sZW4pIHtcbiA3NjI6XHRcdFx0XHQvKiBBZGQgUEVfTkFNRSAqL1xuIDc2MzpcdFx0XHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfUEVfTkFNRTtcbiA3NjQ6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHBlX25hbWVfbGVuO1xuIDc2NTpcdFx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZS1cdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XG4gNzY2Olx0XHRcdFx0cCAmIzQzOz0gcGVfbmFtZV9sZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBTdGF0ZSBTZXJpYWxpemF0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBzaGlwIHRoYXQgZGF0YSB0byB0aGUgYmFja3VwIGxvYWQgYmFsYW5jZXIuIFRoZSBwcm9ibGVtIGhlcmUgaXMgYSBwcmV0dHkgbmFzdHkgYnVnLCB0aG91Z2guIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgY29ubmVjdGlvbiYjMzk7cyBgY3AtJmd0O2luX3NlcWAgdmFsdWUgKmludG8qIHRoZSBidWZmZXIgYHBgLCBpdCYjMzk7cyBhY3R1YWxseSByZWFkaW5nICpmcm9tKiBgcGAgYW5kIG92ZXJ3cml0aW5nIGBjcC0mZ3Q7aW5fc2VxYCEgVGhhdCYjMzk7cy4uLmJhZC4KClRoaXMgaGFzIHR3byBpbW1lZGlhdGUgYW5kIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy4gRmlyc3QsIHRoZSBjcnVjaWFsIGBjcC0mZ3Q7aW5fc2VxYCBtZW1iZXIgaXMgZ2V0dGluZyBjbG9iYmVyZWQgd2l0aCB3aGF0ZXZlciBnYXJiYWdlIGhhcHBlbmVkIHRvIGJlIGluIHRoZSBga21hbGxvY2AtYWxsb2NhdGVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGNvcnJ1cHRpb24gaXNzdWUsIHB1cmUgYW5kIHNpbXBsZS4KCkJ1dCB3b3JzZSwgdGhlIGJ1ZmZlciBgcGAgaXRzZWxmICpyZW1haW5zKiB1bmluaXRpYWxpemVkLiBTbywgd2UmIzM5O3JlIG5vdCBvbmx5IGxvc2luZyB0aGUgY29ycmVjdCB2YWx1ZSwgd2UmIzM5O3JlIGFsc28gbm90IHBvcHVsYXRpbmcgdGhlIGJ1ZmZlciB3aXRoIGl0LiBUaGUgYnVmZmVyLCBmdWxsIG9mIGdhcmJhZ2UsIGdldHMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLgoKV2FpdCBhIHNlY29uZC4uLiAqdW5pbml0aWFsaXplZCBtZW1vcnkgb3ZlciB0aGUgbmV0d29yaz8qIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdHJhbnNtaXR0aW5nIHNlbnNpdGl2ZSwgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgc2Vuc2l0aXZlLCBpbmZvcm1hdGlvbiB0aGF0IGhhc24mIzM5O3QgYmVlbiBkZWxpYmVyYXRlbHkgcG9wdWxhdGVkLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaW5mby1sZWFrcywgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZmluZHMgaXRzIHdheSBhY3Jvc3MgbmV0d29yayBib3VuZGFyaWVzIG9yIGludG8gdXNlciBzcGFjZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gS01TQU4gc2hvdWxkIGZsYWcuIE5vdywgbGV0IG1lIHZlcmlmeSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgYnVmZmVyIGlzIHNlbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NiX3F1ZXVlX3RhaWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzYxOnN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjItXHRcdFx0XHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcyLVx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgIW0tXHUwMDNlbnJfY29ubnMpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTczOlx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzQtXHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5Mi1cdFx0aWYgKGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOyBsZW4gJiM0MzsgcGFkIFx1MDAzZSBidWZmLVx1MDAzZWVuZCB8fCBtLVx1MDAzZXJlc2VydmVkKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY5MzpcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjk0LVx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTY5LVx0XHQvKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTcwOlx0XHQgKiBUaGUgbG9jayBzeW5jaHJvbml6ZXMgd2l0aCBzYl9xdWV1ZV90YWlsKCksIHNvIHRoYXQgd2UgZG9uJiMzOTt0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NzEtXHRcdCAqIGFkZCBzeW5jIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVlLCB3aGVuIHdlIGFyZSBhbHJlYWR5IGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgQnVmZmVyIFRyYW5zbWlzc2lvbiBQcm9jZXNzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIsIG9uY2UgaXQmIzM5O3MgYmVlbiBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0sIGFjdHVhbGx5IGdldHMgc2VudC4gTXkgZm9jdXMgaXMgb24gdGhlIGBzYl9xdWV1ZV90YWlsYCBmdW5jdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjaykgbGlrZWx5IGhhcHBlbnMuIEkmIzM5O20gdmlzdWFsaXppbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdHJhY2luZyB0aGUgcG9pbnRlcnMsIGFuZCBmaWd1cmluZyBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB0aGUgdW5kZXJseWluZyB0cmFuc21pc3Npb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIHRoZSBidWZmZXIgdHJhbnNmZXI/IElzIGl0IGEgZGlyZWN0IERNQSwgYSBjb3B5LCBzb21lIGtpbmQgb2Ygc2hhcmVkIG1lbW9yeSByZWdpb24/IFdoYXTigJlzIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdHJhbnNtaXNzaW9uPyBVbmRlcnN0YW5kaW5nIGhvdyBgc2JfcXVldWVfdGFpbGAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgaW50ZXJydXB0IGhhbmRsaW5nIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUuIEkmIzM5O20gcmVhbGx5IGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCBob3cgdGhhdCAmIzM5O3RhaWwmIzM5OyBvcGVyYXRpb24gYWN0dWFsbHkgZ2V0cyB0aGUgYnVmZmVyIG1vdmluZyBmcm9tIG1lbW9yeSBvbnRvIHRoZSB3aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbiAzNTY6XHR7XG4gMzU3Olx0XHRrZnJlZShzYi1cdTAwM2VtZXNnKTtcbiAzNTg6XHRcdGtmcmVlKHNiKTtcbiAzNTk6XHR9XG4gMzYwOlx0XG4gMzYxOlx0c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4gMzYyOlx0XHRcdFx0XHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXHUwMDNlc3luY19idWZmO1xuIDM2NTpcdFxuIDM2NjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbiAzNjc6XHRcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcdTAwMjZcdTAwMjZcbiAzNjg6XHRcdCAgICBtcy1cdTAwM2VzeW5jX3F1ZXVlX2xlbiBcdTAwM2Mgc3lzY3RsX3N5bmNfcWxlbl9tYXgoaXB2cykpIHtcbiAzNjk6XHRcdFx0aWYgKCFtcy1cdTAwM2VzeW5jX3F1ZXVlX2xlbilcbiAzNzA6XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bXMtXHUwMDNlbWFzdGVyX3dha2V1cF93b3JrLFxuIDM3MTpcdFx0XHRcdFx0XHQgICAgICBtYXgoSVBWU19TWU5DX1NFTkRfREVMQVksIDEpKTtcbiAzNzI6XHRcdFx0bXMtXHUwMDNlc3luY19xdWV1ZV9sZW4mIzQzOyYjNDM7O1xuIDM3MzpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNiLVx1MDAzZWxpc3QsIFx1MDAyNm1zLVx1MDAzZXN5bmNfcXVldWUpO1xuIDM3NDpcdFx0XHRpZiAoKCYjNDM7JiM0Mzttcy1cdTAwM2VzeW5jX3F1ZXVlX2RlbGF5KSA9PSBJUFZTX1NZTkNfV0FLRVVQX1JBVEUpIHtcbiAzNzU6XHRcdFx0XHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXHUwMDNlbXMpO1xuIDM3NjpcdFxuIDM3NzpcdFx0XHRcdHdha2VfdXBfcHJvY2VzcyhpcHZzLVx1MDAzZW1hc3Rlcl90aW5mb1tpZF0udGFzayk7XG4gMzc4Olx0XHRcdH1cbiAzNzk6XHRcdH0gZWxzZVxuIDM4MDpcdFx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG4gMzgxOlx0XHRzcGluX3VubG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbG9jayk7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkJ1ZmZlcmluZyBhbmQgVGhyZWFkIFN5bmNocm9uaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogd2UmIzM5O3JlIGVucXVldWluZyBkYXRhIHRvIGJlIHN5bmNocm9uaXplZCwgcGxhY2luZyBpdCBpbiB0aGUgYG1zLSZndDtzeW5jX3F1ZXVlYC4gVGhlIGltbWVkaWF0ZSBmb2xsb3ctdXAgaXMgdG8gZ2V0IHRoZSBtYXN0ZXIgdGhyZWFkIGludm9sdmVkLiBJdCYjMzk7cyB0aW1lIHRvIHdha2UgaXQgdXAuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhlIG1hc3RlciB0aHJlYWQgaXMgYW5kIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgbWlnaHQgYmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIG1hc3RlciB0aHJlYWQgaXMgY3JpdGljYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBuZXh0IGFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFzdGVyX3RocmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDU9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDA2OnNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQwNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU2NDpcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NjUtXHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Njc6XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY4LVx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCwgb3Igd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZWl0aGVyIGBtYXN0ZXJfdGluZm9gLCBvciBgc3luY190aHJlYWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZS4gVXNpbmcgdGhlc2Ugc2VhcmNoIHRlcm1zIHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZpbGVzIG9yIGZ1bmN0aW9ucy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoIHRvIHNlZSBob3cgdGhlIHRlcm1zIGFyZSB1c2VkLCBhbmQgdGhlbiBuYXJyb3cgZG93biBteSBmb2N1cyBhcyBJIGFuYWx5emUgdGhlIHJlc3VsdHMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgYW5kIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZ2V0IHRoZSBtb3N0IG1pbGVhZ2Ugb3V0IG9mIGEgdGFyZ2V0ZWQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmNfdGhyZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3ND11bmlvbiBpcF92c19zeW5jX2Nvbm4ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjM4PW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjQ4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQ5OnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NTAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjUxOlx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY1Mi1cdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXHUwMDNlaXB2cztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDE6c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDM6XHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA0LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cdTAwM2VpcHZzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczNy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTczODppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczOS1cdFx0ICAgICAgaW50IHN0YXRlKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzQwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0MTpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSA9IE5VTEwsICp0aW5mbztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc0Mi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MzMtXHRcdG5hbWUgPSBcJiMzNDtpcHZzLW06JWQ6JWRcJiMzNDs7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4MzQ6XHRcdHRocmVhZGZuID0gc3luY190aHJlYWRfbWFzdGVyO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODM1LVx0fSBlbHNlIGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDEtXHRcdG5hbWUgPSBcJiMzNDtpcHZzLWI6JWQ6JWRcJiMzNDs7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDI6XHRcdHRocmVhZGZuID0gc3luY190aHJlYWRfYmFja3VwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODQzLVx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NjUtXHRyZXN1bHQgPSAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODY2Olx0dGkgPSBremFsbG9jX29ianMoc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2Ny1cdGlmICghdGkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU0OmludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NTUte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU2Olx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NTctXHRpbnQgaWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yMDUwPXZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTQ6XHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDU1LVx0aWYgKHJldGMgXHUwMDI2XHUwMDI2IHJldGMgIT0gLUVTUkNIKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1ODpcdHJldGMgPSBzdG9wX3N5bmNfdGhyZWFkKGlwdnMsIElQX1ZTX1NUQVRFX0JBQ0tVUCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTktXHRpZiAocmV0YyBcdTAwMjZcdTAwMjYgcmV0YyAhPSAtRVNSQ0gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzE5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHN5bmNfdGhyZWFkX21hc3RlcmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYHN5bmNfdGhyZWFkX21hc3RlcmAuIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgc3RhdGUgaXMgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yLCBzbyBhbnkgb2RkIGJlaGF2aW9yIHRoZXJlIGxpa2VseSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgY3VycmVudCBzdGF0ZSwgaG93IGl0JiMzOTtzIGJlaGF2aW5nIHJlbGF0aXZlIHRvIGV4cGVjdGF0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBzaWducyBvZiBjb250ZW50aW9uIG9yIGJsb2NrYWdlLiBUaGUgc3BlY2lmaWNzIGRlcGVuZCBvbiB0aGUgaW1wbGVtZW50YXRpb24sIG9mIGNvdXJzZSAtIGJ1dCB0aGF04oCZcyB0aGUgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0OTpcdHN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG4xNjUwOlx0e1xuMTY1MTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcbjE2NTI6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXHUwMDNlaXB2cztcbjE2NTM6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbdGluZm8tXHUwMDNlaWRdO1xuMTY1NDpcdFx0c3RydWN0IHNvY2sgKnNrID0gdGluZm8tXHUwMDNlc29jay1cdTAwM2VzaztcbjE2NTU6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuMTY1NjpcdFxuMTY1NzpcdFx0cHJfaW5mbyhcJiMzNDtzeW5jIHRocmVhZCBzdGFydGVkOiBzdGF0ZSA9IE1BU1RFUiwgbWNhc3RfaWZuID0gJXMsIFwmIzM0O1xuMTY1ODpcdFx0XHRcJiMzNDtzeW5jaWQgPSAlZCwgaWQgPSAlZFxcblwmIzM0OyxcbjE2NTk6XHRcdFx0aXB2cy1cdTAwM2VtY2ZnLm1jYXN0X2lmbiwgaXB2cy1cdTAwM2VtY2ZnLnN5bmNpZCwgdGluZm8tXHUwMDNlaWQpO1xuMTY2MDpcdFxuMTY2MTpcdFx0Zm9yICg7Oykge1xuMTY2MjpcdFx0XHRzYiA9IG5leHRfc3luY19idWZmKGlwdnMsIG1zKTtcbjE2NjM6XHRcdFx0aWYgKHVubGlrZWx5KGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpXG4xNjY0Olx0XHRcdFx0YnJlYWs7XG4xNjY1Olx0XHRcdGlmICghc2IpIHtcbjE2NjY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KElQVlNfU1lOQ19DSEVDS19QRVJJT0QpO1xuMTY2NzpcdFx0XHRcdGNvbnRpbnVlO1xuMTY2ODpcdFx0XHR9XG4xNjY5Olx0XHRcdHdoaWxlIChpcF92c19zZW5kX3N5bmNfbXNnKHRpbmZvLVx1MDAzZXNvY2ssIHNiLVx1MDAzZW1lc2cpIFx1MDAzYyAwKSB7XG4xNjcwOlx0XHRcdFx0LyogKEFiKXVzZSBpbnRlcnJ1cHRpYmxlIHNsZWVwIHRvIGF2b2lkIGluY3JlYXNpbmdcbjE2NzE6XHRcdFx0XHQgKiB0aGUgbG9hZCBhdmcuXG4xNjcyOlx0XHRcdFx0ICovXG4xNjczOlx0XHRcdFx0X193YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKnNrX3NsZWVwKHNrKSxcbjE2NzQ6XHRcdFx0XHRcdFx0XHQgICBzb2NrX3dyaXRlYWJsZShzaykgfHxcbjE2NzU6XHRcdFx0XHRcdFx0XHQgICBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpO1xuMTY3NjpcdFx0XHRcdGlmICh1bmxpa2VseShrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuMTY3NzpcdFx0XHRcdFx0Z290byBkb25lO1xuMTY3ODpcdFx0XHR9XG4xNjc5Olx0XHRcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcbjE2ODA6XHRcdH1cbjE2ODE6XHRcbjE2ODI6XHRkb25lOlxuMTY4MzpcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMTY4NDpcdFx0aWYgKHNiKVxuMTY4NTpcdFx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG4xNjg2Olx0XG4xNjg3Olx0XHQvKiBjbGVhbiB1cCB0aGUgc3luY19idWZmIHF1ZXVlICovXG4xNjg4Olx0XHR3aGlsZSAoKHNiID0gc2JfZGVxdWV1ZShpcHZzLCBtcykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFN5bmNocm9uaXphdGlvbiBNZXNzYWdlIFRyYW5zbWlzc2lvbioqCgpSaWdodCwgc28gYGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tJmd0O3NvY2ssIHNiLSZndDttZXNnKWAgaXMgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gaXMgdHJhbnNtaXR0aW5nIHRoYXQgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UsIGBzYi0mZ3Q7bWVzZ2AsIG92ZXIgdGhlIHNvY2tldCwgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBgdGluZm8tJmd0O3NvY2tgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgc2ItJmd0O21lc2dgIGlzIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW5kIGB0aW5mby0mZ3Q7c29ja2AgaXMgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYWZmaWMgaW5mb3JtYXRpb24uCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBpcF92c19zZW5kX3N5bmNfbXNnYC4gSSYjMzk7bGwgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQsIGhvdyBpdCBmb3JtYXRzIHRoZSBtZXNzYWdlLCBhbnkgbmVjZXNzYXJ5IGVycm9yIGNoZWNraW5nLCBhbmQgd2hhdCB1bmRlcmx5aW5nIG5ldHdvcmsgY2FsbHMgYXJlIHVzZWQgdG8gYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSBvdXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSB1c2Ugb2YgYHNlbmRtc2dgLCBwb3RlbnRpYWwgYnVmZmVyaW5nIG1lY2hhbmlzbXMsIGFuZCBhbnkgc3BlY2lmaWMgcHJvdG9jb2xzIGF0IHBsYXksIHNvIEkgY2FuIGVuc3VyZSB0aGUgc3luYyBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIGluIGEgc2FmZSBhbmQgcmVsaWFibGUgd2F5LiBJIG1pZ2h0IGFsc28gd2FudCB0byBsb29rIGZvciBhc3BlY3RzIG9mIGZsb3cgY29udHJvbCB0aGF0IHdvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0XHRsZW4gPSBzb2NrX3JlY3Ztc2coc29jaywgXHUwMDI2bXNnLCBNU0dfRE9OVFdBSVQpO1xuMTYxMTpcdFx0aWYgKGxlbiBcdTAwM2MgMClcbjE2MTI6XHRcdFx0cmV0dXJuIGxlbjtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJldHVybiBsZW47XG4xNjE1Olx0fVxuMTYxNjpcdFxuMTYxNzpcdC8qIFdha2V1cCB0aGUgbWFzdGVyIHRocmVhZCBmb3Igc2VuZGluZyAqL1xuMTYxODpcdHN0YXRpYyB2b2lkIG1hc3Rlcl93YWtldXBfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjE2MTk6XHR7XG4xNjIwOlx0XHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPVxuMTYyMTpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUsXG4xNjIyOlx0XHRcdFx0ICAgICBtYXN0ZXJfd2FrZXVwX3dvcmsud29yayk7XG4xNjIzOlx0XHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG1zLVx1MDAzZWlwdnM7XG4xNjI0Olx0XG4xNjI1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuMTYyNjpcdFx0aWYgKG1zLVx1MDAzZXN5bmNfcXVldWVfbGVuIFx1MDAyNlx1MDAyNlxuMTYyNzpcdFx0ICAgIG1zLVx1MDAzZXN5bmNfcXVldWVfZGVsYXkgXHUwMDNjIElQVlNfU1lOQ19XQUtFVVBfUkFURSkge1xuMTYyODpcdFx0XHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXHUwMDNlbXMpO1xuMTYyOTpcdFxuMTYzMDpcdFx0XHRtcy1cdTAwM2VzeW5jX3F1ZXVlX2RlbGF5ID0gSVBWU19TWU5DX1dBS0VVUF9SQVRFO1xuMTYzMTpcdFx0XHR3YWtlX3VwX3Byb2Nlc3MoaXB2cy1cdTAwM2VtYXN0ZXJfdGluZm9baWRdLnRhc2spO1xuMTYzMjpcdFx0fVxuMTYzMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuMTYzNDpcdH1cbjE2MzU6XHRcbjE2MzY6XHQvKiBHZXQgbmV4dCBidWZmZXIgdG8gc2VuZCAqL1xuMTYzNzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG4xNjM4Olx0bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbjE2Mzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDIxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNaXNzaW5nIEZ1bmN0aW9uIENhbGwgaW4gU25pcHBldCAtIExldCYjMzk7cyBJbnZlc3RpZ2F0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBvZmYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNhbGwgdG8gYGlwX3ZzX3NlbmRfc3luY19tc2dgIGhlcmUsIGJ1dCBpdCYjMzk7cyBhYnNlbnQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCBpbiB0aGUgY29udGV4dCBvZiBJUFZTIHN5bmNocm9uaXphdGlvbiwgc28gaXRzIGFic2VuY2Ugd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5vdCBwcmVzZW50LiBJcyB0aGlzIHNuaXBwZXQgZnJvbSBhbiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzZWN0aW9uPyBBbSBJIGxvb2tpbmcgYXQgdGhlIHdyb25nIHBhcnQgb2YgdGhlIGNvZGUgYmFzZT8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggYXQgcGxheSBoZXJlLCBhbmQgdGhpcyBwYXJ0IG9mIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaXMgZGlzYWJsZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBpcF92c19zZW5kX3N5bmNfbXNnYCB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgc29tZSBpbml0aWFsIGNvbnRleHQgYW5kIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zZW5kX3N5bmNfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1ODY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTg3OmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTg4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDk9c3RhdGljIGludCBzeW5jX3RocmVhZF9tYXN0ZXIodm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NjgtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY2OTpcdFx0d2hpbGUgKGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXHUwMDNlc29jaywgc2ItXHUwMDNlbWVzZykgXHUwMDNjIDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3MC1cdFx0XHQvKiAoQWIpdXNlIGludGVycnVwdGlibGUgc2xlZXAgdG8gYXZvaWQgaW5jcmVhc2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19zZW5kX3N5bmNfbXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3ZzX3NlbmRfc3luY19tc2dgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQVlMgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIG9mIGNvbm5lY3Rpb24gc3RhdGUgYmV0d2VlbiBkaXJlY3RvciBub2Rlcy4gR2l2ZW4gdGhlIG5hbWluZywgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbWVzc2FnZXMsIHByb2JhYmx5IG92ZXIgc29tZSBlc3RhYmxpc2hlZCBjb250cm9sIGNoYW5uZWwgb3IgbmV0d29yayBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSAmIzM0O3N5bmMgbWVzc2FnZSYjMzQ7IGluIHRoaXMgaW1wbGVtZW50YXRpb24uIElzIGl0IGZ1bGwgc3RhdGUgdXBkYXRlcywgaW5jcmVtZW50YWwgY2hhbmdlcywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIHRoZSBmb3JtYXQ6IHJhdyBkYXRhPyBQcm90b2NvbCBidWZmZXJzPyBTb21lIGN1c3RvbSBzdHJ1Y3R1cmU/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHNldCBvZiBxdWVzdGlvbnMgdGhhdCBwb3AgdXAuCgpJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBvcGVyYXRpbmcgb24uIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgc2VyaWFsaXplZCBhbmQgdHJhbnNtaXR0ZWQ/IENvbm5lY3Rpb24gdHJhY2tpbmcgZW50cmllcz8gTkFUIG1hcHBpbmdzPyBMb2FkIGJhbGFuY2luZyBjb25maWd1cmF0aW9uPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduJiMzOTtzIHRyYWRlLW9mZnMgYmV0d2VlbiBzeW5jaHJvbml6YXRpb24gc3BlZWQsIGJhbmR3aWR0aCB1c2FnZSwgYW5kIGNvbnNpc3RlbmN5IGd1YXJhbnRlZXMuIFRoZW4gSeKAmWxsIHdhbnQgdG8gdHJhY2UgYmFjayBhbmQgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSBjYWxsaW5nIHJvdXRpbmVzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBVbmRlciB3aGF0IGNvbmRpdGlvbnM/IEhvdyBpcyBpdCB0cmlnZ2VyZWQsIHBlcmhhcHMgYnkgY29ubmVjdGlvbiBjcmVhdGlvbiwgdGVybWluYXRpb24sIG9yIHBlcmlvZGljIHN0YXR1cyB1cGRhdGVzPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0b28uIElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkIHRoYXQgY291bGQgbGVhZCB0byBjb250ZW50aW9uIGR1cmluZyBoaWdoIGNvbm5lY3Rpb24gcmF0ZXM/IFdoYXQgYWJvdXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayB0cmFuc3BvcnQ/IERvZXMgaXQgdXNlIFVEUCBmb3Igc3BlZWQgb3IgVENQIGZvciByZWxpYWJpbGl0eT8gQW5kIGlmIFRDUCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBmbG93IGNvbnRyb2wgYW5kIGNvbmdlc3Rpb24/IE15IHJhZGFyIGlzIHVwIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgc3luY2hyb25pemF0aW9uIGxhdGVuY3kgY291bGQgYmVjb21lIGEgcGVyZm9ybWFuY2UgbGltaXRpbmcgZmFjdG9yLiBGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uPyBXaGF0IGhhcHBlbnMgaWYgYSBzeW5jIG1lc3NhZ2UgZmFpbHMgdG8gcmVhY2ggYSBkaXJlY3Rvcj8gSXMgdGhlcmUgYSByZXRyeSBtZWNoYW5pc20/IEFyZSB0aGVyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIG9yIGR1cGxpY2F0ZSBtZXNzYWdlcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU4NjpcdHN0YXRpYyBpbnRcbjE1ODc6XHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbjE1ODg6XHR7XG4xNTg5Olx0XHRpbnQgbXNpemU7XG4xNTkwOlx0XHRpbnQgcmV0O1xuMTU5MTpcdFxuMTU5MjpcdFx0bXNpemUgPSBudG9ocyhtc2ctXHUwMDNlc2l6ZSk7XG4xNTkzOlx0XG4xNTk0Olx0XHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XG4xNTk1Olx0XHRpZiAocmV0IFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcbjE1OTY6XHRcdFx0cmV0dXJuIHJldDtcbjE1OTc6XHRcdHByX2VycihcJiMzNDtpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU5ODpcdFx0cmV0dXJuIDA7XG4xNTk5Olx0fVxuMTYwMDpcdFxuMTYwMTpcdHN0YXRpYyBpbnRcbjE2MDI6XHRpcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbjE2MDM6XHR7XG4xNjA0Olx0XHRzdHJ1Y3QgbXNnaGRyXHRcdG1zZyA9IHtOVUxMLH07XG4xNjA1Olx0XHRzdHJ1Y3Qga3ZlY1x0XHRpb3YgPSB7YnVmZmVyLCBidWZsZW59O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIG9uIGBpcF92c19zZW5kX2FzeW5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaXBfdnNfc2VuZF9hc3luY2AuIFRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UgZGVhbCB3aXRoIGFzeW5jaHJvbm91cyBzZW5kcyBpbiBJUFZTLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSBidW5jaCBvZiBvcHRpbWl6YXRpb25zLiBGcm9tIG15IHVuZGVyc3RhbmRpbmcsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBub3QganVzdCBhIHNpbXBsZSBzZW5kIG9wZXJhdGlvbi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29tcGxleGl0aWVzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVGluZywgYW5kIHBvdGVudGlhbGx5IHJldHJhbnNtaXNzaW9ucyBoZXJlLiBJdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGJvdHRsZW5lY2tzLgoKTXkgZmlyc3QgdGhvdWdodCB3b3VsZCBiZSB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsb2NrIGZyZWUuIElmIHRoZXJlIGFyZSBhbnkgbG9ja3MsIGFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBvciBjb2Fyc2U/IFRoYXQgaGFzIGEgaHVnZSBpbXBhY3Qgb24gc2NhbGFiaWxpdHkuIEFyZSB3ZSB1c2luZyBwZXItY29ubmVjdGlvbiBsb2NrcywgcGVyLWRlc3RpbmF0aW9uIGxvY2tzLCBvciBzb21ldGhpbmcgbW9yZSBnbG9iYWw/CgpUaGVuLCB0aGUgc2Vjb25kIHF1ZXN0aW9uIHdvdWxkIGJlIG9uIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycy4gSXMgdGhlcmUgZWZmaWNpZW50IERNQSB1c2FnZT8gQXJlIHdlIG9wdGltaXppbmcgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGludGVyZmFjZSBjYXJkIHR5cGVzIGFuZCB0aGVpciBjYXBhYmlsaXRpZXM/IEFyZSB3ZSBtYWtpbmcgdGhlIG1vc3Qgb2Ygc2NhdHRlci9nYXRoZXIgSS9PIGlmIHBvc3NpYmxlPyBBcmUgd2UgZ2V0dGluZyBnb29kIHBlcmZvcm1hbmNlIGZyb20gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyIC0gVENQIG9yIFVEUD8KClRoZXJlJiMzOTtzIGFsc28gZXJyb3IgaGFuZGxpbmcgdG8gY29uc2lkZXIuIEhvdyBkb2VzIGBpcF92c19zZW5kX2FzeW5jYCBkZWFsIHdpdGggY29ubmVjdGlvbiBmYWlsdXJlcywgcm91dGluZyBpc3N1ZXMsIG9yIGNvbmdlc3Rpb24/IEFyZSB3ZSByZXRyeWluZyBpbnRlbGxpZ2VudGx5LCBhbmQgZG8gdGhlIHJldHJ5IG1lY2hhbmlzbXMgcHJvcGVybHkgaGFuZGxlIGRpZmZlcmVudCBmYWlsdXJlIG1vZGVzIGFuZCBuZXR3b3JrIGNvbmRpdGlvbnM/CgpVbHRpbWF0ZWx5LCB0aGlzIHdob2xlIHRoaW5nIG5lZWRzIHRvIGJlIG5vbi1ibG9ja2luZy4gVGhlIGNoYWxsZW5nZSB0aGVyZSBpcyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgYmxvY2sgdGhlIElQVlMgY29yZS4gU28gd2UgbmVlZCB0byBtYW5hZ2UgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3RzLCByZXNwb25zZXMsIGFuZCBlcnJvcnMgdmVyeSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3NlbmRfYXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU3MT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NzI6aXBfdnNfc2VuZF9hc3luYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBsZW5ndGgpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU4Nz1pcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1OTQ6XHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTUtXHRpZiAocmV0IFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ni1cdFx0cmV0dXJuIHJldDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NzpcdHByX2VycihcJiMzNDtpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTk4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBpcF92c19zZW5kX2FzeW5jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgbWVudGFsIHRpY2sgSSBnZXQgd2hlbiBJIHNlZSBgaXBfdnNfc2VuZF9hc3luY2AgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIHByZXR0eSBjcml0aWNhbCByb2xlIGluIHRoZSBoZWFydCBvZiBJUFZTLCBhbmQgYnkgZXh0ZW5zaW9uLCBsb2FkIGJhbGFuY2luZyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gR2l2ZW4gdGhlICYjMzQ7YXN5bmMmIzM0OyBpbiB0aGUgbmFtZSwgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5vbi1ibG9ja2luZyBzZW5kIG9wZXJhdGlvbnMuIFRoaXMgaGludHMgdG93YXJkcyBvcHRpbWl6YXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBjb25jdXJyZW50bHkgd2l0aG91dCBnZXR0aW5nIGJvZ2dlZCBkb3duIHdhaXRpbmcgb24gaW5kaXZpZHVhbCBuZXR3b3JrIHdyaXRlcy4gSXQgc3VnZ2VzdHMgc29waGlzdGljYXRlZCBzY2hlZHVsaW5nIG9yIHF1ZXVlaW5nIG1lY2hhbmlzbXMgYXJlIGF0IHBsYXkuCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgY29udGV4dDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgb3BlcmF0aW5nIG9uPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB2aXJ0dWFsIHNlcnZpY2UgZGVmaW5pdGlvbnMsIHJlYWwgc2VydmVyIGluZm9ybWF0aW9uLCBhbmQgdGhlIHNvY2tldCBzdHJ1Y3R1cmVzIGludm9sdmVkLiBUaGUgJiMzNDtzZW5kJiMzNDsgcGFydCBpbXBsaWVzIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0cmFmZmljIGlzIGFjdHVhbGx5IHB1c2hlZCBvdXQsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHRoZSBwYWNrZXQgaXMgZm9ybWF0dGVkIChsaWtlbHkgdXNpbmcgc2tfYnVmZnMsIG9idmlvdXNseSksIGhvdyBpdCYjMzk7cyByb3V0ZWQgKEw0IG9yIEw3IGRlY2lzaW9ucywgZGVwZW5kaW5nIG9uIHRoZSBWUyBjb25maWd1cmF0aW9uKSwgYW5kIGFueSBwb3RlbnRpYWwgdHJhbnNmb3JtYXRpb25zIChsaWtlIE5BVCBvciB0dW5uZWxpbmcpLgoKVGhlbiwgb2YgY291cnNlLCB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSByYWlzZXMgcXVlc3Rpb25zOiBJcyBpdCB1c2luZyBjb21wbGV0aW9uIGNhbGxiYWNrcz8gV29ya3F1ZXVlcz8gTkFQSS1saWtlIHN0cnVjdHVyZXM/IEhvdyBpcyBlcnJvciBoYW5kbGluZyBtYW5hZ2VkIGluIHRoaXMgYXN5bmNocm9ub3VzIGVudmlyb25tZW50PyBBcmUgdGhlcmUgY29uc2lkZXJhdGlvbnMgZm9yIGJhY2twcmVzc3VyZSBhbmQgZmxvdyBjb250cm9sLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYXBpZCBidXJzdHMgb2YgdHJhZmZpYz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZWxlZ2FudCB1c2Ugb2YgdGVjaG5pcXVlcyB0byBrZWVwIHRoZSBrZXJuZWwgZnJvbSBnZXR0aW5nIHN0YXJ2ZWQgb2YgcmVzb3VyY2VzLCBhbmQgYXZvaWRpbmcgYmxvY2tpbmcgaXNzdWVzLiBUaGUgbW9yZSBJIGNvbnNpZGVyIGl0LCB0aGUgbW9yZSBJIGJlY29tZSBpbnZlc3RlZCBpbiB0aGlzIHRvcGljLiBJIHdhbnQgdG8gdW5jb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gU28gbGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTcxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzE6XHRzdGF0aWMgaW50XG4xNTcyOlx0aXBfdnNfc2VuZF9hc3luYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBsZW5ndGgpXG4xNTczOlx0e1xuMTU3NDpcdFx0c3RydWN0IG1zZ2hkclx0bXNnID0gey5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVR8TVNHX05PU0lHTkFMfTtcbjE1NzU6XHRcdHN0cnVjdCBrdmVjXHRpb3Y7XG4xNTc2Olx0XHRpbnRcdFx0bGVuO1xuMTU3NzpcdFxuMTU3ODpcdFx0aW92Lmlvdl9iYXNlICAgICA9ICh2b2lkICopYnVmZmVyO1xuMTU3OTpcdFx0aW92Lmlvdl9sZW4gICAgICA9IGxlbmd0aDtcbjE1ODA6XHRcbjE1ODE6XHRcdGxlbiA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCAoc2l6ZV90KShsZW5ndGgpKTtcbjE1ODI6XHRcbjE1ODM6XHRcdHJldHVybiBsZW47XG4xNTg0Olx0fVxuMTU4NTpcdFxuMTU4NjpcdHN0YXRpYyBpbnRcbjE1ODc6XHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbjE1ODg6XHR7XG4xNTg5Olx0XHRpbnQgbXNpemU7XG4xNTkwOlx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaW5pdGlhbGl6ZWQgSGVhcCBNZW1vcnkgTGVhayoqCgpPa2F5LCBzbyBga2VybmVsX3NlbmRtc2dgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHNlbmRpbmcgdGhlIGJ1ZmZlciBvdmVyIHRoZSBzb2NrZXQuIEkgc2VlIGl0IG5vdy4gVGhlIHByb2JsZW0gc3RlbXMgZnJvbSB0aGUgYGttYWxsb2NgIGFsbG9jYXRpb24uIEJlY2F1c2Ugb2YgdGhlIGBodG9uX3NlcWAgYnVnLCB0aGUgYnVmZmVyIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgY3AtJmd0O2luX3NlcWAgYW5kIGBjcC0mZ3Q7b3V0X3NlcWAgYmVmb3JlIGJlaW5nIHNlbnQuIEluc3RlYWQsIGl0IHdhcyByZWFkaW5nIGRpcmVjdGx5IGZyb20gdGhlIHVuaW5pdGlhbGl6ZWQgYGttYWxsb2NgIGJ1ZmZlciBhbmQgc2VuZGluZyB0aG9zZSBieXRlcyBvdmVyIHRoZSBuZXR3b3JrLiBDbGFzc2ljIGluZm8tbGVhayEgVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBLQVNBTiB3b3VsZG4mIzM5O3QgdHJpZ2dlciBoZXJlLCBiZWNhdXNlIHdlIGFyZW4mIzM5O3QgZGVhbGluZyB3aXRoIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnM7IGl0JiMzOTtzIHNpbXBseSByZWFkaW5nIGFuZCBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGFyZ3VtZW50cy4KCmBgYGMKc3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKQp7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O2luaXRfc2VxLCAmYW1wO25vLSZndDtpbml0X3NlcSk7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O2RlbHRhLCAmYW1wO25vLSZndDtkZWx0YSk7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O3ByZXZpb3VzX2RlbHRhLCAmYW1wO25vLSZndDtwcmV2aW91c19kZWx0YSk7Cn0KYGBgCgpOb3csIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBjCmh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKYGBgCgpPa2F5LCBzbyBgaG9gIGlzIGBwYCwgdGhlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyLCBhbmQgYG5vYCBpcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuIFRoZSBgcHV0X3VuYWxpZ25lZF9iZTMyYCBmdW5jdGlvbiByZWFkcyBmcm9tIGBob2AgKHdoaWNoIGlzIHRoZSB1bmluaXRpYWxpemVkIGBwYCkgYW5kIHdyaXRlcyB0byBgbm9gICh3aGljaCBpcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCkuCgpUaGVyZWZvcmUsIGl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHBgLiBCdXQgd2FpdC4uLiBkb2VzIHRoYXQgbWVhbiB0aGUgcmVhZCBoYXBwZW5zIGZyb20gYHBgPyBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHV0X3VuYWxpZ25lZF9iZTMyYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXRfdW5hbGlnbmVkX2JlMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Mjk1PXN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk3Olx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWluaXRfc2VxLCBcdTAwMjZuby1cdTAwM2Vpbml0X3NlcSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI5ODpcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VkZWx0YSwgXHUwMDI2bm8tXHUwMDNlZGVsdGEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTk6XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlcHJldmlvdXNfZGVsdGEsIFx1MDAyNm5vLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnRlcm5hbCBDb2RlIFJldmlldyoqCgpPa2F5LCBzbyBgcHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgcHRyKWAgaXMgZGVzaWduZWQgdG8gd3JpdGUgYSAzMi1iaXQgdmFsdWUsIGB2YWxgLCB0byB0aGUgbWVtb3J5IGFkZHJlc3MgcG9pbnRlZCB0byBieSBgcHRyYCBpbiBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhcmd1bWVudCBvcmRlci4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzICpzZWNvbmQqIGFuZCB0aGUgcG9pbnRlciAqZmlyc3QqLiBJJiMzOTtkIGJldHRlciBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdGhpbmcsIGJ1dCBlYXN5IHRvIG1lc3MgdXAgaWYgeW91IGFyZSB3b3JraW5nIHF1aWNrbHkuIExldCYjMzk7cyBjb25maXJtOiBmaXJzdCB0aGUgdmFsdWUsIHRoZW4gdGhlIHBvaW50ZXIgdG8gd3JpdGUgaXQgdG8uIEkgbmVlZCB0byBjb21taXQgdGhpcyB0byBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1dF91bmFsaWduZWRfYmUzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdW5hbGlnbmVkLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91bmFsaWduZWQuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9iZTE2KHUxNiB2YWwsIHZvaWQgKnApXG4tLVxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02NS1cbmluY2x1ZGUvbGludXgvdW5hbGlnbmVkLmg6NjY6c3RhdGljIGlubGluZSB2b2lkIHB1dF91bmFsaWduZWRfYmUzMih1MzIgdmFsLCB2b2lkICpwKVxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzk0CgkJCQkJCQlvdXRwdXQ6IDI5NwoJCQkJCQkJdGhvdWdodHM6IDg5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluZm8tTGVhayBCdWcgd2l0aCBLTVNBTioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgcHV0X3VuYWxpZ25lZF9iZTMyYCBpcyBrZXkgaGVyZS4gIEkgc2VlIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gd3JpdGUgYSB2YWx1ZSBmcm9tIG9uZSBtZW1vcnkgbG9jYXRpb24gdG8gYW5vdGhlci4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbWF0aWMgbGluZSBpczogIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSk7YC4gIEVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgZGF0YSBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgYHBgIGJ1ZmZlciwgaXMgYmVpbmcgcmVhZCBmcm9tIGBwYCBhbmQgd3JpdHRlbiB0byBgY3AtJmd0O2luX3NlcWAgaW5zdGVhZC4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgYHBgIGJ1ZmZlciwgd2hpY2ggcG9pbnRzIHRvIGBzYi0mZ3Q7aGVhZGAgZnJvbSB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYnV0ICpub3QqIGluaXRpYWxpemVkLiAgU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmF3LCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBpbnRlbnQgd2FzIHRvIHdyaXRlIHNlcXVlbmNlIG51bWJlcnMgaW50byB0aGlzIGBwYCBidWZmZXIsIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gIEJlY2F1c2Ugb2YgdGhlIHN3YXAsIHdlJiMzOTtyZSAqcmVhZGluZyogZnJvbSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCAqd3JpdGluZyogdGhlIHJlYWQgdmFsdWUgdG8gdGhlIGBjcC0mZ3Q7aW5fc2VxYCBzdHJ1Y3R1cmUuICBUaGlzIHRoZW4gbGVhdmVzIHRoZSBgcGAgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuCgpOb3csIGJlY2F1c2UgYHBgIGlzICpub3QqIGluaXRpYWxpemVkIGF0IHRoZSBgaHRvbl9zZXFgIGNhbGwsIGFuZCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzd2FwcGVkLCBpdCBsZWFkcyB0byB0d28gY3JpdGljYWwgcHJvYmxlbXM6CgoxLiAgV2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gdHJhY2sgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEuCjIuICBUaGUgdW5pbml0aWFsaXplZCBgcGAgYnVmZmVyLCBjb250YWluaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLCBpcyB0aGVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBieSBga2VybmVsX3NlbmRtc2dgLiBUaGlzIGlzIGEgdGV4dGJvb2sgaW5mby1sZWFrOiBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBrZXJuZWwmIzM5O3MgYm91bmRhcnkuIEtNU0FOIHdpbGwgYWxzbyBhYnNvbHV0ZWx5IGZsYWcgdGhpcyBhcyBhIGNyaXRpY2FsIHByb2JsZW0gYmVjYXVzZSBpdCYjMzk7cyBhIGRpcmVjdCBsZWFrLgoKSSBjaGVja2VkIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIFllcywgYHNiLSZndDttZXNnYCBpcyBhbGxvY2F0ZWQsIGJ1dCBpdHMgY29udGVudCAqYWZ0ZXIqIHRoZSBpbml0aWFsIGBzdHJ1Y3QgaXBfdnNfc3luY19tZXNnYCBpcyBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9ucy4gV2UmIzM5O3JlIHJlYWRpbmcgKmZyb20qIGBwYCB3aGljaCBpcyBhbGxvY2F0ZWQgYnkgYGttYWxsb2NgIGFuZCB0aGVuIGNvcGllZCBpbnRvIGBjcC0mZ3Q7aW5fc2VxYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBLTVNBTiB0byBkZXRlY3QuCgpTbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyBpcyBhIHN3YXBwZWQgYXJndW1lbnQgaW4gYGh0b25fc2VxYC4gVGhpcyBsZWFkcyB0bzoKCiogICBSZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIChgcGApLgoqICAgV3JpdGluZyB0aGUgKGdhcmJhZ2UpIHJlYWQgbWVtb3J5IHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSAoYGNwLSZndDtpbl9zZXFgKS4KKiAgIExlYXZpbmcgdGhlIGludGVuZGVkIG5ldHdvcmsgYnVmZmVyIChgcGApIHVuaW5pdGlhbGl6ZWQuCiogICBTZW5kaW5nIHRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgb3ZlciB0aGUgbmV0d29yaywgY2F1c2luZyBhIGNsZWFyIGluZm9ybWF0aW9uIGxlYWsuCiogICBLTVNBTiAqd2lsbCogZGV0ZWN0IHRoZSB1bmluaXRpYWxpemVkIHJlYWQgYW5kIHRoZSBpbmZvLWxlYWsgb24gdGhlIG5ldHdvcmsgc2VuZC4KCktBU0FOICp3b24mIzM5O3QqIGRldGVjdCB0aGlzLCBiZWNhdXNlIHRoZXJlIGFyZSBubyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlcy4gIEFsbCBtZW1vcnkgYWNjZXNzIGlzIHRlY2huaWNhbGx5IHZhbGlkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZWdpb25zLiBJdCYjMzk7cyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHN0YXRlIG9mIHRoZSBkYXRhIHRoYXQmIzM5O3MgdGhlIHByb2JsZW0uCgpUaGVyZWZvcmUsIHRoaXMgZGVmaW5pdGVseSBuZWVkcyBLTVNBTi4gIGBOZWVkc0tNU0FOID0gdHJ1ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxuXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXG5cbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxuXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXG5cbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjcuNDY0MDEwMTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDAxOTUwMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY19jb25uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcSgpYCB3ZXJlIHN3YXBwZWQuIEJlY2F1c2Ugb2YgdGhpcyBzd2FwLCB0aGUgY29kZSB3YXMgcmVhZGluZyBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciBwb2ludGVyIGBwYCBhbmQgd3JpdGluZyB0byB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUgYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxcblxcblRoaXMgYnVnIGhhcyB0d28gY29uc2VxdWVuY2VzOlxcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cXG4yLiBJdCBsZWF2ZXMgdGhlIG5ldHdvcmsgYnVmZmVyIGBwYCB1bmluaXRpYWxpemVkIGF0IHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIHNlcXVlbmNlIG51bWJlcnMgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuLiBUaGlzIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGlzIHN1YnNlcXVlbnRseSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgdmlhIGBrZXJuZWxfc2VuZG1zZygpYCBpbiB0aGUgc3luYyB0aHJlYWQsIHJlc3VsdGluZyBpbiBhbiBpbmZvLWxlYWsgb2Yga2VybmVsIGhlYXAgbWVtb3J5IHRvIHRoZSBuZXR3b3JrLlxcblxcbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjcuNDY0MDE2MDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNzQ1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmZjNTIzMzEyNDdlZTM1ODkwZWQwZWNiZGIxOTM2MDI0ZmI2NzZhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcXG5AQCAtNzQ3LDkgKzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbiBcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxuIFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiBcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4tXFx0XFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSk7XFxuK1xcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiBcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4tXFx0XFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEpO1xcbitcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiBcXHR9XFxuIFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjI4LjgxNTcyNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MTc0NDAyNDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZmM1MjMzMTI0N2VlMzU4OTBlZDBlY2JkYjE5MzYwMjRmYjY3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDE6MTE6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuaW5kZXggOTMwMzhhYmJmNWUwNC4uZjZlYTZjOTUzNWViMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbkBAIC03NDcsOSArNzQ3LDkgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuIFx0XHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiBcdFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtcbitcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIFx0XHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbi1cdFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2VvdXRfc2VxKTtcbitcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gXHR9XG4gXHQvKiBIYW5kbGUgcGUgZGF0YSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjguODE1NzI2NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1NTI4NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIvSVBWUyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5SaWdodCwgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBDbGFzc2ljLiBJdCBzZWVtcyB0byBiZSBmaWRkbGluZyB3aXRoIHRoZSBhcmd1bWVudCBvcmRlciBmb3IgYGh0b25fc2VxYC4gSG1tLCBJIHdvbmRlciB3aHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdG8gdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJndW1lbnQgc3dhcC4gSXMgaXQgcmVsYXRlZCB0byBlbmRpYW5uZXNzIGNvbmNlcm5zPyBJcyB0aGVyZSBhbiBvcHRpbWl6YXRpb24gb3IgYSBidWcgZml4IHJlbGF0ZWQgdG8gc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nPyBMZXQgbWUgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIFByb2JhYmx5IGEgc3VidGxlLCB5ZXQgY3J1Y2lhbCwgYWRqdXN0bWVudCB0byBob3cgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gd29ya3MuIEJlc3QgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFzIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBhcmUgbm90b3Jpb3VzbHkgaGFyZCB0byBkZWJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzIuMDIxMjU5MDMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjc3NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh0b25fc2VxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXHRcXHQvKiBVc2VkIGZvciBudG9oX3NlcSBhbmQgaHRvbl9zZXEgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yODM9c3RhdGljIHZvaWQgbnRvaF9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqbm8sIHN0cnVjdCBpcF92c19zZXEgKmhvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTA6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUzLVxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTozMi4xMDM1NDMwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc1NjgwMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTmV0d29yayBCdWcgRml4KipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgY29ycmVjdGluZyB0aGUgYXJndW1lbnQgb3JkZXIgd2l0aGluIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGNhbGwuIExldCdzIHNlZS4uLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGNhbGwgd2FzOiBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AuIEFuZCBub3csIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG86IGBodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gVGhhdCdzIGEgY2xlYXIgc3dhcCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3NzaWJsZSBidWcuIFRoZSBvcmlnaW5hbCBvcmRlciBtaWdodCBoYXZlIGJlZW4gbWlzaW50ZXJwcmV0aW5nIHdoaWNoIGRhdGEgdG8gdHJlYXQgYXMgdGhlIHNvdXJjZSB2ZXJzdXMgdGhlIGRlc3RpbmF0aW9uIGluIHRoZSBob3N0LXRvLW5ldHdvcmsgYnl0ZSBvcmRlciBjb252ZXJzaW9uIHByb2Nlc3MuXG5cblRoZSB0aGluZyB0byBkbyBpcyBkZWx2ZSBpbnRvIHRoZSBgaHRvbl9zZXFgIGRlZmluaXRpb24gaXRzZWxmIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIGV4cGVjdGVkIGlucHV0IGFuZCBvdXRwdXQgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmUgaWYgdGhpcyBzd2FwIGlzIGNvcnJlY3QuIElzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgIG1lYW50IHRvIGJlIHRoZSB2YWx1ZSB0byBjb252ZXJ0LCBhbmQgYChzdHJ1Y3QgaXBfdnNfc2VxICopcGAgcHJvdmlkaW5nIHNvbWUgY29udGV4dD8gT3IgdmljZSB2ZXJzYT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgcm9sZXMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzUuNjc5MjI3NTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0LypcXG4gMjkyOlxcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxcbiAyOTM6XFx0ICogRnJvbSBBbGlnbmVkIGhvc3Qgb3JkZXIgdG8gdW5hbGlnbmVkIG5ldHdvcmsgb3JkZXJcXG4gMjk0OlxcdCAqL1xcbiAyOTU6XFx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxuIDI5ODpcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXFx1MDAzZWRlbHRhLCBcXHUwMDI2bm8tXFx1MDAzZWRlbHRhKTtcXG4gMjk5OlxcdFxcdHB1dF91bmFsaWduZWRfYmUzMihoby1cXHUwMDNlcHJldmlvdXNfZGVsdGEsIFxcdTAwMjZuby1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbiAzMDA6XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiAzMDM6XFx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzMDQ6XFx0e1xcbiAzMDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4gMzA4OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtcy1cXHUwMDNlc3luY19xdWV1ZSkpIHtcXG4gMzA5OlxcdFxcdFxcdHNiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzUuNjc5NDEwNDUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MDUzNzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHNlcXVlbmNlIG51bWJlciBoYW5kbGluZyBpbiBgaXBfdnNfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29udmVydGluZyBzZXF1ZW5jZSBudW1iZXJzIGJldHdlZW4gaG9zdCBhbmQgbmV0d29yayBieXRlIG9yZGVyIHVzaW5nIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYGlwX3ZzX3NlcWAgc3RydWN0dXJlLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZG9pbmcgaXQgY29tcGxldGVseSB3cm9uZy4gVGhlIGZ1bmN0aW9uIGNhbGwgYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKWAgd2FzIHVzaW5nIGBwYCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLCBhcyB0aGUgc291cmNlIChgaG9gKSwgYW5kIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgIChwYXJ0IG9mIGEgaG9zdC1vcmRlciBzdHJ1Y3R1cmUpIGFzIHRoZSBkZXN0aW5hdGlvbiAoYG5vYCkuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYHBgIGlzIHVuaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludCEgV2UncmUgZXNzZW50aWFsbHkgY29weWluZyBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgZnJvbSBhIGJ1ZmZlciB0aGF0IGhhc24ndCBiZWVuIHBvcHVsYXRlZCAqaW50byogYSBob3N0LW9yZGVyIHNlcXVlbmNlIG51bWJlciBzdHJ1Y3R1cmUuIFRoYXQncyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIHdhaXRpbmcgdG8gaGFwcGVuLiBQbHVzLCB3ZSdyZSB3cml0aW5nIHRvIGBjcC1cdTAwM2Vpbl9zZXFgIHdoZW4gd2Ugc2hvdWxkbid0IGJlLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcy4gTm93LCB0aGUgY2FsbCBpcyBgaHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApYC4gVGhpcyByZXZlcnNlcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4gYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAgaXMgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVyIHN0cnVjdHVyZSwgYW5kIGBwYCBpcyBub3cgdGhlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLiAgVGhpcyBtYWtlcyBzZW5zZSEgV2UncmUgY29ycmVjdGx5ICpyZWFkaW5nKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gYSBob3N0LW9yZGVyIHN0cnVjdHVyZSAoYFx1MDAyNmNwLVx1MDAzZWluX3NlcWApIGFuZCB3cml0aW5nIHRoZSAqY29udmVydGVkKiBuZXR3b3JrLW9yZGVyIHNlcXVlbmNlIG51bWJlciBpbnRvIHRoZSBuZXR3b3JrIHBhY2tldCBidWZmZXIgKGBwYCkuIFRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCBkdXJpbmcgc3luY2hyb25pemF0aW9uLlxuXG5UaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gaW4gYGlwX3ZzX3N5bmNfY29ubmAsIGFuZCBhIGNyaXRpY2FsIG9uZSBhdCB0aGF0LiBHaXZlbiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgcmVsZXZhbnQgSVBWUyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMgbm93LWNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NDAuOTI5OTUxNjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDg5NTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NDEuNDQwODUzNTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTU2MTM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgSVBfVlNgIC0gdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSXQncyB0aGUgY2VudHJhbCBzd2l0Y2gsIHRoZSBtYWluIHN3aXRjaCB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIGVsc2UuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBkcmlsbCBkb3duIGludG8gYSBtb3JlIHNwZWNpZmljIHBhcmFtZXRlci4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBpcyBgaXBfdnNfc3luY19jb25uYC4gSXQncyBlc3NlbnRpYWwgd2UgY2hlY2sgdGhlIHNldHRpbmdzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo0NC41MDY0MTg1MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTgxNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM2ND1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0MzQ6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI1OC1cXHQgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI1OTpcXHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjg6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjktXFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzA6XFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzEtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDogKiAgICAgICAgICAgICAgSW4gdmVyLjEgXFxcImlwX3ZzX3N5bmNfY29ubl9vcHRpb25zXFxcIiB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNS0gKiAgICAgICAgICAgICAgVmVyLiAwIGNhbiBiZSB0dXJuZWQgb24gYnkgc3lzY3RsIC13IG5ldC5pcHY0LnZzLnN5bmNfdmVyc2lvbj0wXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUtXFx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcXHR2NDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ1OC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Mzk6c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDItXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NTpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU2LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg4LVxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTg5OlxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBidWZmLVxcdTAwM2VoZWFkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDItXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjAzOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNDpcXHRcXHRcXHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXFx1MDAyNnNbMV07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDUtXFx0XFx0bWVtY3B5KG9wdCwgXFx1MDAyNmNwLVxcdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MTktXFx0XFx0XFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjI5OnZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMS1cXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMyOlxcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMy1cXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDAtXFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDE6XFx0XFx0aXBfdnNfc3luY19jb25uX3YwKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ny1zbG9vcDpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0ODpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ5LVxcdFxcdGdvdG8gY29udHJvbDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc3LVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzE4OlxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzQ4LVxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQ5OlxcdFxcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUwLVxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODc9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc4ODppcF92c19jb25uX2ZpbGxfcGFyYW1fc3luYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCB1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnNjLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzg5LVxcdFxcdFxcdCAgIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0NS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4NDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTU4PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjEtXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYyOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NjM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjQtXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc2LVxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NzpcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3OC1cXHRcXHRmbGFncyA9IG50b2hzKHMtXFx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODE6XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwMjc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zZXFvcHQoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDI4LVxcdFxcdFxcdFxcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAyOTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICp0b3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzM6XFx0dG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzU6XFx0aWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXFxcblxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY5PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3MC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcxOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyBvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcyOlxcdHVuaW9uICBpcF92c19zeW5jX2Nvbm4gKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDczLVxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDgxOlxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjAzPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY25yX2Nvbm5zOyBpKyspIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzI6XFx0XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI0MC1cXHRcXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjQxOlxcdFxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDItXFx0XFx0XFx0c2l6ZSA9IG50b2hzKHMtXFx1MDAzZXY0LnZlcl9zaXplKSBcXHUwMDI2IFNWRVJfTUFTSztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTczOD1pbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1MC1cXHRJUF9WU19EQkcoNywgXFxcIiVzKCk6IHBpZCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTE6XFx0SVBfVlNfREJHKDcsIFxcXCJFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzUyOlxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjQ0LjU4NjQwNzc2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcwMzg1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJ1ZyBIdW50aW5nOiBJUFZTIFN5bmMgQ29ubmVjdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIHRoZSBpc3N1ZSBpcyBkZWZpbml0ZWx5IGluIGBpcF92c19zeW5jX2Nvbm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRyaWdnZXJlZCB3aGVuIElQVlMgaXMgaW4gdGhlIE1BU1RFUiBzeW5jIHN0YXRlLCB3aGljaCwgb2YgY291cnNlLCBpcyBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeW5jIGRhZW1vbiBpcyBydW5uaW5nLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHdyaXRlcywgd2hpY2ggY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzLlxuXG5XYWl0IGEgc2Vjb25kLi4uICpgaHRvbl9zZXFgKiB3YXMgd3JpdGluZyBkaXJlY3RseSB0byBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgIGluc3RlYWQgb2YgdGhlIGJ1ZmZlciAqYHBgKj8gVGhhdCdzLi4uIHllYWgsIHRoYXQncyBiYWQuIFRoYXQgbWVhbnMgaXQgd2FzIGNvcnJ1cHRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXRzZWxmIOKAkyB0aG9zZSBzZXF1ZW5jZSBudW1iZXJzIOKAkyBhbmQgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQhIFNvLCBhIGNvbm5lY3Rpb24gY291bGQgYmUgbWVzc2VkIHVwIGJlY2F1c2Ugb2YgdGhlc2UgaW5jb3JyZWN0IHNlcXVlbmNlIG51bWJlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbWFrZSBzb21lIGNvbm5lY3Rpb25zIHVudXNhYmxlLlxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24gaGVyZSBpcyBoaWdoLCBlc3BlY2lhbGx5IGlmIHdlIGNhbiBjcmFmdCBwYWNrZXRzIHRoYXQgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbiByZWxpYWJseS4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBzZXQgdXAgY29ycmVjdGx5IGZvciB0ZXN0aW5nLlxuXG5SaWdodCwgdGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYElQX1ZTYC4gQW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTmVlZCB0byBtYWtlIHN1cmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NTAuNTU2Nzk1NTIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk1NDE2OTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19TWU5DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1MC44NDYzNDczNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MjAyMTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUFZTIENvbmZpZ3VyYXRpb24gQ2xhcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUFZTIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIHRoZSBkb2N1bWVudGF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG1pc2xlYWRpbmcsIG9yIHBlcmhhcHMgb3V0ZGF0ZWQuIEkgd2FzIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgYElQX1ZTX1NZTkNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQncyBqdXN0Li4uIG5vdCB0aGVyZS4gQWZ0ZXIgYSBsaXR0bGUgZGlnZ2luZywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgSVBfVlNfU1lOQ2AgaXNuJ3QgYSBzdGFuZGFsb25lIG9wdGlvbi4gSXQncyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBidWlsdC1pbiBhbmQgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gYElQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC5cblxuVGltZSB0byBjb25maXJtIHRoaXMgaHVuY2ggYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciBvbiBob3cgdGhlIHN5bmNocm9uaXphdGlvbiBmZWF0dXJlcyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhleSBhcmUgZGVwZW5kZW50IG9uIG90aGVyLCBicm9hZGVyIElQVlMgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gZW5zdXJlIHByb3BlciBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NTQuMjM4MzczNjgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSVBWUyBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXG4gICA3OlxcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbiAgIDg6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vXFxuICAgOTpcXHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG4gIDEwOlxcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3Aub1xcbiAgMTE6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XFxuICAxNDpcXHRpcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICs9IGlwX3ZzX25mY3Qub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbiAgMTc6XFx0XFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG4gIDE4OlxcdFxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG4gIDE5OlxcdFxcdFxcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1NC4yMzg1OTEyOTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NjgwMDIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgSVBWUyBCdWlsZCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBpcF92c19zeW5jLm9gIGhlcmUuIFJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgdGhlbiBgaXBfdnNfc3luYy5vYCAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBUaGF0J3MganVzdCB0aGUgd2F5IGl0IHdvcmtzLiBCdXQgbm93IEknbSBzdGFydGluZyB0byB3b25kZXIgaWYgYElQX1ZTYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJUF9WU2AgYW5kIG90aGVyIG1vZHVsZXMgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1cHN0cmVhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjU5LjM5NTM5NTE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5MTQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz01PW1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjk9Y29uZmlnXFx0SVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMzNz1jb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzOTpcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0MC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXFx0SVBfVlNfUEVfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVxcdHRyaXN0YXRlIFxcXCJTSVAgcGVyc2lzdGVuY2UgZW5naW5lXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzU0OlxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1OS40ODAzMTk2MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5OTcwNDA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQX1ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgSVBfVlNgIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQgcmVsaWVzIGhlYXZpbHkgb24gYm90aCBgSU5FVGAgYW5kIGBORVRGSUxURVJgLiBNYWtlcyBzZW5zZS4gQnV0IEknbSBnb2luZyB0byBjZW50ZXIgbXkgZm9jdXMgb24gYElQX1ZTYCBpdHNlbGYsIHNpbmNlIHRoYXQncyB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gQ2hlY2tpbmcgaXRzIHNpZ25hdHVyZSwgYHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKWAsIG5vcGUsIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gVGhhdCBleHBhbmRzIG15IHNlYXJjaCBzb21ld2hhdC5cblxuQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9uIG5hbWVzIGluIHJlbGF0aW9uIHRvIHRoaXMgY29kZT8gSSBzZWUgYGh0b25fc2VxYCBpcyBgc3RhdGljYC4gQW5kIG1heWJlIGlubGluZWQ/IE9yIGp1c3QgYHN0YXRpY2A/IERvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIGNvZGUsIHRob3VnaC4gSXQgc2VlbXMgYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgaXBfdnNfc3luY19jb25uYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aG9zZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjowNC4wODAwMjg2NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTI0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDMzLVxcdGlmIChpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDg4PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjU4LVxcdCAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5OlxcdCAqIEZvciBPTkVfUEtUIGxldCBpcF92c19zeW5jX2Nvbm4oKSBkbyB0aGUgZmlsdGVyIHdvcmsuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjYwLVxcdCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY3LVxcdGlmIChpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cXHRlbHNlIGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2Vjb250cm9sKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYxOS1cXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIwOlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjowNC4xNTExNTk0OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NzMzNjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKklQVlMgU3luY2hyb25pemF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZSBoZXJlLiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYC4gVGhlIGZpcnN0LCBgaXBfdnNfaW5faG9va2AsIGlzIHRoZSBuZXRmaWx0ZXIgaG9vayBmb3IgSVBWUywgc28gdGhhdCdzIHdoZXJlIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGhhcHBlbnMuIEFuZCBgaXBfdnNfY29ubl9leHBpcmVgIGRlYWxzIHdpdGgsIHdlbGwsIGV4cGlyaW5nIGNvbm5lY3Rpb25zLiBNYWtlcyBzZW5zZSB0byB3YW50IHRvIHN5bmMgdGhlbSBib3RoLiBgaXBfdnNfc3luY19jb25uYCBmZWVscyBsaWtlIGEgZ29vZCwgZm9jdXNlZCBzeW1ib2wgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20uXG5cbkJ1dCBob2xkIG9uLCBgaXBfdnNfc3luY19jb25uYCBpc24ndCAqYWx3YXlzKiBjYWxsZWQuIEl0J3MgY29uZGl0aW9uYWxseSBleGVjdXRlZCBiYXNlZCBvbiB0aGUgYGlwdnMtXHUwMDNlc3luY19zdGF0ZWAgYW5kIHRoZSBgSVBfVlNfU1RBVEVfTUFTVEVSYCBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBzeW5jX3N0YXRlYCB2YXJpYWJsZSBnZXRzIHNldC4gV2hlcmUncyB0aGUgY29udHJvbCBwbGFuZSBmb3IgdGhpcz8gSSdtIGd1ZXNzaW5nIHRoYXQgc3RhcnRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24gaXMgdGhlIGNyaXRpY2FsIGZhY3Rvci4gV2hlcmUgaXMgdGhhdCBkYWVtb24gY29uZmlndXJlZD9cblxuSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24uIFNvLCBsZXQncyBleHBsb3JlIGBpcF92c19nZW5sX3NldF9jbWRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgaW4gdGhlIEdlbmVyaWMgTmV0bGluayBpbnRlcmZhY2UgY29kZSBmb3IgSVBWUy4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIHN0YXRlIGJpdHMgYXJlIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MDguMzM4NDk5MTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzk3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfU1RBVEVfTUFTVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDMyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzMzpcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MzQtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDg4PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2NzpcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzMzPWRvX2lwX3ZzX2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2NC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc2NTpcXHRcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzY2OlxcdFxcdFxcdGRbMF0uc3RhdGUgPSBJUF9WU19TVEFURV9NQVNURVI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3NjctXFx0XFx0XFx0c3Ryc2NweShkWzBdLm1jYXN0X2lmbiwgaXB2cy1cXHUwMDNlbWNmZy5tY2FzdF9pZm4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDQ4OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kYWVtb25zKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQ5NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDQ5NTpcXHRpZiAoKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpIFxcdTAwMjZcXHUwMDI2ICFjYi1cXHUwMDNlYXJnc1swXSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDk2OlxcdFxcdGlmIChpcF92c19nZW5sX2R1bXBfZGFlbW9uKHNrYiwgSVBfVlNfU1RBVEVfTUFTVEVSLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk3LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpcHZzLVxcdTAwM2VtY2ZnLCBjYikgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0zNjE9c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2Ni1cXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNjc6XFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2OC1cXHQgICAgbXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuIFxcdTAwM2Mgc3lzY3RsX3N5bmNfcWxlbl9tYXgoaXB2cykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTk6XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2MC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2MS1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY2MjpcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjYzLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3Mzg9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODI3OlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MjgtXFx0XFx0cmVzdWx0ID0gLUVFWElTVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg0Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDg6XFx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg0OS1cXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODAtXFx0XFx0dGluZm8tXFx1MDAzZWlkID0gaWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODgxOlxcdFxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODgyLVxcdFxcdFxcdHJlc3VsdCA9IG1ha2Vfc2VuZF9zb2NrKGlwdnMsIGlkLCBkZXYsIFxcdTAwMjZ0aW5mby1cXHUwMDNlc29jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4OTctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODk4OlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODk5LVxcdFxcdGlwdnMtXFx1MDAzZW1hc3Rlcl90aW5mbyA9IHRpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTIyLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5MjM6XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5MjQtXFx0XFx0a2ZyZWUoaXB2cy1cXHUwMDNlbXMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjItXFx0bXV0ZXhfbG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19tdXRleCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTYzOlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjQtXFx0XFx0cmV0YyA9IC1FU1JDSDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTc3OlxcdFxcdGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNj0gfklQX1ZTX1NUQVRFX01BU1RFUjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NzgtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTIwNTA9dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1NDpcXHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cXHRpZiAocmV0YyBcXHUwMDI2XFx1MDAyNiByZXRjICE9IC1FU1JDSClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MDguNDM4Njk1NzYxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDIwNTA1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyB0aGUgZGFlbW9uLCBpbml0aWF0ZWQgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGlwX3ZzX2dlbmxfc2V0X2NtZGAgYW5kIHRoZSBgc3RhcnRfc3luY190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgZnVsbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSBzZW5kaW5nIHBhY2tldHMsIHdoaWNoIGlzIGEga2V5IGF0dGFjayB2ZWN0b3IuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQgaGVyZSBpcyBgSVBfVlNgIC0gdGhhdCdzIHRoZSBtYWluIG9uZSB0byBmb2N1cyBvbi4gSSdsbCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcyBhIHNhZmVndWFyZCwganVzdCBpbiBjYXNlLCBidXQgYElQX1ZTYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYC4uLiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFyZSByZXF1aXJlZC4gYE5GX0NPTk5UUkFDS2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkIHRvbywgZXZlbiBpZiBpdCdzIG9wdGlvbmFsLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX2Nvbm5gIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24uIFRoZXJlJ3MgYW4gb2xkZXIgZnVuY3Rpb24gYGlwX3ZzX3N5bmNfY29ubl92MGAsIGJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBpcF92c19zeW5jX2Nvbm5gLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb2RlIGluIGBpcF92c19zeW5jLmNgLlxuXG5JJ3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6XG5gYGBjXG5AQCAtNzQ3LDkgKzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiBcdFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZWluX3NlcSk7XG4rXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSk7XG4rXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gXHRcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbmBgYFxuXG5ZZXMsIHRoYXQgY29uZmlybXMgaXQ6IGl0J3MgYWxsIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBTbyBgRm9jdXNTeW1ib2xzYCBpcyBgaXBfdnNfc3luY19jb25uYCwgYW5kIHRoZSBwcmltYXJ5IGBFbmFibGVDb25maWdzYCBpcyBgSVBfVlNgLiBMZXQgbWUgdmVyaWZ5IHRoaXMgb25lIG1vcmUgdGltZS5cblxuWXVwLCBgQ09ORklHX0lQX1ZTYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uLiAgYENPTkZJR19ORVRGSUxURVJgIGFuZCBgQ09ORklHX0lORVRgIGFyZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucywgYnV0IHRoZXkgYXJlIHN0aWxsIGltcG9ydGFudC4gSSdsbCBhZGQgYElQX1ZTYCB0byBFbmFibGVDb25maWdzLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gSVBWUyBpcyBhIHNvZnR3YXJlIGxvYWQgYmFsYW5jZXIsIG5vdCBoYXJkd2FyZS1kZXBlbmRlbnQuIENvbmZpZ3VyYXRpb24gaGFwcGVucyBvdmVyIG5ldGxpbmssIGFuZCB0aGVuIHBhY2tldCB0cmlnZ2VycyBpdCwgbWFraW5nIGl0IGFjY2Vzc2libGUgZXZlbiBpbiB2aXJ0dWFsIG1hY2hpbmVzLlxuXG5TbywgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlOiB0aGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIGluIGBpcF92c19zeW5jX2Nvbm5gLiBUaGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLCBsZWFkaW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0YXRlLCBzcGVjaWZpY2FsbHkgYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCwgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciwgd2hpbGUgKmFsc28qIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBtb2RlIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIHJlYWwgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFuZCB0aGlzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgZm9jdXMgZm9yIGZ1enppbmcuXG5cbk5vdyBJIGFtIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjIwLjQ1OTIwNDA5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU0MjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyMC41NTk3NTQwODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkwNjE5NTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjIwLjU2MDQwMDg2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg5MDU1NDUxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWAuIFRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCBpbiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZSgpYCBhbmQgaXMgdW5pbml0aWFsaXplZC4gXFxuXFxuVGhpcyBidWcgaGFzIHR3byBjb25zZXF1ZW5jZXM6XFxuMS4gSXQgcmVhZHMgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSBmcm9tIGBwYCBhbmQgY29ycnVwdHMgdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlLlxcbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXFxuXFxuS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlcy4gU2luY2UgYWxsIG1lbW9yeSBhY2Nlc3NlcyBoZXJlIGFyZSB3aXRoaW4gYm91bmRzIGFuZCBvbiBsaXZlIG9iamVjdHMsIEtBU0FOIHdpbGwgbm90IGRldGVjdCB0aGlzIGJ1Zy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmYzUyMzMxMjQ3ZWUzNTg5MGVkMGVjYmRiMTkzNjAyNGZiNjc2YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA5MzAzOGFiYmY1ZTA0Li5mNmVhNmM5NTM1ZWIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTc0Nyw5ICs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbi1cdFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO1xuK1x0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gXHRcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZW91dF9zZXEpO1xuK1x0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIFx0XHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyMC41NjA0MDE4MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDYyMzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSVBWUyBTeW5jaHJvbml6YXRpb24gQnVnKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGZsb2F0aW5nIGFyb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIHRoZSBjaGFuZ2UgaXMgYSBiaXQgdW51c3VhbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXkndmUgZmxpcHBlZCB0aGUgYXJndW1lbnRzIHRvIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGNhbGxzLiBJdCdzIGdvaW5nIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtgIHRvIGBodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YCBhbmQgdGhlIHNhbWUgY2hhbmdlIGlzIGRvbmUgZm9yIGBvdXRfc2VxYC4gVGhhdCdzIG5vdCB0aGUgdHlwaWNhbCB3YXkgSSdkIGV4cGVjdCB0byBzZWUgdGhvc2UgY2FsbHMgY29uc3RydWN0ZWQuIFRoZSBvcmRlciBvZiBhcmd1bWVudHMgaW4gdGhlc2UgbmV0d29ya2luZyBmdW5jdGlvbnMgaXMgY3JpdGljYWwsIHNvIHRoaXMgaW1tZWRpYXRlbHkgd2FycmFudHMgYSBkZWVwZXIgbG9vay4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kIGlmIGl0J3MgdGhlIGNvcnJlY3Rpb24gb2YgYSBidWcsIG9yIGFuIGludHJvZHVjdGlvbiBvZiBhIG5ldyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBgIGFuZCBgY3AtXHUwMDNlaW5fc2VxYCByZXByZXNlbnQgaW4gdGVybXMgb2YgdGhlaXIgaW50ZW5kZWQgcm9sZXMgaW4gdGhlIGRhdGEgc3RydWN0dXJlLCBhbmQgaG93IGBodG9uX3NlcWAgYWN0dWFsbHkgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjI0LjQ0MTAyODQwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2Mzg2OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh0b25fc2VxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXHRcXHQvKiBVc2VkIGZvciBudG9oX3NlcSBhbmQgaHRvbl9zZXEgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yODM9c3RhdGljIHZvaWQgbnRvaF9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqbm8sIHN0cnVjdCBpcF92c19zZXEgKmhvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTA6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUzLVxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyNC42NTc0MTk1OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NzI4MzU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgdGhlIGBodG9uX3NlcWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBgaHRvbl9zZXFgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhlIGdlbmVyYWwgaWRlYSAtIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiwgcHJvYmFibHkgZm9yIHNlcXVlbmNlIG51bWJlcnMgb3Igc29tZSBvdGhlciBpbnRlZ2VyIGRhdGEuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgY2FuIHByb2JhYmx5IGd1ZXNzIHRoZSBjb250ZXh0LCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhpcyBxdWlja2x5LCBidXQgbGV0J3MgbWFrZSBzdXJlLiBUaGUgZmlyc3QgdGhpbmcgSSB3aWxsIGRvIGlzIHJlYWQgdGhlIGNvZGUgZGlyZWN0bHkuIEknbGwgZm9jdXMgb24gZGF0YSB0eXBlcyB1c2VkLCBiaXR3aXNlIG9wZXJhdGlvbnMgZW1wbG95ZWQsIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgYXNwZWN0cy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IGludGVnZXIgc2l6ZXMgKGUuZy4sIDE2LWJpdCwgMzItYml0LCA2NC1iaXQpLiBUaGUgZ29hbCBpcyBub3QganVzdCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIGJ1dCB0byBpbmZlciB0aGUgcmVhc29uaW5nIGJlaGluZCBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgYW5kIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEl0J3MgbGlrZWx5IEknbGwgYmUgYWJsZSB0byBjb21wYXJlIGl0IHRvIG90aGVyIGltcGxlbWVudGF0aW9ucyBJJ3ZlIHNlZW4sIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcy4gSWYgaXQgaXMgaW50ZXJlc3RpbmcsIEkgbWF5IGJlIGluY2xpbmVkIHRvIGNvbXBhcmUgaXQgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgSSBoYXZlIGNvbWUgYWNyb3NzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MjguMDU0NzA3ODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0LypcXG4gMjkyOlxcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxcbiAyOTM6XFx0ICogRnJvbSBBbGlnbmVkIGhvc3Qgb3JkZXIgdG8gdW5hbGlnbmVkIG5ldHdvcmsgb3JkZXJcXG4gMjk0OlxcdCAqL1xcbiAyOTU6XFx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxuIDI5ODpcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXFx1MDAzZWRlbHRhLCBcXHUwMDI2bm8tXFx1MDAzZWRlbHRhKTtcXG4gMjk5OlxcdFxcdHB1dF91bmFsaWduZWRfYmUzMihoby1cXHUwMDNlcHJldmlvdXNfZGVsdGEsIFxcdTAwMjZuby1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbiAzMDA6XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiAzMDM6XFx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzMDQ6XFx0e1xcbiAzMDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4gMzA4OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtcy1cXHUwMDNlc3luY19xdWV1ZSkpIHtcXG4gMzA5OlxcdFxcdFxcdHNiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MjguMDU0ODIyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY1NzMxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBzbyBgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKWAgLSByaWdodCwgaG9zdCBvcmRlciBmaXJzdCwgbmV0d29yayBvcmRlciBzZWNvbmQuIFRoZSBwYXRjaCBzd2FwcGVkIHRoZSBhcmd1bWVudHMgaW4gdGhlIGNhbGwgZnJvbSBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AgdG8gYGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseS5cblxuQmVmb3JlLCBgaG9gIHdhcyBhc3NpZ25lZCBgKHN0cnVjdCBpcF92c19zZXEgKilwYCBhbmQgYG5vYCB3YXMgYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAuIFRoYXQgbWVhbnMgaXQgd2FzIHJlYWRpbmcgc2VxdWVuY2UgaW5mb3JtYXRpb24gKmZyb20qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYHBgLCBhbmQgd3JpdGluZyB0aGUgY29udmVydGVkIG5ldHdvcmstb3JkZXJlZCBzZXF1ZW5jZSAqdG8qIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLiBUaGlzIGlzIGJhZCwgdGhlIG1lbW9yeSBhdCBgcGAgaXMgbm90IGluaXRpYWxpemVkIHdoZW4gcmVhZGluZy5cblxuQnV0IHdhaXQsIGBwYCAqaXMqIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UncmUgYnVpbGRpbmchIFRoYXQgY29udGV4dCBjaGFuZ2VzIHRoaW5ncy4gVGhpcyBsb29rcyBsaWtlIGEgc2VyaW91cyBidWcsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgaW4gYGlwX3ZzX3N5bmNfY29ubmAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MzIuMjIwNTU3OTE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRzLVxcdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXFx1MDAzZXRpbWVvdXQgLyBIWik7XFxuIDczMTpcXHRcXHRtLVxcdTAwM2Vucl9jb25ucysrO1xcbiA3MzI6XFx0XFxuIDczMzpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNzM0OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4gNzM1OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNzM2OlxcdFxcdFxcdHMtXFx1MDAzZXY2LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmluNjtcXG4gNzM3OlxcdFxcdFxcdHMtXFx1MDAzZXY2LnZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gNzM4OlxcdFxcdFxcdHMtXFx1MDAzZXY2LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gNzM5OlxcdFxcdH0gZWxzZVxcbiA3NDA6XFx0I2VuZGlmXFxuIDc0MTpcXHRcXHR7XFxuIDc0MjpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFx0Lyogb3B0aW9ucyBwdHIgKi9cXG4gNzQzOlxcdFxcdFxcdHMtXFx1MDAzZXY0LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA3NDQ6XFx0XFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDc0NTpcXHRcXHRcXHRzLVxcdTAwM2V2NC5kYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNzQ2OlxcdFxcdH1cXG4gNzQ3OlxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gNzQ4OlxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiA3NDk6XFx0XFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxuIDc1MDpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4gNzUxOlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiA3NTI6XFx0XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTM6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXHQvKiBIYW5kbGUgcGUgZGF0YSAqL1xcbiA3NTY6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbiBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlcGVfZGF0YSkge1xcbiA3NTc6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfUEVfREFUQTtcXG4gNzU4OlxcdFxcdFxcdCoocCsrKSA9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbjtcXG4gNzU5OlxcdFxcdFxcdG1lbWNweShwLCBjcC1cXHUwMDNlcGVfZGF0YSwgY3AtXFx1MDAzZXBlX2RhdGFfbGVuKTtcXG4gNzYwOlxcdFxcdFxcdHAgKz0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NjE6XFx0XFx0XFx0aWYgKHBlX25hbWVfbGVuKSB7XFxuIDc2MjpcXHRcXHRcXHRcXHQvKiBBZGQgUEVfTkFNRSAqL1xcbiA3NjM6XFx0XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfUEVfTkFNRTtcXG4gNzY0OlxcdFxcdFxcdFxcdCoocCsrKSA9IHBlX25hbWVfbGVuO1xcbiA3NjU6XFx0XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZS1cXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xcbiA3NjY6XFx0XFx0XFx0XFx0cCArPSBwZV9uYW1lX2xlbjtcXG4gNzY3OlxcdFxcdFxcdH1cXG4gNzY4OlxcdFxcdH1cXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0Y29udHJvbDpcXG4gNzczOlxcdFxcdC8qIHN5bmNocm9uaXplIGl0cyBjb250cm9sbGVyIGlmIGl0IGhhcyAqL1xcbiA3NzQ6XFx0XFx0Y3AgPSBjcC1cXHUwMDNlY29udHJvbDtcXG4gNzc1OlxcdFxcdGlmICghY3ApXFxuIDc3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDc3NzpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbiA3Nzg6XFx0XFx0XFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZjcC1cXHUwMDNlaW5fcGt0cyk7XFxuIDc3OTpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjMyLjIyMDY4Mjg5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDc4ODIyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnl0ZSBTd2FwIFNlcXVlbmNlIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgYXQgaG93IHRoaXMgYGh0b25fc2VxYCBmdW5jdGlvbiBpcyB1c2VkLCBhbmQgSSB0aGluayBJJ3ZlIHNwb3R0ZWQgYSBidWcuIFJpZ2h0LCBzbyBgcGAgaXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UncmUgY29uc3RydWN0aW5nLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgY2FsbGluZyBgaHRvbl9zZXFgIGxpa2UgdGhpczogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIHJlYWRpbmcgZnJvbSB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgYHBgIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB3aGljaCBpcyBhIGZpZWxkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXG5cbkJ1dCBoYW5nIG9u4oCmIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGh0b25fc2VxYCByZWFsIHF1aWNrLiBBaCwgcmlnaHQuIGBodG9uX3NlcWAgKnJlYWRzKiBmcm9tIHRoZSAqZmlyc3QqIGFyZ3VtZW50IGFuZCAqd3JpdGVzKiB0byB0aGUgKnNlY29uZCogYXJndW1lbnQuIFNvLCB3aXRoIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZWluX3NlcSlgLCBpdCdzIHJlYWRpbmcgZnJvbSBgcGAg4oCTIHdoaWNoIHBvaW50cyB0byB0aGUgdW5pbml0aWFsaXplZCBidWZmZXIg4oCTIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLlxuXG5Pa2F5LCBJIHNlZSB0aGUgcHJvYmxlbSBub3cuIFRoaXMgaXMgYSBjbGFzc2ljIHJlYWQtZnJvbS11bmluaXRpYWxpemVkLW1lbW9yeS1hbmQtb3ZlcndyaXRlLWEtc3RydWN0dXJlIGJ1Zy4gSW5zdGVhZCBvZiB3cml0aW5nIHRoZSAqY29ycmVjdCogYGNwLVx1MDAzZWluX3NlcWAgdmFsdWVzIHRvIHRoZSBidWZmZXIsIGl0J3MgdGFraW5nIHdoYXRldmVyIGdhcmJhZ2UgaXMgY3VycmVudGx5IGluIHRoZSBidWZmZXIgYXQgdGhlIGFkZHJlc3MgYHBgIGFuZCAqb3ZlcndyaXRpbmcqIGBjcC1cdTAwM2Vpbl9zZXFgIHdpdGggdGhhdCB1bmluaXRpYWxpemVkIGRhdGEhIFRoYXQgbWVhbnMgdGhhdCB0aGUgY29ubmVjdGlvbidzIHNlcXVlbmNlIG51bWJlciBpcyBiZWluZyBzZXQgdG8gcmFuZG9tIHZhbHVlcywgd2hpY2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byBjYXVzZSBwcm9ibGVtcy5cblxuV2FpdCBhIHNlY29uZCwgaWYgdGhlIGNvZGUgaXMgcmVhZGluZyBmcm9tIGBwYCAod2hpY2ggaXMgdW5pbml0aWFsaXplZCBtZW1vcnkpIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB0aGVuIHRoZSBjb250ZW50cyBvZiBgY3AtXHUwMDNlaW5fc2VxYCB3b3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgcmFuZG9tIGRhdGEgaGFwcGVuZWQgdG8gYmUgYXQgdGhhdCBtZW1vcnkgbG9jYXRpb24gaW4gdGhlIGJ1ZmZlciwgd2hpY2ggbGVhZHMgdG8gYSB1c2UtYWZ0ZXItaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBhbmQgbGlrZWx5IGRhdGEgY29ycnVwdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgcHJldHR5IGdvb2QgYXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCAqcmVhZHMqIGZyb20gYHBgLCB3aGljaCBpcyB1bmluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGZsYWdnZWQgaXQhIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZHVyaW5nIHRlc3RpbmcuXG5cbk5vdyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGlzIGBwYCBjb21lcyBmcm9tIHRvIGJlIHN1cmUgdGhlIGJ1ZmZlciBpcywgaW4gZmFjdCwgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBmbGF3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MzkuMjk5NTA5MzIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2Mjk6XFx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIDYzMDpcXHR7XFxuIDYzMTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbiA2MzI6XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbiA2MzM6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gNjM0OlxcdFxcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcXG4gNjM1OlxcdFxcdGludCBpZDtcXG4gNjM2OlxcdFxcdF9fdTggKnA7XFxuIDYzNzpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXFxuIDY0MDpcXHRcXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG4gNjQxOlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XFxuIDY0MjpcXHRcXHRcXHRyZXR1cm47XFxuIDY0MzpcXHRcXHR9XFxuIDY0NDpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDY0NTpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDY0NjpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY0NzpcXHRzbG9vcDpcXG4gNjQ4OlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDY0OTpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MDpcXHRcXG4gNjUxOlxcdFxcdC8qIFNhbml0eSBjaGVja3MgKi9cXG4gNjUyOlxcdFxcdHBlX25hbWVfbGVuID0gMDtcXG4gNjUzOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4pIHtcXG4gNjU0OlxcdFxcdFxcdGlmICghY3AtXFx1MDAzZXBlX2RhdGEgfHwgIWNwLVxcdTAwM2VkZXN0KSB7XFxuIDY1NTpcXHRcXHRcXHRcXHRJUF9WU19FUlJfUkwoXFxcIlNZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxcXG5cXFwiKTtcXG4gNjU2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNjU3OlxcdFxcdFxcdH1cXG4gNjU4OlxcdFxcdFxcdHBlX25hbWVfbGVuID0gc3RybmxlbihjcC1cXHUwMDNlcGUtXFx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xcbiA2NTk6XFx0XFx0fVxcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNjYyOlxcdFxcdGlmICghKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XFxuIDY2MzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjU6XFx0XFx0fVxcbiA2NjY6XFx0XFxuIDY2NzpcXHRcXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcXG4gNjY4OlxcdFxcdG1zID0gXFx1MDAyNmlwdnMtXFx1MDAzZW1zW2lkXTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIDY3MTpcXHRcXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbiA2NzI6XFx0XFx0XFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNjczOlxcdFxcdGVsc2VcXG4gNjc0OlxcdCNlbmRpZlxcbiA2NzU6XFx0XFx0XFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcXG4gNjc4OlxcdFxcdFxcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XFxuIDY3OTpcXHRcXG4gNjgwOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4pXFxuIDY4MTpcXHRcXHRcXHRsZW4gKz0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuICsgMjtcXHQvKiArIFBhcmFtIGhkciBmaWVsZCAqL1xcbiA2ODI6XFx0XFx0aWYgKHBlX25hbWVfbGVuKVxcbiA2ODM6XFx0XFx0XFx0bGVuICs9IHBlX25hbWVfbGVuICsgMjtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogY2hlY2sgaWYgdGhlcmUgaXMgYSBzcGFjZSBmb3IgdGhpcyBvbmUgICovXFxuIDY4NjpcXHRcXHRwYWQgPSAwO1xcbiA2ODc6XFx0XFx0YnVmZiA9IG1zLVxcdTAwM2VzeW5jX2J1ZmY7XFxuIDY4ODpcXHRcXHRpZiAoYnVmZikge1xcbiA2ODk6XFx0XFx0XFx0bSA9IGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDY5MDpcXHRcXHRcXHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXFx1MDAzZWhlYWQpIFxcdTAwMjYgMztcXG4gNjkxOlxcdFxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xcbiA2OTI6XFx0XFx0XFx0aWYgKGJ1ZmYtXFx1MDAzZWhlYWQgKyBsZW4gKyBwYWQgXFx1MDAzZSBidWZmLVxcdTAwM2VlbmQgfHwgbS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4gNjkzOlxcdFxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbiA2OTQ6XFx0XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XFxuIDY5NTpcXHRcXHRcXHRcXHRidWZmID0gTlVMTDtcXG4gNjk2OlxcdFxcdFxcdFxcdHBhZCA9IDA7XFxuIDY5NzpcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHR9XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdGlmICghYnVmZikge1xcbiA3MDE6XFx0XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoaXB2cywgbGVuKTtcXG4gNzAyOlxcdFxcdFxcdGlmICghYnVmZikge1xcbiA3MDM6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNzA0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG4gNzA1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNzA2OlxcdFxcdFxcdH1cXG4gNzA3OlxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBidWZmO1xcbiA3MDg6XFx0XFx0XFx0bSA9IGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHAgPSBidWZmLVxcdTAwM2VoZWFkO1xcbiA3MTI6XFx0XFx0YnVmZi1cXHUwMDNlaGVhZCArPSBwYWQgKyBsZW47XFxuIDcxMzpcXHRcXHRtLVxcdTAwM2VzaXplID0gaHRvbnMobnRvaHMobS1cXHUwMDNlc2l6ZSkgKyBwYWQgKyBsZW4pO1xcbiA3MTQ6XFx0XFx0LyogQWRkIGV2LiBwYWRkaW5nIGZyb20gcHJldi4gc3luY19jb25uICovXFxuIDcxNTpcXHRcXHR3aGlsZSAocGFkLS0pXFxuIDcxNjpcXHRcXHRcXHQqKHArKykgPSAwO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdC8qIFNldCBtZXNzYWdlIHR5cGUgIFxcdTAwMjYgY29weSBtZW1iZXJzICovXFxuIDcyMTpcXHRcXHRzLVxcdTAwM2V2NC50eXBlID0gKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcXG4gNzIyOlxcdFxcdHMtXFx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFxcdTAwMjYgU1ZFUl9NQVNLKTtcXHQvKiBWZXJzaW9uIDAgKi9cXG4gNzIzOlxcdFxcdHMtXFx1MDAzZXY0LmZsYWdzID0gaHRvbmwoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA3MjQ6XFx0XFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA3MjU6XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDcyNjpcXHRcXHRzLVxcdTAwM2V2NC5jcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNzI3OlxcdFxcdHMtXFx1MDAzZXY0LnZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA3Mjg6XFx0XFx0cy1cXHUwMDNldjQuZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjM5LjI5OTY1ODQ4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwNTgyNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBgYnVmZmAgaXMgYWxsb2NhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGl0c2VsZiB0byBkZXRlcm1pbmUgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgYW5kIHVuZGVyc3RhbmQgaXRzIG51YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYWxsb2NhdGlvbiBwcm9jZXNzIHRha2VzIHBsYWNlLCBzbyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Mi4zNjAyNDM0OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdHNiID0gTlVMTDtcXG4gNDAxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDQwMjpcXHRcXHRyZXR1cm4gc2I7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG4gNDA1OlxcdHN0YXRpYyBpbmxpbmUgaW50XFxuIDQwNjpcXHRzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiA0MDc6XFx0e1xcbiA0MDg6XFx0XFx0cmV0dXJuICgobG9uZykgY3AgXFx1MDAzZVxcdTAwM2UgKDEgKyBpbG9nMihzaXplb2YoKmNwKSkpKSBcXHUwMDI2IGlwdnMtXFx1MDAzZXRocmVhZHNfbWFzaztcXG4gNDA5OlxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0LypcXG4gNDEyOlxcdCAqIENyZWF0ZSBhIG5ldyBzeW5jIGJ1ZmZlciBmb3IgVmVyc2lvbiAwIHByb3RvLlxcbiA0MTM6XFx0ICovXFxuIDQxNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiA0MTU6XFx0aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbiA0MTg6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbWVzZztcXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxcbiA0MjE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApLFxcbiA0MjQ6XFx0XFx0XFx0ICAgIGlwdnMtXFx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xcbiA0MjU6XFx0XFx0c2ItXFx1MDAzZW1lc2cgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XFxuIDQyNjpcXHRcXHRpZiAoIXNiLVxcdTAwM2VtZXNnKSB7XFxuIDQyNzpcXHRcXHRcXHRrZnJlZShzYik7XFxuIDQyODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDI5OlxcdFxcdH1cXG4gNDMwOlxcdFxcdG1lc2cgPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKXNiLVxcdTAwM2VtZXNnO1xcbiA0MzE6XFx0XFx0bWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbiA0MzI6XFx0XFx0bWVzZy1cXHUwMDNlc3luY2lkID0gaXB2cy1cXHUwMDNlbWNmZy5zeW5jaWQ7XFxuIDQzMzpcXHRcXHRtZXNnLVxcdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApKTtcXG4gNDM0OlxcdFxcdHNiLVxcdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbiA0MzU6XFx0XFx0c2ItXFx1MDAzZWVuZCA9ICh1bnNpZ25lZCBjaGFyICopbWVzZyArIGxlbjtcXG4gNDM2OlxcdFxcdHNiLVxcdTAwM2VmaXJzdHVzZSA9IGppZmZpZXM7XFxuIDQzNzpcXHRcXHRyZXR1cm4gc2I7XFxuIDQzODpcXHR9XFxuIDQzOTpcXHRcXG4gNDQwOlxcdC8qIENoZWNrIGlmIGNvbm5lY3Rpb24gaXMgY29udHJvbGxlZCBieSBwZXJzaXN0ZW5jZSAqL1xcbiA0NDE6XFx0c3RhdGljIGlubGluZSBib29sIGluX3BlcnNpc3RlbmNlKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gNDQyOlxcdHtcXG4gNDQzOlxcdFxcdGZvciAoY3AgPSBjcC1cXHUwMDNlY29udHJvbDsgY3A7IGNwID0gY3AtXFx1MDAzZWNvbnRyb2wpIHtcXG4gNDQ0OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDQ0NTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDQ4OlxcdH1cXG4gNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Mi4zNjAzNzU2ODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0OTEyNzUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luY2hyb25pemF0aW9uIEJ1ZmZlcnMqKlxuXG5SaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBoZXJlOiBJIHdhcyBsb29raW5nIGF0IGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCwgYnV0IEkgZ290IHNpZGV0cmFja2VkIGFzc3VtaW5nIGl0IHdhcyB0aGUgb2xkZXIgdmVyc2lvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAsIG5vdCB0aGUgdjAgdmVyc2lvbi4gSSBoYXZlIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBhbmFseXppbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aC4gTGV0IG1lIHBpbnBvaW50IHRoZSBleGFjdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjQ1LjMwOTUwNTg3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQxMDU2MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzI4OmlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzgtXFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cXHRcXHRpZiAoIWJ1ZmYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVxcdGlmICghYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzAxOlxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDItXFx0XFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDMtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwNDpcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Ni4yNTA1NjgwMTZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NzQxMTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBkaWcgaW50byBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIGl0cyBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcywgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgbG9hZCBiYWxhbmNlciBpbnN0YW5jZXMuIEknbSBhc3N1bWluZyBcInN5bmNfYnVmZlwiIHJlZmVycyB0byBzb21lIGtpbmQgb2YgYnVmZmVyIG9yIHN0cnVjdHVyZSBkZXNpZ25lZCB0byBob2xkIGluZm9ybWF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkLCBsaWtlIGNvbm5lY3Rpb24gc3RhdGUsIHNlcnZpY2UgZGVmaW5pdGlvbnMsIG9yIG1heWJlIGV2ZW4gTkFUIG1hcHBpbmdzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbW1lZGlhdGVseS4gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBhbnkga2V5IGRhdGEgc3RydWN0dXJlcz8gUGVyaGFwcyBpdCdzIHNldHRpbmcgdXAgc2VtYXBob3JlcyBvciBtdXRleGVzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzeW5jaHJvbml6YXRpb24/IEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBpdCdzIHRha2luZyBhcyBpbnB1dCwgYW5kIHdoYXQgaXTigJlzIHJldHVybmluZy4gQSBzdWNjZXNzZnVsIGNyZWF0aW9uIGltcGxpZXMgYSB2YWxpZCBzeW5jaHJvbml6YXRpb24gYnVmZmVyIGlzIHJlYWR5IGZvciB1c2UsIGxpa2VseSBmb3IgdHJhbnNmZXJyaW5nIHN0YXRlIGluZm9ybWF0aW9uLiBBbiBlcnJvciByZXR1cm4gaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBzZXQgdXAgdGhlIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGltcHJvcGVyIGluaXRpYWxpemF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZXJyb3JzLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIGNvbnRleHQuIElzIHRoaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwPyBPciBpcyBpdCBwYXJ0IG9mIGEgZHluYW1pYyB1cGRhdGUgcHJvY2Vzcz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgcm9idXN0IHRoZSBlcnJvciBoYW5kbGluZyBuZWVkcyB0byBiZS4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uPyBJJ2xsIHByb2JhYmx5IGJlIGFzc2Vzc2luZyBob3cgaXTigJlzIHRpZWQgaW50byB0aGUgYmlnZ2VyIElQVlMgZnJhbWV3b3JrLCBob3cgaXQncyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmb3J3YXJkaW5nIG1lY2hhbmlzbXMuXG5cblRoZSBrZXkgcXVlc3Rpb25zIGluIG15IGhlYWQgYXJlOlxuKiAgIFdoYXQgZGF0YSBpcyBnZXR0aW5nIHBhY2thZ2VkIGluIHRoaXMgYnVmZmVyP1xuKiAgIEhvdyBpcyB0aGlzIGJ1ZmZlciBpbnRlZ3JhdGVkIGludG8gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzP1xuKiAgIEhvdyBpcyB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYnVmZmVyIG1hbmFnZWQsIGluY2x1ZGluZyBpdHMgZXZlbnR1YWwgZGVzdHJ1Y3Rpb24/XG4qICAgV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMsIGFuZCBhcmUgdGhleSBoYW5kbGVkIGdyYWNlZnVsbHk/XG4qICAgSXMgdGhpcyBmdW5jdGlvbiB0aHJlYWQtc2FmZT9cblxuVGltZSB0byBnZXQgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTU5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjUwLjUyNzk4MzUwNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjU6XFx0ICogQ3JlYXRlIGEgbmV3IHN5bmMgYnVmZmVyIGZvciBWZXJzaW9uIDEgcHJvdG8uXFxuIDMyNjpcXHQgKi9cXG4gMzI3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxuIDMyODpcXHRpcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICghKHNiPWttYWxsb2Nfb2JqKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYsIEdGUF9BVE9NSUMpKSlcXG4gMzMzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxlbiArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcXG4gMzM2OlxcdFxcdFxcdCAgICBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNfbWF4bGVuKTtcXG4gMzM3OlxcdFxcdHNiLVxcdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xcbiAzMzg6XFx0XFx0aWYgKCFzYi1cXHUwMDNlbWVzZykge1xcbiAzMzk6XFx0XFx0XFx0a2ZyZWUoc2IpO1xcbiAzNDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM0MTpcXHRcXHR9XFxuIDM0MjpcXHRcXHRzYi1cXHUwMDNlbWVzZy1cXHUwMDNlcmVzZXJ2ZWQgPSAwOyAgLyogb2xkIG5yX2Nvbm5zIGkuZS4gbXVzdCBiZSB6ZXJvIG5vdyAqL1xcbiAzNDM6XFx0XFx0c2ItXFx1MDAzZW1lc2ctXFx1MDAzZXZlcnNpb24gPSBTWU5DX1BST1RPX1ZFUjtcXG4gMzQ0OlxcdFxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzeW5jaWQgPSBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6NTAuNTI4MTE4MjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTQzOTUyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBDb25uZWN0aW9uIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgc2ItXHUwMDNlbWVzZyA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTtgLiBJIGtub3cgYGttYWxsb2NgIGNhbiBsZWF2ZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGVuIEkgc2VlIGBwID0gYnVmZi1cdTAwM2VoZWFkO2Ag4oCTIGBwYCBub3cgcG9pbnRzIHRvIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdyBoZXJlIGNvbWVzIHRoZSByZWFsIGtpY2tlcjogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtgLiBUaGlzIGlzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGdvIG9mZi5cblxuSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyAqcmVhZGluZyogZnJvbSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYHBgIGFuZCAqd3JpdGluZyogdG8gYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAuIEhvbGQgb24uLi4gdGhhdCBtZWFucyBgY3AtXHUwMDNlaW5fc2VxYCwgd2hpY2ggaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcF92c19jb25uYCwgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgZ2FyYmFnZSBmcm9tIHRoZSBga21hbGxvY2AnZCBidWZmZXIhXG5cbkFuZCBpZiBgY3AtXHUwMDNlaW5fc2VxYCBpcyBiZWluZyBjbG9iYmVyZWQgd2l0aCB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdGhlbiBhbnkgZnV0dXJlIHVzZSBvZiBgY3AtXHUwMDNlaW5fc2VxYCBpcyBnb2luZyB0byBiZSB1c2luZyB0aGF0IGdhcmJhZ2UuIElzIGBjcC1cdTAwM2Vpbl9zZXFgIHVzZWQgbGF0ZXI/IE9oIHllcywgaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGUuXG5cbkJ1dCBoYW5nIG9uLCBpc24ndCB0aGUgd2hvbGUgKnBvaW50KiBvZiBgaXBfdnNfc3luY19jb25uYCB0byBzZXJpYWxpemUgdGhlICpjdXJyZW50KiBzdGF0ZSBvZiBgY3AtXHUwMDNlaW5fc2VxYCBpbnRvIHRoZSBidWZmZXIgYHBgPyBJdCdzIGEgc3luYyBtZXNzYWdlLCBpbnRlbmRlZCB0byBiZSBzZW50IGFjcm9zcyB0aGUgbmV0d29yayEgV2UncmUgc3VwcG9zZWQgdG8gYmUgcHJlcGFyaW5nIHRvIHRyYW5zbWl0IHRoZSAqY29ycmVjdCogY3VycmVudCBjb25uZWN0aW9uIHNlcXVlbmNlIG51bWJlciFcblxuT2theSwgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaXBfdnNfc3luY19jb25uYCBub3cuIFRoaXMgbG9va3MgbGlrZSBhIHNlcmlvdXMgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjU2LjIyMjUxNjI2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDc6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbiA3NDg6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XFxuIDc0OTpcXHRcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gNzUwOlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTE6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1MjpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1MzpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU0OlxcdFxcdH1cXG4gNzU1OlxcdFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuIDc1NjpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2VwZV9kYXRhKSB7XFxuIDc1NzpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9EQVRBO1xcbiA3NTg6XFx0XFx0XFx0KihwKyspID0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NTk6XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZV9kYXRhLCBjcC1cXHUwMDNlcGVfZGF0YV9sZW4pO1xcbiA3NjA6XFx0XFx0XFx0cCArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2MTpcXHRcXHRcXHRpZiAocGVfbmFtZV9sZW4pIHtcXG4gNzYyOlxcdFxcdFxcdFxcdC8qIEFkZCBQRV9OQU1FICovXFxuIDc2MzpcXHRcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9OQU1FO1xcbiA3NjQ6XFx0XFx0XFx0XFx0KihwKyspID0gcGVfbmFtZV9sZW47XFxuIDc2NTpcXHRcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XFxuIDc2NjpcXHRcXHRcXHRcXHRwICs9IHBlX25hbWVfbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo1Ni4yMjI2NDA2MDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMDY1NjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm5lY3Rpb24gU3RhdGUgU2VyaWFsaXphdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBzaGlwIHRoYXQgZGF0YSB0byB0aGUgYmFja3VwIGxvYWQgYmFsYW5jZXIuIFRoZSBwcm9ibGVtIGhlcmUgaXMgYSBwcmV0dHkgbmFzdHkgYnVnLCB0aG91Z2guIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgY29ubmVjdGlvbidzIGBjcC1cdTAwM2Vpbl9zZXFgIHZhbHVlICppbnRvKiB0aGUgYnVmZmVyIGBwYCwgaXQncyBhY3R1YWxseSByZWFkaW5nICpmcm9tKiBgcGAgYW5kIG92ZXJ3cml0aW5nIGBjcC1cdTAwM2Vpbl9zZXFgISBUaGF0J3MuLi5iYWQuXG5cblRoaXMgaGFzIHR3byBpbW1lZGlhdGUgYW5kIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy4gRmlyc3QsIHRoZSBjcnVjaWFsIGBjcC1cdTAwM2Vpbl9zZXFgIG1lbWJlciBpcyBnZXR0aW5nIGNsb2JiZXJlZCB3aXRoIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgaW4gdGhlIGBrbWFsbG9jYC1hbGxvY2F0ZWQgbWVtb3J5LiBUaGF0J3MgYSBjb3JydXB0aW9uIGlzc3VlLCBwdXJlIGFuZCBzaW1wbGUuXG5cbkJ1dCB3b3JzZSwgdGhlIGJ1ZmZlciBgcGAgaXRzZWxmICpyZW1haW5zKiB1bmluaXRpYWxpemVkLiBTbywgd2UncmUgbm90IG9ubHkgbG9zaW5nIHRoZSBjb3JyZWN0IHZhbHVlLCB3ZSdyZSBhbHNvIG5vdCBwb3B1bGF0aW5nIHRoZSBidWZmZXIgd2l0aCBpdC4gVGhlIGJ1ZmZlciwgZnVsbCBvZiBnYXJiYWdlLCBnZXRzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cblxuV2FpdCBhIHNlY29uZC4uLiAqdW5pbml0aWFsaXplZCBtZW1vcnkgb3ZlciB0aGUgbmV0d29yaz8qIFRoYXQncyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrISBXZSdyZSB0YWxraW5nIGFib3V0IHRyYW5zbWl0dGluZyBzZW5zaXRpdmUsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNlbnNpdGl2ZSwgaW5mb3JtYXRpb24gdGhhdCBoYXNuJ3QgYmVlbiBkZWxpYmVyYXRlbHkgcG9wdWxhdGVkLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaW5mby1sZWFrcywgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZmluZHMgaXRzIHdheSBhY3Jvc3MgbmV0d29yayBib3VuZGFyaWVzIG9yIGludG8gdXNlciBzcGFjZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gS01TQU4gc2hvdWxkIGZsYWcuIE5vdywgbGV0IG1lIHZlcmlmeSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgYnVmZmVyIGlzIHNlbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MDEuNjIzMzAwMDE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI0NDIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2JfcXVldWVfdGFpbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzYxOnN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzYyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcyLVxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8ICFtLVxcdTAwM2Vucl9jb25ucykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTczOlxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTc0LVxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5Mi1cXHRcXHRpZiAoYnVmZi1cXHUwMDNlaGVhZCArIGxlbiArIHBhZCBcXHUwMDNlIGJ1ZmYtXFx1MDAzZWVuZCB8fCBtLVxcdTAwM2VyZXNlcnZlZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjkzOlxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjk0LVxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjktXFx0XFx0LypcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5NzA6XFx0XFx0ICogVGhlIGxvY2sgc3luY2hyb25pemVzIHdpdGggc2JfcXVldWVfdGFpbCgpLCBzbyB0aGF0IHdlIGRvbid0XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTcxLVxcdFxcdCAqIGFkZCBzeW5jIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVlLCB3aGVuIHdlIGFyZSBhbHJlYWR5IGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjAxLjkxNTc0NjQ3NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA5MTIwMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgcmVsZXZhbnQgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJ1ZmZlciBUcmFuc21pc3Npb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGJ1ZmZlciwgb25jZSBpdCdzIGJlZW4gaGFuZGxlZCBieSB0aGUgc3lzdGVtLCBhY3R1YWxseSBnZXRzIHNlbnQuIE15IGZvY3VzIGlzIG9uIHRoZSBgc2JfcXVldWVfdGFpbGAgZnVuY3Rpb24sIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjaykgbGlrZWx5IGhhcHBlbnMuIEknbSB2aXN1YWxpemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0cmFjaW5nIHRoZSBwb2ludGVycywgYW5kIGZpZ3VyaW5nIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHRoZSB1bmRlcmx5aW5nIHRyYW5zbWlzc2lvbiBtZWNoYW5pc21zLiBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciB0aGUgYnVmZmVyIHRyYW5zZmVyPyBJcyBpdCBhIGRpcmVjdCBETUEsIGEgY29weSwgc29tZSBraW5kIG9mIHNoYXJlZCBtZW1vcnkgcmVnaW9uPyBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRyYW5zbWlzc2lvbj8gVW5kZXJzdGFuZGluZyBob3cgYHNiX3F1ZXVlX3RhaWxgIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlcnMsIGFuZCB0aGUgcG90ZW50aWFsIGludGVycnVwdCBoYW5kbGluZyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJJ20gcmVhbGx5IGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCBob3cgdGhhdCAndGFpbCcgb3BlcmF0aW9uIGFjdHVhbGx5IGdldHMgdGhlIGJ1ZmZlciBtb3ZpbmcgZnJvbSBtZW1vcnkgb250byB0aGUgd2lyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowNS41MjQ4Njk0NThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcXG4gMzU2OlxcdHtcXG4gMzU3OlxcdFxcdGtmcmVlKHNiLVxcdTAwM2VtZXNnKTtcXG4gMzU4OlxcdFxcdGtmcmVlKHNiKTtcXG4gMzU5OlxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIDM2MjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2IgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuIDM2NzpcXHRcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbiAzNjg6XFx0XFx0ICAgIG1zLVxcdTAwM2VzeW5jX3F1ZXVlX2xlbiBcXHUwMDNjIHN5c2N0bF9zeW5jX3FsZW5fbWF4KGlwdnMpKSB7XFxuIDM2OTpcXHRcXHRcXHRpZiAoIW1zLVxcdTAwM2VzeW5jX3F1ZXVlX2xlbilcXG4gMzcwOlxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bXMtXFx1MDAzZW1hc3Rlcl93YWtldXBfd29yayxcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG1heChJUFZTX1NZTkNfU0VORF9ERUxBWSwgMSkpO1xcbiAzNzI6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuKys7XFxuIDM3MzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZzYi1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zLVxcdTAwM2VzeW5jX3F1ZXVlKTtcXG4gMzc0OlxcdFxcdFxcdGlmICgoKyttcy1cXHUwMDNlc3luY19xdWV1ZV9kZWxheSkgPT0gSVBWU19TWU5DX1dBS0VVUF9SQVRFKSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXFx1MDAzZW1zKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0XFx0XFx0d2FrZV91cF9wcm9jZXNzKGlwdnMtXFx1MDAzZW1hc3Rlcl90aW5mb1tpZF0udGFzayk7XFxuIDM3ODpcXHRcXHRcXHR9XFxuIDM3OTpcXHRcXHR9IGVsc2VcXG4gMzgwOlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4gMzgxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2xvY2spO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowNS41MjQ5OTA2MThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MTIwNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQnVmZmVyaW5nIGFuZCBUaHJlYWQgU3luY2hyb25pemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IHdlJ3JlIGVucXVldWluZyBkYXRhIHRvIGJlIHN5bmNocm9uaXplZCwgcGxhY2luZyBpdCBpbiB0aGUgYG1zLVx1MDAzZXN5bmNfcXVldWVgLiBUaGUgaW1tZWRpYXRlIGZvbGxvdy11cCBpcyB0byBnZXQgdGhlIG1hc3RlciB0aHJlYWQgaW52b2x2ZWQuIEl0J3MgdGltZSB0byB3YWtlIGl0IHVwLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBtYXN0ZXIgdGhyZWFkIGlzIGFuZCB3aGF0IGl0cyBjdXJyZW50IHN0YXRlIG1pZ2h0IGJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBtYXN0ZXIgdGhyZWFkIGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbmV4dCBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowOC4yOTYyMDAxOTlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTc5Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hc3Rlcl90aHJlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQwNT1zdGF0aWMgaW5saW5lIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDA2OnNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MDcte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU2NDpcXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2NS1cXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjY3OlxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY4LVxcdG1zID0gXFx1MDAyNmlwdnMtXFx1MDAzZW1zW2lkXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MDguMzc0Nzg0Mjk0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDY5MDc3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIG9yIHdoZXJlIGl04oCZcyBiZWluZyBpbnZva2VkLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbSBnb2luZyB0byBsb29rIGZvciBlaXRoZXIgYG1hc3Rlcl90aW5mb2AsIG9yIGBzeW5jX3RocmVhZGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gSSBoYXZlLiBVc2luZyB0aGVzZSBzZWFyY2ggdGVybXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCB0byBzZWUgaG93IHRoZSB0ZXJtcyBhcmUgdXNlZCwgYW5kIHRoZW4gbmFycm93IGRvd24gbXkgZm9jdXMgYXMgSSBhbmFseXplIHRoZSByZXN1bHRzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGFuZCB3aGVyZSBJJ20gZ29pbmcgdG8gZ2V0IHRoZSBtb3N0IG1pbGVhZ2Ugb3V0IG9mIGEgdGFyZ2V0ZWQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTEuNDIxNjk0NjI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzExNjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5jX3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTc0PXVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5NjpzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjM4PW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NDgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQ5OnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjUwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NTE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NTItXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cXHUwMDNlaXB2cztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDE6c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcwMzpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwNC1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTczODppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MzktXFx0XFx0ICAgICAgaW50IHN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc0MC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQxOlxcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSA9IE5VTEwsICp0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NDItXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODMzLVxcdFxcdG5hbWUgPSBcXFwiaXB2cy1tOiVkOiVkXFxcIjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4MzQ6XFx0XFx0dGhyZWFkZm4gPSBzeW5jX3RocmVhZF9tYXN0ZXI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODM1LVxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDEtXFx0XFx0bmFtZSA9IFxcXCJpcHZzLWI6JWQ6JWRcXFwiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTg0MjpcXHRcXHR0aHJlYWRmbiA9IHN5bmNfdGhyZWFkX2JhY2t1cDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDMtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2NS1cXHRyZXN1bHQgPSAtRU5PTUVNO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTg2NjpcXHR0aSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSwgY291bnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2Ny1cXHRpZiAoIXRpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk1NDppbnQgc3RvcF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IHN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1NS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU2OlxcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSwgKnRpbmZvO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1Ny1cXHRpbnQgaWQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTIwNTA9dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1NDpcXHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cXHRpZiAocmV0YyBcXHUwMDI2XFx1MDAyNiByZXRjICE9IC1FU1JDSClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTg6XFx0cmV0YyA9IHN0b3Bfc3luY190aHJlYWQoaXB2cywgSVBfVlNfU1RBVEVfQkFDS1VQKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTktXFx0aWYgKHJldGMgXFx1MDAyNlxcdTAwMjYgcmV0YyAhPSAtRVNSQ0gpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjExLjUxNDgxODU0OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIwMzIxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgc3luY190aHJlYWRfbWFzdGVyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgc3lzdGVtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgc3luY190aHJlYWRfbWFzdGVyYC4gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHN0YXRlIGlzIGZ1bmRhbWVudGFsIHRvIGRpYWdub3NpbmcgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEl0J3MgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yLCBzbyBhbnkgb2RkIGJlaGF2aW9yIHRoZXJlIGxpa2VseSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgY3VycmVudCBzdGF0ZSwgaG93IGl0J3MgYmVoYXZpbmcgcmVsYXRpdmUgdG8gZXhwZWN0YXRpb25zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHNpZ25zIG9mIGNvbnRlbnRpb24gb3IgYmxvY2thZ2UuIFRoZSBzcGVjaWZpY3MgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgb2YgY291cnNlIC0gYnV0IHRoYXTigJlzIHRoZSBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoxNC40MzUxNDQ1NDlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0OTpcXHRzdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxcbjE2NTA6XFx0e1xcbjE2NTE6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG4xNjUyOlxcdFxcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXFx1MDAzZWlwdnM7XFxuMTY1MzpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbdGluZm8tXFx1MDAzZWlkXTtcXG4xNjU0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHRpbmZvLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaztcXG4xNjU1OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbjE2NTY6XFx0XFxuMTY1NzpcXHRcXHRwcl9pbmZvKFxcXCJzeW5jIHRocmVhZCBzdGFydGVkOiBzdGF0ZSA9IE1BU1RFUiwgbWNhc3RfaWZuID0gJXMsIFxcXCJcXG4xNjU4OlxcdFxcdFxcdFxcXCJzeW5jaWQgPSAlZCwgaWQgPSAlZFxcXFxuXFxcIixcXG4xNjU5OlxcdFxcdFxcdGlwdnMtXFx1MDAzZW1jZmcubWNhc3RfaWZuLCBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNpZCwgdGluZm8tXFx1MDAzZWlkKTtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0Zm9yICg7Oykge1xcbjE2NjI6XFx0XFx0XFx0c2IgPSBuZXh0X3N5bmNfYnVmZihpcHZzLCBtcyk7XFxuMTY2MzpcXHRcXHRcXHRpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4xNjY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2NjU6XFx0XFx0XFx0aWYgKCFzYikge1xcbjE2NjY6XFx0XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dChJUFZTX1NZTkNfQ0hFQ0tfUEVSSU9EKTtcXG4xNjY3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2Njg6XFx0XFx0XFx0fVxcbjE2Njk6XFx0XFx0XFx0d2hpbGUgKGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXFx1MDAzZXNvY2ssIHNiLVxcdTAwM2VtZXNnKSBcXHUwMDNjIDApIHtcXG4xNjcwOlxcdFxcdFxcdFxcdC8qIChBYil1c2UgaW50ZXJydXB0aWJsZSBzbGVlcCB0byBhdm9pZCBpbmNyZWFzaW5nXFxuMTY3MTpcXHRcXHRcXHRcXHQgKiB0aGUgbG9hZCBhdmcuXFxuMTY3MjpcXHRcXHRcXHRcXHQgKi9cXG4xNjczOlxcdFxcdFxcdFxcdF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpza19zbGVlcChzayksXFxuMTY3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzb2NrX3dyaXRlYWJsZShzaykgfHxcXG4xNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7XFxuMTY3NjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4xNjc3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4xNjc4OlxcdFxcdFxcdH1cXG4xNjc5OlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0ZG9uZTpcXG4xNjgzOlxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4xNjg0OlxcdFxcdGlmIChzYilcXG4xNjg1OlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0LyogY2xlYW4gdXAgdGhlIHN5bmNfYnVmZiBxdWV1ZSAqL1xcbjE2ODg6XFx0XFx0d2hpbGUgKChzYiA9IHNiX2RlcXVldWUoaXB2cywgbXMpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTQuNDM1Mjk2MzhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NDM5MTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeW5jaHJvbml6YXRpb24gTWVzc2FnZSBUcmFuc21pc3Npb24qKlxuXG5SaWdodCwgc28gYGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXHUwMDNlc29jaywgc2ItXHUwMDNlbWVzZylgIGlzIHRoZSBmdW5jdGlvbiBjYWxsIG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGlzIHRyYW5zbWl0dGluZyB0aGF0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlLCBgc2ItXHUwMDNlbWVzZ2AsIG92ZXIgdGhlIHNvY2tldCwgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBgdGluZm8tXHUwMDNlc29ja2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYHNiLVx1MDAzZW1lc2dgIGlzIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW5kIGB0aW5mby1cdTAwM2Vzb2NrYCBpcyB0aGUgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhZmZpYyBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgaXBfdnNfc2VuZF9zeW5jX21zZ2AuIEknbGwgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQsIGhvdyBpdCBmb3JtYXRzIHRoZSBtZXNzYWdlLCBhbnkgbmVjZXNzYXJ5IGVycm9yIGNoZWNraW5nLCBhbmQgd2hhdCB1bmRlcmx5aW5nIG5ldHdvcmsgY2FsbHMgYXJlIHVzZWQgdG8gYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSBvdXQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIHVzZSBvZiBgc2VuZG1zZ2AsIHBvdGVudGlhbCBidWZmZXJpbmcgbWVjaGFuaXNtcywgYW5kIGFueSBzcGVjaWZpYyBwcm90b2NvbHMgYXQgcGxheSwgc28gSSBjYW4gZW5zdXJlIHRoZSBzeW5jIG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgaW4gYSBzYWZlIGFuZCByZWxpYWJsZSB3YXkuIEkgbWlnaHQgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFzcGVjdHMgb2YgZmxvdyBjb250cm9sIHRoYXQgd291bGQgYWZmZWN0IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTguMDc5NjkzNDhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYxMDpcXHRcXHRsZW4gPSBzb2NrX3JlY3Ztc2coc29jaywgXFx1MDAyNm1zZywgTVNHX0RPTlRXQUlUKTtcXG4xNjExOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbjE2MTI6XFx0XFx0XFx0cmV0dXJuIGxlbjtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cmV0dXJuIGxlbjtcXG4xNjE1OlxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0LyogV2FrZXVwIHRoZSBtYXN0ZXIgdGhyZWFkIGZvciBzZW5kaW5nICovXFxuMTYxODpcXHRzdGF0aWMgdm9pZCBtYXN0ZXJfd2FrZXVwX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTYxOTpcXHR7XFxuMTYyMDpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPVxcbjE2MjE6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlLFxcbjE2MjI6XFx0XFx0XFx0XFx0ICAgICBtYXN0ZXJfd2FrZXVwX3dvcmsud29yayk7XFxuMTYyMzpcXHRcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG1zLVxcdTAwM2VpcHZzO1xcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuMTYyNjpcXHRcXHRpZiAobXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuIFxcdTAwMjZcXHUwMDI2XFxuMTYyNzpcXHRcXHQgICAgbXMtXFx1MDAzZXN5bmNfcXVldWVfZGVsYXkgXFx1MDAzYyBJUFZTX1NZTkNfV0FLRVVQX1JBVEUpIHtcXG4xNjI4OlxcdFxcdFxcdGludCBpZCA9IChpbnQpKG1zIC0gaXB2cy1cXHUwMDNlbXMpO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19xdWV1ZV9kZWxheSA9IElQVlNfU1lOQ19XQUtFVVBfUkFURTtcXG4xNjMxOlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhpcHZzLVxcdTAwM2VtYXN0ZXJfdGluZm9baWRdLnRhc2spO1xcbjE2MzI6XFx0XFx0fVxcbjE2MzM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuMTYzNDpcXHR9XFxuMTYzNTpcXHRcXG4xNjM2OlxcdC8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXFxuMTYzNzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbjE2Mzg6XFx0bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG4xNjM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTguMDc5ODk4NDhaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDM1MDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNaXNzaW5nIEZ1bmN0aW9uIENhbGwgaW4gU25pcHBldCAtIExldCdzIEludmVzdGlnYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBvZmYuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2FsbCB0byBgaXBfdnNfc2VuZF9zeW5jX21zZ2AgaGVyZSwgYnV0IGl0J3MgYWJzZW50LiBUaGF0J3MgYSByZWQgZmxhZy4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCBpbiB0aGUgY29udGV4dCBvZiBJUFZTIHN5bmNocm9uaXphdGlvbiwgc28gaXRzIGFic2VuY2Ugd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm90IHByZXNlbnQuIElzIHRoaXMgc25pcHBldCBmcm9tIGFuIGluY29tcGxldGUgb3IgdHJ1bmNhdGVkIHNlY3Rpb24/IEFtIEkgbG9va2luZyBhdCB0aGUgd3JvbmcgcGFydCBvZiB0aGUgY29kZSBiYXNlPyBQZXJoYXBzIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRoIGF0IHBsYXkgaGVyZSwgYW5kIHRoaXMgcGFydCBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGlzIGRpc2FibGVkPyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgaXBfdnNfc2VuZF9zeW5jX21zZ2Agd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgaW5pdGlhbCBjb250ZXh0IGFuZCBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjIxLjM3MDI1Mjk2NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MzkzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc2VuZF9zeW5jX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU4Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTg3OmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDk9c3RhdGljIGludCBzeW5jX3RocmVhZF9tYXN0ZXIodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjY5OlxcdFxcdHdoaWxlIChpcF92c19zZW5kX3N5bmNfbXNnKHRpbmZvLVxcdTAwM2Vzb2NrLCBzYi1cXHUwMDNlbWVzZykgXFx1MDAzYyAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcwLVxcdFxcdFxcdC8qIChBYil1c2UgaW50ZXJydXB0aWJsZSBzbGVlcCB0byBhdm9pZCBpbmNyZWFzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjIxLjQ0MjE5NzczWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjQwMzE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBpcF92c19zZW5kX3N5bmNfbXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcF92c19zZW5kX3N5bmNfbXNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBJUFZTIGFyY2hpdGVjdHVyZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb2YgY29ubmVjdGlvbiBzdGF0ZSBiZXR3ZWVuIGRpcmVjdG9yIG5vZGVzLiBHaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyB0aGUgYWN0dWFsIG1lc3NhZ2VzLCBwcm9iYWJseSBvdmVyIHNvbWUgZXN0YWJsaXNoZWQgY29udHJvbCBjaGFubmVsIG9yIG5ldHdvcmsgaW50ZXJmYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgXCJzeW5jIG1lc3NhZ2VcIiBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJcyBpdCBmdWxsIHN0YXRlIHVwZGF0ZXMsIGluY3JlbWVudGFsIGNoYW5nZXMsIG9yIGEgY29tYmluYXRpb24/IEFuZCB0aGUgZm9ybWF0OiByYXcgZGF0YT8gUHJvdG9jb2wgYnVmZmVycz8gU29tZSBjdXN0b20gc3RydWN0dXJlPyBUaGF0J3MgdGhlIGZpcnN0IHNldCBvZiBxdWVzdGlvbnMgdGhhdCBwb3AgdXAuXG5cbkknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBvcGVyYXRpbmcgb24uIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgc2VyaWFsaXplZCBhbmQgdHJhbnNtaXR0ZWQ/IENvbm5lY3Rpb24gdHJhY2tpbmcgZW50cmllcz8gTkFUIG1hcHBpbmdzPyBMb2FkIGJhbGFuY2luZyBjb25maWd1cmF0aW9uPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduJ3MgdHJhZGUtb2ZmcyBiZXR3ZWVuIHN5bmNocm9uaXphdGlvbiBzcGVlZCwgYmFuZHdpZHRoIHVzYWdlLCBhbmQgY29uc2lzdGVuY3kgZ3VhcmFudGVlcy4gVGhlbiBJ4oCZbGwgd2FudCB0byB0cmFjZSBiYWNrIGFuZCBsb29rIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIGNhbGxpbmcgcm91dGluZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSG93IGlzIGl0IHRyaWdnZXJlZCwgcGVyaGFwcyBieSBjb25uZWN0aW9uIGNyZWF0aW9uLCB0ZXJtaW5hdGlvbiwgb3IgcGVyaW9kaWMgc3RhdHVzIHVwZGF0ZXM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MgdG9vLiBJcyB0aGVyZSBhbnkgbG9ja2luZyBpbnZvbHZlZCB0aGF0IGNvdWxkIGxlYWQgdG8gY29udGVudGlvbiBkdXJpbmcgaGlnaCBjb25uZWN0aW9uIHJhdGVzPyBXaGF0IGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgdHJhbnNwb3J0PyBEb2VzIGl0IHVzZSBVRFAgZm9yIHNwZWVkIG9yIFRDUCBmb3IgcmVsaWFiaWxpdHk/IEFuZCBpZiBUQ1AsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZmxvdyBjb250cm9sIGFuZCBjb25nZXN0aW9uPyBNeSByYWRhciBpcyB1cCBmb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHN5bmNocm9uaXphdGlvbiBsYXRlbmN5IGNvdWxkIGJlY29tZSBhIHBlcmZvcm1hbmNlIGxpbWl0aW5nIGZhY3Rvci4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uPyBXaGF0IGhhcHBlbnMgaWYgYSBzeW5jIG1lc3NhZ2UgZmFpbHMgdG8gcmVhY2ggYSBkaXJlY3Rvcj8gSXMgdGhlcmUgYSByZXRyeSBtZWNoYW5pc20/IEFyZSB0aGVyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIG9yIGR1cGxpY2F0ZSBtZXNzYWdlcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoyNS42NjYyMzE5OTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NjpcXHRzdGF0aWMgaW50XFxuMTU4NzpcXHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG4xNTg4OlxcdHtcXG4xNTg5OlxcdFxcdGludCBtc2l6ZTtcXG4xNTkwOlxcdFxcdGludCByZXQ7XFxuMTU5MTpcXHRcXG4xNTkyOlxcdFxcdG1zaXplID0gbnRvaHMobXNnLVxcdTAwM2VzaXplKTtcXG4xNTkzOlxcdFxcbjE1OTQ6XFx0XFx0cmV0ID0gaXBfdnNfc2VuZF9hc3luYyhzb2NrLCAoY2hhciAqKW1zZywgbXNpemUpO1xcbjE1OTU6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIHx8IHJldCA9PSAtRUFHQUlOKVxcbjE1OTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNTk3OlxcdFxcdHByX2VycihcXFwiaXBfdnNfc2VuZF9hc3luYyBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTk4OlxcdFxcdHJldHVybiAwO1xcbjE1OTk6XFx0fVxcbjE2MDA6XFx0XFxuMTYwMTpcXHRzdGF0aWMgaW50XFxuMTYwMjpcXHRpcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcXG4xNjAzOlxcdHtcXG4xNjA0OlxcdFxcdHN0cnVjdCBtc2doZHJcXHRcXHRtc2cgPSB7TlVMTCx9O1xcbjE2MDU6XFx0XFx0c3RydWN0IGt2ZWNcXHRcXHRpb3YgPSB7YnVmZmVyLCBidWZsZW59O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoyNS42NjYzNTc2NzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTc4ODM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBpcF92c19zZW5kX2FzeW5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGlwX3ZzX3NlbmRfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBkZWFsIHdpdGggYXN5bmNocm9ub3VzIHNlbmRzIGluIElQVlMsIGFuZCBpdCBoYXMgaW1wbGljYXRpb25zIGZvciBhIGJ1bmNoIG9mIG9wdGltaXphdGlvbnMuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgaXQncyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS4gSXQncyBub3QganVzdCBhIHNpbXBsZSBzZW5kIG9wZXJhdGlvbi4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgY29ubmVjdGlvbiB0cmFja2luZywgTkFUaW5nLCBhbmQgcG90ZW50aWFsbHkgcmV0cmFuc21pc3Npb25zIGhlcmUuIEl0IG5lZWRzIHRvIGJlIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgdG8gYXZvaWQgYm90dGxlbmVja3MuXG5cbk15IGZpcnN0IHRob3VnaHQgd291bGQgYmUgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgbG9jayBmcmVlLiBJZiB0aGVyZSBhcmUgYW55IGxvY2tzLCBhcmUgdGhleSBmaW5lLWdyYWluZWQgb3IgY29hcnNlPyBUaGF0IGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHNjYWxhYmlsaXR5LiBBcmUgd2UgdXNpbmcgcGVyLWNvbm5lY3Rpb24gbG9ja3MsIHBlci1kZXN0aW5hdGlvbiBsb2Nrcywgb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsP1xuXG5UaGVuLCB0aGUgc2Vjb25kIHF1ZXN0aW9uIHdvdWxkIGJlIG9uIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycy4gSXMgdGhlcmUgZWZmaWNpZW50IERNQSB1c2FnZT8gQXJlIHdlIG9wdGltaXppbmcgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGludGVyZmFjZSBjYXJkIHR5cGVzIGFuZCB0aGVpciBjYXBhYmlsaXRpZXM/IEFyZSB3ZSBtYWtpbmcgdGhlIG1vc3Qgb2Ygc2NhdHRlci9nYXRoZXIgSS9PIGlmIHBvc3NpYmxlPyBBcmUgd2UgZ2V0dGluZyBnb29kIHBlcmZvcm1hbmNlIGZyb20gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyIC0gVENQIG9yIFVEUD9cblxuVGhlcmUncyBhbHNvIGVycm9yIGhhbmRsaW5nIHRvIGNvbnNpZGVyLiBIb3cgZG9lcyBgaXBfdnNfc2VuZF9hc3luY2AgZGVhbCB3aXRoIGNvbm5lY3Rpb24gZmFpbHVyZXMsIHJvdXRpbmcgaXNzdWVzLCBvciBjb25nZXN0aW9uPyBBcmUgd2UgcmV0cnlpbmcgaW50ZWxsaWdlbnRseSwgYW5kIGRvIHRoZSByZXRyeSBtZWNoYW5pc21zIHByb3Blcmx5IGhhbmRsZSBkaWZmZXJlbnQgZmFpbHVyZSBtb2RlcyBhbmQgbmV0d29yayBjb25kaXRpb25zP1xuXG5VbHRpbWF0ZWx5LCB0aGlzIHdob2xlIHRoaW5nIG5lZWRzIHRvIGJlIG5vbi1ibG9ja2luZy4gVGhlIGNoYWxsZW5nZSB0aGVyZSBpcyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBibG9jayB0aGUgSVBWUyBjb3JlLiBTbyB3ZSBuZWVkIHRvIG1hbmFnZSB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIGVycm9ycyB2ZXJ5IGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjI5Ljg2NDI0NTQ0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MzgyMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3NlbmRfYXN5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1NzE9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU3MjppcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTg3PWlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NDpcXHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTk1LVxcdGlmIChyZXQgXFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTYtXFx0XFx0cmV0dXJuIHJldDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1OTc6XFx0cHJfZXJyKFxcXCJpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxcXG5cXFwiLCByZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5OC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTQ6MzEuMTYxNjM3NzQyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjc0NzAwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfc2VuZF9hc3luY2AqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBtZW50YWwgdGljayBJIGdldCB3aGVuIEkgc2VlIGBpcF92c19zZW5kX2FzeW5jYCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEgcHJldHR5IGNyaXRpY2FsIHJvbGUgaW4gdGhlIGhlYXJ0IG9mIElQVlMsIGFuZCBieSBleHRlbnNpb24sIGxvYWQgYmFsYW5jaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBHaXZlbiB0aGUgXCJhc3luY1wiIGluIHRoZSBuYW1lLCBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBub24tYmxvY2tpbmcgc2VuZCBvcGVyYXRpb25zLiBUaGlzIGhpbnRzIHRvd2FyZHMgb3B0aW1pemF0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBoYW5kbGUgbXVsdGlwbGUgY29ubmVjdGlvbnMgY29uY3VycmVudGx5IHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biB3YWl0aW5nIG9uIGluZGl2aWR1YWwgbmV0d29yayB3cml0ZXMuIEl0IHN1Z2dlc3RzIHNvcGhpc3RpY2F0ZWQgc2NoZWR1bGluZyBvciBxdWV1ZWluZyBtZWNoYW5pc21zIGFyZSBhdCBwbGF5LlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgY29udGV4dDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgb3BlcmF0aW5nIG9uPyBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMsIHZpcnR1YWwgc2VydmljZSBkZWZpbml0aW9ucywgcmVhbCBzZXJ2ZXIgaW5mb3JtYXRpb24sIGFuZCB0aGUgc29ja2V0IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZSBcInNlbmRcIiBwYXJ0IGltcGxpZXMgaXQncyB0aGUgcG9pbnQgd2hlcmUgdHJhZmZpYyBpcyBhY3R1YWxseSBwdXNoZWQgb3V0LCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHRoZSBwYWNrZXQgaXMgZm9ybWF0dGVkIChsaWtlbHkgdXNpbmcgc2tfYnVmZnMsIG9idmlvdXNseSksIGhvdyBpdCdzIHJvdXRlZCAoTDQgb3IgTDcgZGVjaXNpb25zLCBkZXBlbmRpbmcgb24gdGhlIFZTIGNvbmZpZ3VyYXRpb24pLCBhbmQgYW55IHBvdGVudGlhbCB0cmFuc2Zvcm1hdGlvbnMgKGxpa2UgTkFUIG9yIHR1bm5lbGluZykuXG5cblRoZW4sIG9mIGNvdXJzZSwgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgcmFpc2VzIHF1ZXN0aW9uczogSXMgaXQgdXNpbmcgY29tcGxldGlvbiBjYWxsYmFja3M/IFdvcmtxdWV1ZXM/IE5BUEktbGlrZSBzdHJ1Y3R1cmVzPyBIb3cgaXMgZXJyb3IgaGFuZGxpbmcgbWFuYWdlZCBpbiB0aGlzIGFzeW5jaHJvbm91cyBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIGNvbnNpZGVyYXRpb25zIGZvciBiYWNrcHJlc3N1cmUgYW5kIGZsb3cgY29udHJvbCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFwaWQgYnVyc3RzIG9mIHRyYWZmaWM/IEknbSBhbnRpY2lwYXRpbmcgZWxlZ2FudCB1c2Ugb2YgdGVjaG5pcXVlcyB0byBrZWVwIHRoZSBrZXJuZWwgZnJvbSBnZXR0aW5nIHN0YXJ2ZWQgb2YgcmVzb3VyY2VzLCBhbmQgYXZvaWRpbmcgYmxvY2tpbmcgaXNzdWVzLiBUaGUgbW9yZSBJIGNvbnNpZGVyIGl0LCB0aGUgbW9yZSBJIGJlY29tZSBpbnZlc3RlZCBpbiB0aGlzIHRvcGljLiBJIHdhbnQgdG8gdW5jb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gU28gbGV0J3MgY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UncmUgcmVhbGx5IGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDozNS4xODkxMTE1NDZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MTpcXHRzdGF0aWMgaW50XFxuMTU3MjpcXHRpcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcXG4xNTczOlxcdHtcXG4xNTc0OlxcdFxcdHN0cnVjdCBtc2doZHJcXHRtc2cgPSB7Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUx9O1xcbjE1NzU6XFx0XFx0c3RydWN0IGt2ZWNcXHRpb3Y7XFxuMTU3NjpcXHRcXHRpbnRcXHRcXHRsZW47XFxuMTU3NzpcXHRcXG4xNTc4OlxcdFxcdGlvdi5pb3ZfYmFzZSAgICAgPSAodm9pZCAqKWJ1ZmZlcjtcXG4xNTc5OlxcdFxcdGlvdi5pb3ZfbGVuICAgICAgPSBsZW5ndGg7XFxuMTU4MDpcXHRcXG4xNTgxOlxcdFxcdGxlbiA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpb3YsIDEsIChzaXplX3QpKGxlbmd0aCkpO1xcbjE1ODI6XFx0XFxuMTU4MzpcXHRcXHRyZXR1cm4gbGVuO1xcbjE1ODQ6XFx0fVxcbjE1ODU6XFx0XFxuMTU4NjpcXHRzdGF0aWMgaW50XFxuMTU4NzpcXHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG4xNTg4OlxcdHtcXG4xNTg5OlxcdFxcdGludCBtc2l6ZTtcXG4xNTkwOlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjM1LjE4OTI1NDU4NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1NzU1OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5pbml0aWFsaXplZCBIZWFwIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gYGtlcm5lbF9zZW5kbXNnYCBpcyBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbiBzZW5kaW5nIHRoZSBidWZmZXIgb3ZlciB0aGUgc29ja2V0LiBJIHNlZSBpdCBub3cuIFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGBrbWFsbG9jYCBhbGxvY2F0aW9uLiBCZWNhdXNlIG9mIHRoZSBgaHRvbl9zZXFgIGJ1ZywgdGhlIGJ1ZmZlciB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgIGJlZm9yZSBiZWluZyBzZW50LiBJbnN0ZWFkLCBpdCB3YXMgcmVhZGluZyBkaXJlY3RseSBmcm9tIHRoZSB1bmluaXRpYWxpemVkIGBrbWFsbG9jYCBidWZmZXIgYW5kIHNlbmRpbmcgdGhvc2UgYnl0ZXMgb3ZlciB0aGUgbmV0d29yay4gQ2xhc3NpYyBpbmZvLWxlYWshIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS0FTQU4gd291bGRuJ3QgdHJpZ2dlciBoZXJlLCBiZWNhdXNlIHdlIGFyZW4ndCBkZWFsaW5nIHdpdGggb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uczsgaXQncyBzaW1wbHkgcmVhZGluZyBhbmQgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGFyZ3VtZW50cy5cblxuYGBgY1xuc3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxue1xuXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlaW5pdF9zZXEsIFx1MDAyNm5vLVx1MDAzZWluaXRfc2VxKTtcblx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWRlbHRhLCBcdTAwMjZuby1cdTAwM2VkZWx0YSk7XG5cdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VwcmV2aW91c19kZWx0YSwgXHUwMDI2bm8tXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xufVxuYGBgXG5cbk5vdywgYmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO1xuYGBgXG5cbk9rYXksIHNvIGBob2AgaXMgYHBgLCB0aGUgdW5pbml0aWFsaXplZCBidWZmZXIsIGFuZCBgbm9gIGlzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS4gVGhlIGBwdXRfdW5hbGlnbmVkX2JlMzJgIGZ1bmN0aW9uIHJlYWRzIGZyb20gYGhvYCAod2hpY2ggaXMgdGhlIHVuaW5pdGlhbGl6ZWQgYHBgKSBhbmQgd3JpdGVzIHRvIGBub2AgKHdoaWNoIGlzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgKS5cblxuVGhlcmVmb3JlLCBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBwYC4gQnV0IHdhaXQuLi4gZG9lcyB0aGF0IG1lYW4gdGhlIHJlYWQgaGFwcGVucyBmcm9tIGBwYD8gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHB1dF91bmFsaWduZWRfYmUzMmAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDo0Mi4wOTUwMTQxMTRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk3MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF91bmFsaWduZWRfYmUzMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Mjk1PXN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5Ni17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTc6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTg6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2VkZWx0YSwgXFx1MDAyNm5vLVxcdTAwM2VkZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTk6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2VwcmV2aW91c19kZWx0YSwgXFx1MDAyNm5vLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDo0Mi4xNDM1MTgxMTFaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNjQ5MjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnRlcm5hbCBDb2RlIFJldmlldyoqXG5cbk9rYXksIHNvIGBwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBwdHIpYCBpcyBkZXNpZ25lZCB0byB3cml0ZSBhIDMyLWJpdCB2YWx1ZSwgYHZhbGAsIHRvIHRoZSBtZW1vcnkgYWRkcmVzcyBwb2ludGVkIHRvIGJ5IGBwdHJgIGluIGJpZy1lbmRpYW4gYnl0ZSBvcmRlci4gTWFrZXMgc2Vuc2UsIHRoYXQncyBzdGFuZGFyZCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXJndW1lbnQgb3JkZXIuIEkga25vdyBJJ3ZlIHNlZW4gc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzICpzZWNvbmQqIGFuZCB0aGUgcG9pbnRlciAqZmlyc3QqLiBJJ2QgYmV0dGVyIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQncyBhIGZ1bmRhbWVudGFsIHRoaW5nLCBidXQgZWFzeSB0byBtZXNzIHVwIGlmIHlvdSBhcmUgd29ya2luZyBxdWlja2x5LiBMZXQncyBjb25maXJtOiBmaXJzdCB0aGUgdmFsdWUsIHRoZW4gdGhlIHBvaW50ZXIgdG8gd3JpdGUgaXQgdG8uIEkgbmVlZCB0byBjb21taXQgdGhpcyB0byBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTQ6NDUuNjcwMDE0ODI5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1NDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXRfdW5hbGlnbmVkX2JlMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC91bmFsaWduZWQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VuYWxpZ25lZC5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdW5hbGlnbmVkX2JlMTYodTE2IHZhbCwgdm9pZCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvdW5hbGlnbmVkLmgtNjUtXFxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9iZTMyKHUzMiB2YWwsIHZvaWQgKnApXFxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjQ1LjcxODM3NTQ0NloiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc0NzU0NTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluZm8tTGVhayBCdWcgd2l0aCBLTVNBTioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGBwdXRfdW5hbGlnbmVkX2JlMzJgIGlzIGtleSBoZXJlLiAgSSBzZWUgaXQncyBiZWluZyB1c2VkIHRvIHdyaXRlIGEgdmFsdWUgZnJvbSBvbmUgbWVtb3J5IGxvY2F0aW9uIHRvIGFub3RoZXIuIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW1hdGljIGxpbmUgaXM6ICBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AuICBFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGF0IGRhdGEgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBiZSB3cml0dGVuIGludG8gdGhlIGBwYCBidWZmZXIsIGlzIGJlaW5nIHJlYWQgZnJvbSBgcGAgYW5kIHdyaXR0ZW4gdG8gYGNwLVx1MDAzZWluX3NlcWAgaW5zdGVhZC5cblxuSGVyZSdzIHRoZSBjcml0aWNhbCBwb2ludDogdGhlIGBwYCBidWZmZXIsIHdoaWNoIHBvaW50cyB0byBgc2ItXHUwMDNlaGVhZGAgZnJvbSB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYnV0ICpub3QqIGluaXRpYWxpemVkLiAgU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCByYXcsIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGludGVudCB3YXMgdG8gd3JpdGUgc2VxdWVuY2UgbnVtYmVycyBpbnRvIHRoaXMgYHBgIGJ1ZmZlciwgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiAgQmVjYXVzZSBvZiB0aGUgc3dhcCwgd2UncmUgKnJlYWRpbmcqIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgKndyaXRpbmcqIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBgY3AtXHUwMDNlaW5fc2VxYCBzdHJ1Y3R1cmUuICBUaGlzIHRoZW4gbGVhdmVzIHRoZSBgcGAgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuXG5cbk5vdywgYmVjYXVzZSBgcGAgaXMgKm5vdCogaW5pdGlhbGl6ZWQgYXQgdGhlIGBodG9uX3NlcWAgY2FsbCwgYW5kIHRoZSBtZW1vcnkgYWNjZXNzIGlzIHN3YXBwZWQsIGl0IGxlYWRzIHRvIHR3byBjcml0aWNhbCBwcm9ibGVtczpcblxuMS4gIFdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQncyBkZXNpZ25lZCB0byB0cmFjayB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjIuICBUaGUgdW5pbml0aWFsaXplZCBgcGAgYnVmZmVyLCBjb250YWluaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLCBpcyB0aGVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBieSBga2VybmVsX3NlbmRtc2dgLiBUaGlzIGlzIGEgdGV4dGJvb2sgaW5mby1sZWFrOiBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBrZXJuZWwncyBib3VuZGFyeS4gS01TQU4gd2lsbCBhbHNvIGFic29sdXRlbHkgZmxhZyB0aGlzIGFzIGEgY3JpdGljYWwgcHJvYmxlbSBiZWNhdXNlIGl0J3MgYSBkaXJlY3QgbGVhay5cblxuSSBjaGVja2VkIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIFllcywgYHNiLVx1MDAzZW1lc2dgIGlzIGFsbG9jYXRlZCwgYnV0IGl0cyBjb250ZW50ICphZnRlciogdGhlIGluaXRpYWwgYHN0cnVjdCBpcF92c19zeW5jX21lc2dgIGlzIGNvbXBsZXRlbHkgdW5pbml0aWFsaXplZC4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb25zLiBXZSdyZSByZWFkaW5nICpmcm9tKiBgcGAgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jYCBhbmQgdGhlbiBjb3BpZWQgaW50byBgY3AtXHUwMDNlaW5fc2VxYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBLTVNBTiB0byBkZXRlY3QuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgYnVnIGlzIGEgc3dhcHBlZCBhcmd1bWVudCBpbiBgaHRvbl9zZXFgLiBUaGlzIGxlYWRzIHRvOlxuXG4qICAgUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciAoYHBgKS5cbiogICBXcml0aW5nIHRoZSAoZ2FyYmFnZSkgcmVhZCBtZW1vcnkgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIChgY3AtXHUwMDNlaW5fc2VxYCkuXG4qICAgTGVhdmluZyB0aGUgaW50ZW5kZWQgbmV0d29yayBidWZmZXIgKGBwYCkgdW5pbml0aWFsaXplZC5cbiogICBTZW5kaW5nIHRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgb3ZlciB0aGUgbmV0d29yaywgY2F1c2luZyBhIGNsZWFyIGluZm9ybWF0aW9uIGxlYWsuXG4qICAgS01TQU4gKndpbGwqIGRldGVjdCB0aGUgdW5pbml0aWFsaXplZCByZWFkIGFuZCB0aGUgaW5mby1sZWFrIG9uIHRoZSBuZXR3b3JrIHNlbmQuXG5cbktBU0FOICp3b24ndCogZGV0ZWN0IHRoaXMsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWVzLiAgQWxsIG1lbW9yeSBhY2Nlc3MgaXMgdGVjaG5pY2FsbHkgdmFsaWQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHJlZ2lvbnMuIEl0J3MgdGhlICp1bmluaXRpYWxpemVkKiBzdGF0ZSBvZiB0aGUgZGF0YSB0aGF0J3MgdGhlIHByb2JsZW0uXG5cblRoZXJlZm9yZSwgdGhpcyBkZWZpbml0ZWx5IG5lZWRzIEtNU0FOLiAgYE5lZWRzS01TQU4gPSB0cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3OTQsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjU5LjQ2NTkyMzI1NloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVxcdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcXG5cXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcXG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXFxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cXG5cXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVxcdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcXG5cXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcXG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXFxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cXG5cXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows2crf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-11 00:13:39 +0000 UTC FinishedAt: 2026-08-11 01:15:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ae2998ab62e40b3e134590dc5a233ae3367a7a2b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "ae2998ab62e40b3e134590dc5a233ae3367a7a2b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IP_VS" ], "series_id": "ea6c41e6-7494-44cd-af34-a49deb4d8cdf" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "ip_vs_sync_conn" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXHUwMDNlb3V0X3NlcWAuIFRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCBpbiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZSgpYCBhbmQgaXMgdW5pbml0aWFsaXplZC4gXG5cblRoaXMgYnVnIGhhcyB0d28gY29uc2VxdWVuY2VzOlxuMS4gSXQgcmVhZHMgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSBmcm9tIGBwYCBhbmQgY29ycnVwdHMgdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlLlxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cblxuS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlcy4gU2luY2UgYWxsIG1lbW9yeSBhY2Nlc3NlcyBoZXJlIGFyZSB3aXRoaW4gYm91bmRzIGFuZCBvbiBsaXZlIG9iamVjdHMsIEtBU0FOIHdpbGwgbm90IGRldGVjdCB0aGlzIGJ1Zy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCkgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIHBhY2tldCBidWZmZXIgZGF0YSwgd2hpbGUgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBJUFZTIHN5bmMgZGFlbW9uIGlzIHJ1bm5pbmcgaW4gTUFTVEVSIHN0YXRlIGFuZCBwcm9jZXNzaW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiZmM1MjMzMTI0N2VlMzU4OTBlZDBlY2JkYjE5MzYwMjRmYjY3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDE6MTE6MjUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5AQCAtNzQ3LDkgJiM0Mzs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtcbiYjNDM7XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZW91dF9zZXEpO1xuJiM0MztcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBfVlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcF92c19zeW5jX2Nvbm4mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgY29ycnVwdGlvbiBhbmQgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZC93cml0ZSBidWcgaW4gYGlwX3ZzX3N5bmNfY29ubmAgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXFgIHdlcmUgc3dhcHBlZC4gVGhpcyBjYXVzZWQgdGhlIGNvbm5lY3Rpb24gc3RhdGUgKGBjcC1cdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmZjNTIzMzEyNDdlZTM1ODkwZWQwZWNiZGIxOTM2MDI0ZmI2NzZhMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgQXVnIDExIDAxOjExOjI1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKaW5kZXggOTMwMzhhYmJmNWUwNC4uZjZlYTZjOTUzNWViMyAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCkBAIC03NDcsOSAmIzQzOzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7Ci0JCWh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O291dF9zZXEpOwomIzQzOwkJaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7b3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwogCX0KIAkvKiBIYW5kbGUgcGUgZGF0YSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkFuYWx5emluZyBhIE5ldGZpbHRlci9JUFZTIFN5bmNocm9uaXphdGlvbiBQYXRjaCoqCgpSaWdodCwgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBDbGFzc2ljLiBJdCBzZWVtcyB0byBiZSBmaWRkbGluZyB3aXRoIHRoZSBhcmd1bWVudCBvcmRlciBmb3IgYGh0b25fc2VxYC4gSG1tLCBJIHdvbmRlciB3aHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdG8gdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJndW1lbnQgc3dhcC4gSXMgaXQgcmVsYXRlZCB0byBlbmRpYW5uZXNzIGNvbmNlcm5zPyBJcyB0aGVyZSBhbiBvcHRpbWl6YXRpb24gb3IgYSBidWcgZml4IHJlbGF0ZWQgdG8gc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nPyBMZXQgbWUgZGl2ZSBpbiBhbmQgc2VlIHdoYXQmIzM5O3MgY2hhbmdlZCBhbmQgd2h5LiBQcm9iYWJseSBhIHN1YnRsZSwgeWV0IGNydWNpYWwsIGFkanVzdG1lbnQgdG8gaG93IHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtIHdvcmtzLiBCZXN0IHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBhcyBzeW5jaHJvbml6YXRpb24gcHJvYmxlbXMgYXJlIG5vdG9yaW91c2x5IGhhcmQgdG8gZGVidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRvbl9zZXEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTItXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXHRcdC8qIFVzZWQgZm9yIG50b2hfc2VxIGFuZCBodG9uX3NlcSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NC1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTI4Mz1zdGF0aWMgdm9pZCBudG9oX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpubywgc3RydWN0IGlwX3ZzX3NlcSAqaG8pXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI5NTpzdGF0aWMgdm9pZCBodG9uX3NlcShzdHJ1Y3QgaXBfdnNfc2VxICpobywgc3RydWN0IGlwX3ZzX3NlcSAqbm8pXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5Ni17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXHRcdCoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc1MDpcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzUyOlx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTMtXHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODY3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIE5ldHdvcmsgQnVnIEZpeCoqCgpSaWdodCwgc28gdGhpcyBwYXRjaCBpcyBhaW1lZCBhdCBjb3JyZWN0aW5nIHRoZSBhcmd1bWVudCBvcmRlciB3aXRoaW4gdGhlIGBodG9uX3NlcWAgZnVuY3Rpb24gY2FsbC4gTGV0JiMzOTtzIHNlZS4uLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGNhbGwgd2FzOiBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtpbl9zZXEpO2AuIEFuZCBub3csIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG86IGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gVGhhdCYjMzk7cyBhIGNsZWFyIHN3YXAsIHdoaWNoIHN1Z2dlc3RzIGEgcG9zc2libGUgYnVnLiBUaGUgb3JpZ2luYWwgb3JkZXIgbWlnaHQgaGF2ZSBiZWVuIG1pc2ludGVycHJldGluZyB3aGljaCBkYXRhIHRvIHRyZWF0IGFzIHRoZSBzb3VyY2UgdmVyc3VzIHRoZSBkZXN0aW5hdGlvbiBpbiB0aGUgaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiBwcm9jZXNzLgoKVGhlIHRoaW5nIHRvIGRvIGlzIGRlbHZlIGludG8gdGhlIGBodG9uX3NlcWAgZGVmaW5pdGlvbiBpdHNlbGYgdG8gZnVsbHkgZ3Jhc3AgdGhlIGNoYW5nZS4gVW5kZXJzdGFuZGluZyBpdHMgZXhwZWN0ZWQgaW5wdXQgYW5kIG91dHB1dCBpcyBjcnVjaWFsIHRvIGRldGVybWluZSBpZiB0aGlzIHN3YXAgaXMgY29ycmVjdC4gSXMgYCZhbXA7Y3AtJmd0O2luX3NlcWAgbWVhbnQgdG8gYmUgdGhlIHZhbHVlIHRvIGNvbnZlcnQsIGFuZCBgKHN0cnVjdCBpcF92c19zZXEgKilwYCBwcm92aWRpbmcgc29tZSBjb250ZXh0PyBPciB2aWNlIHZlcnNhPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGRlY2xhcmF0aW9uIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgcm9sZXMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgYXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjkwOlx0XG4gMjkxOlx0LypcbiAyOTI6XHQgKiBDb3B5IG9mIHN0cnVjdCBpcF92c19zZXFcbiAyOTM6XHQgKiBGcm9tIEFsaWduZWQgaG9zdCBvcmRlciB0byB1bmFsaWduZWQgbmV0d29yayBvcmRlclxuIDI5NDpcdCAqL1xuIDI5NTpcdHN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbiAyOTY6XHR7XG4gMjk3Olx0XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlaW5pdF9zZXEsIFx1MDAyNm5vLVx1MDAzZWluaXRfc2VxKTtcbiAyOTg6XHRcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VkZWx0YSwgXHUwMDI2bm8tXHUwMDNlZGVsdGEpO1xuIDI5OTpcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZXByZXZpb3VzX2RlbHRhLCBcdTAwMjZuby1cdTAwM2VwcmV2aW91c19kZWx0YSk7XG4gMzAwOlx0fVxuIDMwMTpcdFxuIDMwMjpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG4gMzAzOlx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuIDMwNDpcdHtcbiAzMDU6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuIDMwNjpcdFxuIDMwNzpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbiAzMDg6XHRcdGlmIChsaXN0X2VtcHR5KFx1MDAyNm1zLVx1MDAzZXN5bmNfcXVldWUpKSB7XG4gMzA5Olx0XHRcdHNiID0gTlVMTDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBWUyBTZXF1ZW5jZSBOdW1iZXIgQ29udmVyc2lvbioqCgpPa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHNlcXVlbmNlIG51bWJlciBoYW5kbGluZyBpbiBgaXBfdnNfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvbnZlcnRpbmcgc2VxdWVuY2UgbnVtYmVycyBiZXR3ZWVuIGhvc3QgYW5kIG5ldHdvcmsgYnl0ZSBvcmRlciB1c2luZyB0aGUgYGh0b25fc2VxYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGBpcF92c19zZXFgIHN0cnVjdHVyZS4KCkJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIHdhcyBkb2luZyBpdCBjb21wbGV0ZWx5IHdyb25nLiBUaGUgZnVuY3Rpb24gY2FsbCBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtpbl9zZXEpYCB3YXMgdXNpbmcgYHBgLCB3aGljaCByZXByZXNlbnRzIHRoZSBuZXR3b3JrIHBhY2tldCBidWZmZXIsIGFzIHRoZSBzb3VyY2UgKGBob2ApLCBhbmQgYCZhbXA7Y3AtJmd0O2luX3NlcWAgKHBhcnQgb2YgYSBob3N0LW9yZGVyIHN0cnVjdHVyZSkgYXMgdGhlIGRlc3RpbmF0aW9uIChgbm9gKS4gVGhlIHByb2JsZW0gaXMgdGhhdCBgcGAgaXMgdW5pbml0aWFsaXplZCBhdCB0aGlzIHBvaW50ISBXZSYjMzk7cmUgZXNzZW50aWFsbHkgY29weWluZyBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgZnJvbSBhIGJ1ZmZlciB0aGF0IGhhc24mIzM5O3QgYmVlbiBwb3B1bGF0ZWQgKmludG8qIGEgaG9zdC1vcmRlciBzZXF1ZW5jZSBudW1iZXIgc3RydWN0dXJlLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBtZW1vcnkgY29ycnVwdGlvbiBidWcgd2FpdGluZyB0byBoYXBwZW4uIFBsdXMsIHdlJiMzOTtyZSB3cml0aW5nIHRvIGBjcC0mZ3Q7aW5fc2VxYCB3aGVuIHdlIHNob3VsZG4mIzM5O3QgYmUuCgpUaGUgcGF0Y2ggY29ycmVjdHMgdGhpcy4gTm93LCB0aGUgY2FsbCBpcyBgaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7aW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApYC4gVGhpcyByZXZlcnNlcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4gYCZhbXA7Y3AtJmd0O2luX3NlcWAgaXMgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVyIHN0cnVjdHVyZSwgYW5kIGBwYCBpcyBub3cgdGhlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLiAgVGhpcyBtYWtlcyBzZW5zZSEgV2UmIzM5O3JlIGNvcnJlY3RseSAqcmVhZGluZyogdGhlIHNlcXVlbmNlIG51bWJlciBmcm9tIGEgaG9zdC1vcmRlciBzdHJ1Y3R1cmUgKGAmYW1wO2NwLSZndDtpbl9zZXFgKSBhbmQgd3JpdGluZyB0aGUgKmNvbnZlcnRlZCogbmV0d29yay1vcmRlciBzZXF1ZW5jZSBudW1iZXIgaW50byB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyIChgcGApLiBUaGlzIGlzIHByZWNpc2VseSB3aGF0IHdlIHdhbnQgZHVyaW5nIHN5bmNocm9uaXphdGlvbi4KClRoaXMgcmVwcmVzZW50cyBhIGZ1bmN0aW9uYWwgY29ycmVjdGlvbiBpbiBgaXBfdnNfc3luY19jb25uYCwgYW5kIGEgY3JpdGljYWwgb25lIGF0IHRoYXQuIEdpdmVuIHRoaXMgY2hhbmdlLCBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgcmVsZXZhbnQgSVBWUyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMgbm93LWNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUF9WUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTQtI1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICYjMzk7SVBWUyBTSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg3LVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMjg5LVx0aW50IFwmIzM0O0lQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICYjMzk7SVBWUyBNSCBzY2hlZHVsZXImIzM5O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzAyLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwNC1cdGludCBcJiMzNDtJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ1NjcKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqRGl2aW5nIGludG8gdGhlIElQVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBgSVBfVlNgIC0gdGhhdCYjMzk7cyB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoLiBJdCYjMzk7cyB0aGUgY2VudHJhbCBzd2l0Y2gsIHRoZSBtYWluIHN3aXRjaCB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIGVsc2UuIFRoYXQmIzM5O3MgdGhlIGJhc2VsaW5lLiBOb3csIHdoZXJlIGRvIHdlIGdvIGZyb20gaGVyZT8gTGV0JiMzOTtzIGRyaWxsIGRvd24gaW50byBhIG1vcmUgc3BlY2lmaWMgcGFyYW1ldGVyLiBUaGUgb2J2aW91cyBwbGFjZSB0byBsb29rIGlzIGBpcF92c19zeW5jX2Nvbm5gLiBJdCYjMzk7cyBlc3NlbnRpYWwgd2UgY2hlY2sgdGhlIHNldHRpbmdzIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNTgtXHQgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5Olx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cdGVsc2UgaWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFx1MDAyNlx1MDAyNiBjcC1cdTAwM2Vjb250cm9sKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjcwOlx0XHQvKiBpbmNyZW1lbnQgaXMgZG9uZSBpbnNpZGUgaXBfdnNfc3luY19jb25uIHRvbyAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjcxLVx0XHRhdG9taWNfaW5jKFx1MDAyNmNwLVx1MDAzZWNvbnRyb2wtXHUwMDNlaW5fcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE0OiAqICAgICAgICAgICAgICBJbiB2ZXIuMSBcJiMzNDtpcF92c19zeW5jX2Nvbm5fb3B0aW9uc1wmIzM0OyB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1LSAqICAgICAgICAgICAgICBWZXIuIDAgY2FuIGJlIHR1cm5lZCBvbiBieSBzeXNjdGwgLXcgbmV0LmlwdjQudnMuc3luY192ZXJzaW9uPTBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjktICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MS1cdF9fdThcdFx0XHRyZXNlcnZlZDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4OTpzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cdHN0cnVjdCBpcF92c19zZXEgICAgICAgIGluX3NlcTsgICAgICAgICAvKiBpbmNvbWluZyBzZXEuIHN0cnVjdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3My1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NS1cdHN0cnVjdCBpcF92c19zeW5jX3Y0XHR2NDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE5Nj1zdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSB7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDQtLyogVmVyc2lvbiAwIGRlZmluaXRpb24gb2YgcGFja2V0IHNpemVzICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTojZGVmaW5lIFNJTVBMRV9DT05OX1NJWkUgIChzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCkpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjQ1PXN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjQ5LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyNTA6XHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI1MS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjYwLVx0X191MTZcdFx0XHRzcGFyZTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjYxOlx0LyogaXBfdnNfc3luY19jb25uIGVudHJpZXMgc3RhcnQgaGVyZSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQ0MT1zdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDU4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0NTk6c3RhdGljIGludCBpcF92c19zeW5jX2Nvbm5fbmVlZGVkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXHRcdFx0XHQgIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOTpzdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQwLVx0XHRcdCAgICAgICBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0Mi1cdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0NC1cdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTQtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NTpcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1Ni1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg4LVx0bSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopIGJ1ZmYtXHUwMDNlbWVzZztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTg5Olx0cyA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICopIGJ1ZmYtXHUwMDNlaGVhZDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjAyLVx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjAzOlx0XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdCA9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNDpcdFx0XHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjA1LVx0XHRtZW1jcHkob3B0LCBcdTAwMjZjcC1cdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMS1cdHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm07XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYzMjpcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMzLVx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0MC1cdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDE6XHRcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Mi1cdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ3LXNsb29wOlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDg6XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDktXHRcdGdvdG8gY29udHJvbDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3Ny1cdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XHRcdGxlbiAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykgJiM0MzsgMjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc5LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MTg6XHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OC1cdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQ5Olx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTAtXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTc4Nz1zdGF0aWMgaW5saW5lIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3ODg6aXBfdnNfY29ubl9maWxsX3BhcmFtX3N5bmMoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGludCBhZiwgdW5pb24gaXBfdnNfc3luY19jb25uICpzYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzg5LVx0XHRcdCAgIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9ODQxPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2NfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm5fcGFyYW0gKnBhcmFtLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ1LVx0XHRcdCAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXQsIF9fdTMyIGZ3bWFyayxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6ODQ2Olx0XHRcdCAgICBzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKm9wdClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ3LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTk1OD1zdGF0aWMgdm9pZCBpcF92c19wcm9jZXNzX21lc3NhZ2VfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIGNvbnN0IGNoYXIgKmJ1ZmZlcixcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2MS1cdHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKm0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKWJ1ZmZlcjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYyOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYzOlx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk2NC1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NzYtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTc3Olx0XHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc4LVx0XHRmbGFncyA9IG50b2hzKHMtXHUwMDNlZmxhZ3MpIHwgSVBfVlNfQ09OTl9GX1NZTkM7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXHRcdGlmIChmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk4MTpcdFx0XHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXHUwMDI2c1sxXTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVx0XHRcdHAgJiM0Mzs9IEZVTExfQ09OTl9TSVpFO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTAyNz1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3NlcW9wdChfX3U4ICpwLCB1bnNpZ25lZCBpbnQgcGxlbixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAyOC1cdFx0XHRcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDI5Olx0XHRcdFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDMwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMTpcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqdG9wdDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzMzpcdHRvcHQgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzNC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAzNTpcdGlmIChwbGVuICE9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXHRcdElQX1ZTX0RCRygyLCBcJiMzNDtCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXG5cJiMzNDspO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTA2OT1zdGF0aWMgaW5saW5lIGludCBpcF92c19wcm9jX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqcCwgX191OCAqbXNnX2VuZClcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3MC17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwNzE6XHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgb3B0O1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcyOlx0dW5pb24gIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3My1cdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgwLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDgxOlx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKikgcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA4Mi1cbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEyMDM9c3RhdGljIHZvaWQgaXBfdnNfcHJvY2Vzc19tZXNzYWdlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpidWZmZXIsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVx0XHRmb3IgKGk9MDsgaVx1MDAzY25yX2Nvbm5zOyBpJiM0MzsmIzQzOykge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjMyOlx0XHRcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cdFx0XHR1bnNpZ25lZCBpbnQgc2l6ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDAtXHRcdFx0fVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjQxOlx0XHRcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI0Mi1cdFx0XHRzaXplID0gbnRvaHMocy1cdTAwM2V2NC52ZXJfc2l6ZSkgXHUwMDI2IFNWRVJfTUFTSztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3Mzg9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUwLVx0SVBfVlNfREJHKDcsIFwmIzM0OyVzKCk6IHBpZCAlZFxcblwmIzM0OywgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc1MTpcdElQX1ZTX0RCRyg3LCBcJiMzNDtFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXG5cJiMzNDssXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTI6XHRcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1My1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTQyNQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipCdWcgSHVudGluZzogSVBWUyBTeW5jIENvbm5lY3Rpb24gSXNzdWUqKgoKT2theSwgc28gdGhlIGlzc3VlIGlzIGRlZmluaXRlbHkgaW4gYGlwX3ZzX3N5bmNfY29ubmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRyaWdnZXJlZCB3aGVuIElQVlMgaXMgaW4gdGhlIE1BU1RFUiBzeW5jIHN0YXRlLCB3aGljaCwgb2YgY291cnNlLCBpcyBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeW5jIGRhZW1vbiBpcyBydW5uaW5nLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgcHJldmVudGluZyBwb3RlbnRpYWwgbWVtb3J5IGNvcnJ1cHRpb24g4oCTIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCB3cml0ZXMsIHdoaWNoIGNvdWxkIGxlYWQgdG8gYWxsIHNvcnRzIG9mIG5hc3R5IHNpZGUgZWZmZWN0cy4KCldhaXQgYSBzZWNvbmQuLi4gKmBodG9uX3NlcWAqIHdhcyB3cml0aW5nIGRpcmVjdGx5IHRvIGBjcC0mZ3Q7aW5fc2VxYCBhbmQgYGNwLSZndDtvdXRfc2VxYCBpbnN0ZWFkIG9mIHRoZSBidWZmZXIgKmBwYCo/IFRoYXQmIzM5O3MuLi4geWVhaCwgdGhhdCYjMzk7cyBiYWQuIFRoYXQgbWVhbnMgaXQgd2FzIGNvcnJ1cHRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXRzZWxmIOKAkyB0aG9zZSBzZXF1ZW5jZSBudW1iZXJzIOKAkyBhbmQgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQhIFNvLCBhIGNvbm5lY3Rpb24gY291bGQgYmUgbWVzc2VkIHVwIGJlY2F1c2Ugb2YgdGhlc2UgaW5jb3JyZWN0IHNlcXVlbmNlIG51bWJlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbWFrZSBzb21lIGNvbm5lY3Rpb25zIHVudXNhYmxlLgoKVGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBvdGVudGlhbCBmb3IgZXhwbG9pdGF0aW9uIGhlcmUgaXMgaGlnaCwgZXNwZWNpYWxseSBpZiB3ZSBjYW4gY3JhZnQgcGFja2V0cyB0aGF0IHRyaWdnZXIgdGhpcyBjb25kaXRpb24gcmVsaWFibHkuIExldCYjMzk7cyBtYWtlIHN1cmUgd2UgaGF2ZSBldmVyeXRoaW5nIHNldCB1cCBjb3JyZWN0bHkgZm9yIHRlc3RpbmcuCgpSaWdodCwgdGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYElQX1ZTYC4gQW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTmVlZCB0byBtYWtlIHN1cmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtaXNzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElQX1ZTX1NZTkMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJUFZTIENvbmZpZ3VyYXRpb24gQ2xhcmlmaWNhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIElQVlMgc2l0dWF0aW9uLCBhbmQgaXQgc2VlbXMgdGhlIGRvY3VtZW50YXRpb24gbWlnaHQgYmUgYSBsaXR0bGUgbWlzbGVhZGluZywgb3IgcGVyaGFwcyBvdXRkYXRlZC4gSSB3YXMgbG9va2luZyBmb3IgYSBzcGVjaWZpYyBgSVBfVlNfU1lOQ2AgY29uZmlndXJhdGlvbiBvcHRpb24sIGFuZCBpdCYjMzk7cyBqdXN0Li4uIG5vdCB0aGVyZS4gQWZ0ZXIgYSBsaXR0bGUgZGlnZ2luZywgaXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgYElQX1ZTX1NZTkNgIGlzbiYjMzk7dCBhIHN0YW5kYWxvbmUgb3B0aW9uLiBJdCYjMzk7cyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBidWlsdC1pbiBhbmQgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gYElQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC4KClRpbWUgdG8gY29uZmlybSB0aGlzIGh1bmNoIGJ5IGNoZWNraW5nIHRoZSBzb3VyY2UgY29kZSBpbiBgbmV0L25ldGZpbHRlci9pcHZzL01ha2VmaWxlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIgb24gaG93IHRoZSBzeW5jaHJvbml6YXRpb24gZmVhdHVyZXMgYXJlIGhhbmRsZWQgYW5kIGlmIHRoZXkgYXJlIGRlcGVuZGVudCBvbiBvdGhlciwgYnJvYWRlciBJUFZTIHNldHRpbmdzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIHRvIGVuc3VyZSBwcm9wZXIgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGUmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIHRoZSBJUFZTIG1vZHVsZXMgb24gdG9wIG9mIElQdjQuXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdCMgSVBWUyB0cmFuc3BvcnQgcHJvdG9jb2wgbG9hZCBiYWxhbmNpbmcgc3VwcG9ydFxuICAgNzpcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxuICAgODpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fVENQKSAmIzQzOz0gaXBfdnNfcHJvdG9fdGNwLm9cbiAgIDk6XHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3VkcC5vXG4gIDEwOlx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19BSF9FU1ApICYjNDM7PSBpcF92c19wcm90b19haF9lc3Aub1xuICAxMTpcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fU0NUUCkgJiM0Mzs9IGlwX3ZzX3Byb3RvX3NjdHAub1xuICAxMjpcdFxuICAxMzpcdGlwX3ZzLWV4dHJhX29ianMteSA6PVxuICAxNDpcdGlwX3ZzLWV4dHJhX29ianMtJChDT05GSUdfSVBfVlNfTkZDVCkgJiM0Mzs9IGlwX3ZzX25mY3Qub1xuICAxNTpcdFxuICAxNjpcdGlwX3ZzLW9ianMgOj1cdGlwX3ZzX2Nvbm4ubyBpcF92c19jb3JlLm8gaXBfdnNfY3RsLm8gaXBfdnNfc2NoZWQub1x0ICAgXFxcbiAgMTc6XHRcdFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1x0ICAgXHRcdCAgIFxcXG4gIDE4Olx0XHRcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1x0XHRcdCAgIFxcXG4gIDE5Olx0XHRcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2MjgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgSVBWUyBCdWlsZCBEZXBlbmRlbmN5KioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYGlwX3ZzX3N5bmMub2AgaGVyZS4gUmlnaHQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciB0aGF0IGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgdGhlbiBgaXBfdnNfc3luYy5vYCAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBUaGF0JiMzOTtzIGp1c3QgdGhlIHdheSBpdCB3b3Jrcy4gQnV0IG5vdyBJJiMzOTttIHN0YXJ0aW5nIHRvIHdvbmRlciBpZiBgSVBfVlNgIGl0c2VsZiBoYXMgYW55IGhpZGRlbiBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIHRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJUF9WU2AgYW5kIG90aGVyIG1vZHVsZXMgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHVwc3RyZWFtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkZXBlbmRzIG9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9NT1tZW51Y29uZmlnIElQX1ZTXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVx0dHJpc3RhdGUgXCYjMzQ7SVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NzpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgTkVURklMVEVSXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzo4Olx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctOS1cdGhlbHBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0yOT1jb25maWdcdElQX1ZTX0lQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVx0Ym9vbCBcJiMzNDtJUHY2IHN1cHBvcnQgZm9yIElQVlNcJiMzNDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMxOlx0ZGVwZW5kcyBvbiBJUFY2ID0geSB8fCBJUF9WUyA9IElQVjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY2XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1x0SVBfVlNfRlRQXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjItXHR0cmlzdGF0ZSBcJiMzNDtGVFAgcHJvdG9jb2wgaGVscGVyXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1RDUCBcdTAwMjZcdTAwMjYgTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9OQVQgXHUwMDI2XHUwMDI2IFxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMjQtXHRcdE5GX0NPTk5UUkFDS19GVFBcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zMzc9Y29uZmlnXHRJUF9WU19ORkNUXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMzgtXHRib29sIFwmIzM0O05ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMzk6XHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQwLVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM0NT1jb25maWdcdElQX1ZTX1BFX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVx0dHJpc3RhdGUgXCYjMzQ7U0lQIHBlcnNpc3RlbmNlIGVuZ2luZVwmIzM0O1xubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzQ3Olx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19VRFBcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLX1NJUFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTM1Mj1jb25maWcgR0NPVl9QUk9GSUxFX0lQVlNcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cdGJvb2wgXCYjMzQ7RW5hYmxlIEdDT1YgcHJvZmlsaW5nIGZvciBJUFZTXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozNTQ6XHRkZXBlbmRzIG9uIEdDT1ZfS0VSTkVMXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjExPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDg0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMTYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSVBfVlMgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYElQX1ZTYCBjb2RlLCBhbmQgaXQmIzM5O3MgY2xlYXIgdGhhdCBpdCByZWxpZXMgaGVhdmlseSBvbiBib3RoIGBJTkVUYCBhbmQgYE5FVEZJTFRFUmAuIE1ha2VzIHNlbnNlLiBCdXQgSSYjMzk7bSBnb2luZyB0byBjZW50ZXIgbXkgZm9jdXMgb24gYElQX1ZTYCBpdHNlbGYsIHNpbmNlIHRoYXQmIzM5O3MgdGhlIGNvcmUgb2YgdGhlIGNvbmZpZ3VyYXRpb24uCgpNeSBwcmltYXJ5IGNvbmNlcm4gcmlnaHQgbm93IGlzIHRoZSBgaXBfdnNfc3luY19jb25uYCBmdW5jdGlvbi4gSSByZW1lbWJlciBzZWVpbmcgc29tZSBtb2RpZmljYXRpb25zIHJlbGF0ZWQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY29uZmlybSBpZiBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYC4gQ2hlY2tpbmcgaXRzIHNpZ25hdHVyZSwgYHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKWAsIG5vcGUsIGl0JiMzOTtzIG5vdCBzdGF0aWMuIEdvb2QuIFRoYXQgZXhwYW5kcyBteSBzZWFyY2ggc29tZXdoYXQuCgpBcmUgdGhlcmUgb3RoZXIgZnVuY3Rpb24gbmFtZXMgaW4gcmVsYXRpb24gdG8gdGhpcyBjb2RlPyBJIHNlZSBgaHRvbl9zZXFgIGlzIGBzdGF0aWNgLiBBbmQgbWF5YmUgaW5saW5lZD8gT3IganVzdCBgc3RhdGljYD8gRG9lc24mIzM5O3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIGNvZGUsIHRob3VnaC4gSXQgc2VlbXMgYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLgoKTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcGlucG9pbnQgd2hlcmUgYGlwX3ZzX3N5bmNfY29ubmAgaXMgYWN0dWFsbHkgY2FsbGVkIGZyb20uIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgaXRzIHVzYWdlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIHRob3NlIG1vZGlmaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3N5bmNfY29ublxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNTgtXHQgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5Olx0ICogRm9yIE9ORV9QS1QgbGV0IGlwX3ZzX3N5bmNfY29ubigpIGRvIHRoZSBmaWx0ZXIgd29yay5cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cdCAqL1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cdGVsc2UgaWYgKChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFx1MDAyNlx1MDAyNiBjcC1cdTAwM2Vjb250cm9sKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjE5LVx0XHRcdHBrdHMgPSBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVx0fVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjUxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipJUFZTIFN5bmNocm9uaXphdGlvbiBDb250ZXh0KioKClJpZ2h0LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHRvIHRyYWNlIGhlcmUuIEkga25vdyBpdCYjMzk7cyBjYWxsZWQgZnJvbSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYC4gVGhlIGZpcnN0LCBgaXBfdnNfaW5faG9va2AsIGlzIHRoZSBuZXRmaWx0ZXIgaG9vayBmb3IgSVBWUywgc28gdGhhdCYjMzk7cyB3aGVyZSBpbmNvbWluZyBwYWNrZXQgcHJvY2Vzc2luZyBoYXBwZW5zLiBBbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYCBkZWFscyB3aXRoLCB3ZWxsLCBleHBpcmluZyBjb25uZWN0aW9ucy4gTWFrZXMgc2Vuc2UgdG8gd2FudCB0byBzeW5jIHRoZW0gYm90aC4gYGlwX3ZzX3N5bmNfY29ubmAgZmVlbHMgbGlrZSBhIGdvb2QsIGZvY3VzZWQgc3ltYm9sIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtLgoKQnV0IGhvbGQgb24sIGBpcF92c19zeW5jX2Nvbm5gIGlzbiYjMzk7dCAqYWx3YXlzKiBjYWxsZWQuIEl0JiMzOTtzIGNvbmRpdGlvbmFsbHkgZXhlY3V0ZWQgYmFzZWQgb24gdGhlIGBpcHZzLSZndDtzeW5jX3N0YXRlYCBhbmQgdGhlIGBJUF9WU19TVEFURV9NQVNURVJgIGJpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoaXMgYHN5bmNfc3RhdGVgIHZhcmlhYmxlIGdldHMgc2V0LiBXaGVyZSYjMzk7cyB0aGUgY29udHJvbCBwbGFuZSBmb3IgdGhpcz8gSSYjMzk7bSBndWVzc2luZyB0aGF0IHN0YXJ0aW5nIHRoZSBzeW5jaHJvbml6YXRpb24gZGFlbW9uIGlzIHRoZSBjcml0aWNhbCBmYWN0b3IuIFdoZXJlIGlzIHRoYXQgZGFlbW9uIGNvbmZpZ3VyZWQ/CgpJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24uIFNvLCBsZXQmIzM5O3MgZXhwbG9yZSBgaXBfdnNfZ2VubF9zZXRfY21kYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbGlrZWx5IGluIHRoZSBHZW5lcmljIE5ldGxpbmsgaW50ZXJmYWNlIGNvZGUgZm9yIElQVlMuIFRoYXQgc2hvdWxkIGJlIHdoZXJlIHRoZSBzdGF0ZSBiaXRzIGFyZSBzZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0lQX1ZTX1NUQVRFX01BU1RFUiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzMzpcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzNC1cdFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjYtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjc6XHRpZiAoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXHRcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTM3MzM9ZG9faXBfdnNfZ2V0X2N0bChzdHJ1Y3Qgc29jayAqc2ssIGludCBjbWQsIHZvaWQgX191c2VyICp1c2VyLCBpbnQgKmxlbilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2NC1cdFx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjU6XHRcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjM3NjY6XHRcdFx0ZFswXS5zdGF0ZSA9IElQX1ZTX1NUQVRFX01BU1RFUjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy0zNzY3LVx0XHRcdHN0cnNjcHkoZFswXS5tY2FzdF9pZm4sIGlwdnMtXHUwMDNlbWNmZy5tY2FzdF9pZm4sXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jPTQ0ODg9c3RhdGljIGludCBpcF92c19nZW5sX2R1bXBfZGFlbW9ucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk0LVx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jOjQ0OTU6XHRpZiAoKGlwdnMtXHUwMDNlc3luY19zdGF0ZSBcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSBcdTAwMjZcdTAwMjYgIWNiLVx1MDAzZWFyZ3NbMF0pIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDk2Olx0XHRpZiAoaXBfdnNfZ2VubF9kdW1wX2RhZW1vbihza2IsIElQX1ZTX1NUQVRFX01BU1RFUixcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk3LVx0XHRcdFx0XHQgICBcdTAwMjZpcHZzLVx1MDAzZW1jZmcsIGNiKSBcdTAwM2MgMClcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTM2MT1zdGF0aWMgaW5saW5lIHZvaWQgc2JfcXVldWVfdGFpbChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2Ni1cdHNwaW5fbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbG9jayk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjM2NzpcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzY4LVx0ICAgIG1zLVx1MDAzZXN5bmNfcXVldWVfbGVuIFx1MDAzYyBzeXNjdGxfc3luY19xbGVuX21heChpcHZzKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU4LVx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTk6XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTYwLVx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2MS1cdHNwaW5fbG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjYyOlx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2My1cdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2J1ZmZfbG9jayk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNzM4PWludCBzdGFydF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfc3luY19kYWVtb25fY2ZnICpjLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTgyNi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTgyNzpcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTgyOC1cdFx0cmVzdWx0ID0gLUVFWElTVDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDctXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDg6XHRpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfTUFTVEVSKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDktXHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODAtXHRcdHRpbmZvLVx1MDAzZWlkID0gaWQ7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4ODE6XHRcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODItXHRcdFx0cmVzdWx0ID0gbWFrZV9zZW5kX3NvY2soaXB2cywgaWQsIGRldiwgXHUwMDI2dGluZm8tXHUwMDNlc29jayk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODk3LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODk4Olx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg5OS1cdFx0aXB2cy1cdTAwM2VtYXN0ZXJfdGluZm8gPSB0aTtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5MjItXHR9XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5MjM6XHRpZiAoIShpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTkyNC1cdFx0a2ZyZWUoaXB2cy1cdTAwM2Vtcyk7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTYyLVx0bXV0ZXhfbG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbXV0ZXgpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTYzOlx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTY0LVx0XHRyZXRjID0gLUVTUkNIO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ni1cdFx0c3Bpbl9sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk3NzpcdFx0aXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNj0gfklQX1ZTX1NUQVRFX01BU1RFUjtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3OC1cdFx0c3Bpbl91bmxvY2soXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjA1MD12b2lkIGlwX3ZzX3N5bmNfbmV0X2NsZWFudXAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDU0Olx0cmV0YyA9IHN0b3Bfc3luY190aHJlYWQoaXB2cywgSVBfVlNfU1RBVEVfTUFTVEVSKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cdGlmIChyZXRjIFx1MDAyNlx1MDAyNiByZXRjICE9IC1FU1JDSClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMjMKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogNzYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIGhlcmUmIzM5O3Mgd2hhdCBJJiMzOTt2ZSBnb3QuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyB0aGUgZGFlbW9uLCBpbml0aWF0ZWQgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGlwX3ZzX2dlbmxfc2V0X2NtZGAgYW5kIHRoZSBgc3RhcnRfc3luY190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGZ1bGx5IGFjY2Vzc2libGUgZnJvbSB1c2Vyc3BhY2UgYnkgc2VuZGluZyBwYWNrZXRzLCB3aGljaCBpcyBhIGtleSBhdHRhY2sgdmVjdG9yLiBUaGUgY3JpdGljYWwgY29uZmlndXJhdGlvbiBlbGVtZW50IGhlcmUgaXMgYElQX1ZTYCAtIHRoYXQmIzM5O3MgdGhlIG1haW4gb25lIHRvIGZvY3VzIG9uLiBJJiMzOTtsbCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcyBhIHNhZmVndWFyZCwganVzdCBpbiBjYXNlLCBidXQgYElQX1ZTYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYC4uLiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFyZSByZXF1aXJlZC4gYE5GX0NPTk5UUkFDS2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkIHRvbywgZXZlbiBpZiBpdCYjMzk7cyBvcHRpb25hbC4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX2Nvbm5gIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24uIFRoZXJlJiMzOTtzIGFuIG9sZGVyIGZ1bmN0aW9uIGBpcF92c19zeW5jX2Nvbm5fdjBgLCBidXQgdGhlIHBhdGNoICpvbmx5KiBtb2RpZmllcyBgaXBfdnNfc3luY19jb25uYC4gU3BlY2lmaWNhbGx5LCBpdCYjMzk7cyBtb2RpZnlpbmcgdGhlIGNvZGUgaW4gYGlwX3ZzX3N5bmMuY2AuCgpJJiMzOTt2ZSBnb3QgdGhlIHBhdGNoIGluIGZyb250IG9mIG1lOgpgYGBjCkBAIC03NDcsOSAmIzQzOzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKQogCWlmIChjcC0mZ3Q7ZmxhZ3MgJmFtcDsgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7CiAJCSoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfU0VRX0RBVEE7CiAJCSoocCYjNDM7JiM0MzspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7Ci0JCWh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O2luX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O291dF9zZXEpOwomIzQzOwkJaHRvbl9zZXEoJmFtcDtjcC0mZ3Q7b3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTsKIAkJcCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpOwogCX0KIAkvKiBIYW5kbGUgcGUgZGF0YSAqLwpgYGAKClllcywgdGhhdCBjb25maXJtcyBpdDogaXQmIzM5O3MgYWxsIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBTbyBgRm9jdXNTeW1ib2xzYCBpcyBgaXBfdnNfc3luY19jb25uYCwgYW5kIHRoZSBwcmltYXJ5IGBFbmFibGVDb25maWdzYCBpcyBgSVBfVlNgLiBMZXQgbWUgdmVyaWZ5IHRoaXMgb25lIG1vcmUgdGltZS4KCll1cCwgYENPTkZJR19JUF9WU2AgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gIGBDT05GSUdfTkVURklMVEVSYCBhbmQgYENPTkZJR19JTkVUYCBhcmUgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMsIGJ1dCB0aGV5IGFyZSBzdGlsbCBpbXBvcnRhbnQuIEkmIzM5O2xsIGFkZCBgSVBfVlNgIHRvIEVuYWJsZUNvbmZpZ3MuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gSVBWUyBpcyBhIHNvZnR3YXJlIGxvYWQgYmFsYW5jZXIsIG5vdCBoYXJkd2FyZS1kZXBlbmRlbnQuIENvbmZpZ3VyYXRpb24gaGFwcGVucyBvdmVyIG5ldGxpbmssIGFuZCB0aGVuIHBhY2tldCB0cmlnZ2VycyBpdCwgbWFraW5nIGl0IGFjY2Vzc2libGUgZXZlbiBpbiB2aXJ0dWFsIG1hY2hpbmVzLgoKU28sIHRoZSByb290IG9mIHRoZSBpc3N1ZTogdGhpcyBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCBwb3RlbnRpYWwgaW5mb3JtYXRpb24gZGlzY2xvc3VyZSBpbiBgaXBfdnNfc3luY19jb25uYC4gVGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXFgIHdlcmUgc3dhcHBlZCwgbGVhZGluZyB0byB0aGUgY29ubmVjdGlvbiBzdGF0ZSwgc3BlY2lmaWNhbGx5IGBjcC0mZ3Q7aW5fc2VxYCBhbmQgYGNwLSZndDtvdXRfc2VxYCwgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciwgd2hpbGUgKmFsc28qIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBtb2RlIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIHJlYWwgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFuZCB0aGlzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgZm9jdXMgZm9yIGZ1enppbmcuCgpOb3cgSSBhbSBjYWxsaW5nIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUF9WUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwX3ZzX3N5bmNfY29ubiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCkgdG8gYmUgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIHBhY2tldCBidWZmZXIgZGF0YSwgd2hpbGUgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGlzIGZ1bmN0aW9uIGlzIHJlYWNoYWJsZSB3aGVuIHRoZSBJUFZTIHN5bmMgZGFlbW9uIGlzIHJ1bm5pbmcgaW4gTUFTVEVSIHN0YXRlIGFuZCBwcm9jZXNzaW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIGEgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBpbXBhY3QgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQX1ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXBfdnNfc3luY19jb25uJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcSgpYCB3ZXJlIHN3YXBwZWQuIEJlY2F1c2Ugb2YgdGhpcyBzd2FwLCB0aGUgY29kZSB3YXMgcmVhZGluZyBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciBwb2ludGVyIGBwYCBhbmQgd3JpdGluZyB0byB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUgYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcblxuVGhpcyBidWcgaGFzIHR3byBjb25zZXF1ZW5jZXM6XG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXG4yLiBJdCBsZWF2ZXMgdGhlIG5ldHdvcmsgYnVmZmVyIGBwYCB1bmluaXRpYWxpemVkIGF0IHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIHNlcXVlbmNlIG51bWJlcnMgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuLiBUaGlzIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGlzIHN1YnNlcXVlbnRseSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgdmlhIGBrZXJuZWxfc2VuZG1zZygpYCBpbiB0aGUgc3luYyB0aHJlYWQsIHJlc3VsdGluZyBpbiBhbiBpbmZvLWxlYWsgb2Yga2VybmVsIGhlYXAgbWVtb3J5IHRvIHRoZSBuZXR3b3JrLlxuXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJmYzUyMzMxMjQ3ZWUzNTg5MGVkMGVjYmRiMTkzNjAyNGZiNjc2YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jCmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYwpAQCAtNzQ3LDkgJiM0Mzs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cykKIAlpZiAoY3AtJmd0O2ZsYWdzICZhbXA7IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykgewogCQkqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBOwogCQkqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpOwotCQlodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSk7CiYjNDM7CQlodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CiAJCXAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTsKLQkJaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCAmYW1wO2NwLSZndDtvdXRfc2VxKTsKJiM0MzsJCWh0b25fc2VxKCZhbXA7Y3AtJmd0O291dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7CiAJCXAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTsKIAl9CiAJLyogSGFuZGxlIHBlIGRhdGEgKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMTkKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzaXR1YXRpb24sIHByZXNlbnRlZCBmcm9tIG15IHBlcnNwZWN0aXZlIGFzIGFuIGV4cGVydDoKCioqSW52ZXN0aWdhdGluZyBhIFBvdGVudGlhbCBJUFZTIFN5bmNocm9uaXphdGlvbiBCdWcqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBwYXRjaCBmbG9hdGluZyBhcm91bmQgaW4gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBNeSBzcGlkZXktc2Vuc2UgaXMgdGluZ2xpbmcgYmVjYXVzZSB0aGUgY2hhbmdlIGlzIGEgYml0IHVudXN1YWwuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgbGlrZSB0aGV5JiMzOTt2ZSBmbGlwcGVkIHRoZSBhcmd1bWVudHMgdG8gdGhlIGBodG9uX3NlcWAgZnVuY3Rpb24gY2FsbHMuIEl0JiMzOTtzIGdvaW5nIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgIHRvIGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YCBhbmQgdGhlIHNhbWUgY2hhbmdlIGlzIGRvbmUgZm9yIGBvdXRfc2VxYC4gVGhhdCYjMzk7cyBub3QgdGhlIHR5cGljYWwgd2F5IEkmIzM5O2QgZXhwZWN0IHRvIHNlZSB0aG9zZSBjYWxscyBjb25zdHJ1Y3RlZC4gVGhlIG9yZGVyIG9mIGFyZ3VtZW50cyBpbiB0aGVzZSBuZXR3b3JraW5nIGZ1bmN0aW9ucyBpcyBjcml0aWNhbCwgc28gdGhpcyBpbW1lZGlhdGVseSB3YXJyYW50cyBhIGRlZXBlciBsb29rLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGdldCB0aGUgZGVmaW5pdGlvbiBvZiBgaHRvbl9zZXFgIGFuZCB1bmRlcnN0YW5kICp3aHkqIHRoaXMgY2hhbmdlIHdhcyBtYWRlLCBhbmQgaWYgaXQmIzM5O3MgdGhlIGNvcnJlY3Rpb24gb2YgYSBidWcsIG9yIGFuIGludHJvZHVjdGlvbiBvZiBhIG5ldyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBgIGFuZCBgY3AtJmd0O2luX3NlcWAgcmVwcmVzZW50IGluIHRlcm1zIG9mIHRoZWlyIGludGVuZGVkIHJvbGVzIGluIHRoZSBkYXRhIHN0cnVjdHVyZSwgYW5kIGhvdyBgaHRvbl9zZXFgIGFjdHVhbGx5IHdvcmtzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodG9uX3NlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTM6I2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcdFx0LyogVXNlZCBmb3IgbnRvaF9zZXEgYW5kIGh0b25fc2VxICovXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjgzPXN0YXRpYyB2b2lkIG50b2hfc2VxKHN0cnVjdCBpcF92c19zZXEgKm5vLCBzdHJ1Y3QgaXBfdnNfc2VxICpobylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5NC0gKi9cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk1OnN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc0OS1cdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzUwOlx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1MS1cdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTc1My1cdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDAxCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjoKCioqQW5hbHl6aW5nIHRoZSBgaHRvbl9zZXFgIEltcGxlbWVudGF0aW9uKioKCkFscmlnaHQsIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGlzIGBodG9uX3NlcWAgaW1wbGVtZW50YXRpb24uIEkga25vdyB0aGUgZ2VuZXJhbCBpZGVhIC0gaXQmIzM5O3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiwgcHJvYmFibHkgZm9yIHNlcXVlbmNlIG51bWJlcnMgb3Igc29tZSBvdGhlciBpbnRlZ2VyIGRhdGEuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgY2FuIHByb2JhYmx5IGd1ZXNzIHRoZSBjb250ZXh0LCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhpcyBxdWlja2x5LCBidXQgbGV0JiMzOTtzIG1ha2Ugc3VyZS4gVGhlIGZpcnN0IHRoaW5nIEkgd2lsbCBkbyBpcyByZWFkIHRoZSBjb2RlIGRpcmVjdGx5LiBJJiMzOTtsbCBmb2N1cyBvbiBkYXRhIHR5cGVzIHVzZWQsIGJpdHdpc2Ugb3BlcmF0aW9ucyBlbXBsb3llZCwgYW5kIGFueSBwbGF0Zm9ybS1zcGVjaWZpYyBhc3BlY3RzLiBJJiMzOTtsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IGludGVnZXIgc2l6ZXMgKGUuZy4sIDE2LWJpdCwgMzItYml0LCA2NC1iaXQpLiBUaGUgZ29hbCBpcyBub3QganVzdCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIGJ1dCB0byBpbmZlciB0aGUgcmVhc29uaW5nIGJlaGluZCBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgYW5kIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEl0JiMzOTtzIGxpa2VseSBJJiMzOTtsbCBiZSBhYmxlIHRvIGNvbXBhcmUgaXQgdG8gb3RoZXIgaW1wbGVtZW50YXRpb25zIEkmIzM5O3ZlIHNlZW4sIHNvIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMuIElmIGl0IGlzIGludGVyZXN0aW5nLCBJIG1heSBiZSBpbmNsaW5lZCB0byBjb21wYXJlIGl0IHdpdGggb3RoZXIgaW1wbGVtZW50YXRpb25zIEkgaGF2ZSBjb21lIGFjcm9zcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyOTA6XHRcbiAyOTE6XHQvKlxuIDI5MjpcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxuIDI5MzpcdCAqIEZyb20gQWxpZ25lZCBob3N0IG9yZGVyIHRvIHVuYWxpZ25lZCBuZXR3b3JrIG9yZGVyXG4gMjk0Olx0ICovXG4gMjk1Olx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxuIDI5NjpcdHtcbiAyOTc6XHRcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2Vpbml0X3NlcSwgXHUwMDI2bm8tXHUwMDNlaW5pdF9zZXEpO1xuIDI5ODpcdFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWRlbHRhLCBcdTAwMjZuby1cdTAwM2VkZWx0YSk7XG4gMjk5Olx0XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlcHJldmlvdXNfZGVsdGEsIFx1MDAyNm5vLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbiAzMDA6XHR9XG4gMzAxOlx0XG4gMzAyOlx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbiAzMDM6XHRzYl9kZXF1ZXVlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXG4gMzA0Olx0e1xuIDMwNTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG4gMzA2Olx0XG4gMzA3Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuIDMwODpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bXMtXHUwMDNlc3luY19xdWV1ZSkpIHtcbiAzMDk6XHRcdFx0c2IgPSBOVUxMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKgoKT2theSwgc28gYGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylgIC0gcmlnaHQsIGhvc3Qgb3JkZXIgZmlyc3QsIG5ldHdvcmsgb3JkZXIgc2Vjb25kLiBUaGUgcGF0Y2ggc3dhcHBlZCB0aGUgYXJndW1lbnRzIGluIHRoZSBjYWxsIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgIHRvIGBodG9uX3NlcSgmYW1wO2NwLSZndDtpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaCBjYXJlZnVsbHkuCgpCZWZvcmUsIGBob2Agd2FzIGFzc2lnbmVkIGAoc3RydWN0IGlwX3ZzX3NlcSAqKXBgIGFuZCBgbm9gIHdhcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYC4gVGhhdCBtZWFucyBpdCB3YXMgcmVhZGluZyBzZXF1ZW5jZSBpbmZvcm1hdGlvbiAqZnJvbSogdW5pbml0aWFsaXplZCBtZW1vcnkgcG9pbnRlZCB0byBieSBgcGAsIGFuZCB3cml0aW5nIHRoZSBjb252ZXJ0ZWQgbmV0d29yay1vcmRlcmVkIHNlcXVlbmNlICp0byogYCZhbXA7Y3AtJmd0O2luX3NlcWAuIFRoaXMgaXMgYmFkLCB0aGUgbWVtb3J5IGF0IGBwYCBpcyBub3QgaW5pdGlhbGl6ZWQgd2hlbiByZWFkaW5nLgoKQnV0IHdhaXQsIGBwYCAqaXMqIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UmIzM5O3JlIGJ1aWxkaW5nISBUaGF0IGNvbnRleHQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgbG9va3MgbGlrZSBhIHNlcmlvdXMgYnVnLCBzbyBJIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGxvZ2ljIGluIGBpcF92c19zeW5jX2Nvbm5gIGp1c3QgdG8gYmUgc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA3MzA6XHRcdHMtXHUwMDNldjQudGltZW91dCA9IGh0b25sKGNwLVx1MDAzZXRpbWVvdXQgLyBIWik7XG4gNzMxOlx0XHRtLVx1MDAzZW5yX2Nvbm5zJiM0MzsmIzQzOztcbiA3MzI6XHRcbiA3MzM6XHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcbiA3MzQ6XHRcdGlmIChjcC1cdTAwM2VhZiA9PSBBRl9JTkVUNikge1xuIDczNTpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfdjYpO1xuIDczNjpcdFx0XHRzLVx1MDAzZXY2LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaW42O1xuIDczNzpcdFx0XHRzLVx1MDAzZXY2LnZhZGRyID0gY3AtXHUwMDNldmFkZHIuaW42O1xuIDczODpcdFx0XHRzLVx1MDAzZXY2LmRhZGRyID0gY3AtXHUwMDNlZGFkZHIuaW42O1xuIDczOTpcdFx0fSBlbHNlXG4gNzQwOlx0I2VuZGlmXG4gNzQxOlx0XHR7XG4gNzQyOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XHQvKiBvcHRpb25zIHB0ciAqL1xuIDc0MzpcdFx0XHRzLVx1MDAzZXY0LmNhZGRyID0gY3AtXHUwMDNlY2FkZHIuaXA7XG4gNzQ0Olx0XHRcdHMtXHUwMDNldjQudmFkZHIgPSBjcC1cdTAwM2V2YWRkci5pcDtcbiA3NDU6XHRcdFx0cy1cdTAwM2V2NC5kYWRkciA9IGNwLVx1MDAzZWRhZGRyLmlwO1xuIDc0NjpcdFx0fVxuIDc0NzpcdFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiA3NDg6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiA3NDk6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbiA3NTA6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIDc1MTpcdFx0XHRwICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gNzUyOlx0XHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzUzOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTQ6XHRcdH1cbiA3NTU6XHRcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4gNzU2Olx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4gXHUwMDI2XHUwMDI2IGNwLVx1MDAzZXBlX2RhdGEpIHtcbiA3NTc6XHRcdFx0KihwJiM0MzsmIzQzOykgPSBJUFZTX09QVF9QRV9EQVRBO1xuIDc1ODpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc1OTpcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGVfZGF0YSwgY3AtXHUwMDNlcGVfZGF0YV9sZW4pO1xuIDc2MDpcdFx0XHRwICYjNDM7PSBjcC1cdTAwM2VwZV9kYXRhX2xlbjtcbiA3NjE6XHRcdFx0aWYgKHBlX25hbWVfbGVuKSB7XG4gNzYyOlx0XHRcdFx0LyogQWRkIFBFX05BTUUgKi9cbiA3NjM6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX05BTUU7XG4gNzY0Olx0XHRcdFx0KihwJiM0MzsmIzQzOykgPSBwZV9uYW1lX2xlbjtcbiA3NjU6XHRcdFx0XHRtZW1jcHkocCwgY3AtXHUwMDNlcGUtXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xuIDc2NjpcdFx0XHRcdHAgJiM0Mzs9IHBlX25hbWVfbGVuO1xuIDc2NzpcdFx0XHR9XG4gNzY4Olx0XHR9XG4gNzY5Olx0XG4gNzcwOlx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbiA3NzE6XHRcbiA3NzI6XHRjb250cm9sOlxuIDc3MzpcdFx0Lyogc3luY2hyb25pemUgaXRzIGNvbnRyb2xsZXIgaWYgaXQgaGFzICovXG4gNzc0Olx0XHRjcCA9IGNwLVx1MDAzZWNvbnRyb2w7XG4gNzc1Olx0XHRpZiAoIWNwKVxuIDc3NjpcdFx0XHRyZXR1cm47XG4gNzc3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9URU1QTEFURSlcbiA3Nzg6XHRcdFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFx1MDAyNmNwLVx1MDAzZWluX3BrdHMpO1xuIDc3OTpcdFx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDE3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogNDA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQnl0ZSBTd2FwIFNlcXVlbmNlIEJ1ZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIHNwZWNpZmljYWxseSBhdCBob3cgdGhpcyBgaHRvbl9zZXFgIGZ1bmN0aW9uIGlzIHVzZWQsIGFuZCBJIHRoaW5rIEkmIzM5O3ZlIHNwb3R0ZWQgYSBidWcuIFJpZ2h0LCBzbyBgcGAgaXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UmIzM5O3JlIGNvbnN0cnVjdGluZy4gQmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgd2FzIGNhbGxpbmcgYGh0b25fc2VxYCBsaWtlIHRoaXM6IGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSlgLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQmIzM5O3MgcmVhZGluZyBmcm9tIHRoZSBidWZmZXIgcG9pbnRlZCB0byBieSBgcGAgYW5kIHdyaXRpbmcgdG8gYCZhbXA7Y3AtJmd0O2luX3NlcWAsIHdoaWNoIGlzIGEgZmllbGQgd2l0aGluIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS4KCkJ1dCBoYW5nIG9u4oCmIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGh0b25fc2VxYCByZWFsIHF1aWNrLiBBaCwgcmlnaHQuIGBodG9uX3NlcWAgKnJlYWRzKiBmcm9tIHRoZSAqZmlyc3QqIGFyZ3VtZW50IGFuZCAqd3JpdGVzKiB0byB0aGUgKnNlY29uZCogYXJndW1lbnQuIFNvLCB3aXRoIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSlgLCBpdCYjMzk7cyByZWFkaW5nIGZyb20gYHBgIOKAkyB3aGljaCBwb2ludHMgdG8gdGhlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIOKAkyBhbmQgd3JpdGluZyB0byBgJmFtcDtjcC0mZ3Q7aW5fc2VxYC4KCk9rYXksIEkgc2VlIHRoZSBwcm9ibGVtIG5vdy4gVGhpcyBpcyBhIGNsYXNzaWMgcmVhZC1mcm9tLXVuaW5pdGlhbGl6ZWQtbWVtb3J5LWFuZC1vdmVyd3JpdGUtYS1zdHJ1Y3R1cmUgYnVnLiBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlICpjb3JyZWN0KiBgY3AtJmd0O2luX3NlcWAgdmFsdWVzIHRvIHRoZSBidWZmZXIsIGl0JiMzOTtzIHRha2luZyB3aGF0ZXZlciBnYXJiYWdlIGlzIGN1cnJlbnRseSBpbiB0aGUgYnVmZmVyIGF0IHRoZSBhZGRyZXNzIGBwYCBhbmQgKm92ZXJ3cml0aW5nKiBgY3AtJmd0O2luX3NlcWAgd2l0aCB0aGF0IHVuaW5pdGlhbGl6ZWQgZGF0YSEgVGhhdCBtZWFucyB0aGF0IHRoZSBjb25uZWN0aW9uJiMzOTtzIHNlcXVlbmNlIG51bWJlciBpcyBiZWluZyBzZXQgdG8gcmFuZG9tIHZhbHVlcywgd2hpY2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byBjYXVzZSBwcm9ibGVtcy4KCldhaXQgYSBzZWNvbmQsIGlmIHRoZSBjb2RlIGlzIHJlYWRpbmcgZnJvbSBgcGAgKHdoaWNoIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5KSBhbmQgd3JpdGluZyB0byBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCwgdGhlbiB0aGUgY29udGVudHMgb2YgYGNwLSZndDtpbl9zZXFgIHdvdWxkIGJlIHNldCB0byB3aGF0ZXZlciByYW5kb20gZGF0YSBoYXBwZW5lZCB0byBiZSBhdCB0aGF0IG1lbW9yeSBsb2NhdGlvbiBpbiB0aGUgYnVmZmVyLCB3aGljaCBsZWFkcyB0byBhIHVzZS1hZnRlci1pbml0aWFsaXphdGlvbiBwcm9ibGVtIGFuZCBsaWtlbHkgZGF0YSBjb3JydXB0aW9uLgoKVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgcHJldHR5IGdvb2QgYXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCAqcmVhZHMqIGZyb20gYHBgLCB3aGljaCBpcyB1bmluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGZsYWdnZWQgaXQhIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZHVyaW5nIHRlc3RpbmcuCgpOb3cgSSBuZWVkIHRvIHRyYWNlIGJhY2sgdG8gd2hlcmUgdGhpcyBgcGAgY29tZXMgZnJvbSB0byBiZSBzdXJlIHRoZSBidWZmZXIgaXMsIGluIGZhY3QsIHVuaW5pdGlhbGl6ZWQuIFRoaXMgaXMgYSBwcmV0dHkgY3JpdGljYWwgZmxhdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjI5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjI5Olx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gNjMwOlx0e1xuIDYzMTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbTtcbiA2MzI6XHRcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcbiA2MzM6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XG4gNjM0Olx0XHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XG4gNjM1Olx0XHRpbnQgaWQ7XG4gNjM2Olx0XHRfX3U4ICpwO1xuIDYzNzpcdFx0dW5zaWduZWQgaW50IGxlbiwgcGVfbmFtZV9sZW4sIHBhZDtcbiA2Mzg6XHRcbiA2Mzk6XHRcdC8qIEhhbmRsZSBvbGQgdmVyc2lvbiBvZiB0aGUgcHJvdG9jb2wgKi9cbiA2NDA6XHRcdGlmIChzeXNjdGxfc3luY192ZXIoaXB2cykgPT0gMCkge1xuIDY0MTpcdFx0XHRpcF92c19zeW5jX2Nvbm5fdjAoaXB2cywgY3AsIHBrdHMpO1xuIDY0MjpcdFx0XHRyZXR1cm47XG4gNjQzOlx0XHR9XG4gNjQ0Olx0XHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXG4gNjQ1Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKVxuIDY0NjpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjQ3Olx0c2xvb3A6XG4gNjQ4Olx0XHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxuIDY0OTpcdFx0XHRnb3RvIGNvbnRyb2w7XG4gNjUwOlx0XG4gNjUxOlx0XHQvKiBTYW5pdHkgY2hlY2tzICovXG4gNjUyOlx0XHRwZV9uYW1lX2xlbiA9IDA7XG4gNjUzOlx0XHRpZiAoY3AtXHUwMDNlcGVfZGF0YV9sZW4pIHtcbiA2NTQ6XHRcdFx0aWYgKCFjcC1cdTAwM2VwZV9kYXRhIHx8ICFjcC1cdTAwM2VkZXN0KSB7XG4gNjU1Olx0XHRcdFx0SVBfVlNfRVJSX1JMKFwmIzM0O1NZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxuXCYjMzQ7KTtcbiA2NTY6XHRcdFx0XHRyZXR1cm47XG4gNjU3Olx0XHRcdH1cbiA2NTg6XHRcdFx0cGVfbmFtZV9sZW4gPSBzdHJubGVuKGNwLVx1MDAzZXBlLVx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xuIDY1OTpcdFx0fVxuIDY2MDpcdFxuIDY2MTpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2MjpcdFx0aWYgKCEoaXB2cy1cdTAwM2VzeW5jX3N0YXRlIFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XG4gNjYzOlx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDY2NDpcdFx0XHRyZXR1cm47XG4gNjY1Olx0XHR9XG4gNjY2Olx0XG4gNjY3Olx0XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbiA2Njg6XHRcdG1zID0gXHUwMDI2aXB2cy1cdTAwM2Vtc1tpZF07XG4gNjY5Olx0XG4gNjcwOlx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XG4gNjcxOlx0XHRpZiAoY3AtXHUwMDNlYWYgPT0gQUZfSU5FVDYpXG4gNjcyOlx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192Nik7XG4gNjczOlx0XHRlbHNlXG4gNjc0Olx0I2VuZGlmXG4gNjc1Olx0XHRcdGxlbiA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XG4gNjc2Olx0XG4gNjc3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcbiA2Nzg6XHRcdFx0bGVuICYjNDM7PSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSAmIzQzOyAyO1xuIDY3OTpcdFxuIDY4MDpcdFx0aWYgKGNwLVx1MDAzZXBlX2RhdGFfbGVuKVxuIDY4MTpcdFx0XHRsZW4gJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuICYjNDM7IDI7XHQvKiAmIzQzOyBQYXJhbSBoZHIgZmllbGQgKi9cbiA2ODI6XHRcdGlmIChwZV9uYW1lX2xlbilcbiA2ODM6XHRcdFx0bGVuICYjNDM7PSBwZV9uYW1lX2xlbiAmIzQzOyAyO1xuIDY4NDpcdFxuIDY4NTpcdFx0LyogY2hlY2sgaWYgdGhlcmUgaXMgYSBzcGFjZSBmb3IgdGhpcyBvbmUgICovXG4gNjg2Olx0XHRwYWQgPSAwO1xuIDY4NzpcdFx0YnVmZiA9IG1zLVx1MDAzZXN5bmNfYnVmZjtcbiA2ODg6XHRcdGlmIChidWZmKSB7XG4gNjg5Olx0XHRcdG0gPSBidWZmLVx1MDAzZW1lc2c7XG4gNjkwOlx0XHRcdHBhZCA9ICg0IC0gKHNpemVfdCkgYnVmZi1cdTAwM2VoZWFkKSBcdTAwMjYgMztcbiA2OTE6XHRcdFx0LyogU2VuZCBidWZmZXIgaWYgaXQgaXMgZm9yIHYwICovXG4gNjkyOlx0XHRcdGlmIChidWZmLVx1MDAzZWhlYWQgJiM0MzsgbGVuICYjNDM7IHBhZCBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgbS1cdTAwM2VyZXNlcnZlZCkge1xuIDY5MzpcdFx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xuIDY5NDpcdFx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4gNjk1Olx0XHRcdFx0YnVmZiA9IE5VTEw7XG4gNjk2Olx0XHRcdFx0cGFkID0gMDtcbiA2OTc6XHRcdFx0fVxuIDY5ODpcdFx0fVxuIDY5OTpcdFxuIDcwMDpcdFx0aWYgKCFidWZmKSB7XG4gNzAxOlx0XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XG4gNzAyOlx0XHRcdGlmICghYnVmZikge1xuIDcwMzpcdFx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDcwNDpcdFx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xuIDcwNTpcdFx0XHRcdHJldHVybjtcbiA3MDY6XHRcdFx0fVxuIDcwNzpcdFx0XHRtcy1cdTAwM2VzeW5jX2J1ZmYgPSBidWZmO1xuIDcwODpcdFx0XHRtID0gYnVmZi1cdTAwM2VtZXNnO1xuIDcwOTpcdFx0fVxuIDcxMDpcdFxuIDcxMTpcdFx0cCA9IGJ1ZmYtXHUwMDNlaGVhZDtcbiA3MTI6XHRcdGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOz0gcGFkICYjNDM7IGxlbjtcbiA3MTM6XHRcdG0tXHUwMDNlc2l6ZSA9IGh0b25zKG50b2hzKG0tXHUwMDNlc2l6ZSkgJiM0MzsgcGFkICYjNDM7IGxlbik7XG4gNzE0Olx0XHQvKiBBZGQgZXYuIHBhZGRpbmcgZnJvbSBwcmV2LiBzeW5jX2Nvbm4gKi9cbiA3MTU6XHRcdHdoaWxlIChwYWQtLSlcbiA3MTY6XHRcdFx0KihwJiM0MzsmIzQzOykgPSAwO1xuIDcxNzpcdFxuIDcxODpcdFx0cyA9ICh1bmlvbiBpcF92c19zeW5jX2Nvbm4gKilwO1xuIDcxOTpcdFxuIDcyMDpcdFx0LyogU2V0IG1lc3NhZ2UgdHlwZSAgXHUwMDI2IGNvcHkgbWVtYmVycyAqL1xuIDcyMTpcdFx0cy1cdTAwM2V2NC50eXBlID0gKGNwLVx1MDAzZWFmID09IEFGX0lORVQ2ID8gU1RZUEVfRl9JTkVUNiA6IDApO1xuIDcyMjpcdFx0cy1cdTAwM2V2NC52ZXJfc2l6ZSA9IGh0b25zKGxlbiBcdTAwMjYgU1ZFUl9NQVNLKTtcdC8qIFZlcnNpb24gMCAqL1xuIDcyMzpcdFx0cy1cdTAwM2V2NC5mbGFncyA9IGh0b25sKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiB+SVBfVlNfQ09OTl9GX0hBU0hFRCk7XG4gNzI0Olx0XHRzLVx1MDAzZXY0LnN0YXRlID0gaHRvbnMoY3AtXHUwMDNlc3RhdGUpO1xuIDcyNTpcdFx0cy1cdTAwM2V2NC5wcm90b2NvbCA9IGNwLVx1MDAzZXByb3RvY29sO1xuIDcyNjpcdFx0cy1cdTAwM2V2NC5jcG9ydCA9IGNwLVx1MDAzZWNwb3J0O1xuIDcyNzpcdFx0cy1cdTAwM2V2NC52cG9ydCA9IGNwLVx1MDAzZXZwb3J0O1xuIDcyODpcdFx0cy1cdTAwM2V2NC5kcG9ydCA9IGNwLVx1MDAzZWRwb3J0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjE3CgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyBgYnVmZmAgaXMgYWxsb2NhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aGluIHRoYXQgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXRzZWxmIHRvIGRldGVybWluZSB0aGUgYWxsb2NhdGlvbiBzdHJhdGVneSBhbmQgdW5kZXJzdGFuZCBpdHMgbnVhbmNlcy4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBhbGxvY2F0aW9uIHByb2Nlc3MgdGFrZXMgcGxhY2UsIHNvIHVuZGVyc3RhbmRpbmcgdGhpcyBmdW5jdGlvbiBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDAwOlx0XHRcdHNiID0gTlVMTDtcbiA0MDE6XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xuIDQwMjpcdFx0cmV0dXJuIHNiO1xuIDQwMzpcdH1cbiA0MDQ6XHRcbiA0MDU6XHRzdGF0aWMgaW5saW5lIGludFxuIDQwNjpcdHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG4gNDA3Olx0e1xuIDQwODpcdFx0cmV0dXJuICgobG9uZykgY3AgXHUwMDNlXHUwMDNlICgxICYjNDM7IGlsb2cyKHNpemVvZigqY3ApKSkpIFx1MDAyNiBpcHZzLVx1MDAzZXRocmVhZHNfbWFzaztcbiA0MDk6XHR9XG4gNDEwOlx0XG4gNDExOlx0LypcbiA0MTI6XHQgKiBDcmVhdGUgYSBuZXcgc3luYyBidWZmZXIgZm9yIFZlcnNpb24gMCBwcm90by5cbiA0MTM6XHQgKi9cbiA0MTQ6XHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxuIDQxNTpcdGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBsZW4pXG4gNDE2Olx0e1xuIDQxNzpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XG4gNDE4Olx0XHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICptZXNnO1xuIDQxOTpcdFxuIDQyMDpcdFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxuIDQyMTpcdFx0XHRyZXR1cm4gTlVMTDtcbiA0MjI6XHRcbiA0MjM6XHRcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwKSxcbiA0MjQ6XHRcdFx0ICAgIGlwdnMtXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XG4gNDI1Olx0XHRzYi1cdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIDQyNjpcdFx0aWYgKCFzYi1cdTAwM2VtZXNnKSB7XG4gNDI3Olx0XHRcdGtmcmVlKHNiKTtcbiA0Mjg6XHRcdFx0cmV0dXJuIE5VTEw7XG4gNDI5Olx0XHR9XG4gNDMwOlx0XHRtZXNnID0gKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjAgKilzYi1cdTAwM2VtZXNnO1xuIDQzMTpcdFx0bWVzZy1cdTAwM2Vucl9jb25ucyA9IDA7XG4gNDMyOlx0XHRtZXNnLVx1MDAzZXN5bmNpZCA9IGlwdnMtXHUwMDNlbWNmZy5zeW5jaWQ7XG4gNDMzOlx0XHRtZXNnLVx1MDAzZXNpemUgPSBodG9ucyhzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCkpO1xuIDQzNDpcdFx0c2ItXHUwMDNlaGVhZCA9ICh1bnNpZ25lZCBjaGFyICopbWVzZyAmIzQzOyBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCk7XG4gNDM1Olx0XHRzYi1cdTAwM2VlbmQgPSAodW5zaWduZWQgY2hhciAqKW1lc2cgJiM0MzsgbGVuO1xuIDQzNjpcdFx0c2ItXHUwMDNlZmlyc3R1c2UgPSBqaWZmaWVzO1xuIDQzNzpcdFx0cmV0dXJuIHNiO1xuIDQzODpcdH1cbiA0Mzk6XHRcbiA0NDA6XHQvKiBDaGVjayBpZiBjb25uZWN0aW9uIGlzIGNvbnRyb2xsZWQgYnkgcGVyc2lzdGVuY2UgKi9cbiA0NDE6XHRzdGF0aWMgaW5saW5lIGJvb2wgaW5fcGVyc2lzdGVuY2Uoc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxuIDQ0MjpcdHtcbiA0NDM6XHRcdGZvciAoY3AgPSBjcC1cdTAwM2Vjb250cm9sOyBjcDsgY3AgPSBjcC1cdTAwM2Vjb250cm9sKSB7XG4gNDQ0Olx0XHRcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxuIDQ0NTpcdFx0XHRcdHJldHVybiB0cnVlO1xuIDQ0NjpcdFx0fVxuIDQ0NzpcdFx0cmV0dXJuIGZhbHNlO1xuIDQ0ODpcdH1cbiA0NDk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODYzMAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBCdWZmZXJzKioKClJpZ2h0LCBoYW5nIG9uIGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIGhlcmU6IEkgd2FzIGxvb2tpbmcgYXQgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgLCBidXQgSSBnb3Qgc2lkZXRyYWNrZWQgYXNzdW1pbmcgaXQgd2FzIHRoZSBvbGRlciB2ZXJzaW9uLiBJIG5lZWQgdG8gYmUgbW9yZSBwcmVjaXNlLiBMZXQgbWUganVzdCBkb3VibGUgY2hlY2suIEkgbmVlZCB0byBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCwgbm90IHRoZSB2MCB2ZXJzaW9uLiBJIGhhdmUgdG8gZ28gZGlyZWN0bHkgdG8gdGhlIGZ1bmN0aW9uJiMzOTtzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gYW5hbHl6aW5nIHRoZSByaWdodCBjb2RlIHBhdGguIExldCBtZSBwaW5wb2ludCB0aGUgZXhhY3QgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozMjg6aXBfdnNfc3luY19idWZmX2NyZWF0ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzI5LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQxND1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo0MTU6aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU3OC1cdGlmICghYnVmZikge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XHRcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKGlwdnMsIGxlbik7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cdFx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cdFx0XHRzcGluX3VubG9ja19iaChcdTAwMjZpcHZzLVx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlx0XHRcdHByX2VycihcJiMzNDtpcF92c19zeW5jX2J1ZmZfY3JlYXRlIGZhaWxlZC5cXG5cJiMzNDspO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01ODMtXHRcdFx0cmV0dXJuO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVx0aWYgKCFidWZmKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwMTpcdFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoaXB2cywgbGVuKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAyLVx0XHRpZiAoIWJ1ZmYpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAzLVx0XHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmlwdnMtXHUwMDNlc3luY19idWZmX2xvY2spO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3MDQ6XHRcdFx0cHJfZXJyKFwmIzM0O2lwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcblwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcwNS1cdFx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1OTAKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBmdW5jdGlvbjoKCioqQW5hbHl6aW5nIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCoqCgpBbHJpZ2h0LCBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIElQIFZpcnR1YWwgU2VydmVyIChJUFZTKSBhbmQgaXRzIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc21zLCBJJiMzOTttIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgbG9hZCBiYWxhbmNlciBpbnN0YW5jZXMuIEkmIzM5O20gYXNzdW1pbmcgJiMzNDtzeW5jX2J1ZmYmIzM0OyByZWZlcnMgdG8gc29tZSBraW5kIG9mIGJ1ZmZlciBvciBzdHJ1Y3R1cmUgZGVzaWduZWQgdG8gaG9sZCBpbmZvcm1hdGlvbiB0aGF0IG5lZWRzIHRvIGJlIHN5bmNocm9uaXplZCwgbGlrZSBjb25uZWN0aW9uIHN0YXRlLCBzZXJ2aWNlIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIE5BVCBtYXBwaW5ncy4KCkkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbW1lZGlhdGVseS4gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBhbnkga2V5IGRhdGEgc3RydWN0dXJlcz8gUGVyaGFwcyBpdCYjMzk7cyBzZXR0aW5nIHVwIHNlbWFwaG9yZXMgb3IgbXV0ZXhlcyB0byBwcmV2ZW50IHJhY2UgY29uZGl0aW9ucyBkdXJpbmcgc3luY2hyb25pemF0aW9uPyBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgd2hhdCBkYXRhIGl0JiMzOTtzIHRha2luZyBhcyBpbnB1dCwgYW5kIHdoYXQgaXTigJlzIHJldHVybmluZy4gQSBzdWNjZXNzZnVsIGNyZWF0aW9uIGltcGxpZXMgYSB2YWxpZCBzeW5jaHJvbml6YXRpb24gYnVmZmVyIGlzIHJlYWR5IGZvciB1c2UsIGxpa2VseSBmb3IgdHJhbnNmZXJyaW5nIHN0YXRlIGluZm9ybWF0aW9uLiBBbiBlcnJvciByZXR1cm4gaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBzZXQgdXAgdGhlIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGltcHJvcGVyIGluaXRpYWxpemF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZXJyb3JzLgoKSSYjMzk7bSBhbHNvIGN1cmlvdXMgYWJvdXQgdGhlIG92ZXJhbGwgY29udGV4dC4gSXMgdGhpcyBjYWxsZWQgZHVyaW5nIHN0YXJ0dXA/IE9yIGlzIGl0IHBhcnQgb2YgYSBkeW5hbWljIHVwZGF0ZSBwcm9jZXNzPyBUaGlzIHdpbGwgaW5mbHVlbmNlIGhvdyByb2J1c3QgdGhlIGVycm9yIGhhbmRsaW5nIG5lZWRzIHRvIGJlLiBJcyB0aGlzIGEgY3JpdGljYWwgcGF0aCBvcGVyYXRpb24/IEkmIzM5O2xsIHByb2JhYmx5IGJlIGFzc2Vzc2luZyBob3cgaXTigJlzIHRpZWQgaW50byB0aGUgYmlnZ2VyIElQVlMgZnJhbWV3b3JrLCBob3cgaXQmIzM5O3MgZGVzaWduZWQgdG8gaW50ZXJmYWNlIHdpdGggdGhlIGNvcmUgY29ubmVjdGlvbiB0cmFja2luZyBhbmQgZm9yd2FyZGluZyBtZWNoYW5pc21zLgoKVGhlIGtleSBxdWVzdGlvbnMgaW4gbXkgaGVhZCBhcmU6CiogICBXaGF0IGRhdGEgaXMgZ2V0dGluZyBwYWNrYWdlZCBpbiB0aGlzIGJ1ZmZlcj8KKiAgIEhvdyBpcyB0aGlzIGJ1ZmZlciBpbnRlZ3JhdGVkIGludG8gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzPwoqICAgSG93IGlzIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyBidWZmZXIgbWFuYWdlZCwgaW5jbHVkaW5nIGl0cyBldmVudHVhbCBkZXN0cnVjdGlvbj8KKiAgIFdoYXQgYXJlIHRoZSBmYWlsdXJlIG1vZGVzLCBhbmQgYXJlIHRoZXkgaGFuZGxlZCBncmFjZWZ1bGx5PwoqICAgSXMgdGhpcyBmdW5jdGlvbiB0aHJlYWQtc2FmZT8KClRpbWUgdG8gZ2V0IGludG8gdGhlIGNvZGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzI1Olx0ICogQ3JlYXRlIGEgbmV3IHN5bmMgYnVmZmVyIGZvciBWZXJzaW9uIDEgcHJvdG8uXG4gMzI2Olx0ICovXG4gMzI3Olx0c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcbiAzMjg6XHRpcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxuIDMyOTpcdHtcbiAzMzA6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuIDMzMTpcdFxuIDMzMjpcdFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxuIDMzMzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAzMzQ6XHRcbiAzMzU6XHRcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICYjNDM7IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcbiAzMzY6XHRcdFx0ICAgIGlwdnMtXHUwMDNlbWNmZy5zeW5jX21heGxlbik7XG4gMzM3Olx0XHRzYi1cdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xuIDMzODpcdFx0aWYgKCFzYi1cdTAwM2VtZXNnKSB7XG4gMzM5Olx0XHRcdGtmcmVlKHNiKTtcbiAzNDA6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMzQxOlx0XHR9XG4gMzQyOlx0XHRzYi1cdTAwM2VtZXNnLVx1MDAzZXJlc2VydmVkID0gMDsgIC8qIG9sZCBucl9jb25ucyBpLmUuIG11c3QgYmUgemVybyBub3cgKi9cbiAzNDM6XHRcdHNiLVx1MDAzZW1lc2ctXHUwMDNldmVyc2lvbiA9IFNZTkNfUFJPVE9fVkVSO1xuIDM0NDpcdFx0c2ItXHUwMDNlbWVzZy1cdTAwM2VzeW5jaWQgPSBpcHZzLVx1MDAzZW1jZmcuc3luY2lkO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQzNgoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDI2NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBWdWxuZXJhYmlsaXR5IGluIENvbm5lY3Rpb24gU3luY2hyb25pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIGEgcG90ZW50aWFsIGlzc3VlIHdpdGggYHNiLSZndDttZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO2AuIEkga25vdyBga21hbGxvY2AgY2FuIGxlYXZlIHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoZW4gSSBzZWUgYHAgPSBidWZmLSZndDtoZWFkO2Ag4oCTIGBwYCBub3cgcG9pbnRzIHRvIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdyBoZXJlIGNvbWVzIHRoZSByZWFsIGtpY2tlcjogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTtgLiBUaGlzIGlzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGdvIG9mZi4KCkl0IGxvb2tzIGxpa2UgdGhlIGNvZGUgaXMgKnJlYWRpbmcqIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBwb2ludGVkIHRvIGJ5IGBwYCBhbmQgKndyaXRpbmcqIHRvIGAmYW1wO2NwLSZndDtpbl9zZXFgLiBIb2xkIG9uLi4uIHRoYXQgbWVhbnMgYGNwLSZndDtpbl9zZXFgLCB3aGljaCBpcyBhIG1lbWJlciBvZiBgc3RydWN0IGlwX3ZzX2Nvbm5gLCBpcyBiZWluZyBvdmVyd3JpdHRlbiB3aXRoIHRoZSBnYXJiYWdlIGZyb20gdGhlIGBrbWFsbG9jYCYjMzk7ZCBidWZmZXIhCgpBbmQgaWYgYGNwLSZndDtpbl9zZXFgIGlzIGJlaW5nIGNsb2JiZXJlZCB3aXRoIHRoaXMgdW5pbml0aWFsaXplZCBkYXRhLCB0aGVuIGFueSBmdXR1cmUgdXNlIG9mIGBjcC0mZ3Q7aW5fc2VxYCBpcyBnb2luZyB0byBiZSB1c2luZyB0aGF0IGdhcmJhZ2UuIElzIGBjcC0mZ3Q7aW5fc2VxYCB1c2VkIGxhdGVyPyBPaCB5ZXMsIGl0JiMzOTtzIGEgY3JpdGljYWwgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBzdGF0ZS4KCkJ1dCBoYW5nIG9uLCBpc24mIzM5O3QgdGhlIHdob2xlICpwb2ludCogb2YgYGlwX3ZzX3N5bmNfY29ubmAgdG8gc2VyaWFsaXplIHRoZSAqY3VycmVudCogc3RhdGUgb2YgYGNwLSZndDtpbl9zZXFgIGludG8gdGhlIGJ1ZmZlciBgcGA/IEl0JiMzOTtzIGEgc3luYyBtZXNzYWdlLCBpbnRlbmRlZCB0byBiZSBzZW50IGFjcm9zcyB0aGUgbmV0d29yayEgV2UmIzM5O3JlIHN1cHBvc2VkIHRvIGJlIHByZXBhcmluZyB0byB0cmFuc21pdCB0aGUgKmNvcnJlY3QqIGN1cnJlbnQgY29ubmVjdGlvbiBzZXF1ZW5jZSBudW1iZXIhCgpPa2F5LCBJIG5lZWQgdG8gZ28gYmFjayBhbmQgZG91YmxlLWNoZWNrIGBpcF92c19zeW5jX2Nvbm5gIG5vdy4gVGhpcyBsb29rcyBsaWtlIGEgc2VyaW91cyBidWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc0NywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzQ3Olx0XHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuIDc0ODpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIDc0OTpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuIDc1MDpcdFx0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gNzUxOlx0XHRcdHAgJiM0Mzs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiA3NTI6XHRcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiA3NTM6XHRcdFx0cCAmIzQzOz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIDc1NDpcdFx0fVxuIDc1NTpcdFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbiA3NTY6XHRcdGlmIChjcC1cdTAwM2VwZV9kYXRhX2xlbiBcdTAwMjZcdTAwMjYgY3AtXHUwMDNlcGVfZGF0YSkge1xuIDc1NzpcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IElQVlNfT1BUX1BFX0RBVEE7XG4gNzU4Olx0XHRcdCoocCYjNDM7JiM0MzspID0gY3AtXHUwMDNlcGVfZGF0YV9sZW47XG4gNzU5Olx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZV9kYXRhLCBjcC1cdTAwM2VwZV9kYXRhX2xlbik7XG4gNzYwOlx0XHRcdHAgJiM0Mzs9IGNwLVx1MDAzZXBlX2RhdGFfbGVuO1xuIDc2MTpcdFx0XHRpZiAocGVfbmFtZV9sZW4pIHtcbiA3NjI6XHRcdFx0XHQvKiBBZGQgUEVfTkFNRSAqL1xuIDc2MzpcdFx0XHRcdCoocCYjNDM7JiM0MzspID0gSVBWU19PUFRfUEVfTkFNRTtcbiA3NjQ6XHRcdFx0XHQqKHAmIzQzOyYjNDM7KSA9IHBlX25hbWVfbGVuO1xuIDc2NTpcdFx0XHRcdG1lbWNweShwLCBjcC1cdTAwM2VwZS1cdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XG4gNzY2Olx0XHRcdFx0cCAmIzQzOz0gcGVfbmFtZV9sZW47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTE5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgQ29ubmVjdGlvbiBTdGF0ZSBTZXJpYWxpemF0aW9uIEJ1ZyoqCgpPa2F5LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBzaGlwIHRoYXQgZGF0YSB0byB0aGUgYmFja3VwIGxvYWQgYmFsYW5jZXIuIFRoZSBwcm9ibGVtIGhlcmUgaXMgYSBwcmV0dHkgbmFzdHkgYnVnLCB0aG91Z2guIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgY29ubmVjdGlvbiYjMzk7cyBgY3AtJmd0O2luX3NlcWAgdmFsdWUgKmludG8qIHRoZSBidWZmZXIgYHBgLCBpdCYjMzk7cyBhY3R1YWxseSByZWFkaW5nICpmcm9tKiBgcGAgYW5kIG92ZXJ3cml0aW5nIGBjcC0mZ3Q7aW5fc2VxYCEgVGhhdCYjMzk7cy4uLmJhZC4KClRoaXMgaGFzIHR3byBpbW1lZGlhdGUgYW5kIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy4gRmlyc3QsIHRoZSBjcnVjaWFsIGBjcC0mZ3Q7aW5fc2VxYCBtZW1iZXIgaXMgZ2V0dGluZyBjbG9iYmVyZWQgd2l0aCB3aGF0ZXZlciBnYXJiYWdlIGhhcHBlbmVkIHRvIGJlIGluIHRoZSBga21hbGxvY2AtYWxsb2NhdGVkIG1lbW9yeS4gVGhhdCYjMzk7cyBhIGNvcnJ1cHRpb24gaXNzdWUsIHB1cmUgYW5kIHNpbXBsZS4KCkJ1dCB3b3JzZSwgdGhlIGJ1ZmZlciBgcGAgaXRzZWxmICpyZW1haW5zKiB1bmluaXRpYWxpemVkLiBTbywgd2UmIzM5O3JlIG5vdCBvbmx5IGxvc2luZyB0aGUgY29ycmVjdCB2YWx1ZSwgd2UmIzM5O3JlIGFsc28gbm90IHBvcHVsYXRpbmcgdGhlIGJ1ZmZlciB3aXRoIGl0LiBUaGUgYnVmZmVyLCBmdWxsIG9mIGdhcmJhZ2UsIGdldHMgc2VudCBvdmVyIHRoZSBuZXR3b3JrLgoKV2FpdCBhIHNlY29uZC4uLiAqdW5pbml0aWFsaXplZCBtZW1vcnkgb3ZlciB0aGUgbmV0d29yaz8qIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayEgV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdHJhbnNtaXR0aW5nIHNlbnNpdGl2ZSwgb3IgYXQgbGVhc3QgcG90ZW50aWFsbHkgc2Vuc2l0aXZlLCBpbmZvcm1hdGlvbiB0aGF0IGhhc24mIzM5O3QgYmVlbiBkZWxpYmVyYXRlbHkgcG9wdWxhdGVkLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaW5mby1sZWFrcywgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZmluZHMgaXRzIHdheSBhY3Jvc3MgbmV0d29yayBib3VuZGFyaWVzIG9yIGludG8gdXNlciBzcGFjZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gS01TQU4gc2hvdWxkIGZsYWcuIE5vdywgbGV0IG1lIHZlcmlmeSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgYnVmZmVyIGlzIHNlbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NiX3F1ZXVlX3RhaWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2MC1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzYxOnN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zNjItXHRcdFx0XHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcyLVx0XHRpZiAoYnVmZi1cdTAwM2VoZWFkICYjNDM7IGxlbiBcdTAwM2UgYnVmZi1cdTAwM2VlbmQgfHwgIW0tXHUwMDNlbnJfY29ubnMpIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTczOlx0XHRcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzQtXHRcdFx0bXMtXHUwMDNlc3luY19idWZmID0gTlVMTDtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5Mi1cdFx0aWYgKGJ1ZmYtXHUwMDNlaGVhZCAmIzQzOyBsZW4gJiM0MzsgcGFkIFx1MDAzZSBidWZmLVx1MDAzZWVuZCB8fCBtLVx1MDAzZXJlc2VydmVkKSB7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY5MzpcdFx0XHRzYl9xdWV1ZV90YWlsKGlwdnMsIG1zKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjk0LVx0XHRcdG1zLVx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTY5LVx0XHQvKlxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTcwOlx0XHQgKiBUaGUgbG9jayBzeW5jaHJvbml6ZXMgd2l0aCBzYl9xdWV1ZV90YWlsKCksIHNvIHRoYXQgd2UgZG9uJiMzOTt0XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NzEtXHRcdCAqIGFkZCBzeW5jIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVlLCB3aGVuIHdlIGFyZSBhbHJlYWR5IGluXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNzAwCgkJCQkJCQlvdXRwdXQ6IDQzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdGhlIHJlbGV2YW50IGZpZWxkOgoKKipEaXZpbmcgaW50byB0aGUgQnVmZmVyIFRyYW5zbWlzc2lvbiBQcm9jZXNzKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhpcyBidWZmZXIsIG9uY2UgaXQmIzM5O3MgYmVlbiBoYW5kbGVkIGJ5IHRoZSBzeXN0ZW0sIGFjdHVhbGx5IGdldHMgc2VudC4gTXkgZm9jdXMgaXMgb24gdGhlIGBzYl9xdWV1ZV90YWlsYCBmdW5jdGlvbiwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjaykgbGlrZWx5IGhhcHBlbnMuIEkmIzM5O20gdmlzdWFsaXppbmcgdGhlIGRhdGEgc3RydWN0dXJlcyBpbnZvbHZlZCwgdHJhY2luZyB0aGUgcG9pbnRlcnMsIGFuZCBmaWd1cmluZyBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBxdWV1ZSBtYW5hZ2VtZW50IGFuZCB0aGUgdW5kZXJseWluZyB0cmFuc21pc3Npb24gbWVjaGFuaXNtcy4gSSBuZWVkIHRvIGtub3c6IHdoYXQmIzM5O3MgdGhlIGFjdHVhbCBtZWNoYW5pc20gZm9yIHRoZSBidWZmZXIgdHJhbnNmZXI/IElzIGl0IGEgZGlyZWN0IERNQSwgYSBjb3B5LCBzb21lIGtpbmQgb2Ygc2hhcmVkIG1lbW9yeSByZWdpb24/IFdoYXTigJlzIHRoZSBsb2NraW5nIHN0cmF0ZWd5IHRvIGVuc3VyZSBkYXRhIGludGVncml0eSBkdXJpbmcgdHJhbnNtaXNzaW9uPyBVbmRlcnN0YW5kaW5nIGhvdyBgc2JfcXVldWVfdGFpbGAgaW50ZXJhY3RzIHdpdGggdGhlIGhhcmR3YXJlLCB0aGUgZHJpdmVycywgYW5kIHRoZSBwb3RlbnRpYWwgaW50ZXJydXB0IGhhbmRsaW5nIGlzIGNydWNpYWwgZm9yIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBhbmQgZGVidWdnaW5nIGRvd24gdGhlIGxpbmUuIEkmIzM5O20gcmVhbGx5IGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCBob3cgdGhhdCAmIzM5O3RhaWwmIzM5OyBvcGVyYXRpb24gYWN0dWFsbHkgZ2V0cyB0aGUgYnVmZmVyIG1vdmluZyBmcm9tIG1lbW9yeSBvbnRvIHRoZSB3aXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1NTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcbiAzNTY6XHR7XG4gMzU3Olx0XHRrZnJlZShzYi1cdTAwM2VtZXNnKTtcbiAzNTg6XHRcdGtmcmVlKHNiKTtcbiAzNTk6XHR9XG4gMzYwOlx0XG4gMzYxOlx0c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXG4gMzYyOlx0XHRcdFx0XHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxuIDM2MzpcdHtcbiAzNjQ6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiID0gbXMtXHUwMDNlc3luY19idWZmO1xuIDM2NTpcdFxuIDM2NjpcdFx0c3Bpbl9sb2NrKFx1MDAyNmlwdnMtXHUwMDNlc3luY19sb2NrKTtcbiAzNjc6XHRcdGlmIChpcHZzLVx1MDAzZXN5bmNfc3RhdGUgXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcdTAwMjZcdTAwMjZcbiAzNjg6XHRcdCAgICBtcy1cdTAwM2VzeW5jX3F1ZXVlX2xlbiBcdTAwM2Mgc3lzY3RsX3N5bmNfcWxlbl9tYXgoaXB2cykpIHtcbiAzNjk6XHRcdFx0aWYgKCFtcy1cdTAwM2VzeW5jX3F1ZXVlX2xlbilcbiAzNzA6XHRcdFx0XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2bXMtXHUwMDNlbWFzdGVyX3dha2V1cF93b3JrLFxuIDM3MTpcdFx0XHRcdFx0XHQgICAgICBtYXgoSVBWU19TWU5DX1NFTkRfREVMQVksIDEpKTtcbiAzNzI6XHRcdFx0bXMtXHUwMDNlc3luY19xdWV1ZV9sZW4mIzQzOyYjNDM7O1xuIDM3MzpcdFx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNnNiLVx1MDAzZWxpc3QsIFx1MDAyNm1zLVx1MDAzZXN5bmNfcXVldWUpO1xuIDM3NDpcdFx0XHRpZiAoKCYjNDM7JiM0Mzttcy1cdTAwM2VzeW5jX3F1ZXVlX2RlbGF5KSA9PSBJUFZTX1NZTkNfV0FLRVVQX1JBVEUpIHtcbiAzNzU6XHRcdFx0XHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXHUwMDNlbXMpO1xuIDM3NjpcdFxuIDM3NzpcdFx0XHRcdHdha2VfdXBfcHJvY2VzcyhpcHZzLVx1MDAzZW1hc3Rlcl90aW5mb1tpZF0udGFzayk7XG4gMzc4Olx0XHRcdH1cbiAzNzk6XHRcdH0gZWxzZVxuIDM4MDpcdFx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG4gMzgxOlx0XHRzcGluX3VubG9jayhcdTAwMjZpcHZzLVx1MDAzZXN5bmNfbG9jayk7XG4gMzgyOlx0fVxuIDM4MzpcdFxuIDM4NDpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTA4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6CgoqKkJ1ZmZlcmluZyBhbmQgVGhyZWFkIFN5bmNocm9uaXphdGlvbioqCgpBbHJpZ2h0LCBzbyB0aGUgZmlyc3Qgc3RlcCBpcyBjbGVhcjogd2UmIzM5O3JlIGVucXVldWluZyBkYXRhIHRvIGJlIHN5bmNocm9uaXplZCwgcGxhY2luZyBpdCBpbiB0aGUgYG1zLSZndDtzeW5jX3F1ZXVlYC4gVGhlIGltbWVkaWF0ZSBmb2xsb3ctdXAgaXMgdG8gZ2V0IHRoZSBtYXN0ZXIgdGhyZWFkIGludm9sdmVkLiBJdCYjMzk7cyB0aW1lIHRvIHdha2UgaXQgdXAuIE5vdywgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIHBpbnBvaW50IGV4YWN0bHkgd2hlcmUgdGhlIG1hc3RlciB0aHJlYWQgaXMgYW5kIHdoYXQgaXRzIGN1cnJlbnQgc3RhdGUgbWlnaHQgYmUuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbnRleHQgb2YgdGhlIG1hc3RlciB0aHJlYWQgaXMgY3JpdGljYWwgdG8gZmlndXJpbmcgb3V0IHRoZSBuZXh0IGFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWFzdGVyX3RocmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MDU9c3RhdGljIGlubGluZSBpbnRcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDA2OnNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQwNy17XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NjMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU2NDpcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NjUtXHRtcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbaWRdO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY2LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Njc6XHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY4LVx0bXMgPSBcdTAwMjZpcHZzLVx1MDAzZW1zW2lkXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2UqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBpcyBpbXBsZW1lbnRlZCwgb3Igd2hlcmUgaXTigJlzIGJlaW5nIGludm9rZWQuIExldCYjMzk7cyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgZWl0aGVyIGBtYXN0ZXJfdGluZm9gLCBvciBgc3luY190aHJlYWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIG1vc3QgbGlrZWx5IGNhbmRpZGF0ZXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIEkgaGF2ZS4gVXNpbmcgdGhlc2Ugc2VhcmNoIHRlcm1zIHNob3VsZCBoZWxwIG1lIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IGZpbGVzIG9yIGZ1bmN0aW9ucy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGJyb2FkZXIgc2VhcmNoIHRvIHNlZSBob3cgdGhlIHRlcm1zIGFyZSB1c2VkLCBhbmQgdGhlbiBuYXJyb3cgZG93biBteSBmb2N1cyBhcyBJIGFuYWx5emUgdGhlIHJlc3VsdHMuIFRoaXMgaXMgbXkgc3RhcnRpbmcgcG9pbnQgYW5kIHdoZXJlIEkmIzM5O20gZ29pbmcgdG8gZ2V0IHRoZSBtb3N0IG1pbGVhZ2Ugb3V0IG9mIGEgdGFyZ2V0ZWQgYXBwcm9hY2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmNfdGhyZWFkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3ND11bmlvbiBpcF92c19zeW5jX2Nvbm4ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTY6c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEge1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXHRzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjM4PW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjQ4LVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQ5OnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NTAte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjUxOlx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY1Mi1cdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXHUwMDNlaXB2cztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDAtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDE6c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMi17XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDM6XHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzA0LVx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cdTAwM2VpcHZzO1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczNy1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTczODppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczOS1cdFx0ICAgICAgaW50IHN0YXRlKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzQwLXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0MTpcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSA9IE5VTEwsICp0aW5mbztcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc0Mi1cdHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaztcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MzMtXHRcdG5hbWUgPSBcJiMzNDtpcHZzLW06JWQ6JWRcJiMzNDs7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4MzQ6XHRcdHRocmVhZGZuID0gc3luY190aHJlYWRfbWFzdGVyO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODM1LVx0fSBlbHNlIGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9CQUNLVVApIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDEtXHRcdG5hbWUgPSBcJiMzNDtpcHZzLWI6JWQ6JWRcJiMzNDs7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDI6XHRcdHRocmVhZGZuID0gc3luY190aHJlYWRfYmFja3VwO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODQzLVx0fSBlbHNlIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NjUtXHRyZXN1bHQgPSAtRU5PTUVNO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODY2Olx0dGkgPSBremFsbG9jX29ianMoc3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEsIGNvdW50KTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2Ny1cdGlmICghdGkpXG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUzLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU0OmludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NTUte1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU2Olx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpLCAqdGluZm87XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NTctXHRpbnQgaWQ7XG4tLVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yMDUwPXZvaWQgaXBfdnNfc3luY19uZXRfY2xlYW51cChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTQ6XHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDU1LVx0aWYgKHJldGMgXHUwMDI2XHUwMDI2IHJldGMgIT0gLUVTUkNIKVxuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1Ny1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1ODpcdHJldGMgPSBzdG9wX3N5bmNfdGhyZWFkKGlwdnMsIElQX1ZTX1NUQVRFX0JBQ0tVUCk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTktXHRpZiAocmV0YyBcdTAwMjZcdTAwMjYgcmV0YyAhPSAtRVNSQ0gpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NzE5CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ2hlY2tpbmcgYHN5bmNfdGhyZWFkX21hc3RlcmAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGlzIHN5c3RlbS4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZXhhbWluZSB0aGUgYHN5bmNfdGhyZWFkX21hc3RlcmAuIEl0JiMzOTtzIGEgY3JpdGljYWwgY29tcG9uZW50LCBhbmQgdW5kZXJzdGFuZGluZyBpdHMgc3RhdGUgaXMgZnVuZGFtZW50YWwgdG8gZGlhZ25vc2luZyBhbnkgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3VlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcy4gSXQmIzM5O3MgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yLCBzbyBhbnkgb2RkIGJlaGF2aW9yIHRoZXJlIGxpa2VseSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgY3VycmVudCBzdGF0ZSwgaG93IGl0JiMzOTtzIGJlaGF2aW5nIHJlbGF0aXZlIHRvIGV4cGVjdGF0aW9ucywgYW5kIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBzaWducyBvZiBjb250ZW50aW9uIG9yIGJsb2NrYWdlLiBUaGUgc3BlY2lmaWNzIGRlcGVuZCBvbiB0aGUgaW1wbGVtZW50YXRpb24sIG9mIGNvdXJzZSAtIGJ1dCB0aGF04oCZcyB0aGUgcGxhY2UgdG8gc3RhcnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2NDksCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY0OTpcdHN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXG4xNjUwOlx0e1xuMTY1MTpcdFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcbjE2NTI6XHRcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXHUwMDNlaXB2cztcbjE2NTM6XHRcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcyA9IFx1MDAyNmlwdnMtXHUwMDNlbXNbdGluZm8tXHUwMDNlaWRdO1xuMTY1NDpcdFx0c3RydWN0IHNvY2sgKnNrID0gdGluZm8tXHUwMDNlc29jay1cdTAwM2VzaztcbjE2NTU6XHRcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xuMTY1NjpcdFxuMTY1NzpcdFx0cHJfaW5mbyhcJiMzNDtzeW5jIHRocmVhZCBzdGFydGVkOiBzdGF0ZSA9IE1BU1RFUiwgbWNhc3RfaWZuID0gJXMsIFwmIzM0O1xuMTY1ODpcdFx0XHRcJiMzNDtzeW5jaWQgPSAlZCwgaWQgPSAlZFxcblwmIzM0OyxcbjE2NTk6XHRcdFx0aXB2cy1cdTAwM2VtY2ZnLm1jYXN0X2lmbiwgaXB2cy1cdTAwM2VtY2ZnLnN5bmNpZCwgdGluZm8tXHUwMDNlaWQpO1xuMTY2MDpcdFxuMTY2MTpcdFx0Zm9yICg7Oykge1xuMTY2MjpcdFx0XHRzYiA9IG5leHRfc3luY19idWZmKGlwdnMsIG1zKTtcbjE2NjM6XHRcdFx0aWYgKHVubGlrZWx5KGt0aHJlYWRfc2hvdWxkX3N0b3AoKSkpXG4xNjY0Olx0XHRcdFx0YnJlYWs7XG4xNjY1Olx0XHRcdGlmICghc2IpIHtcbjE2NjY6XHRcdFx0XHRzY2hlZHVsZV90aW1lb3V0KElQVlNfU1lOQ19DSEVDS19QRVJJT0QpO1xuMTY2NzpcdFx0XHRcdGNvbnRpbnVlO1xuMTY2ODpcdFx0XHR9XG4xNjY5Olx0XHRcdHdoaWxlIChpcF92c19zZW5kX3N5bmNfbXNnKHRpbmZvLVx1MDAzZXNvY2ssIHNiLVx1MDAzZW1lc2cpIFx1MDAzYyAwKSB7XG4xNjcwOlx0XHRcdFx0LyogKEFiKXVzZSBpbnRlcnJ1cHRpYmxlIHNsZWVwIHRvIGF2b2lkIGluY3JlYXNpbmdcbjE2NzE6XHRcdFx0XHQgKiB0aGUgbG9hZCBhdmcuXG4xNjcyOlx0XHRcdFx0ICovXG4xNjczOlx0XHRcdFx0X193YWl0X2V2ZW50X2ludGVycnVwdGlibGUoKnNrX3NsZWVwKHNrKSxcbjE2NzQ6XHRcdFx0XHRcdFx0XHQgICBzb2NrX3dyaXRlYWJsZShzaykgfHxcbjE2NzU6XHRcdFx0XHRcdFx0XHQgICBrdGhyZWFkX3Nob3VsZF9zdG9wKCkpO1xuMTY3NjpcdFx0XHRcdGlmICh1bmxpa2VseShrdGhyZWFkX3Nob3VsZF9zdG9wKCkpKVxuMTY3NzpcdFx0XHRcdFx0Z290byBkb25lO1xuMTY3ODpcdFx0XHR9XG4xNjc5Olx0XHRcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcbjE2ODA6XHRcdH1cbjE2ODE6XHRcbjE2ODI6XHRkb25lOlxuMTY4MzpcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMTY4NDpcdFx0aWYgKHNiKVxuMTY4NTpcdFx0XHRpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzYik7XG4xNjg2Olx0XG4xNjg3Olx0XHQvKiBjbGVhbiB1cCB0aGUgc3luY19idWZmIHF1ZXVlICovXG4xNjg4Olx0XHR3aGlsZSAoKHNiID0gc2JfZGVxdWV1ZShpcHZzLCBtcykpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU5MAoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDQ4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gdGhlIFN5bmNocm9uaXphdGlvbiBNZXNzYWdlIFRyYW5zbWlzc2lvbioqCgpSaWdodCwgc28gYGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tJmd0O3NvY2ssIHNiLSZndDttZXNnKWAgaXMgdGhlIGZ1bmN0aW9uIGNhbGwgb2YgaW50ZXJlc3QuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBzeXN0ZW0gaXMgdHJhbnNtaXR0aW5nIHRoYXQgc3luY2hyb25pemF0aW9uIG1lc3NhZ2UsIGBzYi0mZ3Q7bWVzZ2AsIG92ZXIgdGhlIHNvY2tldCwgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBgdGluZm8tJmd0O3NvY2tgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBgc2ItJmd0O21lc2dgIGlzIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW5kIGB0aW5mby0mZ3Q7c29ja2AgaXMgdGhlIHNvY2tldCBhc3NvY2lhdGVkIHdpdGggdGhlIHRyYWZmaWMgaW5mb3JtYXRpb24uCgpNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGlubmVyIHdvcmtpbmdzIG9mIGBpcF92c19zZW5kX3N5bmNfbXNnYC4gSSYjMzk7bGwgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQsIGhvdyBpdCBmb3JtYXRzIHRoZSBtZXNzYWdlLCBhbnkgbmVjZXNzYXJ5IGVycm9yIGNoZWNraW5nLCBhbmQgd2hhdCB1bmRlcmx5aW5nIG5ldHdvcmsgY2FsbHMgYXJlIHVzZWQgdG8gYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSBvdXQuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHRoZSB1c2Ugb2YgYHNlbmRtc2dgLCBwb3RlbnRpYWwgYnVmZmVyaW5nIG1lY2hhbmlzbXMsIGFuZCBhbnkgc3BlY2lmaWMgcHJvdG9jb2xzIGF0IHBsYXksIHNvIEkgY2FuIGVuc3VyZSB0aGUgc3luYyBtZXNzYWdlcyBhcmUgZGVsaXZlcmVkIGluIGEgc2FmZSBhbmQgcmVsaWFibGUgd2F5LiBJIG1pZ2h0IGFsc28gd2FudCB0byBsb29rIGZvciBhc3BlY3RzIG9mIGZsb3cgY29udHJvbCB0aGF0IHdvdWxkIGFmZmVjdCBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTYxMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjEwOlx0XHRsZW4gPSBzb2NrX3JlY3Ztc2coc29jaywgXHUwMDI2bXNnLCBNU0dfRE9OVFdBSVQpO1xuMTYxMTpcdFx0aWYgKGxlbiBcdTAwM2MgMClcbjE2MTI6XHRcdFx0cmV0dXJuIGxlbjtcbjE2MTM6XHRcbjE2MTQ6XHRcdHJldHVybiBsZW47XG4xNjE1Olx0fVxuMTYxNjpcdFxuMTYxNzpcdC8qIFdha2V1cCB0aGUgbWFzdGVyIHRocmVhZCBmb3Igc2VuZGluZyAqL1xuMTYxODpcdHN0YXRpYyB2b2lkIG1hc3Rlcl93YWtldXBfd29ya19oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbjE2MTk6XHR7XG4xNjIwOlx0XHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPVxuMTYyMTpcdFx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUsXG4xNjIyOlx0XHRcdFx0ICAgICBtYXN0ZXJfd2FrZXVwX3dvcmsud29yayk7XG4xNjIzOlx0XHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG1zLVx1MDAzZWlwdnM7XG4xNjI0Olx0XG4xNjI1Olx0XHRzcGluX2xvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuMTYyNjpcdFx0aWYgKG1zLVx1MDAzZXN5bmNfcXVldWVfbGVuIFx1MDAyNlx1MDAyNlxuMTYyNzpcdFx0ICAgIG1zLVx1MDAzZXN5bmNfcXVldWVfZGVsYXkgXHUwMDNjIElQVlNfU1lOQ19XQUtFVVBfUkFURSkge1xuMTYyODpcdFx0XHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXHUwMDNlbXMpO1xuMTYyOTpcdFxuMTYzMDpcdFx0XHRtcy1cdTAwM2VzeW5jX3F1ZXVlX2RlbGF5ID0gSVBWU19TWU5DX1dBS0VVUF9SQVRFO1xuMTYzMTpcdFx0XHR3YWtlX3VwX3Byb2Nlc3MoaXB2cy1cdTAwM2VtYXN0ZXJfdGluZm9baWRdLnRhc2spO1xuMTYzMjpcdFx0fVxuMTYzMzpcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2aXB2cy1cdTAwM2VzeW5jX2xvY2spO1xuMTYzNDpcdH1cbjE2MzU6XHRcbjE2MzY6XHQvKiBHZXQgbmV4dCBidWZmZXIgdG8gc2VuZCAqL1xuMTYzNzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXG4xNjM4Olx0bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcbjE2Mzk6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NDIxCgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNaXNzaW5nIEZ1bmN0aW9uIENhbGwgaW4gU25pcHBldCAtIExldCYjMzk7cyBJbnZlc3RpZ2F0ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBvZmYuIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIGNhbGwgdG8gYGlwX3ZzX3NlbmRfc3luY19tc2dgIGhlcmUsIGJ1dCBpdCYjMzk7cyBhYnNlbnQuIFRoYXQmIzM5O3MgYSByZWQgZmxhZy4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCBpbiB0aGUgY29udGV4dCBvZiBJUFZTIHN5bmNocm9uaXphdGlvbiwgc28gaXRzIGFic2VuY2Ugd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0JiMzOTtzIG5vdCBwcmVzZW50LiBJcyB0aGlzIHNuaXBwZXQgZnJvbSBhbiBpbmNvbXBsZXRlIG9yIHRydW5jYXRlZCBzZWN0aW9uPyBBbSBJIGxvb2tpbmcgYXQgdGhlIHdyb25nIHBhcnQgb2YgdGhlIGNvZGUgYmFzZT8gUGVyaGFwcyB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHBhdGggYXQgcGxheSBoZXJlLCBhbmQgdGhpcyBwYXJ0IG9mIHRoZSBzeW5jaHJvbml6YXRpb24gbG9naWMgaXMgZGlzYWJsZWQ/IEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzdGFydCBieSBzZWFyY2hpbmcgZm9yIGBpcF92c19zZW5kX3N5bmNfbXNnYCB3aXRoaW4gdGhlIGJyb2FkZXIgY29kZWJhc2UuIFRoYXQgc2hvdWxkIGdpdmUgbWUgc29tZSBpbml0aWFsIGNvbnRleHQgYW5kIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IHNlY3Rpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcF92c19zZW5kX3N5bmNfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1ODY9c3RhdGljIGludFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTg3OmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTg4LXtcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDk9c3RhdGljIGludCBzeW5jX3RocmVhZF9tYXN0ZXIodm9pZCAqZGF0YSlcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NjgtXHRcdH1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTY2OTpcdFx0d2hpbGUgKGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXHUwMDNlc29jaywgc2ItXHUwMDNlbWVzZykgXHUwMDNjIDApIHtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY3MC1cdFx0XHQvKiAoQWIpdXNlIGludGVycnVwdGlibGUgc2xlZXAgdG8gYXZvaWQgaW5jcmVhc2luZ1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk3MQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipBbmFseXppbmcgdGhlIGBpcF92c19zZW5kX3N5bmNfbXNnYCBGdW5jdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGlwX3ZzX3NlbmRfc3luY19tc2dgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgY29uc2lkZXIgaXRzIGNvbnRleHQgd2l0aGluIHRoZSBicm9hZGVyIElQVlMgYXJjaGl0ZWN0dXJlLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gc3luY2hyb25pemF0aW9uIG9mIGNvbm5lY3Rpb24gc3RhdGUgYmV0d2VlbiBkaXJlY3RvciBub2Rlcy4gR2l2ZW4gdGhlIG5hbWluZywgaXQmIzM5O3MgbGlrZWx5IHJlc3BvbnNpYmxlIGZvciBzZW5kaW5nIHRoZSBhY3R1YWwgbWVzc2FnZXMsIHByb2JhYmx5IG92ZXIgc29tZSBlc3RhYmxpc2hlZCBjb250cm9sIGNoYW5uZWwgb3IgbmV0d29yayBpbnRlcmZhY2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgY29uc3RpdHV0ZXMgYSAmIzM0O3N5bmMgbWVzc2FnZSYjMzQ7IGluIHRoaXMgaW1wbGVtZW50YXRpb24uIElzIGl0IGZ1bGwgc3RhdGUgdXBkYXRlcywgaW5jcmVtZW50YWwgY2hhbmdlcywgb3IgYSBjb21iaW5hdGlvbj8gQW5kIHRoZSBmb3JtYXQ6IHJhdyBkYXRhPyBQcm90b2NvbCBidWZmZXJzPyBTb21lIGN1c3RvbSBzdHJ1Y3R1cmU/IFRoYXQmIzM5O3MgdGhlIGZpcnN0IHNldCBvZiBxdWVzdGlvbnMgdGhhdCBwb3AgdXAuCgpJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIGRhdGEgc3RydWN0dXJlcyBpdCYjMzk7cyBvcGVyYXRpbmcgb24uIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgc2VyaWFsaXplZCBhbmQgdHJhbnNtaXR0ZWQ/IENvbm5lY3Rpb24gdHJhY2tpbmcgZW50cmllcz8gTkFUIG1hcHBpbmdzPyBMb2FkIGJhbGFuY2luZyBjb25maWd1cmF0aW9uPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduJiMzOTtzIHRyYWRlLW9mZnMgYmV0d2VlbiBzeW5jaHJvbml6YXRpb24gc3BlZWQsIGJhbmR3aWR0aCB1c2FnZSwgYW5kIGNvbnNpc3RlbmN5IGd1YXJhbnRlZXMuIFRoZW4gSeKAmWxsIHdhbnQgdG8gdHJhY2UgYmFjayBhbmQgbG9vayBhdCB0aGUgY29udHJvbCBmbG93IGluIHRoZSBjYWxsaW5nIHJvdXRpbmVzLiBXaGVyZSBpcyB0aGlzIGZ1bmN0aW9uIGNhbGxlZCBmcm9tPyBVbmRlciB3aGF0IGNvbmRpdGlvbnM/IEhvdyBpcyBpdCB0cmlnZ2VyZWQsIHBlcmhhcHMgYnkgY29ubmVjdGlvbiBjcmVhdGlvbiwgdGVybWluYXRpb24sIG9yIHBlcmlvZGljIHN0YXR1cyB1cGRhdGVzPwoKSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHBvdGVudGlhbCBib3R0bGVuZWNrcyB0b28uIElzIHRoZXJlIGFueSBsb2NraW5nIGludm9sdmVkIHRoYXQgY291bGQgbGVhZCB0byBjb250ZW50aW9uIGR1cmluZyBoaWdoIGNvbm5lY3Rpb24gcmF0ZXM/IFdoYXQgYWJvdXQgdGhlIHVuZGVybHlpbmcgbmV0d29yayB0cmFuc3BvcnQ/IERvZXMgaXQgdXNlIFVEUCBmb3Igc3BlZWQgb3IgVENQIGZvciByZWxpYWJpbGl0eT8gQW5kIGlmIFRDUCwgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBmbG93IGNvbnRyb2wgYW5kIGNvbmdlc3Rpb24/IE15IHJhZGFyIGlzIHVwIGZvciBwb3RlbnRpYWwgYXJlYXMgd2hlcmUgc3luY2hyb25pemF0aW9uIGxhdGVuY3kgY291bGQgYmVjb21lIGEgcGVyZm9ybWFuY2UgbGltaXRpbmcgZmFjdG9yLiBGaW5hbGx5LCBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uPyBXaGF0IGhhcHBlbnMgaWYgYSBzeW5jIG1lc3NhZ2UgZmFpbHMgdG8gcmVhY2ggYSBkaXJlY3Rvcj8gSXMgdGhlcmUgYSByZXRyeSBtZWNoYW5pc20/IEFyZSB0aGVyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIG9yIGR1cGxpY2F0ZSBtZXNzYWdlcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1ODYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTU4NjpcdHN0YXRpYyBpbnRcbjE1ODc6XHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbjE1ODg6XHR7XG4xNTg5Olx0XHRpbnQgbXNpemU7XG4xNTkwOlx0XHRpbnQgcmV0O1xuMTU5MTpcdFxuMTU5MjpcdFx0bXNpemUgPSBudG9ocyhtc2ctXHUwMDNlc2l6ZSk7XG4xNTkzOlx0XG4xNTk0Olx0XHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XG4xNTk1Olx0XHRpZiAocmV0IFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcbjE1OTY6XHRcdFx0cmV0dXJuIHJldDtcbjE1OTc6XHRcdHByX2VycihcJiMzNDtpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xuMTU5ODpcdFx0cmV0dXJuIDA7XG4xNTk5Olx0fVxuMTYwMDpcdFxuMTYwMTpcdHN0YXRpYyBpbnRcbjE2MDI6XHRpcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcbjE2MDM6XHR7XG4xNjA0Olx0XHRzdHJ1Y3QgbXNnaGRyXHRcdG1zZyA9IHtOVUxMLH07XG4xNjA1Olx0XHRzdHJ1Y3Qga3ZlY1x0XHRpb3YgPSB7YnVmZmVyLCBidWZsZW59O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODc3NQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVlcCBEaXZlIG9uIGBpcF92c19zZW5kX2FzeW5jYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgemVybyBpbiBvbiBgaXBfdnNfc2VuZF9hc3luY2AuIFRoaXMgZnVuY3Rpb24uIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaXQgYmVjYXVzZSBpdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UgZGVhbCB3aXRoIGFzeW5jaHJvbm91cyBzZW5kcyBpbiBJUFZTLCBhbmQgaXQgaGFzIGltcGxpY2F0aW9ucyBmb3IgYSBidW5jaCBvZiBvcHRpbWl6YXRpb25zLiBGcm9tIG15IHVuZGVyc3RhbmRpbmcsIGl0JiMzOTtzIGNyaXRpY2FsIHRvIHBlcmZvcm1hbmNlLiBJdCYjMzk7cyBub3QganVzdCBhIHNpbXBsZSBzZW5kIG9wZXJhdGlvbi4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB0aGUgY29tcGxleGl0aWVzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcsIE5BVGluZywgYW5kIHBvdGVudGlhbGx5IHJldHJhbnNtaXNzaW9ucyBoZXJlLiBJdCBuZWVkcyB0byBiZSBjYXJlZnVsbHkgb3JjaGVzdHJhdGVkIHRvIGF2b2lkIGJvdHRsZW5lY2tzLgoKTXkgZmlyc3QgdGhvdWdodCB3b3VsZCBiZSB3aGV0aGVyIHRoZSBpbXBsZW1lbnRhdGlvbiBpcyBsb2NrIGZyZWUuIElmIHRoZXJlIGFyZSBhbnkgbG9ja3MsIGFyZSB0aGV5IGZpbmUtZ3JhaW5lZCBvciBjb2Fyc2U/IFRoYXQgaGFzIGEgaHVnZSBpbXBhY3Qgb24gc2NhbGFiaWxpdHkuIEFyZSB3ZSB1c2luZyBwZXItY29ubmVjdGlvbiBsb2NrcywgcGVyLWRlc3RpbmF0aW9uIGxvY2tzLCBvciBzb21ldGhpbmcgbW9yZSBnbG9iYWw/CgpUaGVuLCB0aGUgc2Vjb25kIHF1ZXN0aW9uIHdvdWxkIGJlIG9uIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycy4gSXMgdGhlcmUgZWZmaWNpZW50IERNQSB1c2FnZT8gQXJlIHdlIG9wdGltaXppbmcgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGludGVyZmFjZSBjYXJkIHR5cGVzIGFuZCB0aGVpciBjYXBhYmlsaXRpZXM/IEFyZSB3ZSBtYWtpbmcgdGhlIG1vc3Qgb2Ygc2NhdHRlci9nYXRoZXIgSS9PIGlmIHBvc3NpYmxlPyBBcmUgd2UgZ2V0dGluZyBnb29kIHBlcmZvcm1hbmNlIGZyb20gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyIC0gVENQIG9yIFVEUD8KClRoZXJlJiMzOTtzIGFsc28gZXJyb3IgaGFuZGxpbmcgdG8gY29uc2lkZXIuIEhvdyBkb2VzIGBpcF92c19zZW5kX2FzeW5jYCBkZWFsIHdpdGggY29ubmVjdGlvbiBmYWlsdXJlcywgcm91dGluZyBpc3N1ZXMsIG9yIGNvbmdlc3Rpb24/IEFyZSB3ZSByZXRyeWluZyBpbnRlbGxpZ2VudGx5LCBhbmQgZG8gdGhlIHJldHJ5IG1lY2hhbmlzbXMgcHJvcGVybHkgaGFuZGxlIGRpZmZlcmVudCBmYWlsdXJlIG1vZGVzIGFuZCBuZXR3b3JrIGNvbmRpdGlvbnM/CgpVbHRpbWF0ZWx5LCB0aGlzIHdob2xlIHRoaW5nIG5lZWRzIHRvIGJlIG5vbi1ibG9ja2luZy4gVGhlIGNoYWxsZW5nZSB0aGVyZSBpcyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24mIzM5O3QgYmxvY2sgdGhlIElQVlMgY29yZS4gU28gd2UgbmVlZCB0byBtYW5hZ2UgdGhlIG91dHN0YW5kaW5nIHJlcXVlc3RzLCByZXNwb25zZXMsIGFuZCBlcnJvcnMgdmVyeSBjYXJlZnVsbHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwX3ZzX3NlbmRfYXN5bmMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU3MT1zdGF0aWMgaW50XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1NzI6aXBfdnNfc2VuZF9hc3luYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBsZW5ndGgpXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzMte1xuLS1cbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU4Nz1pcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbi0tXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTMtXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1OTQ6XHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTUtXHRpZiAocmV0IFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5Ni1cdFx0cmV0dXJuIHJldDtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NzpcdHByX2VycihcJiMzNDtpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxuXCYjMzQ7LCByZXQpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTk4LVx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NTQ4CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkRpdmluZyBpbnRvIGBpcF92c19zZW5kX2FzeW5jYCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBUaGUgbWVudGFsIHRpY2sgSSBnZXQgd2hlbiBJIHNlZSBgaXBfdnNfc2VuZF9hc3luY2AgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGxpa2VseSBwbGF5cyBhIHByZXR0eSBjcml0aWNhbCByb2xlIGluIHRoZSBoZWFydCBvZiBJUFZTLCBhbmQgYnkgZXh0ZW5zaW9uLCBsb2FkIGJhbGFuY2luZyB3aXRoaW4gdGhlIExpbnV4IGtlcm5lbC4gR2l2ZW4gdGhlICYjMzQ7YXN5bmMmIzM0OyBpbiB0aGUgbmFtZSwgbXkgaW1tZWRpYXRlIGFzc3VtcHRpb24gaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG5vbi1ibG9ja2luZyBzZW5kIG9wZXJhdGlvbnMuIFRoaXMgaGludHMgdG93YXJkcyBvcHRpbWl6YXRpb25zIGZvciBuZXR3b3JrIHBlcmZvcm1hbmNlLCBhbGxvd2luZyB0aGUga2VybmVsIHRvIGhhbmRsZSBtdWx0aXBsZSBjb25uZWN0aW9ucyBjb25jdXJyZW50bHkgd2l0aG91dCBnZXR0aW5nIGJvZ2dlZCBkb3duIHdhaXRpbmcgb24gaW5kaXZpZHVhbCBuZXR3b3JrIHdyaXRlcy4gSXQgc3VnZ2VzdHMgc29waGlzdGljYXRlZCBzY2hlZHVsaW5nIG9yIHF1ZXVlaW5nIG1lY2hhbmlzbXMgYXJlIGF0IHBsYXkuCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgY29udGV4dDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgb3BlcmF0aW5nIG9uPyBTcGVjaWZpY2FsbHksIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgY29ubmVjdGlvbiB0cmFja2luZyBlbnRyaWVzLCB2aXJ0dWFsIHNlcnZpY2UgZGVmaW5pdGlvbnMsIHJlYWwgc2VydmVyIGluZm9ybWF0aW9uLCBhbmQgdGhlIHNvY2tldCBzdHJ1Y3R1cmVzIGludm9sdmVkLiBUaGUgJiMzNDtzZW5kJiMzNDsgcGFydCBpbXBsaWVzIGl0JiMzOTtzIHRoZSBwb2ludCB3aGVyZSB0cmFmZmljIGlzIGFjdHVhbGx5IHB1c2hlZCBvdXQsIHNvIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHRoZSBwYWNrZXQgaXMgZm9ybWF0dGVkIChsaWtlbHkgdXNpbmcgc2tfYnVmZnMsIG9idmlvdXNseSksIGhvdyBpdCYjMzk7cyByb3V0ZWQgKEw0IG9yIEw3IGRlY2lzaW9ucywgZGVwZW5kaW5nIG9uIHRoZSBWUyBjb25maWd1cmF0aW9uKSwgYW5kIGFueSBwb3RlbnRpYWwgdHJhbnNmb3JtYXRpb25zIChsaWtlIE5BVCBvciB0dW5uZWxpbmcpLgoKVGhlbiwgb2YgY291cnNlLCB0aGUgYXN5bmNocm9ub3VzIG5hdHVyZSByYWlzZXMgcXVlc3Rpb25zOiBJcyBpdCB1c2luZyBjb21wbGV0aW9uIGNhbGxiYWNrcz8gV29ya3F1ZXVlcz8gTkFQSS1saWtlIHN0cnVjdHVyZXM/IEhvdyBpcyBlcnJvciBoYW5kbGluZyBtYW5hZ2VkIGluIHRoaXMgYXN5bmNocm9ub3VzIGVudmlyb25tZW50PyBBcmUgdGhlcmUgY29uc2lkZXJhdGlvbnMgZm9yIGJhY2twcmVzc3VyZSBhbmQgZmxvdyBjb250cm9sLCBnaXZlbiB0aGUgcG90ZW50aWFsIGZvciByYXBpZCBidXJzdHMgb2YgdHJhZmZpYz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgZWxlZ2FudCB1c2Ugb2YgdGVjaG5pcXVlcyB0byBrZWVwIHRoZSBrZXJuZWwgZnJvbSBnZXR0aW5nIHN0YXJ2ZWQgb2YgcmVzb3VyY2VzLCBhbmQgYXZvaWRpbmcgYmxvY2tpbmcgaXNzdWVzLiBUaGUgbW9yZSBJIGNvbnNpZGVyIGl0LCB0aGUgbW9yZSBJIGJlY29tZSBpbnZlc3RlZCBpbiB0aGlzIHRvcGljLiBJIHdhbnQgdG8gdW5jb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gU28gbGV0JiMzOTtzIGNyYWNrIG9wZW4gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IHdlJiMzOTtyZSByZWFsbHkgZGVhbGluZyB3aXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTcxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1NzE6XHRzdGF0aWMgaW50XG4xNTcyOlx0aXBfdnNfc2VuZF9hc3luYyhzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBjb25zdCBjaGFyICpidWZmZXIsIGNvbnN0IHNpemVfdCBsZW5ndGgpXG4xNTczOlx0e1xuMTU3NDpcdFx0c3RydWN0IG1zZ2hkclx0bXNnID0gey5tc2dfZmxhZ3MgPSBNU0dfRE9OVFdBSVR8TVNHX05PU0lHTkFMfTtcbjE1NzU6XHRcdHN0cnVjdCBrdmVjXHRpb3Y7XG4xNTc2Olx0XHRpbnRcdFx0bGVuO1xuMTU3NzpcdFxuMTU3ODpcdFx0aW92Lmlvdl9iYXNlICAgICA9ICh2b2lkICopYnVmZmVyO1xuMTU3OTpcdFx0aW92Lmlvdl9sZW4gICAgICA9IGxlbmd0aDtcbjE1ODA6XHRcbjE1ODE6XHRcdGxlbiA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssIFx1MDAyNm1zZywgXHUwMDI2aW92LCAxLCAoc2l6ZV90KShsZW5ndGgpKTtcbjE1ODI6XHRcbjE1ODM6XHRcdHJldHVybiBsZW47XG4xNTg0Olx0fVxuMTU4NTpcdFxuMTU4NjpcdHN0YXRpYyBpbnRcbjE1ODc6XHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcbjE1ODg6XHR7XG4xNTg5Olx0XHRpbnQgbXNpemU7XG4xNTkwOlx0XHRpbnQgcmV0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMwNQoJCQkJCQkJb3V0cHV0OiA0MwoJCQkJCQkJdGhvdWdodHM6IDQwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFVuaW5pdGlhbGl6ZWQgSGVhcCBNZW1vcnkgTGVhayoqCgpPa2F5LCBzbyBga2VybmVsX3NlbmRtc2dgIGlzIGRlZmluaXRlbHkgdGhlIGZ1bmN0aW9uIHNlbmRpbmcgdGhlIGJ1ZmZlciBvdmVyIHRoZSBzb2NrZXQuIEkgc2VlIGl0IG5vdy4gVGhlIHByb2JsZW0gc3RlbXMgZnJvbSB0aGUgYGttYWxsb2NgIGFsbG9jYXRpb24uIEJlY2F1c2Ugb2YgdGhlIGBodG9uX3NlcWAgYnVnLCB0aGUgYnVmZmVyIHdhc24mIzM5O3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgY3AtJmd0O2luX3NlcWAgYW5kIGBjcC0mZ3Q7b3V0X3NlcWAgYmVmb3JlIGJlaW5nIHNlbnQuIEluc3RlYWQsIGl0IHdhcyByZWFkaW5nIGRpcmVjdGx5IGZyb20gdGhlIHVuaW5pdGlhbGl6ZWQgYGttYWxsb2NgIGJ1ZmZlciBhbmQgc2VuZGluZyB0aG9zZSBieXRlcyBvdmVyIHRoZSBuZXR3b3JrLiBDbGFzc2ljIGluZm8tbGVhayEgVGhpcyBpcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIEtNU0FOIGlzIGRlc2lnbmVkIHRvIGNhdGNoLiBLQVNBTiB3b3VsZG4mIzM5O3QgdHJpZ2dlciBoZXJlLCBiZWNhdXNlIHdlIGFyZW4mIzM5O3QgZGVhbGluZyB3aXRoIG91dC1vZi1ib3VuZHMgYWNjZXNzIG9yIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnM7IGl0JiMzOTtzIHNpbXBseSByZWFkaW5nIGFuZCBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LgoKTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGFyZ3VtZW50cy4KCmBgYGMKc3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKQp7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O2luaXRfc2VxLCAmYW1wO25vLSZndDtpbml0X3NlcSk7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O2RlbHRhLCAmYW1wO25vLSZndDtkZWx0YSk7CglwdXRfdW5hbGlnbmVkX2JlMzIoaG8tJmd0O3ByZXZpb3VzX2RlbHRhLCAmYW1wO25vLSZndDtwcmV2aW91c19kZWx0YSk7Cn0KYGBgCgpOb3csIGJlZm9yZSB0aGUgcGF0Y2gsIHRoZSBjb2RlIGxvb2tlZCBsaWtlIHRoaXM6CgpgYGBjCmh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgJmFtcDtjcC0mZ3Q7aW5fc2VxKTsKYGBgCgpPa2F5LCBzbyBgaG9gIGlzIGBwYCwgdGhlIHVuaW5pdGlhbGl6ZWQgYnVmZmVyLCBhbmQgYG5vYCBpcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuIFRoZSBgcHV0X3VuYWxpZ25lZF9iZTMyYCBmdW5jdGlvbiByZWFkcyBmcm9tIGBob2AgKHdoaWNoIGlzIHRoZSB1bmluaXRpYWxpemVkIGBwYCkgYW5kIHdyaXRlcyB0byBgbm9gICh3aGljaCBpcyBgJmFtcDtjcC0mZ3Q7aW5fc2VxYCkuCgpUaGVyZWZvcmUsIGl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gYHBgLiBCdXQgd2FpdC4uLiBkb2VzIHRoYXQgbWVhbiB0aGUgcmVhZCBoYXBwZW5zIGZyb20gYHBgPyBUaW1lIHRvIGludmVzdGlnYXRlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgcHV0X3VuYWxpZ25lZF9iZTMyYC4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8xMSAwMToxNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwdXRfdW5hbGlnbmVkX2JlMzImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Mjk1PXN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6Mjk3Olx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWluaXRfc2VxLCBcdTAwMjZuby1cdTAwM2Vpbml0X3NlcSk7XG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI5ODpcdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VkZWx0YSwgXHUwMDI2bm8tXHUwMDNlZGVsdGEpO1xubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTk6XHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlcHJldmlvdXNfZGVsdGEsIFx1MDAyNm5vLVx1MDAzZXByZXZpb3VzX2RlbHRhKTtcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzAwLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMTEgMDE6MTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE0MjcKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbnRlcm5hbCBDb2RlIFJldmlldyoqCgpPa2F5LCBzbyBgcHV0X3VuYWxpZ25lZF9iZTMyKHZhbCwgcHRyKWAgaXMgZGVzaWduZWQgdG8gd3JpdGUgYSAzMi1iaXQgdmFsdWUsIGB2YWxgLCB0byB0aGUgbWVtb3J5IGFkZHJlc3MgcG9pbnRlZCB0byBieSBgcHRyYCBpbiBiaWctZW5kaWFuIGJ5dGUgb3JkZXIuIE1ha2VzIHNlbnNlLCB0aGF0JiMzOTtzIHN0YW5kYXJkIGZvciB0aGlzIGtpbmQgb2YgdGhpbmcuIEJ1dCB3YWl0IGEgbWludXRlLi4uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhhdCBhcmd1bWVudCBvcmRlci4gSSBrbm93IEkmIzM5O3ZlIHNlZW4gc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzICpzZWNvbmQqIGFuZCB0aGUgcG9pbnRlciAqZmlyc3QqLiBJJiMzOTtkIGJldHRlciBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgdGhpbmcsIGJ1dCBlYXN5IHRvIG1lc3MgdXAgaWYgeW91IGFyZSB3b3JraW5nIHF1aWNrbHkuIExldCYjMzk7cyBjb25maXJtOiBmaXJzdCB0aGUgdmFsdWUsIHRoZW4gdGhlIHBvaW50ZXIgdG8gd3JpdGUgaXQgdG8uIEkgbmVlZCB0byBjb21taXQgdGhpcyB0byBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1dF91bmFsaWduZWRfYmUzMiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdW5hbGlnbmVkLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC91bmFsaWduZWQuaD02MT1zdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9iZTE2KHUxNiB2YWwsIHZvaWQgKnApXG4tLVxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02NS1cbmluY2x1ZGUvbGludXgvdW5hbGlnbmVkLmg6NjY6c3RhdGljIGlubGluZSB2b2lkIHB1dF91bmFsaWduZWRfYmUzMih1MzIgdmFsLCB2b2lkICpwKVxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNzk0CgkJCQkJCQlvdXRwdXQ6IDI5NwoJCQkJCQkJdGhvdWdodHM6IDg5OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEluZm8tTGVhayBCdWcgd2l0aCBLTVNBTioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIHRyYWNpbmcgdGhyb3VnaCB0aGlzIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBmdW5jdGlvbiBgcHV0X3VuYWxpZ25lZF9iZTMyYCBpcyBrZXkgaGVyZS4gIEkgc2VlIGl0JiMzOTtzIGJlaW5nIHVzZWQgdG8gd3JpdGUgYSB2YWx1ZSBmcm9tIG9uZSBtZW1vcnkgbG9jYXRpb24gdG8gYW5vdGhlci4gU3BlY2lmaWNhbGx5LCB0aGUgcHJvYmxlbWF0aWMgbGluZSBpczogIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsICZhbXA7Y3AtJmd0O2luX3NlcSk7YC4gIEVzc2VudGlhbGx5LCB0aGlzIG1lYW5zIHRoYXQgZGF0YSBvcmlnaW5hbGx5IGludGVuZGVkIHRvIGJlIHdyaXR0ZW4gaW50byB0aGUgYHBgIGJ1ZmZlciwgaXMgYmVpbmcgcmVhZCBmcm9tIGBwYCBhbmQgd3JpdHRlbiB0byBgY3AtJmd0O2luX3NlcWAgaW5zdGVhZC4KCkhlcmUmIzM5O3MgdGhlIGNyaXRpY2FsIHBvaW50OiB0aGUgYHBgIGJ1ZmZlciwgd2hpY2ggcG9pbnRzIHRvIGBzYi0mZ3Q7aGVhZGAgZnJvbSB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYnV0ICpub3QqIGluaXRpYWxpemVkLiAgU28sIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcmF3LCB1bmluaXRpYWxpemVkIGtlcm5lbCBtZW1vcnkuIFRoZSBpbnRlbnQgd2FzIHRvIHdyaXRlIHNlcXVlbmNlIG51bWJlcnMgaW50byB0aGlzIGBwYCBidWZmZXIsIHdoaWNoIGlzIGludGVuZGVkIHRvIGJlIHNlbnQgb3ZlciB0aGUgbmV0d29yay4gIEJlY2F1c2Ugb2YgdGhlIHN3YXAsIHdlJiMzOTtyZSAqcmVhZGluZyogZnJvbSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCAqd3JpdGluZyogdGhlIHJlYWQgdmFsdWUgdG8gdGhlIGBjcC0mZ3Q7aW5fc2VxYCBzdHJ1Y3R1cmUuICBUaGlzIHRoZW4gbGVhdmVzIHRoZSBgcGAgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuCgpOb3csIGJlY2F1c2UgYHBgIGlzICpub3QqIGluaXRpYWxpemVkIGF0IHRoZSBgaHRvbl9zZXFgIGNhbGwsIGFuZCB0aGUgbWVtb3J5IGFjY2VzcyBpcyBzd2FwcGVkLCBpdCBsZWFkcyB0byB0d28gY3JpdGljYWwgcHJvYmxlbXM6CgoxLiAgV2UmIzM5O3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQmIzM5O3MgZGVzaWduZWQgdG8gdHJhY2sgdGhlIHVzZSBvZiB1bmluaXRpYWxpemVkIGRhdGEuCjIuICBUaGUgdW5pbml0aWFsaXplZCBgcGAgYnVmZmVyLCBjb250YWluaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLCBpcyB0aGVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBieSBga2VybmVsX3NlbmRtc2dgLiBUaGlzIGlzIGEgdGV4dGJvb2sgaW5mby1sZWFrOiBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBrZXJuZWwmIzM5O3MgYm91bmRhcnkuIEtNU0FOIHdpbGwgYWxzbyBhYnNvbHV0ZWx5IGZsYWcgdGhpcyBhcyBhIGNyaXRpY2FsIHByb2JsZW0gYmVjYXVzZSBpdCYjMzk7cyBhIGRpcmVjdCBsZWFrLgoKSSBjaGVja2VkIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIFllcywgYHNiLSZndDttZXNnYCBpcyBhbGxvY2F0ZWQsIGJ1dCBpdHMgY29udGVudCAqYWZ0ZXIqIHRoZSBpbml0aWFsIGBzdHJ1Y3QgaXBfdnNfc3luY19tZXNnYCBpcyBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQuIFRoYXQgY29uZmlybXMgbXkgc3VzcGljaW9ucy4gV2UmIzM5O3JlIHJlYWRpbmcgKmZyb20qIGBwYCB3aGljaCBpcyBhbGxvY2F0ZWQgYnkgYGttYWxsb2NgIGFuZCB0aGVuIGNvcGllZCBpbnRvIGBjcC0mZ3Q7aW5fc2VxYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBLTVNBTiB0byBkZXRlY3QuCgpTbywgaW4gZXNzZW5jZSwgdGhlIGJ1ZyBpcyBhIHN3YXBwZWQgYXJndW1lbnQgaW4gYGh0b25fc2VxYC4gVGhpcyBsZWFkcyB0bzoKCiogICBSZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIChgcGApLgoqICAgV3JpdGluZyB0aGUgKGdhcmJhZ2UpIHJlYWQgbWVtb3J5IHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSAoYGNwLSZndDtpbl9zZXFgKS4KKiAgIExlYXZpbmcgdGhlIGludGVuZGVkIG5ldHdvcmsgYnVmZmVyIChgcGApIHVuaW5pdGlhbGl6ZWQuCiogICBTZW5kaW5nIHRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgb3ZlciB0aGUgbmV0d29yaywgY2F1c2luZyBhIGNsZWFyIGluZm9ybWF0aW9uIGxlYWsuCiogICBLTVNBTiAqd2lsbCogZGV0ZWN0IHRoZSB1bmluaXRpYWxpemVkIHJlYWQgYW5kIHRoZSBpbmZvLWxlYWsgb24gdGhlIG5ldHdvcmsgc2VuZC4KCktBU0FOICp3b24mIzM5O3QqIGRldGVjdCB0aGlzLCBiZWNhdXNlIHRoZXJlIGFyZSBubyBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlcy4gIEFsbCBtZW1vcnkgYWNjZXNzIGlzIHRlY2huaWNhbGx5IHZhbGlkIHdpdGhpbiB0aGUgYWxsb2NhdGVkIG1lbW9yeSByZWdpb25zLiBJdCYjMzk7cyB0aGUgKnVuaW5pdGlhbGl6ZWQqIHN0YXRlIG9mIHRoZSBkYXRhIHRoYXQmIzM5O3MgdGhlIHByb2JsZW0uCgpUaGVyZWZvcmUsIHRoaXMgZGVmaW5pdGVseSBuZWVkcyBLTVNBTi4gIGBOZWVkc0tNU0FOID0gdHJ1ZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzExIDAxOjE0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxuXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXG5cbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxuXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXG5cbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjcuNDY0MDEwMTAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEyMDAxOTUwMjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQX1ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXBfdnNfc3luY19jb25uXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcSgpYCB3ZXJlIHN3YXBwZWQuIEJlY2F1c2Ugb2YgdGhpcyBzd2FwLCB0aGUgY29kZSB3YXMgcmVhZGluZyBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciBwb2ludGVyIGBwYCBhbmQgd3JpdGluZyB0byB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUgYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgLiBUaGUgbmV0d29yayBidWZmZXIgYHBgIGlzIGFsbG9jYXRlZCB2aWEgYGttYWxsb2MoKWAgaW4gYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoKWAgYW5kIGlzIHVuaW5pdGlhbGl6ZWQuIFxcblxcblRoaXMgYnVnIGhhcyB0d28gY29uc2VxdWVuY2VzOlxcbjEuIEl0IHJlYWRzIHVuaW5pdGlhbGl6ZWQgaGVhcCBtZW1vcnkgZnJvbSBgcGAgYW5kIGNvcnJ1cHRzIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS5cXG4yLiBJdCBsZWF2ZXMgdGhlIG5ldHdvcmsgYnVmZmVyIGBwYCB1bmluaXRpYWxpemVkIGF0IHRoZSBsb2NhdGlvbnMgd2hlcmUgdGhlIHNlcXVlbmNlIG51bWJlcnMgc2hvdWxkIGhhdmUgYmVlbiB3cml0dGVuLiBUaGlzIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGlzIHN1YnNlcXVlbnRseSBzZW50IG92ZXIgdGhlIG5ldHdvcmsgdmlhIGBrZXJuZWxfc2VuZG1zZygpYCBpbiB0aGUgc3luYyB0aHJlYWQsIHJlc3VsdGluZyBpbiBhbiBpbmZvLWxlYWsgb2Yga2VybmVsIGhlYXAgbWVtb3J5IHRvIHRoZSBuZXR3b3JrLlxcblxcbktNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdXNlcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgaW5mby1sZWFrcyB0byB1c2VyIHNwYWNlIG9yIG92ZXIgdGhlIG5ldHdvcmsuIEtBU0FOLCBvbiB0aGUgb3RoZXIgaGFuZCwgb25seSBkZXRlY3RzIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MgbGlrZSBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIGFuZCB1c2UtYWZ0ZXItZnJlZXMuIFNpbmNlIGFsbCBtZW1vcnkgYWNjZXNzZXMgaGVyZSBhcmUgd2l0aGluIGJvdW5kcyBhbmQgb24gbGl2ZSBvYmplY3RzLCBLQVNBTiB3aWxsIG5vdCBkZXRlY3QgdGhpcyBidWcuIEEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBoaWdobHkganVzdGlmaWVkIHRvIGNhdGNoIHRoaXMgYW5kIHNpbWlsYXIgdW5pbml0aWFsaXplZCBtZW1vcnkgbGVha3MuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjcuNDY0MDE2MDIyWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNzQ1NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmZjNTIzMzEyNDdlZTM1ODkwZWQwZWNiZGIxOTM2MDI0ZmI2NzZhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbmluZGV4IDkzMDM4YWJiZjVlMDQuLmY2ZWE2Yzk1MzVlYjMgMTAwNjQ0XFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcXG5AQCAtNzQ3LDkgKzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbiBcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxuIFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiBcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4tXFx0XFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSk7XFxuK1xcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiBcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4tXFx0XFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEpO1xcbitcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiBcXHR9XFxuIFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjI4LjgxNTcyNTNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo1MTc0NDAyNDc2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZmM1MjMzMTI0N2VlMzU4OTBlZDBlY2JkYjE5MzYwMjRmYjY3NmEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBBdWcgMTEgMDE6MTE6MjUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuaW5kZXggOTMwMzhhYmJmNWUwNC4uZjZlYTZjOTUzNWViMyAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcbkBAIC03NDcsOSArNzQ3LDkgQEAgdm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXG4gXHRpZiAoY3AtXHUwMDNlZmxhZ3MgXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xuIFx0XHQqKHArKykgPSBJUFZTX09QVF9TRVFfREFUQTtcbiBcdFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtcbitcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIFx0XHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbi1cdFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2VvdXRfc2VxKTtcbitcdFx0aHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4gXHR9XG4gXHQvKiBIYW5kbGUgcGUgZGF0YSAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MjguODE1NzI2NzVaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjA1NTI4NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipBbmFseXppbmcgYSBOZXRmaWx0ZXIvSVBWUyBTeW5jaHJvbml6YXRpb24gUGF0Y2gqKlxuXG5SaWdodCwgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gYG5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNgLiBDbGFzc2ljLiBJdCBzZWVtcyB0byBiZSBmaWRkbGluZyB3aXRoIHRoZSBhcmd1bWVudCBvcmRlciBmb3IgYGh0b25fc2VxYC4gSG1tLCBJIHdvbmRlciB3aHkuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB3aGF0IHRoYXQgZnVuY3Rpb24gKmFjdHVhbGx5KiBkb2VzLiBMZXQgbWUganVzdCBxdWlja2x5IHRyYWNlIGJhY2sgdG8gdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYXJndW1lbnQgc3dhcC4gSXMgaXQgcmVsYXRlZCB0byBlbmRpYW5uZXNzIGNvbmNlcm5zPyBJcyB0aGVyZSBhbiBvcHRpbWl6YXRpb24gb3IgYSBidWcgZml4IHJlbGF0ZWQgdG8gc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nPyBMZXQgbWUgZGl2ZSBpbiBhbmQgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCB3aHkuIFByb2JhYmx5IGEgc3VidGxlLCB5ZXQgY3J1Y2lhbCwgYWRqdXN0bWVudCB0byBob3cgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20gd29ya3MuIEJlc3QgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGFzIHN5bmNocm9uaXphdGlvbiBwcm9ibGVtcyBhcmUgbm90b3Jpb3VzbHkgaGFyZCB0byBkZWJ1Zy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjEyMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzIuMDIxMjU5MDMxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMjc3NzE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh0b25fc2VxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXHRcXHQvKiBVc2VkIGZvciBudG9oX3NlcSBhbmQgaHRvbl9zZXEgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yODM9c3RhdGljIHZvaWQgbnRvaF9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqbm8sIHN0cnVjdCBpcF92c19zZXEgKmhvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTA6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUzLVxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTozMi4xMDM1NDMwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTc1NjgwMjI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBQb3RlbnRpYWwgTmV0d29yayBCdWcgRml4KipcblxuUmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgYXQgY29ycmVjdGluZyB0aGUgYXJndW1lbnQgb3JkZXIgd2l0aGluIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGNhbGwuIExldCdzIHNlZS4uLiBCZWZvcmUsIGl0IGxvb2tzIGxpa2UgdGhlIGZ1bmN0aW9uIGNhbGwgd2FzOiBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AuIEFuZCBub3csIHRoZSBjb2RlIGhhcyBiZWVuIHVwZGF0ZWQgdG86IGBodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YC4gVGhhdCdzIGEgY2xlYXIgc3dhcCwgd2hpY2ggc3VnZ2VzdHMgYSBwb3NzaWJsZSBidWcuIFRoZSBvcmlnaW5hbCBvcmRlciBtaWdodCBoYXZlIGJlZW4gbWlzaW50ZXJwcmV0aW5nIHdoaWNoIGRhdGEgdG8gdHJlYXQgYXMgdGhlIHNvdXJjZSB2ZXJzdXMgdGhlIGRlc3RpbmF0aW9uIGluIHRoZSBob3N0LXRvLW5ldHdvcmsgYnl0ZSBvcmRlciBjb252ZXJzaW9uIHByb2Nlc3MuXG5cblRoZSB0aGluZyB0byBkbyBpcyBkZWx2ZSBpbnRvIHRoZSBgaHRvbl9zZXFgIGRlZmluaXRpb24gaXRzZWxmIHRvIGZ1bGx5IGdyYXNwIHRoZSBjaGFuZ2UuIFVuZGVyc3RhbmRpbmcgaXRzIGV4cGVjdGVkIGlucHV0IGFuZCBvdXRwdXQgaXMgY3J1Y2lhbCB0byBkZXRlcm1pbmUgaWYgdGhpcyBzd2FwIGlzIGNvcnJlY3QuIElzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgIG1lYW50IHRvIGJlIHRoZSB2YWx1ZSB0byBjb252ZXJ0LCBhbmQgYChzdHJ1Y3QgaXBfdnNfc2VxICopcGAgcHJvdmlkaW5nIHNvbWUgY29udGV4dD8gT3IgdmljZSB2ZXJzYT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBkZWNsYXJhdGlvbiB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgd2hhdCB0aGUgZXhwZWN0ZWQgcm9sZXMgb2YgdGhlc2UgdHdvIHBhcmFtZXRlcnMgYXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODY3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzUuNjc5MjI3NTUxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgwNDcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0LypcXG4gMjkyOlxcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxcbiAyOTM6XFx0ICogRnJvbSBBbGlnbmVkIGhvc3Qgb3JkZXIgdG8gdW5hbGlnbmVkIG5ldHdvcmsgb3JkZXJcXG4gMjk0OlxcdCAqL1xcbiAyOTU6XFx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxuIDI5ODpcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXFx1MDAzZWRlbHRhLCBcXHUwMDI2bm8tXFx1MDAzZWRlbHRhKTtcXG4gMjk5OlxcdFxcdHB1dF91bmFsaWduZWRfYmUzMihoby1cXHUwMDNlcHJldmlvdXNfZGVsdGEsIFxcdTAwMjZuby1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbiAzMDA6XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiAzMDM6XFx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzMDQ6XFx0e1xcbiAzMDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4gMzA4OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtcy1cXHUwMDNlc3luY19xdWV1ZSkpIHtcXG4gMzA5OlxcdFxcdFxcdHNiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6MzUuNjc5NDEwNDUxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI1MDUzNzQ1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQVlMgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBsZXQgbWUgYnJlYWsgZG93biB0aGlzIHNlcXVlbmNlIG51bWJlciBoYW5kbGluZyBpbiBgaXBfdnNfc3luY19jb25uYC4gSXQgbG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggY29udmVydGluZyBzZXF1ZW5jZSBudW1iZXJzIGJldHdlZW4gaG9zdCBhbmQgbmV0d29yayBieXRlIG9yZGVyIHVzaW5nIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgYGlwX3ZzX3NlcWAgc3RydWN0dXJlLlxuXG5CZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgZG9pbmcgaXQgY29tcGxldGVseSB3cm9uZy4gVGhlIGZ1bmN0aW9uIGNhbGwgYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKWAgd2FzIHVzaW5nIGBwYCwgd2hpY2ggcmVwcmVzZW50cyB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLCBhcyB0aGUgc291cmNlIChgaG9gKSwgYW5kIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgIChwYXJ0IG9mIGEgaG9zdC1vcmRlciBzdHJ1Y3R1cmUpIGFzIHRoZSBkZXN0aW5hdGlvbiAoYG5vYCkuIFRoZSBwcm9ibGVtIGlzIHRoYXQgYHBgIGlzIHVuaW5pdGlhbGl6ZWQgYXQgdGhpcyBwb2ludCEgV2UncmUgZXNzZW50aWFsbHkgY29weWluZyBwb3RlbnRpYWxseSBnYXJiYWdlIGRhdGEgZnJvbSBhIGJ1ZmZlciB0aGF0IGhhc24ndCBiZWVuIHBvcHVsYXRlZCAqaW50byogYSBob3N0LW9yZGVyIHNlcXVlbmNlIG51bWJlciBzdHJ1Y3R1cmUuIFRoYXQncyBhIGNsYXNzaWMgbWVtb3J5IGNvcnJ1cHRpb24gYnVnIHdhaXRpbmcgdG8gaGFwcGVuLiBQbHVzLCB3ZSdyZSB3cml0aW5nIHRvIGBjcC1cdTAwM2Vpbl9zZXFgIHdoZW4gd2Ugc2hvdWxkbid0IGJlLlxuXG5UaGUgcGF0Y2ggY29ycmVjdHMgdGhpcy4gTm93LCB0aGUgY2FsbCBpcyBgaHRvbl9zZXEoXHUwMDI2Y3AtXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApYC4gVGhpcyByZXZlcnNlcyB0aGUgc291cmNlIGFuZCBkZXN0aW5hdGlvbi4gYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAgaXMgdGhlIGhvc3Qtb3JkZXIgc2VxdWVuY2UgbnVtYmVyIHN0cnVjdHVyZSwgYW5kIGBwYCBpcyBub3cgdGhlIGRlc3RpbmF0aW9uLCB0aGUgbmV0d29yayBwYWNrZXQgYnVmZmVyLiAgVGhpcyBtYWtlcyBzZW5zZSEgV2UncmUgY29ycmVjdGx5ICpyZWFkaW5nKiB0aGUgc2VxdWVuY2UgbnVtYmVyIGZyb20gYSBob3N0LW9yZGVyIHN0cnVjdHVyZSAoYFx1MDAyNmNwLVx1MDAzZWluX3NlcWApIGFuZCB3cml0aW5nIHRoZSAqY29udmVydGVkKiBuZXR3b3JrLW9yZGVyIHNlcXVlbmNlIG51bWJlciBpbnRvIHRoZSBuZXR3b3JrIHBhY2tldCBidWZmZXIgKGBwYCkuIFRoaXMgaXMgcHJlY2lzZWx5IHdoYXQgd2Ugd2FudCBkdXJpbmcgc3luY2hyb25pemF0aW9uLlxuXG5UaGlzIHJlcHJlc2VudHMgYSBmdW5jdGlvbmFsIGNvcnJlY3Rpb24gaW4gYGlwX3ZzX3N5bmNfY29ubmAsIGFuZCBhIGNyaXRpY2FsIG9uZSBhdCB0aGF0LiBHaXZlbiB0aGlzIGNoYW5nZSwgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBhbnkgcmVsZXZhbnQgSVBWUyBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGltcGFjdGVkIGJ5IHRoaXMgbm93LWNvcnJlY3Qgc2VxdWVuY2UgbnVtYmVyIGhhbmRsaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NDAuOTI5OTUxNjkyWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxMDg5NTgyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSVBfVlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNC0jXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6NTptZW51Y29uZmlnIElQX1ZTXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctNi1cXHR0cmlzdGF0ZSBcXFwiSVAgdmlydHVhbCBzZXJ2ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTI4Nj1jb21tZW50ICdJUFZTIFNIIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0yODctXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6Mjg4OmNvbmZpZyBJUF9WU19TSF9UQUJfQklUU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTI4OS1cXHRpbnQgXFxcIklQVlMgc291cmNlIGhhc2hpbmcgdGFibGUgc2l6ZSAodGhlIE50aCBwb3dlciBvZiAyKVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMwMT1jb21tZW50ICdJUFZTIE1IIHNjaGVkdWxlcidcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDItXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzAzOmNvbmZpZyBJUF9WU19NSF9UQUJfSU5ERVhcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zMDQtXFx0aW50IFxcXCJJUFZTIG1hZ2xldiBoYXNoaW5nIHRhYmxlIGluZGV4IG9mIHNpemUgKHRoZSBwcmltZSBudW1iZXJzKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NDEuNDQwODUzNTk3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA2NTU2MTM0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBJUFZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBgSVBfVlNgIC0gdGhhdCdzIHRoZSBjb3JlIG9mIHRoZSBjb25maWd1cmF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gSXQncyB0aGUgY2VudHJhbCBzd2l0Y2gsIHRoZSBtYWluIHN3aXRjaCB0aGF0IGRyaXZlcyBldmVyeXRoaW5nIGVsc2UuIFRoYXQncyB0aGUgYmFzZWxpbmUuIE5vdywgd2hlcmUgZG8gd2UgZ28gZnJvbSBoZXJlPyBMZXQncyBkcmlsbCBkb3duIGludG8gYSBtb3JlIHNwZWNpZmljIHBhcmFtZXRlci4gVGhlIG9idmlvdXMgcGxhY2UgdG8gbG9vayBpcyBgaXBfdnNfc3luY19jb25uYC4gSXQncyBlc3NlbnRpYWwgd2UgY2hlY2sgdGhlIHNldHRpbmdzIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1NjcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo0NC41MDY0MTg1MjdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5OTgxNjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM9MTM2ND1zdGF0aWMgdm9pZCBpcF92c19jb25uX2V4cGlyZShzdHJ1Y3QgdGltZXJfbGlzdCAqdClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzMy1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jOjE0MzQ6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmMtMTQzNS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM9MjA4OD1pcF92c19pbl9ob29rKHZvaWQgKnByaXYsIHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZl9ob29rX3N0YXRlICpzdGF0ZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI1OC1cXHQgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI1OTpcXHQgKiBGb3IgT05FX1BLVCBsZXQgaXBfdnNfc3luY19jb25uKCkgZG8gdGhlIGZpbHRlciB3b3JrLlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2MC1cXHQgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2Ny1cXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNjg6XFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjktXFx0ZWxzZSBpZiAoKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9PTkVfUEFDS0VUKSBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlY29udHJvbClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jOjIyNzA6XFx0XFx0LyogaW5jcmVtZW50IGlzIGRvbmUgaW5zaWRlIGlwX3ZzX3N5bmNfY29ubiB0b28gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNzEtXFx0XFx0YXRvbWljX2luYyhcXHUwMDI2Y3AtXFx1MDAzZWNvbnRyb2wtXFx1MDAzZWluX3BrdHMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMy0gKiAgICAgICAgICAgICAgdGltZS1vdXRzLCBhbmQgZmlyZXdhbGwgbWFya3MuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNDogKiAgICAgICAgICAgICAgSW4gdmVyLjEgXFxcImlwX3ZzX3N5bmNfY29ubl9vcHRpb25zXFxcIiB3aWxsIGJlIHNlbnQgaW4gbmV0dy4gb3JkZXIuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNS0gKiAgICAgICAgICAgICAgVmVyLiAwIGNhbiBiZSB0dXJuZWQgb24gYnkgc3lzY3RsIC13IG5ldC5pcHY0LnZzLnN5bmNfdmVyc2lvbj0wXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTY1PXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19pcHZzX3N5bmNfa2V5O1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02OS0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwOnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzEtXFx0X191OFxcdFxcdFxcdHJlc2VydmVkO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy04OC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjg5OnN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05MC1cXHRzdHJ1Y3QgaXBfdnNfc2VxICAgICAgICBpbl9zZXE7ICAgICAgICAgLyogaW5jb21pbmcgc2VxLiBzdHJ1Y3QgKi9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU0PXN0cnVjdCBpcF92c19zeW5jX3Y2IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTczLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTc0OnVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzUtXFx0c3RydWN0IGlwX3ZzX3N5bmNfdjRcXHR2NDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTk2PXN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA0LS8qIFZlcnNpb24gMCBkZWZpbml0aW9uIG9mIHBhY2tldCBzaXplcyAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1OiNkZWZpbmUgU0lNUExFX0NPTk5fU0laRSAgKHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNi0jZGVmaW5lIEZVTExfQ09OTl9TSVpFICBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyMDc6KHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwKSArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA4LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yNDU9c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI0OS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI1MDpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNTEtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MjU0PXN0cnVjdCBpcF92c19zeW5jX21lc2cge1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjAtXFx0X191MTZcXHRcXHRcXHRzcGFyZTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjI2MTpcXHQvKiBpcF92c19zeW5jX2Nvbm4gZW50cmllcyBzdGFydCBoZXJlICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yNjItfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NDQxPXN0YXRpYyBpbmxpbmUgYm9vbCBpbl9wZXJzaXN0ZW5jZShzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTQ1OC0gKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQ1OTpzdGF0aWMgaW50IGlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00NjAtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01MzgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Mzk6c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDAtXFx0XFx0XFx0ICAgICAgIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NDItXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU0MzpcXHRzdHJ1Y3QgaXBfdnNfc3luY19jb25uX3YwICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTQ0LVxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKmJ1ZmY7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU1NC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU1NTpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTU2LVxcdFxcdHJldHVybjtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTg4LVxcdG0gPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKSBidWZmLVxcdTAwM2VtZXNnO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTg5OlxcdHMgPSAoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl92MCAqKSBidWZmLVxcdTAwM2VoZWFkO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTkwLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDItXFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjAzOlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0ID1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYwNDpcXHRcXHRcXHQoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICopXFx1MDAyNnNbMV07XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MDUtXFx0XFx0bWVtY3B5KG9wdCwgXFx1MDAyNmNwLVxcdTAwM2VzeW5jX2Nvbm5fb3B0LCBzaXplb2YoKm9wdCkpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MTktXFx0XFx0XFx0cGt0cyA9IHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjYyMDpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjIxLVxcdH1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjI4LSAqL1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjI5OnZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMS1cXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjMyOlxcdHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqcztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYzMy1cXHRzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpidWZmO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02NDAtXFx0aWYgKHN5c2N0bF9zeW5jX3ZlcihpcHZzKSA9PSAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2NDE6XFx0XFx0aXBfdnNfc3luY19jb25uX3YwKGlwdnMsIGNwLCBwa3RzKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Mi1cXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY0Ny1zbG9vcDpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY0ODpcXHRpZiAoIWlwX3ZzX3N5bmNfY29ubl9uZWVkZWQoaXB2cywgY3AsIHBrdHMpKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjQ5LVxcdFxcdGdvdG8gY29udHJvbDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjc3LVxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Nzg6XFx0XFx0bGVuICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpICsgMjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY3OS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzE3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzE4OlxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTcxOS1cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzQ4LVxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzQ5OlxcdFxcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUwLVxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz03ODc9c3RhdGljIGlubGluZSBpbnRcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjc4ODppcF92c19jb25uX2ZpbGxfcGFyYW1fc3luYyhzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IGFmLCB1bmlvbiBpcF92c19zeW5jX2Nvbm4gKnNjLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzg5LVxcdFxcdFxcdCAgIHN0cnVjdCBpcF92c19jb25uX3BhcmFtICpwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz04NDE9c3RhdGljIHZvaWQgaXBfdnNfcHJvY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubl9wYXJhbSAqcGFyYW0sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTg0NS1cXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0LCBfX3UzMiBmd21hcmssXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo4NDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqb3B0KVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtODQ3LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9OTU4PXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgY29uc3QgY2hhciAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjEtXFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbSA9IChzdHJ1Y3QgaXBfdnNfc3luY19tZXNnX3YwICopYnVmZmVyO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6OTYyOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5NjM6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05NjQtXFx0c3RydWN0IGlwX3ZzX3Byb3RvY29sICpwcDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTc2LVxcdFxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjk3NzpcXHRcXHRzID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjAgKikgcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTk3OC1cXHRcXHRmbGFncyA9IG50b2hzKHMtXFx1MDAzZWZsYWdzKSB8IElQX1ZTX0NPTk5fRl9TWU5DO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy05ODAtXFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo5ODE6XFx0XFx0XFx0b3B0ID0gKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyAqKVxcdTAwMjZzWzFdO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtOTgyLVxcdFxcdFxcdHAgKz0gRlVMTF9DT05OX1NJWkU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTEwMjc9c3RhdGljIGlubGluZSBpbnQgaXBfdnNfcHJvY19zZXFvcHQoX191OCAqcCwgdW5zaWduZWQgaW50IHBsZW4sXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDI4LVxcdFxcdFxcdFxcdCAgICBfX3UzMiAqb3B0X2ZsYWdzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTAyOTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICpvcHQpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDMwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zICp0b3B0O1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzMi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzM6XFx0dG9wdCA9IChzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMgKilwO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTAzNC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEwMzU6XFx0aWYgKHBsZW4gIT0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucykpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwMzYtXFx0XFx0SVBfVlNfREJHKDIsIFxcXCJCQUNLVVAsIGJvZ3VzIGNvbm4gb3B0aW9ucyBsZW5ndGhcXFxcblxcXCIpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMDY5PXN0YXRpYyBpbmxpbmUgaW50IGlwX3ZzX3Byb2Nfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBfX3U4ICpwLCBfX3U4ICptc2dfZW5kKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTA3MC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcxOlxcdHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyBvcHQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDcyOlxcdHVuaW9uICBpcF92c19zeW5jX2Nvbm4gKnM7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDczLVxcdHN0cnVjdCBpcF92c19wcm90b2NvbCAqcHA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEwODAtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMDgxOlxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopIHA7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMDgyLVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xMjAzPXN0YXRpYyB2b2lkIGlwX3ZzX3Byb2Nlc3NfbWVzc2FnZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgX191OCAqYnVmZmVyLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xMjMxLVxcdFxcdGZvciAoaT0wOyBpXFx1MDAzY25yX2Nvbm5zOyBpKyspIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjEyMzI6XFx0XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTIzMy1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgc2l6ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTI0MC1cXHRcXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxMjQxOlxcdFxcdFxcdHMgPSAodW5pb24gaXBfdnNfc3luY19jb25uICopcDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTEyNDItXFx0XFx0XFx0c2l6ZSA9IG50b2hzKHMtXFx1MDAzZXY0LnZlcl9zaXplKSBcXHUwMDI2IFNWRVJfTUFTSztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTczOD1pbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc1MC1cXHRJUF9WU19EQkcoNywgXFxcIiVzKCk6IHBpZCAlZFxcXFxuXFxcIiwgX19mdW5jX18sIHRhc2tfcGlkX25yKGN1cnJlbnQpKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3NTE6XFx0SVBfVlNfREJHKDcsIFxcXCJFYWNoIGlwX3ZzX3N5bmNfY29ubiBlbnRyeSBuZWVkcyAlemQgYnl0ZXNcXFxcblxcXCIsXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzUyOlxcdFxcdCAgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fdjApKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjQ0LjU4NjQwNzc2MloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTcwMzg1MjcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkJ1ZyBIdW50aW5nOiBJUFZTIFN5bmMgQ29ubmVjdGlvbiBJc3N1ZSoqXG5cbk9rYXksIHNvIHRoZSBpc3N1ZSBpcyBkZWZpbml0ZWx5IGluIGBpcF92c19zeW5jX2Nvbm5gLiBUaGF0IG1ha2VzIHNlbnNlOyBpdCdzIHRyaWdnZXJlZCB3aGVuIElQVlMgaXMgaW4gdGhlIE1BU1RFUiBzeW5jIHN0YXRlLCB3aGljaCwgb2YgY291cnNlLCBpcyBvbmx5IGFjdGl2ZSB3aGVuIHRoZSBzeW5jIGRhZW1vbiBpcyBydW5uaW5nLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IGZpeC4gV2UncmUgdGFsa2luZyBhYm91dCBwcmV2ZW50aW5nIHBvdGVudGlhbCBtZW1vcnkgY29ycnVwdGlvbiDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIHdyaXRlcywgd2hpY2ggY291bGQgbGVhZCB0byBhbGwgc29ydHMgb2YgbmFzdHkgc2lkZSBlZmZlY3RzLlxuXG5XYWl0IGEgc2Vjb25kLi4uICpgaHRvbl9zZXFgKiB3YXMgd3JpdGluZyBkaXJlY3RseSB0byBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgIGluc3RlYWQgb2YgdGhlIGJ1ZmZlciAqYHBgKj8gVGhhdCdzLi4uIHllYWgsIHRoYXQncyBiYWQuIFRoYXQgbWVhbnMgaXQgd2FzIGNvcnJ1cHRpbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUgaXRzZWxmIOKAkyB0aG9zZSBzZXF1ZW5jZSBudW1iZXJzIOKAkyBhbmQgbGVhdmluZyB0aGUgcGFja2V0IGJ1ZmZlciBjb21wbGV0ZWx5IHVuaW5pdGlhbGl6ZWQhIFNvLCBhIGNvbm5lY3Rpb24gY291bGQgYmUgbWVzc2VkIHVwIGJlY2F1c2Ugb2YgdGhlc2UgaW5jb3JyZWN0IHNlcXVlbmNlIG51bWJlcnMgd2hpY2ggY291bGQgcG90ZW50aWFsbHkgbWFrZSBzb21lIGNvbm5lY3Rpb25zIHVudXNhYmxlLlxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiB3b3J0aCBmdXp6aW5nLiBUaGUgcG90ZW50aWFsIGZvciBleHBsb2l0YXRpb24gaGVyZSBpcyBoaWdoLCBlc3BlY2lhbGx5IGlmIHdlIGNhbiBjcmFmdCBwYWNrZXRzIHRoYXQgdHJpZ2dlciB0aGlzIGNvbmRpdGlvbiByZWxpYWJseS4gTGV0J3MgbWFrZSBzdXJlIHdlIGhhdmUgZXZlcnl0aGluZyBzZXQgdXAgY29ycmVjdGx5IGZvciB0ZXN0aW5nLlxuXG5SaWdodCwgdGhlIG9idmlvdXMgcmVxdWlyZW1lbnQgaXMgYElQX1ZTYC4gQW55dGhpbmcgZWxzZSBpbiB0aGUgY29uZmlndXJhdGlvbj8gTGV0IG1lIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgbmV0L25ldGZpbHRlci9pcHZzL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gTmVlZCB0byBtYWtlIHN1cmUgbm8gb3RoZXIgZGVwZW5kZW5jaWVzIGFyZSBtaXNzZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NTAuNTU2Nzk1NTIzWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODk1NDE2OTEsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJUF9WU19TWU5DXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1MC44NDYzNDczNDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5MjAyMTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJUFZTIENvbmZpZ3VyYXRpb24gQ2xhcmlmaWNhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBJUFZTIHNpdHVhdGlvbiwgYW5kIGl0IHNlZW1zIHRoZSBkb2N1bWVudGF0aW9uIG1pZ2h0IGJlIGEgbGl0dGxlIG1pc2xlYWRpbmcsIG9yIHBlcmhhcHMgb3V0ZGF0ZWQuIEkgd2FzIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgYElQX1ZTX1NZTkNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhbmQgaXQncyBqdXN0Li4uIG5vdCB0aGVyZS4gQWZ0ZXIgYSBsaXR0bGUgZGlnZ2luZywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCBgSVBfVlNfU1lOQ2AgaXNuJ3QgYSBzdGFuZGFsb25lIG9wdGlvbi4gSXQncyBmdW5jdGlvbmFsaXR5IGlzIGxpa2VseSBidWlsdC1pbiBhbmQgaW1wbGljaXRseSBlbmFibGVkIHdoZW4gYElQX1ZTYCBpdHNlbGYgaXMgZW5hYmxlZC5cblxuVGltZSB0byBjb25maXJtIHRoaXMgaHVuY2ggYnkgY2hlY2tpbmcgdGhlIHNvdXJjZSBjb2RlIGluIGBuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBkZWZpbml0aXZlIGFuc3dlciBvbiBob3cgdGhlIHN5bmNocm9uaXphdGlvbiBmZWF0dXJlcyBhcmUgaGFuZGxlZCBhbmQgaWYgdGhleSBhcmUgZGVwZW5kZW50IG9uIG90aGVyLCBicm9hZGVyIElQVlMgc2V0dGluZ3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgdG8gZW5zdXJlIHByb3BlciBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTQwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTE6NTQuMjM4MzczNjgyWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMzU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciB0aGUgSVBWUyBtb2R1bGVzIG9uIHRvcCBvZiBJUHY0LlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHQjIElQVlMgdHJhbnNwb3J0IHByb3RvY29sIGxvYWQgYmFsYW5jaW5nIHN1cHBvcnRcXG4gICA3OlxcdGlwX3ZzX3Byb3RvLW9ianMteSA6PVxcbiAgIDg6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19UQ1ApICs9IGlwX3ZzX3Byb3RvX3RjcC5vXFxuICAgOTpcXHRpcF92c19wcm90by1vYmpzLSQoQ09ORklHX0lQX1ZTX1BST1RPX1VEUCkgKz0gaXBfdnNfcHJvdG9fdWRwLm9cXG4gIDEwOlxcdGlwX3ZzX3Byb3RvLW9ianMtJChDT05GSUdfSVBfVlNfUFJPVE9fQUhfRVNQKSArPSBpcF92c19wcm90b19haF9lc3Aub1xcbiAgMTE6XFx0aXBfdnNfcHJvdG8tb2Jqcy0kKENPTkZJR19JUF9WU19QUk9UT19TQ1RQKSArPSBpcF92c19wcm90b19zY3RwLm9cXG4gIDEyOlxcdFxcbiAgMTM6XFx0aXBfdnMtZXh0cmFfb2Jqcy15IDo9XFxuICAxNDpcXHRpcF92cy1leHRyYV9vYmpzLSQoQ09ORklHX0lQX1ZTX05GQ1QpICs9IGlwX3ZzX25mY3Qub1xcbiAgMTU6XFx0XFxuICAxNjpcXHRpcF92cy1vYmpzIDo9XFx0aXBfdnNfY29ubi5vIGlwX3ZzX2NvcmUubyBpcF92c19jdGwubyBpcF92c19zY2hlZC5vXFx0ICAgXFxcXFxcbiAgMTc6XFx0XFx0XFx0aXBfdnNfeG1pdC5vIGlwX3ZzX2FwcC5vIGlwX3ZzX3N5bmMub1xcdCAgIFxcdFxcdCAgIFxcXFxcXG4gIDE4OlxcdFxcdFxcdGlwX3ZzX2VzdC5vIGlwX3ZzX3Byb3RvLm8gaXBfdnNfcGUub1xcdFxcdFxcdCAgIFxcXFxcXG4gIDE5OlxcdFxcdFxcdCQoaXBfdnNfcHJvdG8tb2Jqcy15KSAkKGlwX3ZzLWV4dHJhX29ianMteSlcXG4gIDIwOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1NC4yMzg1OTEyOTJaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTE1NjgwMDIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgSVBWUyBCdWlsZCBEZXBlbmRlbmN5KipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGBpcF92c19zeW5jLm9gIGhlcmUuIFJpZ2h0LCBpdCdzIHByZXR0eSBjbGVhciB0aGF0IGlmIGBJUF9WU2AgaXMgZW5hYmxlZCwgdGhlbiBgaXBfdnNfc3luYy5vYCAqYWx3YXlzKiBnZXRzIGJ1aWx0LiBUaGF0J3MganVzdCB0aGUgd2F5IGl0IHdvcmtzLiBCdXQgbm93IEknbSBzdGFydGluZyB0byB3b25kZXIgaWYgYElQX1ZTYCBpdHNlbGYgaGFzIGFueSBoaWRkZW4gZGVwZW5kZW5jaWVzLiBJdCdzIHRpbWUgdG8gZGlnIGEgbGl0dGxlIGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBJUF9WU2AgYW5kIG90aGVyIG1vZHVsZXMgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyByb2xlIHdpdGhpbiB0aGUgYnVpbGQgcHJvY2Vzcy4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSB1cHN0cmVhbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA2MjgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjExOjU5LjM5NTM5NTE0OVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ5MTQ1NTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGVwZW5kcyBvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz01PW1lbnVjb25maWcgSVBfVlNcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy02LVxcdHRyaXN0YXRlIFxcXCJJUCB2aXJ0dWFsIHNlcnZlciBzdXBwb3J0XFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjc6XFx0ZGVwZW5kcyBvbiBJTkVUIFxcdTAwMjZcXHUwMDI2IE5FVEZJTFRFUlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjg6XFx0ZGVwZW5kcyBvbiAoTkZfQ09OTlRSQUNLIHx8IE5GX0NPTk5UUkFDSz1uKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9Mjk9Y29uZmlnXFx0SVBfVlNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMwLVxcdGJvb2wgXFxcIklQdjYgc3VwcG9ydCBmb3IgSVBWU1xcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMTpcXHRkZXBlbmRzIG9uIElQVjYgPSB5IHx8IElQX1ZTID0gSVBWNlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyLVxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNlxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzIxPWNvbmZpZ1xcdElQX1ZTX0ZUUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTMyMi1cXHR0cmlzdGF0ZSBcXFwiRlRQIHByb3RvY29sIGhlbHBlclxcXCJcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZzozMjM6XFx0ZGVwZW5kcyBvbiBJUF9WU19QUk9UT19UQ1AgXFx1MDAyNlxcdTAwMjYgTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX05BVCBcXHUwMDI2XFx1MDAyNiBcXFxcXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzI0LVxcdFxcdE5GX0NPTk5UUkFDS19GVFBcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnPTMzNz1jb25maWdcXHRJUF9WU19ORkNUXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzM4LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBjb25uZWN0aW9uIHRyYWNraW5nXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjMzOTpcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM0MC1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZz0zNDU9Y29uZmlnXFx0SVBfVlNfUEVfU0lQXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWctMzQ2LVxcdHRyaXN0YXRlIFxcXCJTSVAgcGVyc2lzdGVuY2UgZW5naW5lXFxcIlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0NzpcXHRkZXBlbmRzIG9uIElQX1ZTX1BST1RPX1VEUFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnOjM0ODpcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS19TSVBcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNDktXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc9MzUyPWNvbmZpZyBHQ09WX1BST0ZJTEVfSVBWU1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9LY29uZmlnLTM1My1cXHRib29sIFxcXCJFbmFibGUgR0NPViBwcm9maWxpbmcgZm9yIElQVlNcXFwiXFxubmV0L25ldGZpbHRlci9pcHZzL0tjb25maWc6MzU0OlxcdGRlcGVuZHMgb24gR0NPVl9LRVJORUxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvS2NvbmZpZy0zNTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMTo1OS40ODAzMTk2MzNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDU5OTcwNDA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIElQX1ZTIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgSVBfVlNgIGNvZGUsIGFuZCBpdCdzIGNsZWFyIHRoYXQgaXQgcmVsaWVzIGhlYXZpbHkgb24gYm90aCBgSU5FVGAgYW5kIGBORVRGSUxURVJgLiBNYWtlcyBzZW5zZS4gQnV0IEknbSBnb2luZyB0byBjZW50ZXIgbXkgZm9jdXMgb24gYElQX1ZTYCBpdHNlbGYsIHNpbmNlIHRoYXQncyB0aGUgY29yZSBvZiB0aGUgY29uZmlndXJhdGlvbi5cblxuTXkgcHJpbWFyeSBjb25jZXJuIHJpZ2h0IG5vdyBpcyB0aGUgYGlwX3ZzX3N5bmNfY29ubmAgZnVuY3Rpb24uIEkgcmVtZW1iZXIgc2VlaW5nIHNvbWUgbW9kaWZpY2F0aW9ucyByZWxhdGVkIHRvIGl0LiBGaXJzdCwgSSBuZWVkIHRvIGNvbmZpcm0gaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYC4gQ2hlY2tpbmcgaXRzIHNpZ25hdHVyZSwgYHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKWAsIG5vcGUsIGl0J3Mgbm90IHN0YXRpYy4gR29vZC4gVGhhdCBleHBhbmRzIG15IHNlYXJjaCBzb21ld2hhdC5cblxuQXJlIHRoZXJlIG90aGVyIGZ1bmN0aW9uIG5hbWVzIGluIHJlbGF0aW9uIHRvIHRoaXMgY29kZT8gSSBzZWUgYGh0b25fc2VxYCBpcyBgc3RhdGljYC4gQW5kIG1heWJlIGlubGluZWQ/IE9yIGp1c3QgYHN0YXRpY2A/IERvZXNuJ3Qgc2VlbSB0byBiZSB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIGNvZGUsIHRob3VnaC4gSXQgc2VlbXMgYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGNyaXRpY2FsIGZ1bmN0aW9uLlxuXG5Ob3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCB3aGVyZSBgaXBfdnNfc3luY19jb25uYCBpcyBhY3R1YWxseSBjYWxsZWQgZnJvbS4gSSdsbCBuZWVkIHRvIHRyYWNlIGl0cyB1c2FnZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdCBvZiB0aG9zZSBtb2RpZmljYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ4NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjowNC4wODAwMjg2NDlaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxMTI0MDQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfY29ublxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDMzLVxcdGlmIChpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzNDpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHN5c2N0bF9zeW5jX3RocmVzaG9sZChpcHZzKSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDM1LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDg4PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjU4LVxcdCAqXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYzoyMjU5OlxcdCAqIEZvciBPTkVfUEtUIGxldCBpcF92c19zeW5jX2Nvbm4oKSBkbyB0aGUgZmlsdGVyIHdvcmsuXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjYwLVxcdCAqL1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY3LVxcdGlmIChpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2ODpcXHRcXHRpcF92c19zeW5jX2Nvbm4oaXB2cywgY3AsIHBrdHMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmMtMjI2OS1cXHRlbHNlIGlmICgoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2Vjb250cm9sKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTYxOS1cXHRcXHRcXHRwa3RzID0gc3lzY3RsX3N5bmNfdGhyZXNob2xkKGlwdnMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjIwOlxcdFxcdGlwX3ZzX3N5bmNfY29ubihpcHZzLCBjcCwgcGt0cyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjEtXFx0fVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MjgtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo2Mjk6dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy02MzAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjowNC4xNTExNTk0OTRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE4NzMzNjQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKklQVlMgU3luY2hyb25pemF0aW9uIENvbnRleHQqKlxuXG5SaWdodCwgc28gYGlwX3ZzX3N5bmNfY29ubmAgaXMgdGhlIGtleSBmdW5jdGlvbiB0byB0cmFjZSBoZXJlLiBJIGtub3cgaXQncyBjYWxsZWQgZnJvbSBib3RoIGBpcF92c19pbl9ob29rYCBhbmQgYGlwX3ZzX2Nvbm5fZXhwaXJlYC4gVGhlIGZpcnN0LCBgaXBfdnNfaW5faG9va2AsIGlzIHRoZSBuZXRmaWx0ZXIgaG9vayBmb3IgSVBWUywgc28gdGhhdCdzIHdoZXJlIGluY29taW5nIHBhY2tldCBwcm9jZXNzaW5nIGhhcHBlbnMuIEFuZCBgaXBfdnNfY29ubl9leHBpcmVgIGRlYWxzIHdpdGgsIHdlbGwsIGV4cGlyaW5nIGNvbm5lY3Rpb25zLiBNYWtlcyBzZW5zZSB0byB3YW50IHRvIHN5bmMgdGhlbSBib3RoLiBgaXBfdnNfc3luY19jb25uYCBmZWVscyBsaWtlIGEgZ29vZCwgZm9jdXNlZCBzeW1ib2wgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIHN5bmNocm9uaXphdGlvbiBtZWNoYW5pc20uXG5cbkJ1dCBob2xkIG9uLCBgaXBfdnNfc3luY19jb25uYCBpc24ndCAqYWx3YXlzKiBjYWxsZWQuIEl0J3MgY29uZGl0aW9uYWxseSBleGVjdXRlZCBiYXNlZCBvbiB0aGUgYGlwdnMtXHUwMDNlc3luY19zdGF0ZWAgYW5kIHRoZSBgSVBfVlNfU1RBVEVfTUFTVEVSYCBiaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIGBzeW5jX3N0YXRlYCB2YXJpYWJsZSBnZXRzIHNldC4gV2hlcmUncyB0aGUgY29udHJvbCBwbGFuZSBmb3IgdGhpcz8gSSdtIGd1ZXNzaW5nIHRoYXQgc3RhcnRpbmcgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24gaXMgdGhlIGNyaXRpY2FsIGZhY3Rvci4gV2hlcmUgaXMgdGhhdCBkYWVtb24gY29uZmlndXJlZD9cblxuSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBjYWxscyByZWxhdGVkIHRvIHNldHRpbmcgdXAgdGhlIHN5bmNocm9uaXphdGlvbiBkYWVtb24uIFNvLCBsZXQncyBleHBsb3JlIGBpcF92c19nZW5sX3NldF9jbWRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBsaWtlbHkgaW4gdGhlIEdlbmVyaWMgTmV0bGluayBpbnRlcmZhY2UgY29kZSBmb3IgSVBWUy4gVGhhdCBzaG91bGQgYmUgd2hlcmUgdGhlIHN0YXRlIGJpdHMgYXJlIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI2NTEsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MDguMzM4NDk5MTE4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNzk3MzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSVBfVlNfU1RBVEVfTUFTVEVSXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYz0xMzY0PXN0YXRpYyB2b2lkIGlwX3ZzX2Nvbm5fZXhwaXJlKHN0cnVjdCB0aW1lcl9saXN0ICp0KVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2Nvbm4uYy0xNDMyLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb25uLmM6MTQzMzpcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29ubi5jLTE0MzQtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBzeXNjdGxfc3luY190aHJlc2hvbGQoaXB2cykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYz0yMDg4PWlwX3ZzX2luX2hvb2sodm9pZCAqcHJpdiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mX2hvb2tfc3RhdGUgKnN0YXRlKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2NvcmUuYy0yMjY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jb3JlLmM6MjI2NzpcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY29yZS5jLTIyNjgtXFx0XFx0aXBfdnNfc3luY19jb25uKGlwdnMsIGNwLCBwa3RzKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYz0zNzMzPWRvX2lwX3ZzX2dldF9jdGwoc3RydWN0IHNvY2sgKnNrLCBpbnQgY21kLCB2b2lkIF9fdXNlciAqdXNlciwgaW50ICpsZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtMzc2NC1cXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6Mzc2NTpcXHRcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzozNzY2OlxcdFxcdFxcdGRbMF0uc3RhdGUgPSBJUF9WU19TVEFURV9NQVNURVI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX2N0bC5jLTM3NjctXFx0XFx0XFx0c3Ryc2NweShkWzBdLm1jYXN0X2lmbiwgaXB2cy1cXHUwMDNlbWNmZy5tY2FzdF9pZm4sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM9NDQ4OD1zdGF0aWMgaW50IGlwX3ZzX2dlbmxfZHVtcF9kYWVtb25zKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmMtNDQ5NC1cXHRtdXRleF9sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX211dGV4KTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfY3RsLmM6NDQ5NTpcXHRpZiAoKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpIFxcdTAwMjZcXHUwMDI2ICFjYi1cXHUwMDNlYXJnc1swXSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYzo0NDk2OlxcdFxcdGlmIChpcF92c19nZW5sX2R1bXBfZGFlbW9uKHNrYiwgSVBfVlNfU1RBVEVfTUFTVEVSLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19jdGwuYy00NDk3LVxcdFxcdFxcdFxcdFxcdCAgIFxcdTAwMjZpcHZzLVxcdTAwM2VtY2ZnLCBjYikgXFx1MDAzYyAwKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0zNjE9c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2Ni1cXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzozNjc6XFx0aWYgKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTM2OC1cXHQgICAgbXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuIFxcdTAwM2Mgc3lzY3RsX3N5bmNfcWxlbl9tYXgoaXB2cykpIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NTgtXFx0c3Bpbl9sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1NTk6XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2MC1cXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY2MS1cXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjY2MjpcXHRpZiAoIShpcHZzLVxcdTAwM2VzeW5jX3N0YXRlIFxcdTAwMjYgSVBfVlNfU1RBVEVfTUFTVEVSKSkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjYzLVxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE3Mzg9aW50IHN0YXJ0X3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19zeW5jX2RhZW1vbl9jZmcgKmMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MjYtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODI3OlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4MjgtXFx0XFx0cmVzdWx0ID0gLUVFWElTVDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg0Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4NDg6XFx0aWYgKHN0YXRlID09IElQX1ZTX1NUQVRFX01BU1RFUikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg0OS1cXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXM7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4ODAtXFx0XFx0dGluZm8tXFx1MDAzZWlkID0gaWQ7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODgxOlxcdFxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODgyLVxcdFxcdFxcdHJlc3VsdCA9IG1ha2Vfc2VuZF9zb2NrKGlwdnMsIGlkLCBkZXYsIFxcdTAwMjZ0aW5mby1cXHUwMDNlc29jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4OTctXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxODk4OlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODk5LVxcdFxcdGlwdnMtXFx1MDAzZW1hc3Rlcl90aW5mbyA9IHRpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTIyLVxcdH1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5MjM6XFx0aWYgKCEoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUikpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5MjQtXFx0XFx0a2ZyZWUoaXB2cy1cXHUwMDNlbXMpO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjItXFx0bXV0ZXhfbG9jayhcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19tdXRleCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTYzOlxcdGlmIChzdGF0ZSA9PSBJUF9WU19TVEFURV9NQVNURVIpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjQtXFx0XFx0cmV0YyA9IC1FU1JDSDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk3Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTc3OlxcdFxcdGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNj0gfklQX1ZTX1NUQVRFX01BU1RFUjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NzgtXFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTIwNTA9dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1NDpcXHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cXHRpZiAocmV0YyBcXHUwMDI2XFx1MDAyNiByZXRjICE9IC1FU1JDSClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MDguNDM4Njk1NzYxWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyMDIwNTA1MDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBJUFZTIFN5bmNocm9uaXphdGlvbiBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gaGVyZSdzIHdoYXQgSSd2ZSBnb3QuIFRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBpcyB0aGUgZGFlbW9uLCBpbml0aWF0ZWQgdGhyb3VnaCBuZXRsaW5rLCBzcGVjaWZpY2FsbHkgdXNpbmcgc29tZXRoaW5nIGxpa2UgYGlwX3ZzX2dlbmxfc2V0X2NtZGAgYW5kIHRoZSBgc3RhcnRfc3luY190aHJlYWRgIGZ1bmN0aW9uLiBUaGF0IG1lYW5zIGl0J3MgZnVsbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSBieSBzZW5kaW5nIHBhY2tldHMsIHdoaWNoIGlzIGEga2V5IGF0dGFjayB2ZWN0b3IuIFRoZSBjcml0aWNhbCBjb25maWd1cmF0aW9uIGVsZW1lbnQgaGVyZSBpcyBgSVBfVlNgIC0gdGhhdCdzIHRoZSBtYWluIG9uZSB0byBmb2N1cyBvbi4gSSdsbCBpbmNsdWRlIGBJUF9WU19QUk9UT19UQ1BgIGFuZCBgSVBfVlNfUFJPVE9fVURQYCBhcyBhIHNhZmVndWFyZCwganVzdCBpbiBjYXNlLCBidXQgYElQX1ZTYCBpcyB0aGUgbW9zdCBpbXBvcnRhbnQuIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIGRlcGVuZGVuY2llcyBmb3IgYElQX1ZTYC4uLiBgSU5FVGAgYW5kIGBORVRGSUxURVJgIGFyZSByZXF1aXJlZC4gYE5GX0NPTk5UUkFDS2AgaXMgcHJvYmFibHkgYSBnb29kIGlkZWEgdG8gaGF2ZSBlbmFibGVkIHRvbywgZXZlbiBpZiBpdCdzIG9wdGlvbmFsLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgc3BlY2lmaWMgZnVuY3Rpb25zLiBJdCBsb29rcyBsaWtlIGBpcF92c19zeW5jX2Nvbm5gIGlzIHRoZSBvbmUgdG8gZm9jdXMgb24uIFRoZXJlJ3MgYW4gb2xkZXIgZnVuY3Rpb24gYGlwX3ZzX3N5bmNfY29ubl92MGAsIGJ1dCB0aGUgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGBpcF92c19zeW5jX2Nvbm5gLiBTcGVjaWZpY2FsbHksIGl0J3MgbW9kaWZ5aW5nIHRoZSBjb2RlIGluIGBpcF92c19zeW5jLmNgLlxuXG5JJ3ZlIGdvdCB0aGUgcGF0Y2ggaW4gZnJvbnQgb2YgbWU6XG5gYGBjXG5AQCAtNzQ3LDkgKzc0Nyw5IEBAIHZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxuIFx0aWYgKGNwLVx1MDAzZWZsYWdzIFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcbiBcdFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XG4gXHRcdCoocCsrKSA9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19jb25uX29wdGlvbnMpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZWluX3NlcSk7XG4rXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcbiBcdFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XG4tXHRcdGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlb3V0X3NlcSk7XG4rXHRcdGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gXHRcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuIFx0fVxuIFx0LyogSGFuZGxlIHBlIGRhdGEgKi9cbmBgYFxuXG5ZZXMsIHRoYXQgY29uZmlybXMgaXQ6IGl0J3MgYWxsIGFib3V0IGBpcF92c19zeW5jX2Nvbm5gLiBTbyBgRm9jdXNTeW1ib2xzYCBpcyBgaXBfdnNfc3luY19jb25uYCwgYW5kIHRoZSBwcmltYXJ5IGBFbmFibGVDb25maWdzYCBpcyBgSVBfVlNgLiBMZXQgbWUgdmVyaWZ5IHRoaXMgb25lIG1vcmUgdGltZS5cblxuWXVwLCBgQ09ORklHX0lQX1ZTYCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uLiAgYENPTkZJR19ORVRGSUxURVJgIGFuZCBgQ09ORklHX0lORVRgIGFyZSBzdGFuZGFyZCBjb25maWd1cmF0aW9ucywgYnV0IHRoZXkgYXJlIHN0aWxsIGltcG9ydGFudC4gSSdsbCBhZGQgYElQX1ZTYCB0byBFbmFibGVDb25maWdzLlxuXG5Ob3csIGEgY3J1Y2lhbCBxdWVzdGlvbjogaXMgdGhpcyByZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gQWJzb2x1dGVseS4gSVBWUyBpcyBhIHNvZnR3YXJlIGxvYWQgYmFsYW5jZXIsIG5vdCBoYXJkd2FyZS1kZXBlbmRlbnQuIENvbmZpZ3VyYXRpb24gaGFwcGVucyBvdmVyIG5ldGxpbmssIGFuZCB0aGVuIHBhY2tldCB0cmlnZ2VycyBpdCwgbWFraW5nIGl0IGFjY2Vzc2libGUgZXZlbiBpbiB2aXJ0dWFsIG1hY2hpbmVzLlxuXG5TbywgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlOiB0aGlzIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBkaXNjbG9zdXJlIGluIGBpcF92c19zeW5jX2Nvbm5gLiBUaGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLCBsZWFkaW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0YXRlLCBzcGVjaWZpY2FsbHkgYGNwLVx1MDAzZWluX3NlcWAgYW5kIGBjcC1cdTAwM2VvdXRfc2VxYCwgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB1bmluaXRpYWxpemVkIGRhdGEgZnJvbSB0aGUgcGFja2V0IGJ1ZmZlciwgd2hpbGUgKmFsc28qIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyB0cmlnZ2VyZWQgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBtb2RlIGFuZCBwcm9jZXNzaW5nIGluY29taW5nIHBhY2tldHMuIFRoZSBmaXggaGFzIHJlYWwgZnVuY3Rpb25hbCBpbXBsaWNhdGlvbnMsIGFuZCB0aGlzIHNob3VsZCBkZWZpbml0ZWx5IGJlIGEgZm9jdXMgZm9yIGZ1enppbmcuXG5cbk5vdyBJIGFtIGNhbGxpbmcgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMjMsIk91dHB1dFRva2VucyI6MTUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjIwLjQ1OTIwNDA5OVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDU0MjY1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVBfVlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcF92c19zeW5jX2Nvbm5cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBjb3JydXB0aW9uIGFuZCB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkL3dyaXRlIGJ1ZyBpbiBgaXBfdnNfc3luY19jb25uYCB3aGVyZSB0aGUgYXJndW1lbnRzIHRvIGBodG9uX3NlcWAgd2VyZSBzd2FwcGVkLiBUaGlzIGNhdXNlZCB0aGUgY29ubmVjdGlvbiBzdGF0ZSAoYGNwLVxcdTAwM2Vpbl9zZXFgIGFuZCBgY3AtXFx1MDAzZW91dF9zZXFgKSB0byBiZSBvdmVyd3JpdHRlbiB3aXRoIHVuaW5pdGlhbGl6ZWQgcGFja2V0IGJ1ZmZlciBkYXRhLCB3aGlsZSBsZWF2aW5nIHRoZSBwYWNrZXQgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuIFRoaXMgZnVuY3Rpb24gaXMgcmVhY2hhYmxlIHdoZW4gdGhlIElQVlMgc3luYyBkYWVtb24gaXMgcnVubmluZyBpbiBNQVNURVIgc3RhdGUgYW5kIHByb2Nlc3NpbmcgcGFja2V0cy4gVGhlIGZpeCBoYXMgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGltcGFjdCBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUF9WU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwX3ZzX3N5bmNfY29ublwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGNvcnJ1cHRpb24gYW5kIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWQvd3JpdGUgYnVnIGluIGBpcF92c19zeW5jX2Nvbm5gIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxYCB3ZXJlIHN3YXBwZWQuIFRoaXMgY2F1c2VkIHRoZSBjb25uZWN0aW9uIHN0YXRlIChgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWApIHRvIGJlIG92ZXJ3cml0dGVuIHdpdGggdW5pbml0aWFsaXplZCBwYWNrZXQgYnVmZmVyIGRhdGEsIHdoaWxlIGxlYXZpbmcgdGhlIHBhY2tldCBidWZmZXIgdW5pbml0aWFsaXplZC4gVGhpcyBmdW5jdGlvbiBpcyByZWFjaGFibGUgd2hlbiB0aGUgSVBWUyBzeW5jIGRhZW1vbiBpcyBydW5uaW5nIGluIE1BU1RFUiBzdGF0ZSBhbmQgcHJvY2Vzc2luZyBwYWNrZXRzLiBUaGUgZml4IGhhcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgaW1wYWN0IGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyMC41NTk3NTQwODNaIiwiU2VxIjoyMywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkwNjE5NTQ5MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjIwLjU2MDQwMDg2M1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNTg5MDU1NDUxNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgYnVnIHdoZXJlIHRoZSBhcmd1bWVudHMgdG8gYGh0b25fc2VxKClgIHdlcmUgc3dhcHBlZC4gQmVjYXVzZSBvZiB0aGlzIHN3YXAsIHRoZSBjb2RlIHdhcyByZWFkaW5nIGZyb20gdGhlIG5ldHdvcmsgYnVmZmVyIHBvaW50ZXIgYHBgIGFuZCB3cml0aW5nIHRvIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZSBgY3AtXFx1MDAzZWluX3NlcWAgYW5kIGBjcC1cXHUwMDNlb3V0X3NlcWAuIFRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgaXMgYWxsb2NhdGVkIHZpYSBga21hbGxvYygpYCBpbiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZSgpYCBhbmQgaXMgdW5pbml0aWFsaXplZC4gXFxuXFxuVGhpcyBidWcgaGFzIHR3byBjb25zZXF1ZW5jZXM6XFxuMS4gSXQgcmVhZHMgdW5pbml0aWFsaXplZCBoZWFwIG1lbW9yeSBmcm9tIGBwYCBhbmQgY29ycnVwdHMgdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlLlxcbjIuIEl0IGxlYXZlcyB0aGUgbmV0d29yayBidWZmZXIgYHBgIHVuaW5pdGlhbGl6ZWQgYXQgdGhlIGxvY2F0aW9ucyB3aGVyZSB0aGUgc2VxdWVuY2UgbnVtYmVycyBzaG91bGQgaGF2ZSBiZWVuIHdyaXR0ZW4uIFRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgaXMgc3Vic2VxdWVudGx5IHNlbnQgb3ZlciB0aGUgbmV0d29yayB2aWEgYGtlcm5lbF9zZW5kbXNnKClgIGluIHRoZSBzeW5jIHRocmVhZCwgcmVzdWx0aW5nIGluIGFuIGluZm8tbGVhayBvZiBrZXJuZWwgaGVhcCBtZW1vcnkgdG8gdGhlIG5ldHdvcmsuXFxuXFxuS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBpbmZvLWxlYWtzIHRvIHVzZXIgc3BhY2Ugb3Igb3ZlciB0aGUgbmV0d29yay4gS0FTQU4sIG9uIHRoZSBvdGhlciBoYW5kLCBvbmx5IGRldGVjdHMgbWVtb3J5IGNvcnJ1cHRpb24gYnVncyBsaWtlIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgYW5kIHVzZS1hZnRlci1mcmVlcy4gU2luY2UgYWxsIG1lbW9yeSBhY2Nlc3NlcyBoZXJlIGFyZSB3aXRoaW4gYm91bmRzIGFuZCBvbiBsaXZlIG9iamVjdHMsIEtBU0FOIHdpbGwgbm90IGRldGVjdCB0aGlzIGJ1Zy4gQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIGhpZ2hseSBqdXN0aWZpZWQgdG8gY2F0Y2ggdGhpcyBhbmQgc2ltaWxhciB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcy5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGJmYzUyMzMxMjQ3ZWUzNTg5MGVkMGVjYmRiMTkzNjAyNGZiNjc2YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEF1ZyAxMSAwMToxMToyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMgYi9uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXG5pbmRleCA5MzAzOGFiYmY1ZTA0Li5mNmVhNmM5NTM1ZWIzIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuKysrIGIvbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1xuQEAgLTc0Nyw5ICs3NDcsOSBAQCB2b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcbiBcdGlmIChjcC1cdTAwM2VmbGFncyBcdTAwMjYgSVBfVlNfQ09OTl9GX1NFUV9NQVNLKSB7XG4gXHRcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xuIFx0XHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcbi1cdFx0aHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO1xuK1x0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XG4gXHRcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xuLVx0XHRodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZW91dF9zZXEpO1xuK1x0XHRodG9uX3NlcShcdTAwMjZjcC1cdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xuIFx0XHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcbiBcdH1cbiBcdC8qIEhhbmRsZSBwZSBkYXRhICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyMC41NjA0MDE4MTJaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzg4MDYyMzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHNpdHVhdGlvbiwgcHJlc2VudGVkIGZyb20gbXkgcGVyc3BlY3RpdmUgYXMgYW4gZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgSVBWUyBTeW5jaHJvbml6YXRpb24gQnVnKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGZsb2F0aW5nIGFyb3VuZCBpbiBgbmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY2AuIE15IHNwaWRleS1zZW5zZSBpcyB0aW5nbGluZyBiZWNhdXNlIHRoZSBjaGFuZ2UgaXMgYSBiaXQgdW51c3VhbC4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyBsaWtlIHRoZXkndmUgZmxpcHBlZCB0aGUgYXJndW1lbnRzIHRvIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGNhbGxzLiBJdCdzIGdvaW5nIGZyb20gYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtgIHRvIGBodG9uX3NlcShcdTAwMjZjcC1cdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7YCBhbmQgdGhlIHNhbWUgY2hhbmdlIGlzIGRvbmUgZm9yIGBvdXRfc2VxYC4gVGhhdCdzIG5vdCB0aGUgdHlwaWNhbCB3YXkgSSdkIGV4cGVjdCB0byBzZWUgdGhvc2UgY2FsbHMgY29uc3RydWN0ZWQuIFRoZSBvcmRlciBvZiBhcmd1bWVudHMgaW4gdGhlc2UgbmV0d29ya2luZyBmdW5jdGlvbnMgaXMgY3JpdGljYWwsIHNvIHRoaXMgaW1tZWRpYXRlbHkgd2FycmFudHMgYSBkZWVwZXIgbG9vay4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBnZXQgdGhlIGRlZmluaXRpb24gb2YgYGh0b25fc2VxYCBhbmQgdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGNoYW5nZSB3YXMgbWFkZSwgYW5kIGlmIGl0J3MgdGhlIGNvcnJlY3Rpb24gb2YgYSBidWcsIG9yIGFuIGludHJvZHVjdGlvbiBvZiBhIG5ldyBvbmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYHBgIGFuZCBgY3AtXHUwMDNlaW5fc2VxYCByZXByZXNlbnQgaW4gdGVybXMgb2YgdGhlaXIgaW50ZW5kZWQgcm9sZXMgaW4gdGhlIGRhdGEgc3RydWN0dXJlLCBhbmQgaG93IGBodG9uX3NlcWAgYWN0dWFsbHkgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMTksIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjI0LjQ0MTAyODQwN1oiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2Mzg2OTg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh0b25fc2VxXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01Mi1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjUzOiNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXHRcXHQvKiBVc2VkIGZvciBudG9oX3NlcSBhbmQgaHRvbl9zZXEgKi9cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU0LVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0yODM9c3RhdGljIHZvaWQgbnRvaF9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqbm8sIHN0cnVjdCBpcF92c19zZXEgKmhvKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yOTQtICovXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTU6c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjk2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NjI5PXZvaWQgaXBfdnNfc3luY19jb25uKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsIGludCBwa3RzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NDktXFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTA6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2Vpbl9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03NTEtXFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo3NTI6XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzUzLVxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjoyNC42NTc0MTk1OTJaIiwiU2VxIjoyNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM5NzI4MzU0NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipBbmFseXppbmcgdGhlIGBodG9uX3NlcWAgSW1wbGVtZW50YXRpb24qKlxuXG5BbHJpZ2h0LCB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhpcyBgaHRvbl9zZXFgIGltcGxlbWVudGF0aW9uLiBJIGtub3cgdGhlIGdlbmVyYWwgaWRlYSAtIGl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG9zdC10by1uZXR3b3JrIGJ5dGUgb3JkZXIgY29udmVyc2lvbiwgcHJvYmFibHkgZm9yIHNlcXVlbmNlIG51bWJlcnMgb3Igc29tZSBvdGhlciBpbnRlZ2VyIGRhdGEuIEdpdmVuIG15IGJhY2tncm91bmQsIEkgY2FuIHByb2JhYmx5IGd1ZXNzIHRoZSBjb250ZXh0LCBhbmQgdGhlcmVmb3JlIEkgc2hvdWxkIHVuZGVyc3RhbmQgdGhpcyBxdWlja2x5LCBidXQgbGV0J3MgbWFrZSBzdXJlLiBUaGUgZmlyc3QgdGhpbmcgSSB3aWxsIGRvIGlzIHJlYWQgdGhlIGNvZGUgZGlyZWN0bHkuIEknbGwgZm9jdXMgb24gZGF0YSB0eXBlcyB1c2VkLCBiaXR3aXNlIG9wZXJhdGlvbnMgZW1wbG95ZWQsIGFuZCBhbnkgcGxhdGZvcm0tc3BlY2lmaWMgYXNwZWN0cy4gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB3YXkgdGhlIGZ1bmN0aW9uIGhhbmRsZXMgZGlmZmVyZW50IGludGVnZXIgc2l6ZXMgKGUuZy4sIDE2LWJpdCwgMzItYml0LCA2NC1iaXQpLiBUaGUgZ29hbCBpcyBub3QganVzdCB0byB1bmRlcnN0YW5kIHRoZSBtZWNoYW5pY3MsIGJ1dCB0byBpbmZlciB0aGUgcmVhc29uaW5nIGJlaGluZCBhbnkgc3BlY2lmaWMgZGVzaWduIGNob2ljZXMgYW5kIGV2YWx1YXRlIHRoZSBvdmVyYWxsIGVmZmljaWVuY3kgYW5kIHBvcnRhYmlsaXR5IG9mIHRoZSBmdW5jdGlvbiwgYW5kIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBwb3RlbnRpYWwgcGl0ZmFsbHMuIEl0J3MgbGlrZWx5IEknbGwgYmUgYWJsZSB0byBjb21wYXJlIGl0IHRvIG90aGVyIGltcGxlbWVudGF0aW9ucyBJJ3ZlIHNlZW4sIHNvIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGNsZXZlciBvcHRpbWl6YXRpb25zIG9yIHBvdGVudGlhbCBpbmVmZmljaWVuY2llcy4gSWYgaXQgaXMgaW50ZXJlc3RpbmcsIEkgbWF5IGJlIGluY2xpbmVkIHRvIGNvbXBhcmUgaXQgd2l0aCBvdGhlciBpbXBsZW1lbnRhdGlvbnMgSSBoYXZlIGNvbWUgYWNyb3NzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDAxLCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MjguMDU0NzA3ODJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTEzNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjkwLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjkwOlxcdFxcbiAyOTE6XFx0LypcXG4gMjkyOlxcdCAqIENvcHkgb2Ygc3RydWN0IGlwX3ZzX3NlcVxcbiAyOTM6XFx0ICogRnJvbSBBbGlnbmVkIGhvc3Qgb3JkZXIgdG8gdW5hbGlnbmVkIG5ldHdvcmsgb3JkZXJcXG4gMjk0OlxcdCAqL1xcbiAyOTU6XFx0c3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxcbiAyOTY6XFx0e1xcbiAyOTc6XFx0XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxuIDI5ODpcXHRcXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXFx1MDAzZWRlbHRhLCBcXHUwMDI2bm8tXFx1MDAzZWRlbHRhKTtcXG4gMjk5OlxcdFxcdHB1dF91bmFsaWduZWRfYmUzMihoby1cXHUwMDNlcHJldmlvdXNfZGVsdGEsIFxcdTAwMjZuby1cXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xcbiAzMDA6XFx0fVxcbiAzMDE6XFx0XFxuIDMwMjpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiAzMDM6XFx0c2JfZGVxdWV1ZShzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzMDQ6XFx0e1xcbiAzMDU6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMwNjpcXHRcXG4gMzA3OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19sb2NrKTtcXG4gMzA4OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZtcy1cXHUwMDNlc3luY19xdWV1ZSkpIHtcXG4gMzA5OlxcdFxcdFxcdHNiID0gTlVMTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MjguMDU0ODIyOFoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTY1NzMxNDc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgU2VxdWVuY2UgTnVtYmVyIENvbnZlcnNpb24qKlxuXG5Pa2F5LCBzbyBgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKWAgLSByaWdodCwgaG9zdCBvcmRlciBmaXJzdCwgbmV0d29yayBvcmRlciBzZWNvbmQuIFRoZSBwYXRjaCBzd2FwcGVkIHRoZSBhcmd1bWVudHMgaW4gdGhlIGNhbGwgZnJvbSBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AgdG8gYGh0b25fc2VxKFx1MDAyNmNwLVx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtgLiBJIG5lZWQgdG8gdGhpbmsgdGhpcyB0aHJvdWdoIGNhcmVmdWxseS5cblxuQmVmb3JlLCBgaG9gIHdhcyBhc3NpZ25lZCBgKHN0cnVjdCBpcF92c19zZXEgKilwYCBhbmQgYG5vYCB3YXMgYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAuIFRoYXQgbWVhbnMgaXQgd2FzIHJlYWRpbmcgc2VxdWVuY2UgaW5mb3JtYXRpb24gKmZyb20qIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYHBgLCBhbmQgd3JpdGluZyB0aGUgY29udmVydGVkIG5ldHdvcmstb3JkZXJlZCBzZXF1ZW5jZSAqdG8qIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLiBUaGlzIGlzIGJhZCwgdGhlIG1lbW9yeSBhdCBgcGAgaXMgbm90IGluaXRpYWxpemVkIHdoZW4gcmVhZGluZy5cblxuQnV0IHdhaXQsIGBwYCAqaXMqIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UncmUgYnVpbGRpbmchIFRoYXQgY29udGV4dCBjaGFuZ2VzIHRoaW5ncy4gVGhpcyBsb29rcyBsaWtlIGEgc2VyaW91cyBidWcsIHNvIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGUgbG9naWMgaW4gYGlwX3ZzX3N5bmNfY29ubmAganVzdCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTk3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MzIuMjIwNTU3OTE1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDczMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDczMDpcXHRcXHRzLVxcdTAwM2V2NC50aW1lb3V0ID0gaHRvbmwoY3AtXFx1MDAzZXRpbWVvdXQgLyBIWik7XFxuIDczMTpcXHRcXHRtLVxcdTAwM2Vucl9jb25ucysrO1xcbiA3MzI6XFx0XFxuIDczMzpcXHQjaWZkZWYgQ09ORklHX0lQX1ZTX0lQVjZcXG4gNzM0OlxcdFxcdGlmIChjcC1cXHUwMDNlYWYgPT0gQUZfSU5FVDYpIHtcXG4gNzM1OlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNzM2OlxcdFxcdFxcdHMtXFx1MDAzZXY2LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmluNjtcXG4gNzM3OlxcdFxcdFxcdHMtXFx1MDAzZXY2LnZhZGRyID0gY3AtXFx1MDAzZXZhZGRyLmluNjtcXG4gNzM4OlxcdFxcdFxcdHMtXFx1MDAzZXY2LmRhZGRyID0gY3AtXFx1MDAzZWRhZGRyLmluNjtcXG4gNzM5OlxcdFxcdH0gZWxzZVxcbiA3NDA6XFx0I2VuZGlmXFxuIDc0MTpcXHRcXHR7XFxuIDc0MjpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY192NCk7XFx0Lyogb3B0aW9ucyBwdHIgKi9cXG4gNzQzOlxcdFxcdFxcdHMtXFx1MDAzZXY0LmNhZGRyID0gY3AtXFx1MDAzZWNhZGRyLmlwO1xcbiA3NDQ6XFx0XFx0XFx0cy1cXHUwMDNldjQudmFkZHIgPSBjcC1cXHUwMDNldmFkZHIuaXA7XFxuIDc0NTpcXHRcXHRcXHRzLVxcdTAwM2V2NC5kYWRkciA9IGNwLVxcdTAwM2VkYWRkci5pcDtcXG4gNzQ2OlxcdFxcdH1cXG4gNzQ3OlxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfU0VRX01BU0spIHtcXG4gNzQ4OlxcdFxcdFxcdCoocCsrKSA9IElQVlNfT1BUX1NFUV9EQVRBO1xcbiA3NDk6XFx0XFx0XFx0KihwKyspID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX2Nvbm5fb3B0aW9ucyk7XFxuIDc1MDpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZWluX3NlcSwgKHN0cnVjdCBpcF92c19zZXEgKilwKTtcXG4gNzUxOlxcdFxcdFxcdHAgKz0gc2l6ZW9mKHN0cnVjdCBpcF92c19zZXEpO1xcbiA3NTI6XFx0XFx0XFx0aHRvbl9zZXEoXFx1MDAyNmNwLVxcdTAwM2VvdXRfc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTM6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1NDpcXHRcXHR9XFxuIDc1NTpcXHRcXHQvKiBIYW5kbGUgcGUgZGF0YSAqL1xcbiA3NTY6XFx0XFx0aWYgKGNwLVxcdTAwM2VwZV9kYXRhX2xlbiBcXHUwMDI2XFx1MDAyNiBjcC1cXHUwMDNlcGVfZGF0YSkge1xcbiA3NTc6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfUEVfREFUQTtcXG4gNzU4OlxcdFxcdFxcdCoocCsrKSA9IGNwLVxcdTAwM2VwZV9kYXRhX2xlbjtcXG4gNzU5OlxcdFxcdFxcdG1lbWNweShwLCBjcC1cXHUwMDNlcGVfZGF0YSwgY3AtXFx1MDAzZXBlX2RhdGFfbGVuKTtcXG4gNzYwOlxcdFxcdFxcdHAgKz0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NjE6XFx0XFx0XFx0aWYgKHBlX25hbWVfbGVuKSB7XFxuIDc2MjpcXHRcXHRcXHRcXHQvKiBBZGQgUEVfTkFNRSAqL1xcbiA3NjM6XFx0XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfUEVfTkFNRTtcXG4gNzY0OlxcdFxcdFxcdFxcdCoocCsrKSA9IHBlX25hbWVfbGVuO1xcbiA3NjU6XFx0XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZS1cXHUwMDNlbmFtZSwgcGVfbmFtZV9sZW4pO1xcbiA3NjY6XFx0XFx0XFx0XFx0cCArPSBwZV9uYW1lX2xlbjtcXG4gNzY3OlxcdFxcdFxcdH1cXG4gNzY4OlxcdFxcdH1cXG4gNzY5OlxcdFxcbiA3NzA6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNzcxOlxcdFxcbiA3NzI6XFx0Y29udHJvbDpcXG4gNzczOlxcdFxcdC8qIHN5bmNocm9uaXplIGl0cyBjb250cm9sbGVyIGlmIGl0IGhhcyAqL1xcbiA3NzQ6XFx0XFx0Y3AgPSBjcC1cXHUwMDNlY29udHJvbDtcXG4gNzc1OlxcdFxcdGlmICghY3ApXFxuIDc3NjpcXHRcXHRcXHRyZXR1cm47XFxuIDc3NzpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX1RFTVBMQVRFKVxcbiA3Nzg6XFx0XFx0XFx0cGt0cyA9IGF0b21pY19pbmNfcmV0dXJuKFxcdTAwMjZjcC1cXHUwMDNlaW5fcGt0cyk7XFxuIDc3OTpcXHRcXHRlbHNlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjMyLjIyMDY4Mjg5NVoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDc4ODIyNDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQnl0ZSBTd2FwIFNlcXVlbmNlIEJ1ZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBzcGVjaWZpY2FsbHkgYXQgaG93IHRoaXMgYGh0b25fc2VxYCBmdW5jdGlvbiBpcyB1c2VkLCBhbmQgSSB0aGluayBJJ3ZlIHNwb3R0ZWQgYSBidWcuIFJpZ2h0LCBzbyBgcGAgaXMgYSBwb2ludGVyIHRvIHRoZSBidWZmZXIgd2UncmUgY29uc3RydWN0aW5nLiBCZWZvcmUgdGhlIHBhdGNoLCB0aGUgY29kZSB3YXMgY2FsbGluZyBgaHRvbl9zZXFgIGxpa2UgdGhpczogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKWAuIE15IGluaXRpYWwgdGhvdWdodCB3YXMgdGhhdCBpdCdzIHJlYWRpbmcgZnJvbSB0aGUgYnVmZmVyIHBvaW50ZWQgdG8gYnkgYHBgIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB3aGljaCBpcyBhIGZpZWxkIHdpdGhpbiB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXG5cbkJ1dCBoYW5nIG9u4oCmIGxldCBtZSBkb3VibGUgY2hlY2sgdGhlIGZ1bmN0aW9uIHNpZ25hdHVyZSBmb3IgYGh0b25fc2VxYCByZWFsIHF1aWNrLiBBaCwgcmlnaHQuIGBodG9uX3NlcWAgKnJlYWRzKiBmcm9tIHRoZSAqZmlyc3QqIGFyZ3VtZW50IGFuZCAqd3JpdGVzKiB0byB0aGUgKnNlY29uZCogYXJndW1lbnQuIFNvLCB3aXRoIGBodG9uX3NlcSgoc3RydWN0IGlwX3ZzX3NlcSAqKXAsIFx1MDAyNmNwLVx1MDAzZWluX3NlcSlgLCBpdCdzIHJlYWRpbmcgZnJvbSBgcGAg4oCTIHdoaWNoIHBvaW50cyB0byB0aGUgdW5pbml0aWFsaXplZCBidWZmZXIg4oCTIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLlxuXG5Pa2F5LCBJIHNlZSB0aGUgcHJvYmxlbSBub3cuIFRoaXMgaXMgYSBjbGFzc2ljIHJlYWQtZnJvbS11bmluaXRpYWxpemVkLW1lbW9yeS1hbmQtb3ZlcndyaXRlLWEtc3RydWN0dXJlIGJ1Zy4gSW5zdGVhZCBvZiB3cml0aW5nIHRoZSAqY29ycmVjdCogYGNwLVx1MDAzZWluX3NlcWAgdmFsdWVzIHRvIHRoZSBidWZmZXIsIGl0J3MgdGFraW5nIHdoYXRldmVyIGdhcmJhZ2UgaXMgY3VycmVudGx5IGluIHRoZSBidWZmZXIgYXQgdGhlIGFkZHJlc3MgYHBgIGFuZCAqb3ZlcndyaXRpbmcqIGBjcC1cdTAwM2Vpbl9zZXFgIHdpdGggdGhhdCB1bmluaXRpYWxpemVkIGRhdGEhIFRoYXQgbWVhbnMgdGhhdCB0aGUgY29ubmVjdGlvbidzIHNlcXVlbmNlIG51bWJlciBpcyBiZWluZyBzZXQgdG8gcmFuZG9tIHZhbHVlcywgd2hpY2ggaXMgZGVmaW5pdGVseSBnb2luZyB0byBjYXVzZSBwcm9ibGVtcy5cblxuV2FpdCBhIHNlY29uZCwgaWYgdGhlIGNvZGUgaXMgcmVhZGluZyBmcm9tIGBwYCAod2hpY2ggaXMgdW5pbml0aWFsaXplZCBtZW1vcnkpIGFuZCB3cml0aW5nIHRvIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB0aGVuIHRoZSBjb250ZW50cyBvZiBgY3AtXHUwMDNlaW5fc2VxYCB3b3VsZCBiZSBzZXQgdG8gd2hhdGV2ZXIgcmFuZG9tIGRhdGEgaGFwcGVuZWQgdG8gYmUgYXQgdGhhdCBtZW1vcnkgbG9jYXRpb24gaW4gdGhlIGJ1ZmZlciwgd2hpY2ggbGVhZHMgdG8gYSB1c2UtYWZ0ZXItaW5pdGlhbGl6YXRpb24gcHJvYmxlbSBhbmQgbGlrZWx5IGRhdGEgY29ycnVwdGlvbi5cblxuVGhpbmtpbmcgYWJvdXQgdGhpcyBmcm9tIGEgZGVidWdnaW5nIHBlcnNwZWN0aXZlLCB0aGUgS01TQU4gKEtlcm5lbCBNZW1vcnkgU2FuaXRpemVyKSBzaG91bGQgY2F0Y2ggdGhpcy4gS01TQU4gaXMgcHJldHR5IGdvb2QgYXQgZGV0ZWN0aW5nIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJZiBpdCAqcmVhZHMqIGZyb20gYHBgLCB3aGljaCBpcyB1bmluaXRpYWxpemVkLCBLTVNBTiB3b3VsZCBoYXZlIGZsYWdnZWQgaXQhIFRoaXMgc2hvdWxkIGhhdmUgYmVlbiBjYXVnaHQgZHVyaW5nIHRlc3RpbmcuXG5cbk5vdyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0byB3aGVyZSB0aGlzIGBwYCBjb21lcyBmcm9tIHRvIGJlIHN1cmUgdGhlIGJ1ZmZlciBpcywgaW4gZmFjdCwgdW5pbml0aWFsaXplZC4gVGhpcyBpcyBhIHByZXR0eSBjcml0aWNhbCBmbGF3LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDE3LCJPdXRwdXRUb2tlbnMiOjQ0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDA1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6MzkuMjk5NTA5MzIxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NjA2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYyOSxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2Mjk6XFx0dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuIDYzMDpcXHR7XFxuIDYzMTpcXHRcXHRzdHJ1Y3QgaXBfdnNfc3luY19tZXNnICptO1xcbiA2MzI6XFx0XFx0dW5pb24gaXBfdnNfc3luY19jb25uICpzO1xcbiA2MzM6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqYnVmZjtcXG4gNjM0OlxcdFxcdHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcztcXG4gNjM1OlxcdFxcdGludCBpZDtcXG4gNjM2OlxcdFxcdF9fdTggKnA7XFxuIDYzNzpcXHRcXHR1bnNpZ25lZCBpbnQgbGVuLCBwZV9uYW1lX2xlbiwgcGFkO1xcbiA2Mzg6XFx0XFxuIDYzOTpcXHRcXHQvKiBIYW5kbGUgb2xkIHZlcnNpb24gb2YgdGhlIHByb3RvY29sICovXFxuIDY0MDpcXHRcXHRpZiAoc3lzY3RsX3N5bmNfdmVyKGlwdnMpID09IDApIHtcXG4gNjQxOlxcdFxcdFxcdGlwX3ZzX3N5bmNfY29ubl92MChpcHZzLCBjcCwgcGt0cyk7XFxuIDY0MjpcXHRcXHRcXHRyZXR1cm47XFxuIDY0MzpcXHRcXHR9XFxuIDY0NDpcXHRcXHQvKiBEbyBub3Qgc3luYyBPTkUgUEFDS0VUICovXFxuIDY0NTpcXHRcXHRpZiAoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgSVBfVlNfQ09OTl9GX09ORV9QQUNLRVQpXFxuIDY0NjpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY0NzpcXHRzbG9vcDpcXG4gNjQ4OlxcdFxcdGlmICghaXBfdnNfc3luY19jb25uX25lZWRlZChpcHZzLCBjcCwgcGt0cykpXFxuIDY0OTpcXHRcXHRcXHRnb3RvIGNvbnRyb2w7XFxuIDY1MDpcXHRcXG4gNjUxOlxcdFxcdC8qIFNhbml0eSBjaGVja3MgKi9cXG4gNjUyOlxcdFxcdHBlX25hbWVfbGVuID0gMDtcXG4gNjUzOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4pIHtcXG4gNjU0OlxcdFxcdFxcdGlmICghY3AtXFx1MDAzZXBlX2RhdGEgfHwgIWNwLVxcdTAwM2VkZXN0KSB7XFxuIDY1NTpcXHRcXHRcXHRcXHRJUF9WU19FUlJfUkwoXFxcIlNZTkMsIGNvbm5lY3Rpb24gcGVfZGF0YSBpbnZhbGlkXFxcXG5cXFwiKTtcXG4gNjU2OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNjU3OlxcdFxcdFxcdH1cXG4gNjU4OlxcdFxcdFxcdHBlX25hbWVfbGVuID0gc3RybmxlbihjcC1cXHUwMDNlcGUtXFx1MDAzZW5hbWUsIElQX1ZTX1BFTkFNRV9NQVhMRU4pO1xcbiA2NTk6XFx0XFx0fVxcbiA2NjA6XFx0XFxuIDY2MTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNjYyOlxcdFxcdGlmICghKGlwdnMtXFx1MDAzZXN5bmNfc3RhdGUgXFx1MDAyNiBJUF9WU19TVEFURV9NQVNURVIpKSB7XFxuIDY2MzpcXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbiA2NjQ6XFx0XFx0XFx0cmV0dXJuO1xcbiA2NjU6XFx0XFx0fVxcbiA2NjY6XFx0XFxuIDY2NzpcXHRcXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcXG4gNjY4OlxcdFxcdG1zID0gXFx1MDAyNmlwdnMtXFx1MDAzZW1zW2lkXTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0I2lmZGVmIENPTkZJR19JUF9WU19JUFY2XFxuIDY3MTpcXHRcXHRpZiAoY3AtXFx1MDAzZWFmID09IEFGX0lORVQ2KVxcbiA2NzI6XFx0XFx0XFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y2KTtcXG4gNjczOlxcdFxcdGVsc2VcXG4gNjc0OlxcdCNlbmRpZlxcbiA2NzU6XFx0XFx0XFx0bGVuID0gc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX3Y0KTtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSylcXG4gNjc4OlxcdFxcdFxcdGxlbiArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKSArIDI7XFxuIDY3OTpcXHRcXG4gNjgwOlxcdFxcdGlmIChjcC1cXHUwMDNlcGVfZGF0YV9sZW4pXFxuIDY4MTpcXHRcXHRcXHRsZW4gKz0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuICsgMjtcXHQvKiArIFBhcmFtIGhkciBmaWVsZCAqL1xcbiA2ODI6XFx0XFx0aWYgKHBlX25hbWVfbGVuKVxcbiA2ODM6XFx0XFx0XFx0bGVuICs9IHBlX25hbWVfbGVuICsgMjtcXG4gNjg0OlxcdFxcbiA2ODU6XFx0XFx0LyogY2hlY2sgaWYgdGhlcmUgaXMgYSBzcGFjZSBmb3IgdGhpcyBvbmUgICovXFxuIDY4NjpcXHRcXHRwYWQgPSAwO1xcbiA2ODc6XFx0XFx0YnVmZiA9IG1zLVxcdTAwM2VzeW5jX2J1ZmY7XFxuIDY4ODpcXHRcXHRpZiAoYnVmZikge1xcbiA2ODk6XFx0XFx0XFx0bSA9IGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDY5MDpcXHRcXHRcXHRwYWQgPSAoNCAtIChzaXplX3QpIGJ1ZmYtXFx1MDAzZWhlYWQpIFxcdTAwMjYgMztcXG4gNjkxOlxcdFxcdFxcdC8qIFNlbmQgYnVmZmVyIGlmIGl0IGlzIGZvciB2MCAqL1xcbiA2OTI6XFx0XFx0XFx0aWYgKGJ1ZmYtXFx1MDAzZWhlYWQgKyBsZW4gKyBwYWQgXFx1MDAzZSBidWZmLVxcdTAwM2VlbmQgfHwgbS1cXHUwMDNlcmVzZXJ2ZWQpIHtcXG4gNjkzOlxcdFxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbiA2OTQ6XFx0XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfYnVmZiA9IE5VTEw7XFxuIDY5NTpcXHRcXHRcXHRcXHRidWZmID0gTlVMTDtcXG4gNjk2OlxcdFxcdFxcdFxcdHBhZCA9IDA7XFxuIDY5NzpcXHRcXHRcXHR9XFxuIDY5ODpcXHRcXHR9XFxuIDY5OTpcXHRcXG4gNzAwOlxcdFxcdGlmICghYnVmZikge1xcbiA3MDE6XFx0XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoaXB2cywgbGVuKTtcXG4gNzAyOlxcdFxcdFxcdGlmICghYnVmZikge1xcbiA3MDM6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG4gNzA0OlxcdFxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG4gNzA1OlxcdFxcdFxcdFxcdHJldHVybjtcXG4gNzA2OlxcdFxcdFxcdH1cXG4gNzA3OlxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBidWZmO1xcbiA3MDg6XFx0XFx0XFx0bSA9IGJ1ZmYtXFx1MDAzZW1lc2c7XFxuIDcwOTpcXHRcXHR9XFxuIDcxMDpcXHRcXG4gNzExOlxcdFxcdHAgPSBidWZmLVxcdTAwM2VoZWFkO1xcbiA3MTI6XFx0XFx0YnVmZi1cXHUwMDNlaGVhZCArPSBwYWQgKyBsZW47XFxuIDcxMzpcXHRcXHRtLVxcdTAwM2VzaXplID0gaHRvbnMobnRvaHMobS1cXHUwMDNlc2l6ZSkgKyBwYWQgKyBsZW4pO1xcbiA3MTQ6XFx0XFx0LyogQWRkIGV2LiBwYWRkaW5nIGZyb20gcHJldi4gc3luY19jb25uICovXFxuIDcxNTpcXHRcXHR3aGlsZSAocGFkLS0pXFxuIDcxNjpcXHRcXHRcXHQqKHArKykgPSAwO1xcbiA3MTc6XFx0XFxuIDcxODpcXHRcXHRzID0gKHVuaW9uIGlwX3ZzX3N5bmNfY29ubiAqKXA7XFxuIDcxOTpcXHRcXG4gNzIwOlxcdFxcdC8qIFNldCBtZXNzYWdlIHR5cGUgIFxcdTAwMjYgY29weSBtZW1iZXJzICovXFxuIDcyMTpcXHRcXHRzLVxcdTAwM2V2NC50eXBlID0gKGNwLVxcdTAwM2VhZiA9PSBBRl9JTkVUNiA/IFNUWVBFX0ZfSU5FVDYgOiAwKTtcXG4gNzIyOlxcdFxcdHMtXFx1MDAzZXY0LnZlcl9zaXplID0gaHRvbnMobGVuIFxcdTAwMjYgU1ZFUl9NQVNLKTtcXHQvKiBWZXJzaW9uIDAgKi9cXG4gNzIzOlxcdFxcdHMtXFx1MDAzZXY0LmZsYWdzID0gaHRvbmwoY3AtXFx1MDAzZWZsYWdzIFxcdTAwMjYgfklQX1ZTX0NPTk5fRl9IQVNIRUQpO1xcbiA3MjQ6XFx0XFx0cy1cXHUwMDNldjQuc3RhdGUgPSBodG9ucyhjcC1cXHUwMDNlc3RhdGUpO1xcbiA3MjU6XFx0XFx0cy1cXHUwMDNldjQucHJvdG9jb2wgPSBjcC1cXHUwMDNlcHJvdG9jb2w7XFxuIDcyNjpcXHRcXHRzLVxcdTAwM2V2NC5jcG9ydCA9IGNwLVxcdTAwM2VjcG9ydDtcXG4gNzI3OlxcdFxcdHMtXFx1MDAzZXY0LnZwb3J0ID0gY3AtXFx1MDAzZXZwb3J0O1xcbiA3Mjg6XFx0XFx0cy1cXHUwMDNldjQuZHBvcnQgPSBjcC1cXHUwMDNlZHBvcnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjM5LjI5OTY1ODQ4MVoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDYwNTgyNTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIEZ1bmN0aW9uKipcblxuT2theSwgc28gSSdtIGZvY3VzaW5nIG9uIGhvdyBgYnVmZmAgaXMgYWxsb2NhdGVkLiBUaGUgdGV4dCBpbmRpY2F0ZXMgdGhhdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgaXMgcmVzcG9uc2libGUgZm9yIHRoaXMuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGl0c2VsZiB0byBkZXRlcm1pbmUgdGhlIGFsbG9jYXRpb24gc3RyYXRlZ3kgYW5kIHVuZGVyc3RhbmQgaXRzIG51YW5jZXMuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgYWxsb2NhdGlvbiBwcm9jZXNzIHRha2VzIHBsYWNlLCBzbyB1bmRlcnN0YW5kaW5nIHRoaXMgZnVuY3Rpb24gaXMga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NjE3LCJPdXRwdXRUb2tlbnMiOjQzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Mi4zNjAyNDM0OTJaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMwOTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcdFxcdHNiID0gTlVMTDtcXG4gNDAxOlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2J1ZmZfbG9jayk7XFxuIDQwMjpcXHRcXHRyZXR1cm4gc2I7XFxuIDQwMzpcXHR9XFxuIDQwNDpcXHRcXG4gNDA1OlxcdHN0YXRpYyBpbmxpbmUgaW50XFxuIDQwNjpcXHRzZWxlY3RfbWFzdGVyX3RocmVhZF9pZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwKVxcbiA0MDc6XFx0e1xcbiA0MDg6XFx0XFx0cmV0dXJuICgobG9uZykgY3AgXFx1MDAzZVxcdTAwM2UgKDEgKyBpbG9nMihzaXplb2YoKmNwKSkpKSBcXHUwMDI2IGlwdnMtXFx1MDAzZXRocmVhZHNfbWFzaztcXG4gNDA5OlxcdH1cXG4gNDEwOlxcdFxcbiA0MTE6XFx0LypcXG4gNDEyOlxcdCAqIENyZWF0ZSBhIG5ldyBzeW5jIGJ1ZmZlciBmb3IgVmVyc2lvbiAwIHByb3RvLlxcbiA0MTM6XFx0ICovXFxuIDQxNDpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbiA0MTU6XFx0aXBfdnNfc3luY19idWZmX2NyZWF0ZV92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgdW5zaWduZWQgaW50IGxlbilcXG4gNDE2OlxcdHtcXG4gNDE3OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbiA0MTg6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqbWVzZztcXG4gNDE5OlxcdFxcbiA0MjA6XFx0XFx0aWYgKCEoc2I9a21hbGxvY19vYmooc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiwgR0ZQX0FUT01JQykpKVxcbiA0MjE6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDQyMjpcXHRcXG4gNDIzOlxcdFxcdGxlbiA9IG1heF90KHVuc2lnbmVkIGludCwgbGVuICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApLFxcbiA0MjQ6XFx0XFx0XFx0ICAgIGlwdnMtXFx1MDAzZW1jZmcuc3luY19tYXhsZW4pO1xcbiA0MjU6XFx0XFx0c2ItXFx1MDAzZW1lc2cgPSBrbWFsbG9jKGxlbiwgR0ZQX0FUT01JQyk7XFxuIDQyNjpcXHRcXHRpZiAoIXNiLVxcdTAwM2VtZXNnKSB7XFxuIDQyNzpcXHRcXHRcXHRrZnJlZShzYik7XFxuIDQyODpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNDI5OlxcdFxcdH1cXG4gNDMwOlxcdFxcdG1lc2cgPSAoc3RydWN0IGlwX3ZzX3N5bmNfbWVzZ192MCAqKXNiLVxcdTAwM2VtZXNnO1xcbiA0MzE6XFx0XFx0bWVzZy1cXHUwMDNlbnJfY29ubnMgPSAwO1xcbiA0MzI6XFx0XFx0bWVzZy1cXHUwMDNlc3luY2lkID0gaXB2cy1cXHUwMDNlbWNmZy5zeW5jaWQ7XFxuIDQzMzpcXHRcXHRtZXNnLVxcdTAwM2VzaXplID0gaHRvbnMoc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApKTtcXG4gNDM0OlxcdFxcdHNiLVxcdTAwM2VoZWFkID0gKHVuc2lnbmVkIGNoYXIgKiltZXNnICsgc2l6ZW9mKHN0cnVjdCBpcF92c19zeW5jX21lc2dfdjApO1xcbiA0MzU6XFx0XFx0c2ItXFx1MDAzZWVuZCA9ICh1bnNpZ25lZCBjaGFyICopbWVzZyArIGxlbjtcXG4gNDM2OlxcdFxcdHNiLVxcdTAwM2VmaXJzdHVzZSA9IGppZmZpZXM7XFxuIDQzNzpcXHRcXHRyZXR1cm4gc2I7XFxuIDQzODpcXHR9XFxuIDQzOTpcXHRcXG4gNDQwOlxcdC8qIENoZWNrIGlmIGNvbm5lY3Rpb24gaXMgY29udHJvbGxlZCBieSBwZXJzaXN0ZW5jZSAqL1xcbiA0NDE6XFx0c3RhdGljIGlubGluZSBib29sIGluX3BlcnNpc3RlbmNlKHN0cnVjdCBpcF92c19jb25uICpjcClcXG4gNDQyOlxcdHtcXG4gNDQzOlxcdFxcdGZvciAoY3AgPSBjcC1cXHUwMDNlY29udHJvbDsgY3A7IGNwID0gY3AtXFx1MDAzZWNvbnRyb2wpIHtcXG4gNDQ0OlxcdFxcdFxcdGlmIChjcC1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBJUF9WU19DT05OX0ZfVEVNUExBVEUpXFxuIDQ0NTpcXHRcXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gNDQ2OlxcdFxcdH1cXG4gNDQ3OlxcdFxcdHJldHVybiBmYWxzZTtcXG4gNDQ4OlxcdH1cXG4gNDQ5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Mi4zNjAzNzU2ODJaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk0OTEyNzUyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIElQVlMgU3luY2hyb25pemF0aW9uIEJ1ZmZlcnMqKlxuXG5SaWdodCwgaGFuZyBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2UgYSBtZW50YWwgbm90ZSBoZXJlOiBJIHdhcyBsb29raW5nIGF0IGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCwgYnV0IEkgZ290IHNpZGV0cmFja2VkIGFzc3VtaW5nIGl0IHdhcyB0aGUgb2xkZXIgdmVyc2lvbi4gSSBuZWVkIHRvIGJlIG1vcmUgcHJlY2lzZS4gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrLiBJIG5lZWQgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAsIG5vdCB0aGUgdjAgdmVyc2lvbi4gSSBoYXZlIHRvIGdvIGRpcmVjdGx5IHRvIHRoZSBmdW5jdGlvbidzIGRlY2xhcmF0aW9uLiBJIG5lZWQgdG8gZW5zdXJlIEknbSBhbmFseXppbmcgdGhlIHJpZ2h0IGNvZGUgcGF0aC4gTGV0IG1lIHBpbnBvaW50IHRoZSBleGFjdCBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2MzAsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjQ1LjMwOTUwNTg3MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTQxMDU2MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTMyNz1zdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzI4OmlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHVuc2lnbmVkIGludCBsZW4pXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMjkte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz00MTQ9c3RhdGljIGlubGluZSBzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjQxNTppcF92c19zeW5jX2J1ZmZfY3JlYXRlX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNDE2LXtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9NTM5PXN0YXRpYyB2b2lkIGlwX3ZzX3N5bmNfY29ubl92MChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLFxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy01NzgtXFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzo1Nzk6XFx0XFx0YnVmZiA9IGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVfdjAoaXB2cywgbGVuKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MC1cXHRcXHRpZiAoIWJ1ZmYpIHtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4MS1cXHRcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2aXB2cy1cXHUwMDNlc3luY19idWZmX2xvY2spO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTgyOlxcdFxcdFxcdHByX2VycihcXFwiaXBfdnNfc3luY19idWZmX2NyZWF0ZSBmYWlsZWQuXFxcXG5cXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU4My1cXHRcXHRcXHRyZXR1cm47XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNzAwLVxcdGlmICghYnVmZikge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NzAxOlxcdFxcdGJ1ZmYgPSBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKGlwdnMsIGxlbik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDItXFx0XFx0aWYgKCFidWZmKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDMtXFx0XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfYnVmZl9sb2NrKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjcwNDpcXHRcXHRcXHRwcl9lcnIoXFxcImlwX3ZzX3N5bmNfYnVmZl9jcmVhdGUgZmFpbGVkLlxcXFxuXFxcIik7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy03MDUtXFx0XFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo0Ni4yNTA1NjgwMTZaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI3NzQxMTQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0YWtlIG9uIHVuZGVyc3RhbmRpbmcgdGhpcyBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAgZnVuY3Rpb246XG5cbioqQW5hbHl6aW5nIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCoqXG5cbkFscmlnaHQsIEknbSBnb2luZyB0byBkaWcgaW50byBgaXBfdnNfc3luY19idWZmX2NyZWF0ZWAuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBJUCBWaXJ0dWFsIFNlcnZlciAoSVBWUykgYW5kIGl0cyBzeW5jaHJvbml6YXRpb24gbWVjaGFuaXNtcywgSSdtIGltbWVkaWF0ZWx5IGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGNyaXRpY2FsIGZvciBtYWludGFpbmluZyBjb25zaXN0ZW5jeSBhY3Jvc3MgbXVsdGlwbGUgbG9hZCBiYWxhbmNlciBpbnN0YW5jZXMuIEknbSBhc3N1bWluZyBcInN5bmNfYnVmZlwiIHJlZmVycyB0byBzb21lIGtpbmQgb2YgYnVmZmVyIG9yIHN0cnVjdHVyZSBkZXNpZ25lZCB0byBob2xkIGluZm9ybWF0aW9uIHRoYXQgbmVlZHMgdG8gYmUgc3luY2hyb25pemVkLCBsaWtlIGNvbm5lY3Rpb24gc3RhdGUsIHNlcnZpY2UgZGVmaW5pdGlvbnMsIG9yIG1heWJlIGV2ZW4gTkFUIG1hcHBpbmdzLlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpbW1lZGlhdGVseS4gSXMgaXQgYWxsb2NhdGluZyBtZW1vcnk/IEluaXRpYWxpemluZyBhbnkga2V5IGRhdGEgc3RydWN0dXJlcz8gUGVyaGFwcyBpdCdzIHNldHRpbmcgdXAgc2VtYXBob3JlcyBvciBtdXRleGVzIHRvIHByZXZlbnQgcmFjZSBjb25kaXRpb25zIGR1cmluZyBzeW5jaHJvbml6YXRpb24/IEknbGwgbmVlZCB0byBsb29rIGF0IHdoYXQgZGF0YSBpdCdzIHRha2luZyBhcyBpbnB1dCwgYW5kIHdoYXQgaXTigJlzIHJldHVybmluZy4gQSBzdWNjZXNzZnVsIGNyZWF0aW9uIGltcGxpZXMgYSB2YWxpZCBzeW5jaHJvbml6YXRpb24gYnVmZmVyIGlzIHJlYWR5IGZvciB1c2UsIGxpa2VseSBmb3IgdHJhbnNmZXJyaW5nIHN0YXRlIGluZm9ybWF0aW9uLiBBbiBlcnJvciByZXR1cm4gaW5kaWNhdGVzIGEgZmFpbHVyZSB0byBzZXQgdXAgdGhlIGJ1ZmZlciwgd2hpY2ggY291bGQgYmUgZHVlIHRvIG1lbW9yeSBleGhhdXN0aW9uLCByZXNvdXJjZSBjb25mbGljdHMsIG9yIGltcHJvcGVyIGluaXRpYWxpemF0aW9uLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gY2hlY2sgZm9yIGFsbG9jYXRpb24gZXJyb3JzLlxuXG5JJ20gYWxzbyBjdXJpb3VzIGFib3V0IHRoZSBvdmVyYWxsIGNvbnRleHQuIElzIHRoaXMgY2FsbGVkIGR1cmluZyBzdGFydHVwPyBPciBpcyBpdCBwYXJ0IG9mIGEgZHluYW1pYyB1cGRhdGUgcHJvY2Vzcz8gVGhpcyB3aWxsIGluZmx1ZW5jZSBob3cgcm9idXN0IHRoZSBlcnJvciBoYW5kbGluZyBuZWVkcyB0byBiZS4gSXMgdGhpcyBhIGNyaXRpY2FsIHBhdGggb3BlcmF0aW9uPyBJJ2xsIHByb2JhYmx5IGJlIGFzc2Vzc2luZyBob3cgaXTigJlzIHRpZWQgaW50byB0aGUgYmlnZ2VyIElQVlMgZnJhbWV3b3JrLCBob3cgaXQncyBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUgY29yZSBjb25uZWN0aW9uIHRyYWNraW5nIGFuZCBmb3J3YXJkaW5nIG1lY2hhbmlzbXMuXG5cblRoZSBrZXkgcXVlc3Rpb25zIGluIG15IGhlYWQgYXJlOlxuKiAgIFdoYXQgZGF0YSBpcyBnZXR0aW5nIHBhY2thZ2VkIGluIHRoaXMgYnVmZmVyP1xuKiAgIEhvdyBpcyB0aGlzIGJ1ZmZlciBpbnRlZ3JhdGVkIGludG8gdGhlIHN5bmNocm9uaXphdGlvbiBwcm9jZXNzP1xuKiAgIEhvdyBpcyB0aGUgbGlmZWN5Y2xlIG9mIHRoaXMgYnVmZmVyIG1hbmFnZWQsIGluY2x1ZGluZyBpdHMgZXZlbnR1YWwgZGVzdHJ1Y3Rpb24/XG4qICAgV2hhdCBhcmUgdGhlIGZhaWx1cmUgbW9kZXMsIGFuZCBhcmUgdGhleSBoYW5kbGVkIGdyYWNlZnVsbHk/XG4qICAgSXMgdGhpcyBmdW5jdGlvbiB0aHJlYWQtc2FmZT9cblxuVGltZSB0byBnZXQgaW50byB0aGUgY29kZSFcblxuXG4iLCJJbnB1dFRva2VucyI6OTU5MCwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjUwLjUyNzk4MzUwNFoiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzMzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzMjUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMjU6XFx0ICogQ3JlYXRlIGEgbmV3IHN5bmMgYnVmZmVyIGZvciBWZXJzaW9uIDEgcHJvdG8uXFxuIDMyNjpcXHQgKi9cXG4gMzI3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqXFxuIDMyODpcXHRpcF92c19zeW5jX2J1ZmZfY3JlYXRlKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCB1bnNpZ25lZCBpbnQgbGVuKVxcbiAzMjk6XFx0e1xcbiAzMzA6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2I7XFxuIDMzMTpcXHRcXG4gMzMyOlxcdFxcdGlmICghKHNiPWttYWxsb2Nfb2JqKHN0cnVjdCBpcF92c19zeW5jX2J1ZmYsIEdGUF9BVE9NSUMpKSlcXG4gMzMzOlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbiAzMzQ6XFx0XFxuIDMzNTpcXHRcXHRsZW4gPSBtYXhfdCh1bnNpZ25lZCBpbnQsIGxlbiArIHNpemVvZihzdHJ1Y3QgaXBfdnNfc3luY19tZXNnKSxcXG4gMzM2OlxcdFxcdFxcdCAgICBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNfbWF4bGVuKTtcXG4gMzM3OlxcdFxcdHNiLVxcdTAwM2VtZXNnID0ga21hbGxvYyhsZW4sIEdGUF9BVE9NSUMpO1xcbiAzMzg6XFx0XFx0aWYgKCFzYi1cXHUwMDNlbWVzZykge1xcbiAzMzk6XFx0XFx0XFx0a2ZyZWUoc2IpO1xcbiAzNDA6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDM0MTpcXHRcXHR9XFxuIDM0MjpcXHRcXHRzYi1cXHUwMDNlbWVzZy1cXHUwMDNlcmVzZXJ2ZWQgPSAwOyAgLyogb2xkIG5yX2Nvbm5zIGkuZS4gbXVzdCBiZSB6ZXJvIG5vdyAqL1xcbiAzNDM6XFx0XFx0c2ItXFx1MDAzZW1lc2ctXFx1MDAzZXZlcnNpb24gPSBTWU5DX1BST1RPX1ZFUjtcXG4gMzQ0OlxcdFxcdHNiLVxcdTAwM2VtZXNnLVxcdTAwM2VzeW5jaWQgPSBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNpZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTI6NTAuNTI4MTE4MjM0WiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU2OTQzOTUyMTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqVW5pbml0aWFsaXplZCBNZW1vcnkgVnVsbmVyYWJpbGl0eSBpbiBDb25uZWN0aW9uIFN5bmNocm9uaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYSBwb3RlbnRpYWwgaXNzdWUgd2l0aCBgc2ItXHUwMDNlbWVzZyA9IGttYWxsb2MobGVuLCBHRlBfQVRPTUlDKTtgLiBJIGtub3cgYGttYWxsb2NgIGNhbiBsZWF2ZSB0aGUgYWxsb2NhdGVkIGJ1ZmZlciB1bmluaXRpYWxpemVkLiBUaGVuIEkgc2VlIGBwID0gYnVmZi1cdTAwM2VoZWFkO2Ag4oCTIGBwYCBub3cgcG9pbnRzIHRvIHRoaXMgcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBtZW1vcnkuIE5vdyBoZXJlIGNvbWVzIHRoZSByZWFsIGtpY2tlcjogYGh0b25fc2VxKChzdHJ1Y3QgaXBfdnNfc2VxICopcCwgXHUwMDI2Y3AtXHUwMDNlaW5fc2VxKTtgLiBUaGlzIGlzIHdoZXJlIG15IGFsYXJtIGJlbGxzIGdvIG9mZi5cblxuSXQgbG9va3MgbGlrZSB0aGUgY29kZSBpcyAqcmVhZGluZyogZnJvbSB0aGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHBvaW50ZWQgdG8gYnkgYHBgIGFuZCAqd3JpdGluZyogdG8gYFx1MDAyNmNwLVx1MDAzZWluX3NlcWAuIEhvbGQgb24uLi4gdGhhdCBtZWFucyBgY3AtXHUwMDNlaW5fc2VxYCwgd2hpY2ggaXMgYSBtZW1iZXIgb2YgYHN0cnVjdCBpcF92c19jb25uYCwgaXMgYmVpbmcgb3ZlcndyaXR0ZW4gd2l0aCB0aGUgZ2FyYmFnZSBmcm9tIHRoZSBga21hbGxvY2AnZCBidWZmZXIhXG5cbkFuZCBpZiBgY3AtXHUwMDNlaW5fc2VxYCBpcyBiZWluZyBjbG9iYmVyZWQgd2l0aCB0aGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgdGhlbiBhbnkgZnV0dXJlIHVzZSBvZiBgY3AtXHUwMDNlaW5fc2VxYCBpcyBnb2luZyB0byBiZSB1c2luZyB0aGF0IGdhcmJhZ2UuIElzIGBjcC1cdTAwM2Vpbl9zZXFgIHVzZWQgbGF0ZXI/IE9oIHllcywgaXQncyBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGNvbm5lY3Rpb24gc3RhdGUuXG5cbkJ1dCBoYW5nIG9uLCBpc24ndCB0aGUgd2hvbGUgKnBvaW50KiBvZiBgaXBfdnNfc3luY19jb25uYCB0byBzZXJpYWxpemUgdGhlICpjdXJyZW50KiBzdGF0ZSBvZiBgY3AtXHUwMDNlaW5fc2VxYCBpbnRvIHRoZSBidWZmZXIgYHBgPyBJdCdzIGEgc3luYyBtZXNzYWdlLCBpbnRlbmRlZCB0byBiZSBzZW50IGFjcm9zcyB0aGUgbmV0d29yayEgV2UncmUgc3VwcG9zZWQgdG8gYmUgcHJlcGFyaW5nIHRvIHRyYW5zbWl0IHRoZSAqY29ycmVjdCogY3VycmVudCBjb25uZWN0aW9uIHNlcXVlbmNlIG51bWJlciFcblxuT2theSwgSSBuZWVkIHRvIGdvIGJhY2sgYW5kIGRvdWJsZS1jaGVjayBgaXBfdnNfc3luY19jb25uYCBub3cuIFRoaXMgbG9va3MgbGlrZSBhIHNlcmlvdXMgYnVnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQzNiwiT3V0cHV0VG9rZW5zIjo0MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEyOjU2LjIyMjUxNjI2NVoiLCJTZXEiOjQwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjI1MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NDcsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA3NDc6XFx0XFx0aWYgKGNwLVxcdTAwM2VmbGFncyBcXHUwMDI2IElQX1ZTX0NPTk5fRl9TRVFfTUFTSykge1xcbiA3NDg6XFx0XFx0XFx0KihwKyspID0gSVBWU19PUFRfU0VRX0RBVEE7XFxuIDc0OTpcXHRcXHRcXHQqKHArKykgPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3N5bmNfY29ubl9vcHRpb25zKTtcXG4gNzUwOlxcdFxcdFxcdGh0b25fc2VxKFxcdTAwMjZjcC1cXHUwMDNlaW5fc2VxLCAoc3RydWN0IGlwX3ZzX3NlcSAqKXApO1xcbiA3NTE6XFx0XFx0XFx0cCArPSBzaXplb2Yoc3RydWN0IGlwX3ZzX3NlcSk7XFxuIDc1MjpcXHRcXHRcXHRodG9uX3NlcShcXHUwMDI2Y3AtXFx1MDAzZW91dF9zZXEsIChzdHJ1Y3QgaXBfdnNfc2VxICopcCk7XFxuIDc1MzpcXHRcXHRcXHRwICs9IHNpemVvZihzdHJ1Y3QgaXBfdnNfc2VxKTtcXG4gNzU0OlxcdFxcdH1cXG4gNzU1OlxcdFxcdC8qIEhhbmRsZSBwZSBkYXRhICovXFxuIDc1NjpcXHRcXHRpZiAoY3AtXFx1MDAzZXBlX2RhdGFfbGVuIFxcdTAwMjZcXHUwMDI2IGNwLVxcdTAwM2VwZV9kYXRhKSB7XFxuIDc1NzpcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9EQVRBO1xcbiA3NTg6XFx0XFx0XFx0KihwKyspID0gY3AtXFx1MDAzZXBlX2RhdGFfbGVuO1xcbiA3NTk6XFx0XFx0XFx0bWVtY3B5KHAsIGNwLVxcdTAwM2VwZV9kYXRhLCBjcC1cXHUwMDNlcGVfZGF0YV9sZW4pO1xcbiA3NjA6XFx0XFx0XFx0cCArPSBjcC1cXHUwMDNlcGVfZGF0YV9sZW47XFxuIDc2MTpcXHRcXHRcXHRpZiAocGVfbmFtZV9sZW4pIHtcXG4gNzYyOlxcdFxcdFxcdFxcdC8qIEFkZCBQRV9OQU1FICovXFxuIDc2MzpcXHRcXHRcXHRcXHQqKHArKykgPSBJUFZTX09QVF9QRV9OQU1FO1xcbiA3NjQ6XFx0XFx0XFx0XFx0KihwKyspID0gcGVfbmFtZV9sZW47XFxuIDc2NTpcXHRcXHRcXHRcXHRtZW1jcHkocCwgY3AtXFx1MDAzZXBlLVxcdTAwM2VuYW1lLCBwZV9uYW1lX2xlbik7XFxuIDc2NjpcXHRcXHRcXHRcXHRwICs9IHBlX25hbWVfbGVuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMjo1Ni4yMjI2NDA2MDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQwMDY1NjAzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIENvbm5lY3Rpb24gU3RhdGUgU2VyaWFsaXphdGlvbiBCdWcqKlxuXG5Pa2F5LCBzbyBgaXBfdnNfc3luY19jb25uYCBpcyByZXNwb25zaWJsZSBmb3Igc2VyaWFsaXppbmcgdGhlIGNvbm5lY3Rpb24gc3RhdGUsIHdoaWNoIG1ha2VzIHNlbnNlOyBpdCBuZWVkcyB0byBzaGlwIHRoYXQgZGF0YSB0byB0aGUgYmFja3VwIGxvYWQgYmFsYW5jZXIuIFRoZSBwcm9ibGVtIGhlcmUgaXMgYSBwcmV0dHkgbmFzdHkgYnVnLCB0aG91Z2guIEluc3RlYWQgb2Ygd3JpdGluZyB0aGUgY29ubmVjdGlvbidzIGBjcC1cdTAwM2Vpbl9zZXFgIHZhbHVlICppbnRvKiB0aGUgYnVmZmVyIGBwYCwgaXQncyBhY3R1YWxseSByZWFkaW5nICpmcm9tKiBgcGAgYW5kIG92ZXJ3cml0aW5nIGBjcC1cdTAwM2Vpbl9zZXFgISBUaGF0J3MuLi5iYWQuXG5cblRoaXMgaGFzIHR3byBpbW1lZGlhdGUgYW5kIHNpZ25pZmljYW50IGNvbnNlcXVlbmNlcy4gRmlyc3QsIHRoZSBjcnVjaWFsIGBjcC1cdTAwM2Vpbl9zZXFgIG1lbWJlciBpcyBnZXR0aW5nIGNsb2JiZXJlZCB3aXRoIHdoYXRldmVyIGdhcmJhZ2UgaGFwcGVuZWQgdG8gYmUgaW4gdGhlIGBrbWFsbG9jYC1hbGxvY2F0ZWQgbWVtb3J5LiBUaGF0J3MgYSBjb3JydXB0aW9uIGlzc3VlLCBwdXJlIGFuZCBzaW1wbGUuXG5cbkJ1dCB3b3JzZSwgdGhlIGJ1ZmZlciBgcGAgaXRzZWxmICpyZW1haW5zKiB1bmluaXRpYWxpemVkLiBTbywgd2UncmUgbm90IG9ubHkgbG9zaW5nIHRoZSBjb3JyZWN0IHZhbHVlLCB3ZSdyZSBhbHNvIG5vdCBwb3B1bGF0aW5nIHRoZSBidWZmZXIgd2l0aCBpdC4gVGhlIGJ1ZmZlciwgZnVsbCBvZiBnYXJiYWdlLCBnZXRzIHNlbnQgb3ZlciB0aGUgbmV0d29yay5cblxuV2FpdCBhIHNlY29uZC4uLiAqdW5pbml0aWFsaXplZCBtZW1vcnkgb3ZlciB0aGUgbmV0d29yaz8qIFRoYXQncyBhIHBvdGVudGlhbCBpbmZvcm1hdGlvbiBsZWFrISBXZSdyZSB0YWxraW5nIGFib3V0IHRyYW5zbWl0dGluZyBzZW5zaXRpdmUsIG9yIGF0IGxlYXN0IHBvdGVudGlhbGx5IHNlbnNpdGl2ZSwgaW5mb3JtYXRpb24gdGhhdCBoYXNuJ3QgYmVlbiBkZWxpYmVyYXRlbHkgcG9wdWxhdGVkLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IGV4YWN0bHkgdGhlc2Uga2luZHMgb2YgaW5mby1sZWFrcywgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgZmluZHMgaXRzIHdheSBhY3Jvc3MgbmV0d29yayBib3VuZGFyaWVzIG9yIGludG8gdXNlciBzcGFjZS4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2Ygc2NlbmFyaW8gS01TQU4gc2hvdWxkIGZsYWcuIE5vdywgbGV0IG1lIHZlcmlmeSB0aGUgZXhhY3QgbWVjaGFuaXNtIGJ5IHdoaWNoIHRoaXMgYnVmZmVyIGlzIHNlbnQuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNTE5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTkwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MDEuNjIzMzAwMDE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTI0NDIzMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2JfcXVldWVfdGFpbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MzU1PXN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzYwLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MzYxOnN0YXRpYyBpbmxpbmUgdm9pZCBzYl9xdWV1ZV90YWlsKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMzYyLVxcdFxcdFxcdFxcdCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTUzOT1zdGF0aWMgdm9pZCBpcF92c19zeW5jX2Nvbm5fdjAoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTcyLVxcdFxcdGlmIChidWZmLVxcdTAwM2VoZWFkICsgbGVuIFxcdTAwM2UgYnVmZi1cXHUwMDNlZW5kIHx8ICFtLVxcdTAwM2Vucl9jb25ucykge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NTczOlxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNTc0LVxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz02Mjk9dm9pZCBpcF92c19zeW5jX2Nvbm4oc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcF92c19jb25uICpjcCwgaW50IHBrdHMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTY5Mi1cXHRcXHRpZiAoYnVmZi1cXHUwMDNlaGVhZCArIGxlbiArIHBhZCBcXHUwMDNlIGJ1ZmYtXFx1MDAzZWVuZCB8fCBtLVxcdTAwM2VyZXNlcnZlZCkge1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjkzOlxcdFxcdFxcdHNiX3F1ZXVlX3RhaWwoaXB2cywgbXMpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjk0LVxcdFxcdFxcdG1zLVxcdTAwM2VzeW5jX2J1ZmYgPSBOVUxMO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xOTU0PWludCBzdG9wX3N5bmNfdGhyZWFkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBpbnQgc3RhdGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NjktXFx0XFx0LypcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5NzA6XFx0XFx0ICogVGhlIGxvY2sgc3luY2hyb25pemVzIHdpdGggc2JfcXVldWVfdGFpbCgpLCBzbyB0aGF0IHdlIGRvbid0XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTcxLVxcdFxcdCAqIGFkZCBzeW5jIGJ1ZmZlcnMgdG8gdGhlIHF1ZXVlLCB3aGVuIHdlIGFyZSBhbHJlYWR5IGluXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjAxLjkxNTc0NjQ3NVoiLCJTZXEiOjQzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjA5MTIwMjI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93biwgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB0aGUgcmVsZXZhbnQgZmllbGQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEJ1ZmZlciBUcmFuc21pc3Npb24gUHJvY2VzcyoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGJ1ZmZlciwgb25jZSBpdCdzIGJlZW4gaGFuZGxlZCBieSB0aGUgc3lzdGVtLCBhY3R1YWxseSBnZXRzIHNlbnQuIE15IGZvY3VzIGlzIG9uIHRoZSBgc2JfcXVldWVfdGFpbGAgZnVuY3Rpb24sIHRoYXQncyB3aGVyZSB0aGUgbWFnaWMgKG9yIHRoZSBwb3RlbnRpYWwgYm90dGxlbmVjaykgbGlrZWx5IGhhcHBlbnMuIEknbSB2aXN1YWxpemluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGludm9sdmVkLCB0cmFjaW5nIHRoZSBwb2ludGVycywgYW5kIGZpZ3VyaW5nIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHF1ZXVlIG1hbmFnZW1lbnQgYW5kIHRoZSB1bmRlcmx5aW5nIHRyYW5zbWlzc2lvbiBtZWNoYW5pc21zLiBJIG5lZWQgdG8ga25vdzogd2hhdCdzIHRoZSBhY3R1YWwgbWVjaGFuaXNtIGZvciB0aGUgYnVmZmVyIHRyYW5zZmVyPyBJcyBpdCBhIGRpcmVjdCBETUEsIGEgY29weSwgc29tZSBraW5kIG9mIHNoYXJlZCBtZW1vcnkgcmVnaW9uPyBXaGF04oCZcyB0aGUgbG9ja2luZyBzdHJhdGVneSB0byBlbnN1cmUgZGF0YSBpbnRlZ3JpdHkgZHVyaW5nIHRyYW5zbWlzc2lvbj8gVW5kZXJzdGFuZGluZyBob3cgYHNiX3F1ZXVlX3RhaWxgIGludGVyYWN0cyB3aXRoIHRoZSBoYXJkd2FyZSwgdGhlIGRyaXZlcnMsIGFuZCB0aGUgcG90ZW50aWFsIGludGVycnVwdCBoYW5kbGluZyBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gYW5kIGRlYnVnZ2luZyBkb3duIHRoZSBsaW5lLiBJJ20gcmVhbGx5IGRpZ2dpbmcgaW4gdG8gdW5kZXJzdGFuZCBob3cgdGhhdCAndGFpbCcgb3BlcmF0aW9uIGFjdHVhbGx5IGdldHMgdGhlIGJ1ZmZlciBtb3ZpbmcgZnJvbSBtZW1vcnkgb250byB0aGUgd2lyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI3MDAsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowNS41MjQ4Njk0NThaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzU1LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzU1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBpcF92c19zeW5jX2J1ZmZfcmVsZWFzZShzdHJ1Y3QgaXBfdnNfc3luY19idWZmICpzYilcXG4gMzU2OlxcdHtcXG4gMzU3OlxcdFxcdGtmcmVlKHNiLVxcdTAwM2VtZXNnKTtcXG4gMzU4OlxcdFxcdGtmcmVlKHNiKTtcXG4gMzU5OlxcdH1cXG4gMzYwOlxcdFxcbiAzNjE6XFx0c3RhdGljIGlubGluZSB2b2lkIHNiX3F1ZXVlX3RhaWwoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsXFxuIDM2MjpcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGlwdnNfbWFzdGVyX3N5bmNfc3RhdGUgKm1zKVxcbiAzNjM6XFx0e1xcbiAzNjQ6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfYnVmZiAqc2IgPSBtcy1cXHUwMDNlc3luY19idWZmO1xcbiAzNjU6XFx0XFxuIDM2NjpcXHRcXHRzcGluX2xvY2soXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuIDM2NzpcXHRcXHRpZiAoaXB2cy1cXHUwMDNlc3luY19zdGF0ZSBcXHUwMDI2IElQX1ZTX1NUQVRFX01BU1RFUiBcXHUwMDI2XFx1MDAyNlxcbiAzNjg6XFx0XFx0ICAgIG1zLVxcdTAwM2VzeW5jX3F1ZXVlX2xlbiBcXHUwMDNjIHN5c2N0bF9zeW5jX3FsZW5fbWF4KGlwdnMpKSB7XFxuIDM2OTpcXHRcXHRcXHRpZiAoIW1zLVxcdTAwM2VzeW5jX3F1ZXVlX2xlbilcXG4gMzcwOlxcdFxcdFxcdFxcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2bXMtXFx1MDAzZW1hc3Rlcl93YWtldXBfd29yayxcXG4gMzcxOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG1heChJUFZTX1NZTkNfU0VORF9ERUxBWSwgMSkpO1xcbiAzNzI6XFx0XFx0XFx0bXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuKys7XFxuIDM3MzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZzYi1cXHUwMDNlbGlzdCwgXFx1MDAyNm1zLVxcdTAwM2VzeW5jX3F1ZXVlKTtcXG4gMzc0OlxcdFxcdFxcdGlmICgoKyttcy1cXHUwMDNlc3luY19xdWV1ZV9kZWxheSkgPT0gSVBWU19TWU5DX1dBS0VVUF9SQVRFKSB7XFxuIDM3NTpcXHRcXHRcXHRcXHRpbnQgaWQgPSAoaW50KShtcyAtIGlwdnMtXFx1MDAzZW1zKTtcXG4gMzc2OlxcdFxcbiAzNzc6XFx0XFx0XFx0XFx0d2FrZV91cF9wcm9jZXNzKGlwdnMtXFx1MDAzZW1hc3Rlcl90aW5mb1tpZF0udGFzayk7XFxuIDM3ODpcXHRcXHRcXHR9XFxuIDM3OTpcXHRcXHR9IGVsc2VcXG4gMzgwOlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4gMzgxOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZpcHZzLVxcdTAwM2VzeW5jX2xvY2spO1xcbiAzODI6XFx0fVxcbiAzODM6XFx0XFxuIDM4NDpcXHQvKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowNS41MjQ5OTA2MThaIiwiU2VxIjo0NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc3MTIwNTc5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGluIHRoaXMgYXJlYSBhbmQgdGhpbmtpbmcgdGhyb3VnaCB0aGlzIGNvZGU6XG5cbioqQnVmZmVyaW5nIGFuZCBUaHJlYWQgU3luY2hyb25pemF0aW9uKipcblxuQWxyaWdodCwgc28gdGhlIGZpcnN0IHN0ZXAgaXMgY2xlYXI6IHdlJ3JlIGVucXVldWluZyBkYXRhIHRvIGJlIHN5bmNocm9uaXplZCwgcGxhY2luZyBpdCBpbiB0aGUgYG1zLVx1MDAzZXN5bmNfcXVldWVgLiBUaGUgaW1tZWRpYXRlIGZvbGxvdy11cCBpcyB0byBnZXQgdGhlIG1hc3RlciB0aHJlYWQgaW52b2x2ZWQuIEl0J3MgdGltZSB0byB3YWtlIGl0IHVwLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBwaW5wb2ludCBleGFjdGx5IHdoZXJlIHRoZSBtYXN0ZXIgdGhyZWFkIGlzIGFuZCB3aGF0IGl0cyBjdXJyZW50IHN0YXRlIG1pZ2h0IGJlLiBVbmRlcnN0YW5kaW5nIHRoZSBjb250ZXh0IG9mIHRoZSBtYXN0ZXIgdGhyZWFkIGlzIGNyaXRpY2FsIHRvIGZpZ3VyaW5nIG91dCB0aGUgbmV4dCBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzowOC4yOTYyMDAxOTlaIiwiU2VxIjo0NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTc5Mjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hc3Rlcl90aHJlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTQwNT1zdGF0aWMgaW5saW5lIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NDA2OnNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3ApXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy00MDcte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz01Mzk9c3RhdGljIHZvaWQgaXBfdnNfc3luY19jb25uX3YwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXBfdnNfY29ubiAqY3AsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2My1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjU2NDpcXHRpZCA9IHNlbGVjdF9tYXN0ZXJfdGhyZWFkX2lkKGlwdnMsIGNwKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTU2NS1cXHRtcyA9IFxcdTAwMjZpcHZzLVxcdTAwM2Vtc1tpZF07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTYyOT12b2lkIGlwX3ZzX3N5bmNfY29ubihzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgc3RydWN0IGlwX3ZzX2Nvbm4gKmNwLCBpbnQgcGt0cylcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY2LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6NjY3OlxcdGlkID0gc2VsZWN0X21hc3Rlcl90aHJlYWRfaWQoaXB2cywgY3ApO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtNjY4LVxcdG1zID0gXFx1MDAyNmlwdnMtXFx1MDAzZW1zW2lkXTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MDguMzc0Nzg0Mjk0WiIsIlNlcSI6NDcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNDY5MDc3ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZSoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgaXMgaW1wbGVtZW50ZWQsIG9yIHdoZXJlIGl04oCZcyBiZWluZyBpbnZva2VkLiBMZXQncyBzdGFydCB3aXRoIGEgZm9jdXNlZCBzZWFyY2guIEknbSBnb2luZyB0byBsb29rIGZvciBlaXRoZXIgYG1hc3Rlcl90aW5mb2AsIG9yIGBzeW5jX3RocmVhZGAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgbW9zdCBsaWtlbHkgY2FuZGlkYXRlcyBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gSSBoYXZlLiBVc2luZyB0aGVzZSBzZWFyY2ggdGVybXMgc2hvdWxkIGhlbHAgbWUgcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZmlsZXMgb3IgZnVuY3Rpb25zLiBJJ2xsIHN0YXJ0IHdpdGggYSBicm9hZGVyIHNlYXJjaCB0byBzZWUgaG93IHRoZSB0ZXJtcyBhcmUgdXNlZCwgYW5kIHRoZW4gbmFycm93IGRvd24gbXkgZm9jdXMgYXMgSSBhbmFseXplIHRoZSByZXN1bHRzLiBUaGlzIGlzIG15IHN0YXJ0aW5nIHBvaW50IGFuZCB3aGVyZSBJJ20gZ29pbmcgdG8gZ2V0IHRoZSBtb3N0IG1pbGVhZ2Ugb3V0IG9mIGEgdGFyZ2V0ZWQgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTAyLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTEuNDIxNjk0NjI2WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MzExNjgxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5jX3RocmVhZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTc0PXVuaW9uIGlwX3ZzX3N5bmNfY29ubiB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE5NS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE5NjpzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTctXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNjM4PW5leHRfc3luY19idWZmKHN0cnVjdCBuZXRuc19pcHZzICppcHZzLCBzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NDgtXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjQ5OnN0YXRpYyBpbnQgc3luY190aHJlYWRfbWFzdGVyKHZvaWQgKmRhdGEpXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjUwLXtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE2NTE6XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE2NTItXFx0c3RydWN0IG5ldG5zX2lwdnMgKmlwdnMgPSB0aW5mby1cXHUwMDNlaXB2cztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwMC1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE3MDE6c3RhdGljIGludCBzeW5jX3RocmVhZF9iYWNrdXAodm9pZCAqZGF0YSlcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MDIte1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTcwMzpcXHRzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSAqdGluZm8gPSBkYXRhO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTcwNC1cXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IHRpbmZvLVxcdTAwM2VpcHZzO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNzM3LVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTczODppbnQgc3RhcnRfc3luY190aHJlYWQoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX3N5bmNfZGFlbW9uX2NmZyAqYyxcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3MzktXFx0XFx0ICAgICAgaW50IHN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTc0MC17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNzQxOlxcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSA9IE5VTEwsICp0aW5mbztcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE3NDItXFx0c3RydWN0IHRhc2tfc3RydWN0ICp0YXNrO1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODMzLVxcdFxcdG5hbWUgPSBcXFwiaXB2cy1tOiVkOiVkXFxcIjtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE4MzQ6XFx0XFx0dGhyZWFkZm4gPSBzeW5jX3RocmVhZF9tYXN0ZXI7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xODM1LVxcdH0gZWxzZSBpZiAoc3RhdGUgPT0gSVBfVlNfU1RBVEVfQkFDS1VQKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDEtXFx0XFx0bmFtZSA9IFxcXCJpcHZzLWI6JWQ6JWRcXFwiO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTg0MjpcXHRcXHR0aHJlYWRmbiA9IHN5bmNfdGhyZWFkX2JhY2t1cDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE4NDMtXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2NS1cXHRyZXN1bHQgPSAtRU5PTUVNO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTg2NjpcXHR0aSA9IGt6YWxsb2Nfb2JqcyhzdHJ1Y3QgaXBfdnNfc3luY190aHJlYWRfZGF0YSwgY291bnQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTg2Ny1cXHRpZiAoIXRpKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xOTUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTk1NDppbnQgc3RvcF9zeW5jX3RocmVhZChzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cywgaW50IHN0YXRlKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1NS17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxOTU2OlxcdHN0cnVjdCBpcF92c19zeW5jX3RocmVhZF9kYXRhICp0aSwgKnRpbmZvO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTk1Ny1cXHRpbnQgaWQ7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTIwNTA9dm9pZCBpcF92c19zeW5jX25ldF9jbGVhbnVwKHN0cnVjdCBuZXRuc19pcHZzICppcHZzKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0yMDUzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MjA1NDpcXHRyZXRjID0gc3RvcF9zeW5jX3RocmVhZChpcHZzLCBJUF9WU19TVEFURV9NQVNURVIpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1NS1cXHRpZiAocmV0YyBcXHUwMDI2XFx1MDAyNiByZXRjICE9IC1FU1JDSClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMjA1Ny1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjIwNTg6XFx0cmV0YyA9IHN0b3Bfc3luY190aHJlYWQoaXB2cywgSVBfVlNfU1RBVEVfQkFDS1VQKTtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTIwNTktXFx0aWYgKHJldGMgXFx1MDAyNlxcdTAwMjYgcmV0YyAhPSAtRVNSQ0gpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjExLjUxNDgxODU0OVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTIwMzIxODExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipDaGVja2luZyBgc3luY190aHJlYWRfbWFzdGVyYCoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoaXMgc3lzdGVtLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBleGFtaW5lIHRoZSBgc3luY190aHJlYWRfbWFzdGVyYC4gSXQncyBhIGNyaXRpY2FsIGNvbXBvbmVudCwgYW5kIHVuZGVyc3RhbmRpbmcgaXRzIHN0YXRlIGlzIGZ1bmRhbWVudGFsIHRvIGRpYWdub3NpbmcgYW55IHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgb3IgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MuIEl0J3MgdGhlIGNlbnRyYWwgb3JjaGVzdHJhdG9yLCBzbyBhbnkgb2RkIGJlaGF2aW9yIHRoZXJlIGxpa2VseSByaXBwbGVzIHRocm91Z2hvdXQgdGhlIGVudGlyZSBzeXN0ZW0uIEkgbmVlZCB0byBxdWlja2x5IGFzY2VydGFpbiBpdHMgY3VycmVudCBzdGF0ZSwgaG93IGl0J3MgYmVoYXZpbmcgcmVsYXRpdmUgdG8gZXhwZWN0YXRpb25zLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvYnZpb3VzIHNpZ25zIG9mIGNvbnRlbnRpb24gb3IgYmxvY2thZ2UuIFRoZSBzcGVjaWZpY3MgZGVwZW5kIG9uIHRoZSBpbXBsZW1lbnRhdGlvbiwgb2YgY291cnNlIC0gYnV0IHRoYXTigJlzIHRoZSBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU3MTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoxNC40MzUxNDQ1NDlaIiwiU2VxIjo1MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY0OSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY0OTpcXHRzdGF0aWMgaW50IHN5bmNfdGhyZWFkX21hc3Rlcih2b2lkICpkYXRhKVxcbjE2NTA6XFx0e1xcbjE2NTE6XFx0XFx0c3RydWN0IGlwX3ZzX3N5bmNfdGhyZWFkX2RhdGEgKnRpbmZvID0gZGF0YTtcXG4xNjUyOlxcdFxcdHN0cnVjdCBuZXRuc19pcHZzICppcHZzID0gdGluZm8tXFx1MDAzZWlwdnM7XFxuMTY1MzpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPSBcXHUwMDI2aXB2cy1cXHUwMDNlbXNbdGluZm8tXFx1MDAzZWlkXTtcXG4xNjU0OlxcdFxcdHN0cnVjdCBzb2NrICpzayA9IHRpbmZvLVxcdTAwM2Vzb2NrLVxcdTAwM2VzaztcXG4xNjU1OlxcdFxcdHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKnNiO1xcbjE2NTY6XFx0XFxuMTY1NzpcXHRcXHRwcl9pbmZvKFxcXCJzeW5jIHRocmVhZCBzdGFydGVkOiBzdGF0ZSA9IE1BU1RFUiwgbWNhc3RfaWZuID0gJXMsIFxcXCJcXG4xNjU4OlxcdFxcdFxcdFxcXCJzeW5jaWQgPSAlZCwgaWQgPSAlZFxcXFxuXFxcIixcXG4xNjU5OlxcdFxcdFxcdGlwdnMtXFx1MDAzZW1jZmcubWNhc3RfaWZuLCBpcHZzLVxcdTAwM2VtY2ZnLnN5bmNpZCwgdGluZm8tXFx1MDAzZWlkKTtcXG4xNjYwOlxcdFxcbjE2NjE6XFx0XFx0Zm9yICg7Oykge1xcbjE2NjI6XFx0XFx0XFx0c2IgPSBuZXh0X3N5bmNfYnVmZihpcHZzLCBtcyk7XFxuMTY2MzpcXHRcXHRcXHRpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4xNjY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE2NjU6XFx0XFx0XFx0aWYgKCFzYikge1xcbjE2NjY6XFx0XFx0XFx0XFx0c2NoZWR1bGVfdGltZW91dChJUFZTX1NZTkNfQ0hFQ0tfUEVSSU9EKTtcXG4xNjY3OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE2Njg6XFx0XFx0XFx0fVxcbjE2Njk6XFx0XFx0XFx0d2hpbGUgKGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXFx1MDAzZXNvY2ssIHNiLVxcdTAwM2VtZXNnKSBcXHUwMDNjIDApIHtcXG4xNjcwOlxcdFxcdFxcdFxcdC8qIChBYil1c2UgaW50ZXJydXB0aWJsZSBzbGVlcCB0byBhdm9pZCBpbmNyZWFzaW5nXFxuMTY3MTpcXHRcXHRcXHRcXHQgKiB0aGUgbG9hZCBhdmcuXFxuMTY3MjpcXHRcXHRcXHRcXHQgKi9cXG4xNjczOlxcdFxcdFxcdFxcdF9fd2FpdF9ldmVudF9pbnRlcnJ1cHRpYmxlKCpza19zbGVlcChzayksXFxuMTY3NDpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBzb2NrX3dyaXRlYWJsZShzaykgfHxcXG4xNjc1OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGt0aHJlYWRfc2hvdWxkX3N0b3AoKSk7XFxuMTY3NjpcXHRcXHRcXHRcXHRpZiAodW5saWtlbHkoa3RocmVhZF9zaG91bGRfc3RvcCgpKSlcXG4xNjc3OlxcdFxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4xNjc4OlxcdFxcdFxcdH1cXG4xNjc5OlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4xNjgwOlxcdFxcdH1cXG4xNjgxOlxcdFxcbjE2ODI6XFx0ZG9uZTpcXG4xNjgzOlxcdFxcdF9fc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19SVU5OSU5HKTtcXG4xNjg0OlxcdFxcdGlmIChzYilcXG4xNjg1OlxcdFxcdFxcdGlwX3ZzX3N5bmNfYnVmZl9yZWxlYXNlKHNiKTtcXG4xNjg2OlxcdFxcbjE2ODc6XFx0XFx0LyogY2xlYW4gdXAgdGhlIHN5bmNfYnVmZiBxdWV1ZSAqL1xcbjE2ODg6XFx0XFx0d2hpbGUgKChzYiA9IHNiX2RlcXVldWUoaXB2cywgbXMpKSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTQuNDM1Mjk2MzhaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NDM5MTA5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCdzIHBlcnNwZWN0aXZlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBTeW5jaHJvbml6YXRpb24gTWVzc2FnZSBUcmFuc21pc3Npb24qKlxuXG5SaWdodCwgc28gYGlwX3ZzX3NlbmRfc3luY19tc2codGluZm8tXHUwMDNlc29jaywgc2ItXHUwMDNlbWVzZylgIGlzIHRoZSBmdW5jdGlvbiBjYWxsIG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGUgc3lzdGVtIGlzIHRyYW5zbWl0dGluZyB0aGF0IHN5bmNocm9uaXphdGlvbiBtZXNzYWdlLCBgc2ItXHUwMDNlbWVzZ2AsIG92ZXIgdGhlIHNvY2tldCwgd2hpY2ggaXMgaWRlbnRpZmllZCBieSBgdGluZm8tXHUwMDNlc29ja2AuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgYHNiLVx1MDAzZW1lc2dgIGlzIHRoZSBtZXNzYWdlIGl0c2VsZiwgYW5kIGB0aW5mby1cdTAwM2Vzb2NrYCBpcyB0aGUgc29ja2V0IGFzc29jaWF0ZWQgd2l0aCB0aGUgdHJhZmZpYyBpbmZvcm1hdGlvbi5cblxuTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBpbm5lciB3b3JraW5ncyBvZiBgaXBfdnNfc2VuZF9zeW5jX21zZ2AuIEknbGwgZGVsdmUgaW50byBpdHMgaW1wbGVtZW50YXRpb24gdG8gc2VlIGhvdyBpdCBoYW5kbGVzIHRoZSBzb2NrZXQsIGhvdyBpdCBmb3JtYXRzIHRoZSBtZXNzYWdlLCBhbnkgbmVjZXNzYXJ5IGVycm9yIGNoZWNraW5nLCBhbmQgd2hhdCB1bmRlcmx5aW5nIG5ldHdvcmsgY2FsbHMgYXJlIHVzZWQgdG8gYWN0dWFsbHkgcHVzaCB0aGUgZGF0YSBvdXQuIEknbGwgYmUgbG9va2luZyBmb3IgdGhpbmdzIGxpa2UgdGhlIHVzZSBvZiBgc2VuZG1zZ2AsIHBvdGVudGlhbCBidWZmZXJpbmcgbWVjaGFuaXNtcywgYW5kIGFueSBzcGVjaWZpYyBwcm90b2NvbHMgYXQgcGxheSwgc28gSSBjYW4gZW5zdXJlIHRoZSBzeW5jIG1lc3NhZ2VzIGFyZSBkZWxpdmVyZWQgaW4gYSBzYWZlIGFuZCByZWxpYWJsZSB3YXkuIEkgbWlnaHQgYWxzbyB3YW50IHRvIGxvb2sgZm9yIGFzcGVjdHMgb2YgZmxvdyBjb250cm9sIHRoYXQgd291bGQgYWZmZWN0IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjU5MCwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTguMDc5NjkzNDhaIiwiU2VxIjo1MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxODEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTYxMCxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTYxMDpcXHRcXHRsZW4gPSBzb2NrX3JlY3Ztc2coc29jaywgXFx1MDAyNm1zZywgTVNHX0RPTlRXQUlUKTtcXG4xNjExOlxcdFxcdGlmIChsZW4gXFx1MDAzYyAwKVxcbjE2MTI6XFx0XFx0XFx0cmV0dXJuIGxlbjtcXG4xNjEzOlxcdFxcbjE2MTQ6XFx0XFx0cmV0dXJuIGxlbjtcXG4xNjE1OlxcdH1cXG4xNjE2OlxcdFxcbjE2MTc6XFx0LyogV2FrZXVwIHRoZSBtYXN0ZXIgdGhyZWFkIGZvciBzZW5kaW5nICovXFxuMTYxODpcXHRzdGF0aWMgdm9pZCBtYXN0ZXJfd2FrZXVwX3dvcmtfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuMTYxOTpcXHR7XFxuMTYyMDpcXHRcXHRzdHJ1Y3QgaXB2c19tYXN0ZXJfc3luY19zdGF0ZSAqbXMgPVxcbjE2MjE6XFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlLFxcbjE2MjI6XFx0XFx0XFx0XFx0ICAgICBtYXN0ZXJfd2FrZXVwX3dvcmsud29yayk7XFxuMTYyMzpcXHRcXHRzdHJ1Y3QgbmV0bnNfaXB2cyAqaXB2cyA9IG1zLVxcdTAwM2VpcHZzO1xcbjE2MjQ6XFx0XFxuMTYyNTpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuMTYyNjpcXHRcXHRpZiAobXMtXFx1MDAzZXN5bmNfcXVldWVfbGVuIFxcdTAwMjZcXHUwMDI2XFxuMTYyNzpcXHRcXHQgICAgbXMtXFx1MDAzZXN5bmNfcXVldWVfZGVsYXkgXFx1MDAzYyBJUFZTX1NZTkNfV0FLRVVQX1JBVEUpIHtcXG4xNjI4OlxcdFxcdFxcdGludCBpZCA9IChpbnQpKG1zIC0gaXB2cy1cXHUwMDNlbXMpO1xcbjE2Mjk6XFx0XFxuMTYzMDpcXHRcXHRcXHRtcy1cXHUwMDNlc3luY19xdWV1ZV9kZWxheSA9IElQVlNfU1lOQ19XQUtFVVBfUkFURTtcXG4xNjMxOlxcdFxcdFxcdHdha2VfdXBfcHJvY2VzcyhpcHZzLVxcdTAwM2VtYXN0ZXJfdGluZm9baWRdLnRhc2spO1xcbjE2MzI6XFx0XFx0fVxcbjE2MzM6XFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmlwdnMtXFx1MDAzZXN5bmNfbG9jayk7XFxuMTYzNDpcXHR9XFxuMTYzNTpcXHRcXG4xNjM2OlxcdC8qIEdldCBuZXh0IGJ1ZmZlciB0byBzZW5kICovXFxuMTYzNzpcXHRzdGF0aWMgaW5saW5lIHN0cnVjdCBpcF92c19zeW5jX2J1ZmYgKlxcbjE2Mzg6XFx0bmV4dF9zeW5jX2J1ZmYoc3RydWN0IG5ldG5zX2lwdnMgKmlwdnMsIHN0cnVjdCBpcHZzX21hc3Rlcl9zeW5jX3N0YXRlICptcylcXG4xNjM5OlxcdHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTM6MTguMDc5ODk4NDhaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5MDM1MDIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipNaXNzaW5nIEZ1bmN0aW9uIENhbGwgaW4gU25pcHBldCAtIExldCdzIEludmVzdGlnYXRlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCBzb21ldGhpbmcgaW1tZWRpYXRlbHkgc3RyaWtlcyBtZSBhcyBvZmYuIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgY2FsbCB0byBgaXBfdnNfc2VuZF9zeW5jX21zZ2AgaGVyZSwgYnV0IGl0J3MgYWJzZW50LiBUaGF0J3MgYSByZWQgZmxhZy4gVGhpcyBmdW5jdGlvbiBpcyBwcmV0dHkgY3J1Y2lhbCBpbiB0aGUgY29udGV4dCBvZiBJUFZTIHN5bmNocm9uaXphdGlvbiwgc28gaXRzIGFic2VuY2Ugd2FycmFudHMgaW1tZWRpYXRlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aHkqIGl0J3Mgbm90IHByZXNlbnQuIElzIHRoaXMgc25pcHBldCBmcm9tIGFuIGluY29tcGxldGUgb3IgdHJ1bmNhdGVkIHNlY3Rpb24/IEFtIEkgbG9va2luZyBhdCB0aGUgd3JvbmcgcGFydCBvZiB0aGUgY29kZSBiYXNlPyBQZXJoYXBzIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBwYXRoIGF0IHBsYXkgaGVyZSwgYW5kIHRoaXMgcGFydCBvZiB0aGUgc3luY2hyb25pemF0aW9uIGxvZ2ljIGlzIGRpc2FibGVkPyBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbiB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbi4gTGV0J3Mgc3RhcnQgYnkgc2VhcmNoaW5nIGZvciBgaXBfdnNfc2VuZF9zeW5jX21zZ2Agd2l0aGluIHRoZSBicm9hZGVyIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIHNvbWUgaW5pdGlhbCBjb250ZXh0IGFuZCBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBzZWN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc0MjEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjIxLjM3MDI1Mjk2NVoiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MzkzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXBfdnNfc2VuZF9zeW5jX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9MTU4Nj1zdGF0aWMgaW50XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNTg3OmlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU4OC17XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE2NDk9c3RhdGljIGludCBzeW5jX3RocmVhZF9tYXN0ZXIodm9pZCAqZGF0YSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTY2OC1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoxNjY5OlxcdFxcdHdoaWxlIChpcF92c19zZW5kX3N5bmNfbXNnKHRpbmZvLVxcdTAwM2Vzb2NrLCBzYi1cXHUwMDNlbWVzZykgXFx1MDAzYyAwKSB7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNjcwLVxcdFxcdFxcdC8qIChBYil1c2UgaW50ZXJydXB0aWJsZSBzbGVlcCB0byBhdm9pZCBpbmNyZWFzaW5nXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjEzOjIxLjQ0MjE5NzczWiIsIlNlcSI6NTUsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMjQwMzE0ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgdGhlIGBpcF92c19zZW5kX3N5bmNfbXNnYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzIGBpcF92c19zZW5kX3N5bmNfbXNnYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGltbWVkaWF0ZWx5IGNvbnNpZGVyIGl0cyBjb250ZXh0IHdpdGhpbiB0aGUgYnJvYWRlciBJUFZTIGFyY2hpdGVjdHVyZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBzeW5jaHJvbml6YXRpb24gb2YgY29ubmVjdGlvbiBzdGF0ZSBiZXR3ZWVuIGRpcmVjdG9yIG5vZGVzLiBHaXZlbiB0aGUgbmFtaW5nLCBpdCdzIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc2VuZGluZyB0aGUgYWN0dWFsIG1lc3NhZ2VzLCBwcm9iYWJseSBvdmVyIHNvbWUgZXN0YWJsaXNoZWQgY29udHJvbCBjaGFubmVsIG9yIG5ldHdvcmsgaW50ZXJmYWNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbnN0aXR1dGVzIGEgXCJzeW5jIG1lc3NhZ2VcIiBpbiB0aGlzIGltcGxlbWVudGF0aW9uLiBJcyBpdCBmdWxsIHN0YXRlIHVwZGF0ZXMsIGluY3JlbWVudGFsIGNoYW5nZXMsIG9yIGEgY29tYmluYXRpb24/IEFuZCB0aGUgZm9ybWF0OiByYXcgZGF0YT8gUHJvdG9jb2wgYnVmZmVycz8gU29tZSBjdXN0b20gc3RydWN0dXJlPyBUaGF0J3MgdGhlIGZpcnN0IHNldCBvZiBxdWVzdGlvbnMgdGhhdCBwb3AgdXAuXG5cbkknbGwgYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBkYXRhIHN0cnVjdHVyZXMgaXQncyBvcGVyYXRpbmcgb24uIFdoYXQgaW5mb3JtYXRpb24gaXMgYmVpbmcgc2VyaWFsaXplZCBhbmQgdHJhbnNtaXR0ZWQ/IENvbm5lY3Rpb24gdHJhY2tpbmcgZW50cmllcz8gTkFUIG1hcHBpbmdzPyBMb2FkIGJhbGFuY2luZyBjb25maWd1cmF0aW9uPyBUaGUgbGV2ZWwgb2YgZGV0YWlsIHdpbGwgdGVsbCBtZSBhIGxvdCBhYm91dCB0aGUgZGVzaWduJ3MgdHJhZGUtb2ZmcyBiZXR3ZWVuIHN5bmNocm9uaXphdGlvbiBzcGVlZCwgYmFuZHdpZHRoIHVzYWdlLCBhbmQgY29uc2lzdGVuY3kgZ3VhcmFudGVlcy4gVGhlbiBJ4oCZbGwgd2FudCB0byB0cmFjZSBiYWNrIGFuZCBsb29rIGF0IHRoZSBjb250cm9sIGZsb3cgaW4gdGhlIGNhbGxpbmcgcm91dGluZXMuIFdoZXJlIGlzIHRoaXMgZnVuY3Rpb24gY2FsbGVkIGZyb20/IFVuZGVyIHdoYXQgY29uZGl0aW9ucz8gSG93IGlzIGl0IHRyaWdnZXJlZCwgcGVyaGFwcyBieSBjb25uZWN0aW9uIGNyZWF0aW9uLCB0ZXJtaW5hdGlvbiwgb3IgcGVyaW9kaWMgc3RhdHVzIHVwZGF0ZXM/XG5cbkkgbmVlZCB0byBxdWlja2x5IGFzc2VzcyBwb3RlbnRpYWwgYm90dGxlbmVja3MgdG9vLiBJcyB0aGVyZSBhbnkgbG9ja2luZyBpbnZvbHZlZCB0aGF0IGNvdWxkIGxlYWQgdG8gY29udGVudGlvbiBkdXJpbmcgaGlnaCBjb25uZWN0aW9uIHJhdGVzPyBXaGF0IGFib3V0IHRoZSB1bmRlcmx5aW5nIG5ldHdvcmsgdHJhbnNwb3J0PyBEb2VzIGl0IHVzZSBVRFAgZm9yIHNwZWVkIG9yIFRDUCBmb3IgcmVsaWFiaWxpdHk/IEFuZCBpZiBUQ1AsIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gZmxvdyBjb250cm9sIGFuZCBjb25nZXN0aW9uPyBNeSByYWRhciBpcyB1cCBmb3IgcG90ZW50aWFsIGFyZWFzIHdoZXJlIHN5bmNocm9uaXphdGlvbiBsYXRlbmN5IGNvdWxkIGJlY29tZSBhIHBlcmZvcm1hbmNlIGxpbWl0aW5nIGZhY3Rvci4gRmluYWxseSwgSSdsbCBiZSBsb29raW5nIGZvciBhbnkgZXJyb3IgaGFuZGxpbmcuIEhvdyByb2J1c3QgaXMgdGhlIG1lc3NhZ2UgdHJhbnNtaXNzaW9uPyBXaGF0IGhhcHBlbnMgaWYgYSBzeW5jIG1lc3NhZ2UgZmFpbHMgdG8gcmVhY2ggYSBkaXJlY3Rvcj8gSXMgdGhlcmUgYSByZXRyeSBtZWNoYW5pc20/IEFyZSB0aGVyZSBhbnkgbWVjaGFuaXNtcyBpbiBwbGFjZSB0byBoYW5kbGUgb3V0LW9mLW9yZGVyIG9yIGR1cGxpY2F0ZSBtZXNzYWdlcz8gVGhpcyBpcyBjcml0aWNhbCBmb3IgZGF0YSBpbnRlZ3JpdHkuIFRpbWUgdG8gZ2V0IHN0YXJ0ZWQuIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc5NzEsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoyNS42NjYyMzE5OTFaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIyNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU4NixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU4NjpcXHRzdGF0aWMgaW50XFxuMTU4NzpcXHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG4xNTg4OlxcdHtcXG4xNTg5OlxcdFxcdGludCBtc2l6ZTtcXG4xNTkwOlxcdFxcdGludCByZXQ7XFxuMTU5MTpcXHRcXG4xNTkyOlxcdFxcdG1zaXplID0gbnRvaHMobXNnLVxcdTAwM2VzaXplKTtcXG4xNTkzOlxcdFxcbjE1OTQ6XFx0XFx0cmV0ID0gaXBfdnNfc2VuZF9hc3luYyhzb2NrLCAoY2hhciAqKW1zZywgbXNpemUpO1xcbjE1OTU6XFx0XFx0aWYgKHJldCBcXHUwMDNlPSAwIHx8IHJldCA9PSAtRUFHQUlOKVxcbjE1OTY6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4xNTk3OlxcdFxcdHByX2VycihcXFwiaXBfdnNfc2VuZF9hc3luYyBlcnJvciAlZFxcXFxuXFxcIiwgcmV0KTtcXG4xNTk4OlxcdFxcdHJldHVybiAwO1xcbjE1OTk6XFx0fVxcbjE2MDA6XFx0XFxuMTYwMTpcXHRzdGF0aWMgaW50XFxuMTYwMjpcXHRpcF92c19yZWNlaXZlKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGJ1ZmxlbilcXG4xNjAzOlxcdHtcXG4xNjA0OlxcdFxcdHN0cnVjdCBtc2doZHJcXHRcXHRtc2cgPSB7TlVMTCx9O1xcbjE2MDU6XFx0XFx0c3RydWN0IGt2ZWNcXHRcXHRpb3YgPSB7YnVmZmVyLCBidWZsZW59O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxMzoyNS42NjYzNTc2NzFaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTc4ODM5MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVlcCBEaXZlIG9uIGBpcF92c19zZW5kX2FzeW5jYCoqXG5cbkFscmlnaHQsIGxldCdzIHplcm8gaW4gb24gYGlwX3ZzX3NlbmRfYXN5bmNgLiBUaGlzIGZ1bmN0aW9uLiBJJ20gdGhpbmtpbmcgYWJvdXQgaXQgYmVjYXVzZSBpdCdzIHRoZSBjb3JlIG9mIGhvdyB3ZSBkZWFsIHdpdGggYXN5bmNocm9ub3VzIHNlbmRzIGluIElQVlMsIGFuZCBpdCBoYXMgaW1wbGljYXRpb25zIGZvciBhIGJ1bmNoIG9mIG9wdGltaXphdGlvbnMuIEZyb20gbXkgdW5kZXJzdGFuZGluZywgaXQncyBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS4gSXQncyBub3QganVzdCBhIHNpbXBsZSBzZW5kIG9wZXJhdGlvbi4gV2UncmUgZGVhbGluZyB3aXRoIHRoZSBjb21wbGV4aXRpZXMgb2YgY29ubmVjdGlvbiB0cmFja2luZywgTkFUaW5nLCBhbmQgcG90ZW50aWFsbHkgcmV0cmFuc21pc3Npb25zIGhlcmUuIEl0IG5lZWRzIHRvIGJlIGNhcmVmdWxseSBvcmNoZXN0cmF0ZWQgdG8gYXZvaWQgYm90dGxlbmVja3MuXG5cbk15IGZpcnN0IHRob3VnaHQgd291bGQgYmUgd2hldGhlciB0aGUgaW1wbGVtZW50YXRpb24gaXMgbG9jayBmcmVlLiBJZiB0aGVyZSBhcmUgYW55IGxvY2tzLCBhcmUgdGhleSBmaW5lLWdyYWluZWQgb3IgY29hcnNlPyBUaGF0IGhhcyBhIGh1Z2UgaW1wYWN0IG9uIHNjYWxhYmlsaXR5LiBBcmUgd2UgdXNpbmcgcGVyLWNvbm5lY3Rpb24gbG9ja3MsIHBlci1kZXN0aW5hdGlvbiBsb2Nrcywgb3Igc29tZXRoaW5nIG1vcmUgZ2xvYmFsP1xuXG5UaGVuLCB0aGUgc2Vjb25kIHF1ZXN0aW9uIHdvdWxkIGJlIG9uIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIGxvd2VyIGxheWVycy4gSXMgdGhlcmUgZWZmaWNpZW50IERNQSB1c2FnZT8gQXJlIHdlIG9wdGltaXppbmcgZm9yIGRpZmZlcmVudCBuZXR3b3JrIGludGVyZmFjZSBjYXJkIHR5cGVzIGFuZCB0aGVpciBjYXBhYmlsaXRpZXM/IEFyZSB3ZSBtYWtpbmcgdGhlIG1vc3Qgb2Ygc2NhdHRlci9nYXRoZXIgSS9PIGlmIHBvc3NpYmxlPyBBcmUgd2UgZ2V0dGluZyBnb29kIHBlcmZvcm1hbmNlIGZyb20gdGhlIHVuZGVybHlpbmcgdHJhbnNwb3J0IGxheWVyIC0gVENQIG9yIFVEUD9cblxuVGhlcmUncyBhbHNvIGVycm9yIGhhbmRsaW5nIHRvIGNvbnNpZGVyLiBIb3cgZG9lcyBgaXBfdnNfc2VuZF9hc3luY2AgZGVhbCB3aXRoIGNvbm5lY3Rpb24gZmFpbHVyZXMsIHJvdXRpbmcgaXNzdWVzLCBvciBjb25nZXN0aW9uPyBBcmUgd2UgcmV0cnlpbmcgaW50ZWxsaWdlbnRseSwgYW5kIGRvIHRoZSByZXRyeSBtZWNoYW5pc21zIHByb3Blcmx5IGhhbmRsZSBkaWZmZXJlbnQgZmFpbHVyZSBtb2RlcyBhbmQgbmV0d29yayBjb25kaXRpb25zP1xuXG5VbHRpbWF0ZWx5LCB0aGlzIHdob2xlIHRoaW5nIG5lZWRzIHRvIGJlIG5vbi1ibG9ja2luZy4gVGhlIGNoYWxsZW5nZSB0aGVyZSBpcyB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB3ZSBkb24ndCBibG9jayB0aGUgSVBWUyBjb3JlLiBTbyB3ZSBuZWVkIHRvIG1hbmFnZSB0aGUgb3V0c3RhbmRpbmcgcmVxdWVzdHMsIHJlc3BvbnNlcywgYW5kIGVycm9ycyB2ZXJ5IGNhcmVmdWxseS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg3NzUsIk91dHB1dFRva2VucyI6NDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjI5Ljg2NDI0NTQ0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk3MzgyMDYyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwX3ZzX3NlbmRfYXN5bmNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jPTE1NzE9c3RhdGljIGludFxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU3MjppcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1NzMte1xcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYz0xNTg3PWlwX3ZzX3NlbmRfc3luY19tc2coc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IGlwX3ZzX3N5bmNfbWVzZyAqbXNnKVxcbi0tXFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTkzLVxcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM6MTU5NDpcXHRyZXQgPSBpcF92c19zZW5kX2FzeW5jKHNvY2ssIChjaGFyICopbXNnLCBtc2l6ZSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0xNTk1LVxcdGlmIChyZXQgXFx1MDAzZT0gMCB8fCByZXQgPT0gLUVBR0FJTilcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTE1OTYtXFx0XFx0cmV0dXJuIHJldDtcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jOjE1OTc6XFx0cHJfZXJyKFxcXCJpcF92c19zZW5kX2FzeW5jIGVycm9yICVkXFxcXG5cXFwiLCByZXQpO1xcbm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmMtMTU5OC1cXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTQ6MzEuMTYxNjM3NzQyWiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwMjc0NzAwNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgaW50byBgaXBfdnNfc2VuZF9hc3luY2AqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFRoZSBtZW50YWwgdGljayBJIGdldCB3aGVuIEkgc2VlIGBpcF92c19zZW5kX2FzeW5jYCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gbGlrZWx5IHBsYXlzIGEgcHJldHR5IGNyaXRpY2FsIHJvbGUgaW4gdGhlIGhlYXJ0IG9mIElQVlMsIGFuZCBieSBleHRlbnNpb24sIGxvYWQgYmFsYW5jaW5nIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBHaXZlbiB0aGUgXCJhc3luY1wiIGluIHRoZSBuYW1lLCBteSBpbW1lZGlhdGUgYXNzdW1wdGlvbiBpcyB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBub24tYmxvY2tpbmcgc2VuZCBvcGVyYXRpb25zLiBUaGlzIGhpbnRzIHRvd2FyZHMgb3B0aW1pemF0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSwgYWxsb3dpbmcgdGhlIGtlcm5lbCB0byBoYW5kbGUgbXVsdGlwbGUgY29ubmVjdGlvbnMgY29uY3VycmVudGx5IHdpdGhvdXQgZ2V0dGluZyBib2dnZWQgZG93biB3YWl0aW5nIG9uIGluZGl2aWR1YWwgbmV0d29yayB3cml0ZXMuIEl0IHN1Z2dlc3RzIHNvcGhpc3RpY2F0ZWQgc2NoZWR1bGluZyBvciBxdWV1ZWluZyBtZWNoYW5pc21zIGFyZSBhdCBwbGF5LlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHdvbmRlciBhYm91dCB0aGUgY29udGV4dDogV2hhdCBkYXRhIHN0cnVjdHVyZXMgaXMgaXQgb3BlcmF0aW5nIG9uPyBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCBjb25uZWN0aW9uIHRyYWNraW5nIGVudHJpZXMsIHZpcnR1YWwgc2VydmljZSBkZWZpbml0aW9ucywgcmVhbCBzZXJ2ZXIgaW5mb3JtYXRpb24sIGFuZCB0aGUgc29ja2V0IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoZSBcInNlbmRcIiBwYXJ0IGltcGxpZXMgaXQncyB0aGUgcG9pbnQgd2hlcmUgdHJhZmZpYyBpcyBhY3R1YWxseSBwdXNoZWQgb3V0LCBzbyBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgZGV0YWlscyBhcm91bmQgaG93IHRoZSBwYWNrZXQgaXMgZm9ybWF0dGVkIChsaWtlbHkgdXNpbmcgc2tfYnVmZnMsIG9idmlvdXNseSksIGhvdyBpdCdzIHJvdXRlZCAoTDQgb3IgTDcgZGVjaXNpb25zLCBkZXBlbmRpbmcgb24gdGhlIFZTIGNvbmZpZ3VyYXRpb24pLCBhbmQgYW55IHBvdGVudGlhbCB0cmFuc2Zvcm1hdGlvbnMgKGxpa2UgTkFUIG9yIHR1bm5lbGluZykuXG5cblRoZW4sIG9mIGNvdXJzZSwgdGhlIGFzeW5jaHJvbm91cyBuYXR1cmUgcmFpc2VzIHF1ZXN0aW9uczogSXMgaXQgdXNpbmcgY29tcGxldGlvbiBjYWxsYmFja3M/IFdvcmtxdWV1ZXM/IE5BUEktbGlrZSBzdHJ1Y3R1cmVzPyBIb3cgaXMgZXJyb3IgaGFuZGxpbmcgbWFuYWdlZCBpbiB0aGlzIGFzeW5jaHJvbm91cyBlbnZpcm9ubWVudD8gQXJlIHRoZXJlIGNvbnNpZGVyYXRpb25zIGZvciBiYWNrcHJlc3N1cmUgYW5kIGZsb3cgY29udHJvbCwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgcmFwaWQgYnVyc3RzIG9mIHRyYWZmaWM/IEknbSBhbnRpY2lwYXRpbmcgZWxlZ2FudCB1c2Ugb2YgdGVjaG5pcXVlcyB0byBrZWVwIHRoZSBrZXJuZWwgZnJvbSBnZXR0aW5nIHN0YXJ2ZWQgb2YgcmVzb3VyY2VzLCBhbmQgYXZvaWRpbmcgYmxvY2tpbmcgaXNzdWVzLiBUaGUgbW9yZSBJIGNvbnNpZGVyIGl0LCB0aGUgbW9yZSBJIGJlY29tZSBpbnZlc3RlZCBpbiB0aGlzIHRvcGljLiBJIHdhbnQgdG8gdW5jb3ZlciB0aGUga2V5IHBhcnRzIG9mIHRoZSBpbXBsZW1lbnRhdGlvbi4gU28gbGV0J3MgY3JhY2sgb3BlbiB0aGUgY29kZSBhbmQgc2VlIHdoYXQgd2UncmUgcmVhbGx5IGRlYWxpbmcgd2l0aC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk1NDgsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDozNS4xODkxMTE1NDZaIiwiU2VxIjo2MCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTU3MSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTU3MTpcXHRzdGF0aWMgaW50XFxuMTU3MjpcXHRpcF92c19zZW5kX2FzeW5jKHN0cnVjdCBzb2NrZXQgKnNvY2ssIGNvbnN0IGNoYXIgKmJ1ZmZlciwgY29uc3Qgc2l6ZV90IGxlbmd0aClcXG4xNTczOlxcdHtcXG4xNTc0OlxcdFxcdHN0cnVjdCBtc2doZHJcXHRtc2cgPSB7Lm1zZ19mbGFncyA9IE1TR19ET05UV0FJVHxNU0dfTk9TSUdOQUx9O1xcbjE1NzU6XFx0XFx0c3RydWN0IGt2ZWNcXHRpb3Y7XFxuMTU3NjpcXHRcXHRpbnRcXHRcXHRsZW47XFxuMTU3NzpcXHRcXG4xNTc4OlxcdFxcdGlvdi5pb3ZfYmFzZSAgICAgPSAodm9pZCAqKWJ1ZmZlcjtcXG4xNTc5OlxcdFxcdGlvdi5pb3ZfbGVuICAgICAgPSBsZW5ndGg7XFxuMTU4MDpcXHRcXG4xNTgxOlxcdFxcdGxlbiA9IGtlcm5lbF9zZW5kbXNnKHNvY2ssIFxcdTAwMjZtc2csIFxcdTAwMjZpb3YsIDEsIChzaXplX3QpKGxlbmd0aCkpO1xcbjE1ODI6XFx0XFxuMTU4MzpcXHRcXHRyZXR1cm4gbGVuO1xcbjE1ODQ6XFx0fVxcbjE1ODU6XFx0XFxuMTU4NjpcXHRzdGF0aWMgaW50XFxuMTU4NzpcXHRpcF92c19zZW5kX3N5bmNfbXNnKHN0cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBpcF92c19zeW5jX21lc2cgKm1zZylcXG4xNTg4OlxcdHtcXG4xNTg5OlxcdFxcdGludCBtc2l6ZTtcXG4xNTkwOlxcdFxcdGludCByZXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjM1LjE4OTI1NDU4NloiLCJTZXEiOjYxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTA1NzU1OTQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVW5pbml0aWFsaXplZCBIZWFwIE1lbW9yeSBMZWFrKipcblxuT2theSwgc28gYGtlcm5lbF9zZW5kbXNnYCBpcyBkZWZpbml0ZWx5IHRoZSBmdW5jdGlvbiBzZW5kaW5nIHRoZSBidWZmZXIgb3ZlciB0aGUgc29ja2V0LiBJIHNlZSBpdCBub3cuIFRoZSBwcm9ibGVtIHN0ZW1zIGZyb20gdGhlIGBrbWFsbG9jYCBhbGxvY2F0aW9uLiBCZWNhdXNlIG9mIHRoZSBgaHRvbl9zZXFgIGJ1ZywgdGhlIGJ1ZmZlciB3YXNuJ3QgcHJvcGVybHkgaW5pdGlhbGl6ZWQgd2l0aCBgY3AtXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVx1MDAzZW91dF9zZXFgIGJlZm9yZSBiZWluZyBzZW50LiBJbnN0ZWFkLCBpdCB3YXMgcmVhZGluZyBkaXJlY3RseSBmcm9tIHRoZSB1bmluaXRpYWxpemVkIGBrbWFsbG9jYCBidWZmZXIgYW5kIHNlbmRpbmcgdGhvc2UgYnl0ZXMgb3ZlciB0aGUgbmV0d29yay4gQ2xhc3NpYyBpbmZvLWxlYWshIFRoaXMgaXMgZXhhY3RseSB0aGUga2luZCBvZiB0aGluZyBLTVNBTiBpcyBkZXNpZ25lZCB0byBjYXRjaC4gS0FTQU4gd291bGRuJ3QgdHJpZ2dlciBoZXJlLCBiZWNhdXNlIHdlIGFyZW4ndCBkZWFsaW5nIHdpdGggb3V0LW9mLWJvdW5kcyBhY2Nlc3Mgb3IgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9uczsgaXQncyBzaW1wbHkgcmVhZGluZyBhbmQgc2VuZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS5cblxuTGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBgaHRvbl9zZXFgIGZ1bmN0aW9uIGFyZ3VtZW50cy5cblxuYGBgY1xuc3RhdGljIHZvaWQgaHRvbl9zZXEoc3RydWN0IGlwX3ZzX3NlcSAqaG8sIHN0cnVjdCBpcF92c19zZXEgKm5vKVxue1xuXHRwdXRfdW5hbGlnbmVkX2JlMzIoaG8tXHUwMDNlaW5pdF9zZXEsIFx1MDAyNm5vLVx1MDAzZWluaXRfc2VxKTtcblx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVx1MDAzZWRlbHRhLCBcdTAwMjZuby1cdTAwM2VkZWx0YSk7XG5cdHB1dF91bmFsaWduZWRfYmUzMihoby1cdTAwM2VwcmV2aW91c19kZWx0YSwgXHUwMDI2bm8tXHUwMDNlcHJldmlvdXNfZGVsdGEpO1xufVxuYGBgXG5cbk5vdywgYmVmb3JlIHRoZSBwYXRjaCwgdGhlIGNvZGUgbG9va2VkIGxpa2UgdGhpczpcblxuYGBgY1xuaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO1xuYGBgXG5cbk9rYXksIHNvIGBob2AgaXMgYHBgLCB0aGUgdW5pbml0aWFsaXplZCBidWZmZXIsIGFuZCBgbm9gIGlzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgLCB3aGljaCBpcyBwYXJ0IG9mIHRoZSBjb25uZWN0aW9uIHN0cnVjdHVyZS4gVGhlIGBwdXRfdW5hbGlnbmVkX2JlMzJgIGZ1bmN0aW9uIHJlYWRzIGZyb20gYGhvYCAod2hpY2ggaXMgdGhlIHVuaW5pdGlhbGl6ZWQgYHBgKSBhbmQgd3JpdGVzIHRvIGBub2AgKHdoaWNoIGlzIGBcdTAwMjZjcC1cdTAwM2Vpbl9zZXFgKS5cblxuVGhlcmVmb3JlLCBpdCByZWFkcyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIGBwYC4gQnV0IHdhaXQuLi4gZG9lcyB0aGF0IG1lYW4gdGhlIHJlYWQgaGFwcGVucyBmcm9tIGBwYD8gVGltZSB0byBpbnZlc3RpZ2F0ZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgYHB1dF91bmFsaWduZWRfYmUzMmAuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMDUsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDo0Mi4wOTUwMTQxMTRaIiwiU2VxIjo2MiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDk3MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1dF91bmFsaWduZWRfYmUzMlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvaXB2cy9pcF92c19zeW5jLmM9Mjk1PXN0YXRpYyB2b2lkIGh0b25fc2VxKHN0cnVjdCBpcF92c19zZXEgKmhvLCBzdHJ1Y3QgaXBfdnNfc2VxICpubylcXG5uZXQvbmV0ZmlsdGVyL2lwdnMvaXBfdnNfc3luYy5jLTI5Ni17XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTc6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2Vpbml0X3NlcSwgXFx1MDAyNm5vLVxcdTAwM2Vpbml0X3NlcSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTg6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2VkZWx0YSwgXFx1MDAyNm5vLVxcdTAwM2VkZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYzoyOTk6XFx0cHV0X3VuYWxpZ25lZF9iZTMyKGhvLVxcdTAwM2VwcmV2aW91c19kZWx0YSwgXFx1MDAyNm5vLVxcdTAwM2VwcmV2aW91c19kZWx0YSk7XFxubmV0L25ldGZpbHRlci9pcHZzL2lwX3ZzX3N5bmMuYy0zMDAtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0xMVQwMToxNDo0Mi4xNDM1MTgxMTFaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUyNjQ5MjM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbnRlcm5hbCBDb2RlIFJldmlldyoqXG5cbk9rYXksIHNvIGBwdXRfdW5hbGlnbmVkX2JlMzIodmFsLCBwdHIpYCBpcyBkZXNpZ25lZCB0byB3cml0ZSBhIDMyLWJpdCB2YWx1ZSwgYHZhbGAsIHRvIHRoZSBtZW1vcnkgYWRkcmVzcyBwb2ludGVkIHRvIGJ5IGBwdHJgIGluIGJpZy1lbmRpYW4gYnl0ZSBvcmRlci4gTWFrZXMgc2Vuc2UsIHRoYXQncyBzdGFuZGFyZCBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBCdXQgd2FpdCBhIG1pbnV0ZS4uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgYXJndW1lbnQgb3JkZXIuIEkga25vdyBJJ3ZlIHNlZW4gc29tZSBvZiB0aGVzZSBmdW5jdGlvbnMgd2hlcmUgdGhlIHZhbHVlIGNvbWVzICpzZWNvbmQqIGFuZCB0aGUgcG9pbnRlciAqZmlyc3QqLiBJJ2QgYmV0dGVyIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQncyBhIGZ1bmRhbWVudGFsIHRoaW5nLCBidXQgZWFzeSB0byBtZXNzIHVwIGlmIHlvdSBhcmUgd29ya2luZyBxdWlja2x5LiBMZXQncyBjb25maXJtOiBmaXJzdCB0aGUgdmFsdWUsIHRoZW4gdGhlIHBvaW50ZXIgdG8gd3JpdGUgaXQgdG8uIEkgbmVlZCB0byBjb21taXQgdGhpcyB0byBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNDI3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMTFUMDE6MTQ6NDUuNjcwMDE0ODI5WiIsIlNlcSI6NjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODM1NDM0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdXRfdW5hbGlnbmVkX2JlMzJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC91bmFsaWduZWQuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3VuYWxpZ25lZC5oPTYxPXN0YXRpYyBpbmxpbmUgdm9pZCBwdXRfdW5hbGlnbmVkX2JlMTYodTE2IHZhbCwgdm9pZCAqcClcXG4tLVxcbmluY2x1ZGUvbGludXgvdW5hbGlnbmVkLmgtNjUtXFxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaDo2NjpzdGF0aWMgaW5saW5lIHZvaWQgcHV0X3VuYWxpZ25lZF9iZTMyKHUzMiB2YWwsIHZvaWQgKnApXFxuaW5jbHVkZS9saW51eC91bmFsaWduZWQuaC02Ny17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjQ1LjcxODM3NTQ0NloiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMzc0NzU0NTM3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEluZm8tTGVhayBCdWcgd2l0aCBLTVNBTioqXG5cbk9rYXksIHNvIEkndmUgYmVlbiB0cmFjaW5nIHRocm91Z2ggdGhpcyBjb2RlLCBhbmQgaXQncyBwcmV0dHkgY2xlYXIgd2hhdCdzIGhhcHBlbmluZy4gVGhlIGZ1bmN0aW9uIGBwdXRfdW5hbGlnbmVkX2JlMzJgIGlzIGtleSBoZXJlLiAgSSBzZWUgaXQncyBiZWluZyB1c2VkIHRvIHdyaXRlIGEgdmFsdWUgZnJvbSBvbmUgbWVtb3J5IGxvY2F0aW9uIHRvIGFub3RoZXIuIFNwZWNpZmljYWxseSwgdGhlIHByb2JsZW1hdGljIGxpbmUgaXM6ICBgaHRvbl9zZXEoKHN0cnVjdCBpcF92c19zZXEgKilwLCBcdTAwMjZjcC1cdTAwM2Vpbl9zZXEpO2AuICBFc3NlbnRpYWxseSwgdGhpcyBtZWFucyB0aGF0IGRhdGEgb3JpZ2luYWxseSBpbnRlbmRlZCB0byBiZSB3cml0dGVuIGludG8gdGhlIGBwYCBidWZmZXIsIGlzIGJlaW5nIHJlYWQgZnJvbSBgcGAgYW5kIHdyaXR0ZW4gdG8gYGNwLVx1MDAzZWluX3NlcWAgaW5zdGVhZC5cblxuSGVyZSdzIHRoZSBjcml0aWNhbCBwb2ludDogdGhlIGBwYCBidWZmZXIsIHdoaWNoIHBvaW50cyB0byBgc2ItXHUwMDNlaGVhZGAgZnJvbSB0aGUgYGlwX3ZzX3N5bmNfYnVmZl9jcmVhdGVgIGZ1bmN0aW9uLCBpcyBhbGxvY2F0ZWQgd2l0aCBga21hbGxvY2AgYnV0ICpub3QqIGluaXRpYWxpemVkLiAgU28sIHdlJ3JlIGRlYWxpbmcgd2l0aCByYXcsIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeS4gVGhlIGludGVudCB3YXMgdG8gd3JpdGUgc2VxdWVuY2UgbnVtYmVycyBpbnRvIHRoaXMgYHBgIGJ1ZmZlciwgd2hpY2ggaXMgaW50ZW5kZWQgdG8gYmUgc2VudCBvdmVyIHRoZSBuZXR3b3JrLiAgQmVjYXVzZSBvZiB0aGUgc3dhcCwgd2UncmUgKnJlYWRpbmcqIGZyb20gdGhpcyB1bmluaXRpYWxpemVkIG1lbW9yeSBhbmQgKndyaXRpbmcqIHRoZSByZWFkIHZhbHVlIHRvIHRoZSBgY3AtXHUwMDNlaW5fc2VxYCBzdHJ1Y3R1cmUuICBUaGlzIHRoZW4gbGVhdmVzIHRoZSBgcGAgYnVmZmVyIHVuaW5pdGlhbGl6ZWQuXG5cbk5vdywgYmVjYXVzZSBgcGAgaXMgKm5vdCogaW5pdGlhbGl6ZWQgYXQgdGhlIGBodG9uX3NlcWAgY2FsbCwgYW5kIHRoZSBtZW1vcnkgYWNjZXNzIGlzIHN3YXBwZWQsIGl0IGxlYWRzIHRvIHR3byBjcml0aWNhbCBwcm9ibGVtczpcblxuMS4gIFdlJ3JlIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkuIEtNU0FOICp3aWxsKiBjYXRjaCB0aGlzIGJlY2F1c2UgaXQncyBkZXNpZ25lZCB0byB0cmFjayB0aGUgdXNlIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YS5cbjIuICBUaGUgdW5pbml0aWFsaXplZCBgcGAgYnVmZmVyLCBjb250YWluaW5nIHBvdGVudGlhbGx5IHNlbnNpdGl2ZSBkYXRhLCBpcyB0aGVuIHNlbnQgb3ZlciB0aGUgbmV0d29yayBieSBga2VybmVsX3NlbmRtc2dgLiBUaGlzIGlzIGEgdGV4dGJvb2sgaW5mby1sZWFrOiBzZW5kaW5nIHVuaW5pdGlhbGl6ZWQga2VybmVsIG1lbW9yeSBvdXRzaWRlIG9mIHRoZSBrZXJuZWwncyBib3VuZGFyeS4gS01TQU4gd2lsbCBhbHNvIGFic29sdXRlbHkgZmxhZyB0aGlzIGFzIGEgY3JpdGljYWwgcHJvYmxlbSBiZWNhdXNlIGl0J3MgYSBkaXJlY3QgbGVhay5cblxuSSBjaGVja2VkIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlYCBqdXN0IHRvIGJlIGNlcnRhaW4uIFllcywgYHNiLVx1MDAzZW1lc2dgIGlzIGFsbG9jYXRlZCwgYnV0IGl0cyBjb250ZW50ICphZnRlciogdGhlIGluaXRpYWwgYHN0cnVjdCBpcF92c19zeW5jX21lc2dgIGlzIGNvbXBsZXRlbHkgdW5pbml0aWFsaXplZC4gVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb25zLiBXZSdyZSByZWFkaW5nICpmcm9tKiBgcGAgd2hpY2ggaXMgYWxsb2NhdGVkIGJ5IGBrbWFsbG9jYCBhbmQgdGhlbiBjb3BpZWQgaW50byBgY3AtXHUwMDNlaW5fc2VxYCwgd2hpY2ggaXMgYSBjbGFzc2ljIHNjZW5hcmlvIGZvciBLTVNBTiB0byBkZXRlY3QuXG5cblNvLCBpbiBlc3NlbmNlLCB0aGUgYnVnIGlzIGEgc3dhcHBlZCBhcmd1bWVudCBpbiBgaHRvbl9zZXFgLiBUaGlzIGxlYWRzIHRvOlxuXG4qICAgUmVhZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSBmcm9tIHRoZSBuZXR3b3JrIGJ1ZmZlciAoYHBgKS5cbiogICBXcml0aW5nIHRoZSAoZ2FyYmFnZSkgcmVhZCBtZW1vcnkgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIChgY3AtXHUwMDNlaW5fc2VxYCkuXG4qICAgTGVhdmluZyB0aGUgaW50ZW5kZWQgbmV0d29yayBidWZmZXIgKGBwYCkgdW5pbml0aWFsaXplZC5cbiogICBTZW5kaW5nIHRoaXMgdW5pbml0aWFsaXplZCBidWZmZXIgb3ZlciB0aGUgbmV0d29yaywgY2F1c2luZyBhIGNsZWFyIGluZm9ybWF0aW9uIGxlYWsuXG4qICAgS01TQU4gKndpbGwqIGRldGVjdCB0aGUgdW5pbml0aWFsaXplZCByZWFkIGFuZCB0aGUgaW5mby1sZWFrIG9uIHRoZSBuZXR3b3JrIHNlbmQuXG5cbktBU0FOICp3b24ndCogZGV0ZWN0IHRoaXMsIGJlY2F1c2UgdGhlcmUgYXJlIG5vIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWVzLiAgQWxsIG1lbW9yeSBhY2Nlc3MgaXMgdGVjaG5pY2FsbHkgdmFsaWQgd2l0aGluIHRoZSBhbGxvY2F0ZWQgbWVtb3J5IHJlZ2lvbnMuIEl0J3MgdGhlICp1bmluaXRpYWxpemVkKiBzdGF0ZSBvZiB0aGUgZGF0YSB0aGF0J3MgdGhlIHByb2JsZW0uXG5cblRoZXJlZm9yZSwgdGhpcyBkZWZpbml0ZWx5IG5lZWRzIEtNU0FOLiAgYE5lZWRzS01TQU4gPSB0cnVlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE3OTQsIk91dHB1dFRva2VucyI6Mjk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTExVDAxOjE0OjU5LjQ2NTkyMzI1NloiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNDEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVxcdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcXG5cXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcXG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXFxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cXG5cXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgdGhlIGFyZ3VtZW50cyB0byBgaHRvbl9zZXEoKWAgd2VyZSBzd2FwcGVkLiBCZWNhdXNlIG9mIHRoaXMgc3dhcCwgdGhlIGNvZGUgd2FzIHJlYWRpbmcgZnJvbSB0aGUgbmV0d29yayBidWZmZXIgcG9pbnRlciBgcGAgYW5kIHdyaXRpbmcgdG8gdGhlIGNvbm5lY3Rpb24gc3RydWN0dXJlIGBjcC1cXHUwMDNlaW5fc2VxYCBhbmQgYGNwLVxcdTAwM2VvdXRfc2VxYC4gVGhlIG5ldHdvcmsgYnVmZmVyIGBwYCBpcyBhbGxvY2F0ZWQgdmlhIGBrbWFsbG9jKClgIGluIGBpcF92c19zeW5jX2J1ZmZfY3JlYXRlKClgIGFuZCBpcyB1bmluaXRpYWxpemVkLiBcXG5cXG5UaGlzIGJ1ZyBoYXMgdHdvIGNvbnNlcXVlbmNlczpcXG4xLiBJdCByZWFkcyB1bmluaXRpYWxpemVkIGhlYXAgbWVtb3J5IGZyb20gYHBgIGFuZCBjb3JydXB0cyB0aGUgY29ubmVjdGlvbiBzdHJ1Y3R1cmUuXFxuMi4gSXQgbGVhdmVzIHRoZSBuZXR3b3JrIGJ1ZmZlciBgcGAgdW5pbml0aWFsaXplZCBhdCB0aGUgbG9jYXRpb25zIHdoZXJlIHRoZSBzZXF1ZW5jZSBudW1iZXJzIHNob3VsZCBoYXZlIGJlZW4gd3JpdHRlbi4gVGhpcyB1bmluaXRpYWxpemVkIGJ1ZmZlciBpcyBzdWJzZXF1ZW50bHkgc2VudCBvdmVyIHRoZSBuZXR3b3JrIHZpYSBga2VybmVsX3NlbmRtc2coKWAgaW4gdGhlIHN5bmMgdGhyZWFkLCByZXN1bHRpbmcgaW4gYW4gaW5mby1sZWFrIG9mIGtlcm5lbCBoZWFwIG1lbW9yeSB0byB0aGUgbmV0d29yay5cXG5cXG5LTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHVzZXMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgYW5kIGluZm8tbGVha3MgdG8gdXNlciBzcGFjZSBvciBvdmVyIHRoZSBuZXR3b3JrLiBLQVNBTiwgb24gdGhlIG90aGVyIGhhbmQsIG9ubHkgZGV0ZWN0cyBtZW1vcnkgY29ycnVwdGlvbiBidWdzIGxpa2Ugb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBhbmQgdXNlLWFmdGVyLWZyZWVzLiBTaW5jZSBhbGwgbWVtb3J5IGFjY2Vzc2VzIGhlcmUgYXJlIHdpdGhpbiBib3VuZHMgYW5kIG9uIGxpdmUgb2JqZWN0cywgS0FTQU4gd2lsbCBub3QgZGV0ZWN0IHRoaXMgYnVnLiBBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgaGlnaGx5IGp1c3RpZmllZCB0byBjYXRjaCB0aGlzIGFuZCBzaW1pbGFyIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflows2crf[1] Phase: Succeeded StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 01:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 01:15:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2] Phase: Succeeded StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 01:15:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-11 01:15:10 +0000 UTC FinishedAt: 2026-08-11 01:15:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflows2crf/series-workflows2crf-convert-artifact-679506793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-11 01:15:20 +0000 UTC FinishedAt: 2026-08-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-11 01:15:20 +0000 UTC FinishedAt: 2026-08-11 01:31: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:*3f5dad2e-653f-4ee3-8640-58851a309c9e,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-workflows2crf/series-workflows2crf-convert-artifact-679506793/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": "178f16e8-2b43-4f80-b5d4-6a34033e4f65", "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-workflows2crf/series-workflows2crf-build-action-3378792135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-11 01:15:20 +0000 UTC FinishedAt: 2026-08-11 01:31: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:*3f5dad2e-653f-4ee3-8640-58851a309c9e,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-workflows2crf/series-workflows2crf-convert-artifact-679506793/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": "178f16e8-2b43-4f80-b5d4-6a34033e4f65", "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-workflows2crf/series-workflows2crf-build-action-3378792135/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-11 01:31:42 +0000 UTC FinishedAt: 2026-08-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-11 01:31:42 +0000 UTC FinishedAt: 2026-08-11 01:31:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-11 01:31:42 +0000 UTC FinishedAt: 2026-08-11 01:31:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-11 01:31:42 +0000 UTC FinishedAt: 2026-08-11 01:31:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.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-workflows2crf/series-workflows2crf-convert-artifact-1241478908/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-11 01:31:52 +0000 UTC FinishedAt: 2026-08-11 01:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-11 01:31:52 +0000 UTC FinishedAt: 2026-08-11 01:33:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*178f16e8-2b43-4f80-b5d4-6a34033e4f65,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-workflows2crf/series-workflows2crf-build-action-3378792135/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-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-11 01:34:05 +0000 UTC FinishedAt: 2026-08-11 01:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-11 01:34:05 +0000 UTC FinishedAt: 2026-08-11 01:34:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-11 01:34:05 +0000 UTC FinishedAt: 2026-08-11 01:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-11 01:34:05 +0000 UTC FinishedAt: 2026-08-11 01:50:18 +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:*3f5dad2e-653f-4ee3-8640-58851a309c9e,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-workflows2crf/series-workflows2crf-convert-artifact-1241478908/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": "dc609054-9736-493d-a812-a0b7f75a377e", "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-workflows2crf/series-workflows2crf-build-action-2550526808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-11 01:34:05 +0000 UTC FinishedAt: 2026-08-11 01:50:08 +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:*3f5dad2e-653f-4ee3-8640-58851a309c9e,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-workflows2crf/series-workflows2crf-convert-artifact-1241478908/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": "dc609054-9736-493d-a812-a0b7f75a377e", "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-workflows2crf/series-workflows2crf-build-action-2550526808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-11 01:50:18 +0000 UTC FinishedAt: 2026-08-11 01:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-11 01:50:18 +0000 UTC FinishedAt: 2026-08-11 01:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-11 01:50:18 +0000 UTC FinishedAt: 2026-08-11 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-11 01:50:18 +0000 UTC FinishedAt: 2026-08-11 01:52:08 +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:*dc609054-9736-493d-a812-a0b7f75a377e,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-workflows2crf/series-workflows2crf-build-action-2550526808/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-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*178f16e8-2b43-4f80-b5d4-6a34033e4f65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc609054-9736-493d-a812-a0b7f75a377e,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-workflows2crf/series-workflows2crf-build-action-3378792135/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-workflows2crf/series-workflows2crf-build-action-2550526808/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 01:52:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 01:52:24 +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-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflows2crf/series-workflows2crf-convert-artifact-1763934149/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-11 01:52:18 +0000 UTC FinishedAt: 2026-08-11 01:52:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-11 01:52:29 +0000 UTC FinishedAt: 2026-08-11 04:58:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflows2crf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["ip_vs_sync_conn"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ae2998ab62e40b3e134590dc5a233ae3367a7a2b","config_name":"upstream-apparmor-kasan.config","enable_configs":["IP_VS"],"series_id":"ea6c41e6-7494-44cd-af34-a49deb4d8cdf","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-11 01:52:29 +0000 UTC FinishedAt: 2026-08-11 04:58:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*178f16e8-2b43-4f80-b5d4-6a34033e4f65,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*dc609054-9736-493d-a812-a0b7f75a377e,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-workflows2crf/series-workflows2crf-build-action-3378792135/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-workflows2crf/series-workflows2crf-build-action-2550526808/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-workflows2crf/series-workflows2crf-convert-artifact-1763934149/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,}