Name: series-workflow2l2pr Phase: Succeeded StartedAt: 2026-07-19 22:22:08 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[0] Phase: Succeeded StartedAt: 2026-07-19 22:22:08 +0000 UTC FinishedAt: 2026-07-19 22:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[0].run-triage Phase: Succeeded StartedAt: 2026-07-19 22:22:08 +0000 UTC FinishedAt: 2026-07-19 22:51:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c6859eed755df351a3978b33cb92365f9b3e8f06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c6859eed755df351a3978b33cb92365f9b3e8f06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "f4dc8824-054a-43f3-8d52-565d56e74f84" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_offload_mask", "nft_payload_offload" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hc2sgZ2VuZXJhdGlvbiBsb2dpYyBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIG5mdF9wYXlsb2FkLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YWNiNDBhODI4OTQwYWMwMDEwMTkxZTZhMDJmODI5ZDVkODg4MWYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTkgMjI6NDk6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTI1OSw5ICYjNDM7MjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xuIFx0c3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTtcbi1cdF9fYmUzMiByZW1haW5kZXJfbWFzaztcbiBcbiBcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XG5AQCAtMjcwLDE1ICYjNDM7MjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIGZpZWxkX2xlbik7XG4tXHRyZW1haW5kZXIgPSBwcml2X2xlbiAlIHNpemVvZih1MzIpO1xuLVx0aWYgKHJlbWFpbmRlcikge1xuLVx0XHRrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTtcbi1cdFx0ZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjtcbi1cdFx0cmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxIFx1MDAzY1x1MDAzYyAoZGVsdGEgKiBCSVRTX1BFUl9CWVRFKSkgLSAxKSk7XG4tXHRcdG1hc2suZGF0YVtrXSA9IChfX2ZvcmNlIHUzMilyZW1haW5kZXJfbWFzaztcbi1cdH1cbi1cbiYjNDM7XHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuIFx0bWVtY3B5KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCBcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmFjYjQwYTgyODk0MGFjMDAxMDE5MWU2YTAyZjgyOWQ1ZDg4ODFmMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDE5IDIyOjQ5OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDM5MTUzOWExY2VhYTc3Li44YTQ0NzJmZDc3ZDlmMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMjU5LDkgJiM0MzsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsCiAJCQkJICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pCiB7Ci0JdW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7CiAJc3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTsKLQlfX2JlMzIgcmVtYWluZGVyX21hc2s7CiAKIAlpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7CiAJCW1lbXNldCgmYW1wO3JlZy0mZ3Q7bWFzaywgMHhmZiwgcHJpdl9sZW4pOwpAQCAtMjcwLDE1ICYjNDM7MjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCW1lbXNldCgmYW1wO21hc2ssIDB4ZmYsIGZpZWxkX2xlbik7Ci0JcmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTsKLQlpZiAocmVtYWluZGVyKSB7Ci0JCWsgPSBwcml2X2xlbiAvIHNpemVvZih1MzIpOwotCQlkZWx0YSA9IGZpZWxkX2xlbiAtIHByaXZfbGVuOwotCQlyZW1haW5kZXJfbWFzayA9IGh0b25sKH4oKDEgJmx0OyZsdDsgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpOwotCQltYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7Ci0JfQotCiYjNDM7CW1lbXNldCgmYW1wO21hc2ssIDB4ZmYsIHByaXZfbGVuKTsKIAltZW1jcHkoJmFtcDtyZWctJmd0O21hc2ssICZhbXA7bWFzaywgZmllbGRfbGVuKTsKIAogCXJldHVybiB0cnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORlQgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBpbnRlbnQgaXMgdG8gc2ltcGxpZnkgdGhlIG1hc2sgZ2VuZXJhdGlvbiB3aXRoaW4gYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGFzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIGNvcnJlY3RuZXNzIGltcHJvdmVtZW50cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWRfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI3Nz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0zNDY9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9Mzg2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDQ2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYwLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjE6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjItXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz00NzQ9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZCBhcmVhIGFnYWluLiBJdCBsb29rcyBsaWtlIHRoZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBmdW5jdGlvbiBpcyAqY3J1Y2lhbCog4oCTIGl0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSwgSSYjMzk7bSBzZWVpbmcgaXQgdXNlZCBoZWF2aWx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBicm9hZCByYW5nZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1lYW5zIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoaXMsIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfcGF5bG9hZC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoYXQqIGlzIGVuYWJsZWQgYW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhdCBjb21waWxlIHRpbWUuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSB3aXRoaW4gYG5mX3RhYmxlcy1vYmpzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5ldGZpbHRlciB0YWJsZXMgYW5kLCBjcnVjaWFsbHksIGlzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX05GX1RBQkxFU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIHdheSBtYXNrcyBhcmUgZ2VuZXJhdGVkIGZvciBvZmZsb2FkaW5nIG5ldGZpbHRlciBwYXlsb2FkIG1hdGNoZXMuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgaGFuZGxpbmcgb2YgYHJlbWFpbmRlcmAgd2l0aGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGhhcyBiZWVuIHJlbW92ZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlZCBhIHJhdGhlciBjb21wbGV4IGNhbGN1bGF0aW9uIGFuZCBtYW5pcHVsYXRpb24gb2YgYHJlbWFpbmRlcmAgYW5kIGByZW1haW5kZXJfbWFza2AsIGludm9sdmluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGJ5dGUgc3dhcHBpbmcgKGBodG9ubGApLiBUaGUgbmV3IGNvZGUgc2ltcGx5IHplcm9lcyBvdXQgdGhlIG1hc2ssIGFuZCBjb3BpZXMgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBzaW1wbGlmeWluZyB0aGUgbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3Rpbmcgb2ZmbG9hZCBiZWhhdmlvci4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCB0aGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZXNlIG9mZmxvYWQgbWFzayBjYWxjdWxhdGlvbnMgY291bGQgb3BlbiBuZXcgYXR0YWNrIGF2ZW51ZXMuCgpUaGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2YCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwYCwgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcGAuIFdhaXQsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIHNpbmNlIGl0IGlzIGNhbGxlZCBieSB0aGUgb3RoZXJzLCBpdCBzdGlsbCBuZWVkcyB0byBiZSByZXZpZXdlZCwgYW5kIGZ1enppbmcuIE1heWJlIGl0JiMzOTtzIGlubGluZWQ/IEkgc2hvdWxkIGNoZWNrIHRoYXQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBhbmQgbWF5YmUgaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAgc2luY2UgaXQgdXNlcyB0aGUgbWFzay4gWWVhaCwgdGhlIGNoYW5nZSBpcyBkaXJlY3RseSBpbiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCwgc28gSSBzaG91bGQgZm9jdXMgb24gdGhhdCBmb3Igbm93LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTkZfVEFCTEVTYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb2ZmbG9hZC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIFRoYXQgbWlnaHQgcmV2ZWFsIHNvbWUgb3RoZXIgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyB0aGF0IGNvdWxkIGFmZmVjdCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEaWdnaW5nIGludG8gbmZfdGFibGVzIEhhcmR3YXJlIE9mZmxvYWQqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcyBoZXJlLiBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggYG5mX3RhYmxlc2AgYW5kIEkmIzM5O20gc3RhcnRpbmcgdG8gY29uc2lkZXIgaG93IGhhcmR3YXJlIG9mZmxvYWQgY291bGQgYmUgaW1wbGVtZW50ZWQgYW5kIG9wdGltaXplZC4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSB0aGVvcnksIGFuZCB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEkmIzM5O20gdHJ5aW5nIHRvIGdldCAqc3BlY2lmaWMqLiBJcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgc3BlY2lmaWMgc3ludGF4LCBhIGRvY3VtZW50ZWQgbWV0aG9kLCBhbnl0aGluZyBjb25jcmV0ZSB3aXRoaW4gYG5mX3RhYmxlc2AgdGhhdCBkaXJlY3RseSBlbmFibGVzIG9yIGNvbmZpZ3VyZXMgaGFyZHdhcmUgb2ZmbG9hZD8gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBnZW5lcmFsIHBvaW50ZXJzOyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGtub2IgSSBjYW4gdHVybiwgYSBzcGVjaWZpYyBwYXJhbWV0ZXIgSSBjYW4gdHdlYWsuIERvZXMgYG5mX3RhYmxlc2AgaGF2ZSBhbnkgZXhwbGljaXQgbWVjaGFuaXNtcyB0byBoYW5kIHRhc2tzIG92ZXIgdG8gYSBkZWRpY2F0ZWQgb2ZmbG9hZCBlbmdpbmUgb24gdGhlIGhhcmR3YXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXIgZGV0YWlscyB0byByZWFsbHkgYXNzZXNzIGl0cyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYWJvdXQgcmVhbC13b3JsZCBpbXBsZW1lbnRhdGlvbiwgbm90IGp1c3QgdGhlb3JldGljYWwgcG90ZW50aWFsLiBJIG5lZWQgdG8gZ2V0IGJleW9uZCB0aGUgYWJzdHJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA2Olx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA3LVx0aGVscFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwODpcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xubmV0L25ldGZpbHRlci9LY29uZmlnLTUwOS1cdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzIxPWNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjUtXHRoZWxwXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzI2Olx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3Ncbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjctXHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODExPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxOS1cdCAgU29tZSBvbGQgREhDUCBjbGllbnRzIGRyb3AgcGFja2V0cyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhd2FyZVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyMDpcdCAgdGhhdCB0aGUgY2hlY2tzdW0gd291bGQgbm9ybWFsbHkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlIGFuZFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgyMS1cdCAgdGh1cyBzaG91bGQgYmUgY29uc2lkZXJlZCB2YWxpZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgTXlzdGVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBpbiBgbmZ0X3BheWxvYWQuY2AsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyBuZXN0bGVkIHJpZ2h0IGluIHRoZSBjb3JlIG9mIGBuZl90YWJsZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaGVyZTogaXMgaGFyZHdhcmUgb2ZmbG9hZCwgaW4gdGhlIGNvbnRleHQgb2YgYG5mX3RhYmxlc2AgYW5kIHRoaXMgc3BlY2lmaWMgcGF5bG9hZCBtb2R1bGUsIGVuYWJsZWQgYnkgZGVmYXVsdD8gT3IgaXMgdGhlcmUgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcgb3IgbW9kdWxlIEkgbmVlZCB0byBiZSBsb29raW5nIGF0IHNlcGFyYXRlbHk/IEdvdHRhIGdldCB0aGUgY29udGV4dCByaWdodC4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBhbnN3ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGhvbGRzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPZmZsb2FkaW5nIE5GVGFibGVzIFJ1bGVzOiBFbnRyeSBQb2ludCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgYC5vZmZsb2FkYCBvcGVyYXRpb24gd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfb3BzYCBhbmQgYG5mdF9wYXlsb2FkX2Zhc3Rfb3BzYCBzdHJ1Y3R1cmVzLiBTbywgYmFzaWNhbGx5LCB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgb2ZmbG9hZGluZyBuZnRhYmxlcyBydWxlcy4gTWFrZXMgc2Vuc2UuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBzb21lIGtpbmQgb2YgZW5hYmxlIGZsYWcsIHRoYXQgY29udHJvbHMgdGhpcyBvZmZsb2FkaW5nIGZlYXR1cmU/IEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaWdnaW5nIGFyb3VuZC4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGNoZWNrIG91dCBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jYCDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIG9mIGNvdXJzZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgYW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqT2ZmbG9hZGluZyBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGAub2ZmbG9hZGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9mZmxvYWRpbmcgcnVsZXMsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgYSBzcGVjaWZpYyBrbm9iIHdlIGNhbiB0d2lkZGxlLCB0aGF0IGFjdHVhbGx5ICpjb250cm9scyogdGhlIG9mZmxvYWRpbmcgYmVoYXZpb3I/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBydWxlcyB0aGVtc2VsdmVzIGFuZCB0aGUgb2ZmbG9hZGluZyBwcm9jZXNzLgoKQmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBnb2luZyB0byBiZSB0aGUgY29kZSwgYW5kIGNvbnNpZGVyaW5nIHRoaXMgaXMgYWxsIGFib3V0IE5ldGZpbHRlciwgc3BlY2lmaWNhbGx5IE5ldGZpbHRlciB0YWJsZXMsIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoYXTigJlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGAub2ZmbG9hZGAsIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaW52b2tlZCwgYW5kIHRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLm9mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEwLVx0LmR1bXBcdFx0PSBuZnRfYml0d2lzZV9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjQxMTpcdC5vZmZsb2FkXHQ9IG5mdF9iaXR3aXNlX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jPTUxMz1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy01MTgtXHQuZHVtcFx0XHQ9IG5mdF9iaXR3aXNlX2Zhc3RfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzo1MTk6XHQub2ZmbG9hZFx0PSBuZnRfYml0d2lzZV9mYXN0X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNTIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jbXBfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5Mi1cdC5kdW1wXHRcdD0gbmZ0X2NtcF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTkzOlx0Lm9mZmxvYWRcdD0gbmZ0X2NtcF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTk0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9Mjc4PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NtcF9mYXN0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODMtXHQuZHVtcFx0XHQ9IG5mdF9jbXBfZmFzdF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mjg0Olx0Lm9mZmxvYWRcdD0gbmZ0X2NtcF9mYXN0X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODUtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0zNzE9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY21wMTZfZmFzdF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMzc2LVx0LmR1bXBcdFx0PSBuZnRfY21wMTZfZmFzdF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mzc3Olx0Lm9mZmxvYWRcdD0gbmZ0X2NtcDE2X2Zhc3Rfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTM3OC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYz0zMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NvdW50ZXJfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYy0zMTUtXHQuY2xvbmVcdFx0PSBuZnRfY291bnRlcl9jbG9uZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYzozMTY6XHQub2ZmbG9hZFx0PSBuZnRfY291bnRlcl9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfY291bnRlci5jOjMxNzpcdC5vZmZsb2FkX3N0YXRzXHQ9IG5mdF9jb3VudGVyX29mZmxvYWRfc3RhdHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmMtMzE4LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9kdXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmMtODItXHQuZHVtcFx0XHQ9IG5mdF9kdXBfbmV0ZGV2X2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmM6ODM6XHQub2ZmbG9hZFx0PSBuZnRfZHVwX25ldGRldl9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jOjg0Olx0Lm9mZmxvYWRfYWN0aW9uXHQ9IG5mdF9kdXBfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jLTg1LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZndkX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTI2My1cdC52YWxpZGF0ZVx0PSBuZnRfZndkX3ZhbGlkYXRlLFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjI2NDpcdC5vZmZsb2FkXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6MjY1Olx0Lm9mZmxvYWRfYWN0aW9uXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTI2Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTMyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfaW1tX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0zMzQtXHQudmFsaWRhdGVcdD0gbmZ0X2ltbWVkaWF0ZV92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jOjMzNTpcdC5vZmZsb2FkXHQ9IG5mdF9pbW1lZGlhdGVfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jOjMzNjpcdC5vZmZsb2FkX2FjdGlvblx0PSBuZnRfaW1tZWRpYXRlX29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmMtMzM3LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDctXHQudmFsaWRhdGVcdD0gbmZ0X21ldGFfZ2V0X3ZhbGlkYXRlLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwODpcdC5vZmZsb2FkXHQ9IG5mdF9tZXRhX2dldF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwOS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTEtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTU1PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2Mi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBuZl90YWJsZXMgT2ZmbG9hZGluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc2AgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBvZmZsb2FkaW5nIGlzIGEga2V5IGNvbXBvbmVudCwgd2hpY2ggaXMgbm8gc3VycHJpc2UgZ2l2ZW4gaXRzIHBlcmZvcm1hbmNlIGdvYWxzLiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGZsYWdzIG9yIG1vZHVsZXMgdGhhdCBlbmFibGUgaXQuIFRoZSBkb2N1bWVudGF0aW9uIGlzbiYjMzk7dCBhbHdheXMgY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgbnVkZ2luZyBtZSB0b3dhcmRzIGEgZmV3IHBvc3NpYmlsaXRpZXM6IGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIG9yIHBlcmhhcHMganVzdCB0aGUgc3RyYWlnaHRmb3J3YXJkIGBORl9UQUJMRVNfT0ZGTE9BRGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlciBiZWluZyB0aGUgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgTkZfVEFCTEVTX09GRkxPQURgIG9yIGFueXRoaW5nIHJlc2VtYmxpbmcgaXQgdG8gY29uZmlybSBhbmQgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBhdGguIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZGVwZW5kZW5jeSBoZXJlIGZvciB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORl9UQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NDpcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NTpcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Ni1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTUwPWNvbmZpZyBORlRfTkFUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1Mi1cdHNlbGVjdCBORl9OQVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTM6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JUFY0IHx8IE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuYXQgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU4Nj1jb25maWcgTkZUX1JFSkVDVF9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTg3Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4OC1cdGRlZmF1bHQgTkZUX1JFSkVDVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwOTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTAtXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4Olx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1Olx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAxOmVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE0LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTU6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBc3Nlc3NpbmcgSGFyZHdhcmUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGluaXRpYWwgYXNzZXNzbWVudC4gTXkgZmlyc3QgdGhvdWdodCBpczogKkxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBpcyBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZy4qIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCwgcmVhbGx5LiBJIG5lZWQgdG8ga25vdyBpZiB3ZSYjMzk7cmUgZXZlbiAqdXNpbmcqIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYXMgaXQgd2lsbCBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoZSByZXN0IG9mIHRoZSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGdyb3VuZHdvcms7IGtub3dpbmcgd2hldGhlciBvciBub3QgaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIHdpbGwgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBuZXh0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIHRoZSBiYXNlbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFdfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0zMDI9c3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTM2My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjQ6XHRpZiAodGVzdF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjM2NTpcdFx0c2VxX3B1dHMocywgXCYjMzQ7W0hXX09GRkxPQURdIFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzY2LVx0ZWxzZSBpZiAodGVzdF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTczPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05ODUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk4NjpcdHNldF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTg3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTkyPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5My17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NDpcdGNsZWFyX2JpdChJUFNfSFdfT0ZGTE9BRF9CSVQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTUtXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMzI9bmZfbmF0X3VzZWRfdHVwbGVfaGFyZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0zMzUte1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjMzNjpcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzX29mZmxvYWQgPSBJUFNfT0ZGTE9BRCB8IElQU19IV19PRkZMT0FEO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMzNy1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqdGhhc2g7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzUwPXN0YXRpYyBpbnQgbmZ0X2RlbHJ1bGUoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2MDpcdGlmIChjdHgtXHUwMDNlY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXHUwMDNlbmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNS1cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXHRiYXNlY2hhaW4tXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5OC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXHRcdGlmIChORk5MX01TR19UWVBFKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzMxOlx0XHQgICAgY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cdFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDMwNT1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NjQ6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVx0XHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9jcmVhdGUobmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDk2PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0MS1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE0MjpcdFx0aWYgKChmbG93dGFibGUtXHUwMDNlZGF0YS5mbGFncyBcdTAwMjYgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEKSBeXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQzOlx0XHQgICAgKGZsYWdzIFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQ0LVx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM1LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM2Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzctXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQyLVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NDM6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ0LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1MC1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTUxOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1Mi1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0MS1cdFx0XHRpZiAoIW5mdF9pc19iYXNlX2NoYWluKGNoYWluKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcdFx0XHQgICAgIShjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipIYXJkd2FyZSBPZmZsb2FkIGFuZCBOZXRmaWx0ZXIgTnVhbmNlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgTkZfVEFCTEVTYCBzdHVmZiBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biBob3cgaGFyZHdhcmUgb2ZmbG9hZCBmaXRzIGluLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQgY29uZmlnIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHVzZWQgdG8gbW9yZSBleHBsaWNpdCBjb250cm9scywgc28gdGhpcyBjb3VsZCBtZWFuIGl0JiMzOTtzIGVpdGhlciB0aWdodGx5IGludGVncmF0ZWQsIG9yIHBvc3NpYmx5IGVuYWJsZWQgYnkgc29tZXRoaW5nIGVsc2UuCgpPa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlIG1vZHVsZSBgbmZfdGFibGVzX29mZmxvYWQuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEkgYmV0dGVyIGNoZWNrIHRoZSBOZXRmaWx0ZXIgYE1ha2VmaWxlYCB0byBzZWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0IGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2VzcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBrbm93IHRoYXQgdXN1YWxseSB0aGUgZGVwZW5kZW5jaWVzIGFyZSByaWdodCB0aGVyZSBpbiB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXHRcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTI6XHRcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBgbmZfdGFibGVzX29mZmxvYWQub2AgaXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCBtZWFuaW5nIGBORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZy4KClRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLCBhbGwgb2Ygd2hpY2ggZmVlZCBpbnRvIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBpdHNlbGYuIFNvLCBvcmlnaW5hbGx5LCBJIHRob3VnaHQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGRvd25zdHJlYW0gZnVuY3Rpb25zIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC4KCkhvbGQgb24sIHRob3VnaC4gYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgaXMgKnN0YXRpYyouIFRoYXQgcmFpc2VzIGEgZmxhZy4gSXQgbWlnaHQgYmUgaW5saW5lZC4gU28sIGFsdGhvdWdoIGl0JiMzOTtzIHRoZSBvbmUgYmVpbmcgbW9kaWZpZWQsIEkgbmVlZCB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50LiBGb3IgdGhhdCByZWFzb24sIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGluIHRoZSBmb2N1cyBzeW1ib2xzLiBJIHdpbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYCB0byB0aGUgbGlzdC4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZm9yIG5vdy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyB0aGUgbWFzayBpcyBnZW5lcmF0ZWQgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiAqd2l0aCogaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgc2hvdWxkIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIGBuZnRfcGF5bG9hZC5jYC4KCk9rYXksIGJhY2sgdG8gY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBORl9UQUJMRVNgIGlzIGltcG9ydGFudC4gQnV0IGFyZSB0aGVyZSAqc3BlY2lmaWMqIGNvbmZpZ3MgcmVsYXRlZCB0byBvZmZsb2FkaW5nPyBXaGlsZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBjb3VsZCBiZSByZWxhdGVkLCB0aGlzIHBhcnRpY3VsYXIgb2ZmbG9hZCBhZmZlY3RzIGBuZnRfcGF5bG9hZGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBuZnRfcGF5bG9hZF9vcHMub2ZmbG9hZGAgc3RydWN0dXJlLCBhbmQgaXQgaXMgdXNlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gTGV0IG1lIGNoZWNrIGlmIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaGFzIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIHJlY2FsbCBzZWVpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCBtZW50aW9uZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GVF9DSEFJTl9IV19PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzUwPXN0YXRpYyBpbnQgbmZ0X2RlbHJ1bGUoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2MDpcdGlmIChjdHgtXHUwMDNlY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXHUwMDNlbmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNS1cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXHRiYXNlY2hhaW4tXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5OC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXHRcdGlmIChORk5MX01TR19UWVBFKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzMxOlx0XHQgICAgY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cdFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDMwNT1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NjQ6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVx0XHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9jcmVhdGUobmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVx0XHRcdFx0XHQgICAgICBORlRfTVNHX05FV1JVTEUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXHRcdFx0XHRcdFx0IE5GVF9UUkFOU19BQk9SVCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cdFx0XHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFx1MDAyNmN0eCwgbmZ0X3RyYW5zX3J1bGUodHJhbnMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI3LVx0XHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTI4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUyOS1cdFx0XHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNS1cdFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzNjpcdFx0XHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Mi1cdFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTQzOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0NC1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTAtXHRcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1MTpcdFx0XHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTItXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTY2PWludCBuZnRfZmxvd19ydWxlX29mZmxvYWRfY29tbWl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVx0XHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cdFx0XHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4Ny1cdFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU4ODpcdFx0XHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg5LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5NS1cdFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTk2Olx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5Ny1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MDktXHRcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjYxMDpcdFx0XHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NjI4PXN0YXRpYyBzdHJ1Y3QgbmZ0X2NoYWluICpfX25mdF9vZmZsb2FkX2dldF9jaGFpbihjb25zdCBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDEtXHRcdFx0aWYgKCFuZnRfaXNfYmFzZV9jaGFpbihjaGFpbikgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2NDI6XHRcdFx0ICAgICEoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDMtXHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaXMgdXNlZCBpbiBgbmZfdGFibGVzX2FwaS5jYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBpZiB0aGVyZSYjMzk7cyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgbmZfdGFibGVzX29mZmxvYWQub2AuIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIG9iamVjdCBsaXN0IGZvciBgbmZfdGFibGVzLW9ianNgLiBUaGF0IG1lYW5zIGBuZl90YWJsZXNfb2ZmbG9hZC5vYCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbmV2ZXIgYE5GX1RBQkxFU2AgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBgTkZfVEFCTEVTYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIGl0LgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsOiBpcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBhIHN0YXRpYyB2YXJpYWJsZT8gWWVzLCBpdCBpcyBzdGF0aWMuIE9rYXksIGNhbiBzeXprYWxsZXIgZnV6eiBzdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGl0IGNhbiwgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh1bmxlc3MgdGhleSBhcmUgY29tcGxldGVseSBpbmxpbmVkLCB3aGljaCBpcyB1bmxpa2VseSBpbiB0aGlzIGNhc2UpLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIGxpc3QgKmJvdGgqIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaW4gYEZvY3VzU3ltYm9sc2AuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGUgcGF0Y2ggY2xlYXJseSBpbXBhY3RzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlIG9mZmxvYWQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmZ0X3BheWxvYWQuY2AsIGlzIHdhcnJhbnRlZC4KKiAgICoqRm9jdXNTeW1ib2xzOiBcWyYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7XF0qKiAtIFRoZXNlIHN5bWJvbHMgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmllZCBsb2dpYy4KKiAgICoqRW5hYmxlQ29uZmlnczogXFsmIzM0O05GX1RBQkxFUyYjMzQ7XF0qKiAtIEVuYWJsaW5nIGBORl9UQUJMRVNgIGlzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4KCk9uZSBtb3JlIHRoaW5nLi4uIElzIGBORl9UQUJMRVNfTkVUREVWYCBhIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIGhhcmR3YXJlIG9mZmxvYWQ/IEkmIzM5O2xsIGNoZWNrIGBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2YCB3aXRoaW4gYG5mX3RhYmxlc19hcGkuY2AuCgpgYGBjCnN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sCi4uLgoJaWYgKGZsYWdzICZhbXA7IE5GVF9DSEFJTl9IV19PRkZMT0FEICZhbXA7JmFtcDsKCSAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpCmBgYAoKSXQgbG9va3MgbGlrZSBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHByaW1hcmlseSB1c2VkIHdpdGggY2hhaW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0ZGV2IGZhbWlseS4gTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgbmZfdGFibGVzX2FkZGNoYWluYC4KCmBgYGMKCQlpZiAoZmxhZ3MgJmFtcDsgTkZUX0NIQUlOX0hXX09GRkxPQUQpCgkJCXJldHVybiAtRU9QTk9UU1VQUDsKYGBgCgpBaCwgaXQgc2VlbXMgdGhhdCBpZiBpdCYjMzk7cyAqbm90KiBhIG5ldGRldiBjaGFpbiwgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVGhpcyBtZWFucyBoYXJkd2FyZSBvZmZsb2FkIGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBuZXRkZXYgZmFtaWx5IHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0NIQUlOX0hXX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlx0aWYgKGN0eC1cdTAwM2VjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2MS1cdFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cdTAwM2VuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMi1cdGJhc2VjaGFpbi1cdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEzOlx0aWYgKGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTQtXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDA9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3OTc6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjg0PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cdFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfdHlwZSkgPT0gTkZUX01TR19ERVNUUk9ZQ0hBSU4gfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XHRcdCAgICBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzMyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk2LVx0XHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gbmZfdGFibGVzX2FkZGNoYWluKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbmZfdGFibGVzX2FkZGNoYWluYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGVudmlyb25tZW50IGlzIHBhcmFtb3VudC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgc3Vycm91bmRpbmcgY29kZSwgY2hlY2tpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBjaGFpbnMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2Agc3lzdGVtLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBwcm9jZWVkIHdpdGggZnVydGhlciBhbmFseXNpcyBvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19hZGRjaGFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3Mzg9c3RhdGljIHU2NCBjaGFpbl9pZDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzQwOnN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc0MS1cdFx0XHQgICAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTAyPXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE5OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMDA6XHRyZXR1cm4gbmZfdGFibGVzX2FkZGNoYWluKFx1MDAyNmN0eCwgZmFtaWx5LCBwb2xpY3ksIGZsYWdzLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njg4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGF0IHNuaXBwZXQ6CgoqKkFuYWx5emluZyB0aGUgYG5mX3RhYmxlc19hZGRjaGFpbmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc19hZGRjaGFpbmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNzk3LiBUaGlzIGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhZGRpbmcgbmV3IGNoYWlucyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZSB3aXRoIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6CgpgYGBjCgkJaWYgKGZsYWdzICZhbXA7IE5GVF9DSEFJTl9IV19PRkZMT0FEKQoJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzICYjMzQ7QWhhISBIYXJkd2FyZSBvZmZsb2FkIGlzIGV4cGxpY2l0bHkgYmVpbmcgYmxvY2tlZCBmb3IgY2hhaW4gY3JlYXRpb24uJiMzNDsgVGhhdCBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGZsYWcgaXMgaW1wb3J0YW50LCBhbmQgdGhlIHJldHVybiBvZiBgLUVPUE5PVFNVUFBgIGluZGljYXRlcyB0aGF0IHRoZSBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0IOKAkyBhZGRpbmcgdGhlIGNoYWluLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGFyZSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgd2hlbiBjb21iaW5pbmcgY2hhaW4gY3JlYXRpb24gYW5kIGhhcmR3YXJlIG9mZmxvYWQgd2l0aGluIE5ldGZpbHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgcmVzdHJpY3Rpb24gZXhpc3RzLiBJdCBjb3VsZCBiZSBkdWUgdG8gYSB2YXJpZXR5IG9mIHJlYXNvbnMsIGxpa2UgaGFyZHdhcmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGNvbXBsZXhpdGllcyBpbiBvZmZsb2FkaW5nIGNoYWluIG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucy4gSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSwgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBob3cgb2ZmbG9hZGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgd291bGQgbmVlZCB0byBmaW5kIG91dCB3aGVyZSB0aGUgYGZsYWdzYCBhcmUgc2V0IGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0XHRcdFx0XHRyZXR1cm4gUFRSX0VSUl9QQ1BVKHN0YXRzKTtcbjI3ODE6XHRcdFx0XHR9XG4yNzgyOlx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGJhc2VjaGFpbi1cdTAwM2VzdGF0cywgc3RhdHMpO1xuMjc4MzpcdFx0XHR9XG4yNzg0Olx0XG4yNzg1Olx0XHRcdGVyciA9IG5mdF9iYXNlY2hhaW5faW5pdChiYXNlY2hhaW4sIGZhbWlseSwgXHUwMDI2aG9vaywgZmxhZ3MpO1xuMjc4NjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yNzg3Olx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbjI3ODg6XHRcdFx0XHRrZnJlZShiYXNlY2hhaW4pO1xuMjc4OTpcdFx0XHRcdGZyZWVfcGVyY3B1KHN0YXRzKTtcbjI3OTA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjc5MTpcdFx0XHR9XG4yNzkyOlx0XHRcdGlmIChzdGF0cylcbjI3OTM6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZuZnRfY291bnRlcnNfZW5hYmxlZCk7XG4yNzk0Olx0XHR9IGVsc2Uge1xuMjc5NTpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9CQVNFKVxuMjc5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc5NzpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxuMjc5ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjI3OTk6XHRcbjI4MDA6XHRcdFx0Y2hhaW4gPSBremFsbG9jX29iaigqY2hhaW4sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yODAxOlx0XHRcdGlmIChjaGFpbiA9PSBOVUxMKVxuMjgwMjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjgwMzpcdFxuMjgwNDpcdFx0XHRjaGFpbi1cdTAwM2VmbGFncyA9IGZsYWdzO1xuMjgwNTpcdFx0fVxuMjgwNjpcdFx0Y3R4LVx1MDAzZWNoYWluID0gY2hhaW47XG4yODA3Olx0XG4yODA4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaGFpbi1cdTAwM2VydWxlcyk7XG4yODA5Olx0XHRjaGFpbi1cdTAwM2VoYW5kbGUgPSBuZl90YWJsZXNfYWxsb2NfaGFuZGxlKHRhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gTkZUIEhhcmR3YXJlIE9mZmxvYWRpbmcqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhpcyBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGZlYXR1cmUsIHRoYXQmIzM5O3MgZXhjbHVzaXZlbHkgZm9yIGJhc2UgY2hhaW5zLiBJIHZhZ3VlbHkgcmVjYWxsIHRoYXQuIEFuZCBpdCYjMzk7cyBgbmZ0X2Jhc2VjaGFpbl9pbml0YCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBIbW0sIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3Igb3B0aW9ucyB0aWVkIHRvIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGA/IFRpbWUgdG8gZGlnIGludG8gYG5mX3RhYmxlc19hcGkuY2AuIExldCYjMzk7cyBzZWUgd2hhdCBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0Olx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTUtXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMgYG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRgIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSByZWxldmFudCBjb2RlIG5vdy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgdGhpbmcgZnVuY3Rpb25zLCBpdHMgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMuIE15IGtleSBjb25jZXJuIGhlcmUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHRoZSBvZmZsb2FkLCBob3cgcnVsZSB0cmFuc2xhdGlvbiB0byBoYXJkd2FyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiB0aGUgZmxvdy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgdG8gbWluaW1pemUgQ1BVIGludm9sdmVtZW50IGR1cmluZyB0aGUgZmFzdCBwYXRoLiBBcmUgdGhleSB1c2luZyBiYXRjaGluZz8gV2hhdCBhYm91dCBmbG93IGNvbnRyb2w/IFdoYXQgYWJvdXQgYW55IHBvdGVudGlhbCByYWNlcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIG9uIGhvdyB0aGUgbW9kdWxlIGhhbmRsZXMgcnVsZSB1cGRhdGVzIGFuZCBkZWxldGlvbiBjb25jdXJyZW50bHkgd2l0aCB0cmFmZmljIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgY29kZSwgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0Olx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTUtXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjEyPXN0YXRpYyBpbnQgbmZ0X2NoYWluX29mZmxvYWRfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTIyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyMjE6Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTIyMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRgIHdpdGhpbiBgbmZfdGFibGVzX29mZmxvYWQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIGhlYWRhY2hlcywgZGVwZW5kaW5nIG9uIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCEpIGxpa2VseSBoYXBwZW5zIGZvciBvZmZsb2FkaW5nIGNoYWluIG9wZXJhdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjaGFpbiBzdXBwb3J0IGlzIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBmb3Igb2ZmbG9hZGluZyBwdXJwb3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBkZWNpc2lvbiBwb2ludCwgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNoYWluIGNhbiBhY3R1YWxseSBiZSBvZmZsb2FkZWQgdG8gdGhlIGhhcmR3YXJlIG9yIGlmIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIHNvZnR3YXJlIHByb2Nlc3NpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZSB0aGUgY29uZGl0aW9ucyBjaGVja2VkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjaGFpbnMsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIG9mZmxvYWQgQVBJICh3aGF0ZXZlciB0aGF0IG1pZ2h0IGJlKSBpcyBtYW5hZ2VkIGhlcmUuIFRoZSBjb2RlIGxpa2VseSBob2xkcyBjbHVlcyByZWdhcmRpbmcgdGhlIHR5cGVzIG9mIGNoYWlucyB0aGF0ICphcmUqIG9mZmxvYWRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBzZWUgc29tZSB2ZXJ5IGhhcmR3YXJlIHNwZWNpZmljIGNvZGUgaW4gaGVyZS4gRnJvbSBhIGhpZ2ggbGV2ZWwgcGVyc3BlY3RpdmUsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgd2hpY2ggd2lsbCBhbGxvdyB1cyB0byBkZWZpbmUgaWYgd2Ugc3VwcG9ydCBhIGNoYWluIGZvciBvZmZsb2FkaW5nIGJhc2VkIG9uIGl0cyBydWxlcywgZm9yIGV4YW1wbGUgd2hldGhlciBvciBub3Qgd2UgY2FuIHRyYW5zbGF0ZSBhIHJ1bGUgb2YgYSBjaGFpbiB0byBhIGhhcmR3YXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XG4gMjIxOlx0Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxuIDIyMjpcdHtcbiAyMjM6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqb3BzO1xuIDIyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyMjU6XHRcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiAyMjY6XHRcbiAyMjc6XHRcdGlmIChuZnRfY2hhaW5fb2ZmbG9hZF9wcmlvcml0eShiYXNlY2hhaW4pIFx1MDAzYyAwKVxuIDIyODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjI5Olx0XG4gMjMwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGxpc3QpIHtcbiAyMzE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpIHtcbiAyMzI6XHRcdFx0XHRpZiAob3BzLVx1MDAzZXBmICE9IE5GUFJPVE9fTkVUREVWIHx8XG4gMjMzOlx0XHRcdFx0ICAgIG9wcy1cdTAwM2Vob29rbnVtICE9IE5GX05FVERFVl9JTkdSRVNTKVxuIDIzNDpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIzNTpcdFxuIDIzNjpcdFx0XHRcdGRldiA9IG9wcy1cdTAwM2VkZXY7XG4gMjM3Olx0XHRcdFx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMgXHUwMDI2XHUwMDI2XG4gMjM4Olx0XHRcdFx0ICAgICFmbG93X2luZHJfZGV2X2V4aXN0cygpKVxuIDIzOTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIENvbnN0cmFpbnQqKgoKT2theSwgc28gdGhlIGNvZGUgc2F5cyBgb3BzLSZndDtwZiAhPSBORlBST1RPX05FVERFVmAuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIOKAkyBpdCYjMzk7cyBzdWdnZXN0aW5nIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKm9ubHkqIHN1cHBvcnRzIGBORlBST1RPX05FVERFVmAuIFdoaWNoIG1ha2VzIG1lIHRoaW5rLCAmIzM0O1doeSBpcyB0aGF0PyBXaGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IGhlcmU/JiMzNDsgQW5kIG9mIGNvdXJzZSwgdGhlIGFuc3dlciBsaWtlbHkgbGllcyB3aXRoIHRoZSBgTkZfVEFCTEVTX05FVERFVmAgY29uZmlnIG9wdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuIElmIGBORl9UQUJMRVNfTkVUREVWYCBpc24mIzM5O3Qgc2V0LCAqY2FuKiB3ZSBldmVuIGNyZWF0ZSBhIG5ldGRldiBmYW1pbHkgY2hhaW4/IEkmIzM5O20gYmV0dGluZyB0aGUgYW5zd2VyIGlzIG5vLCBhbmQgdGhlIGtlcm5lbCBjb25maWcgaXMgdGhlIHBsYWNlIHRvIHZlcmlmeSB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBzZWUgd2hhdCBgTkZfVEFCTEVTX05FVERFVmAgaXMgcmVhbGx5IGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcyPWNvbmZpZyBORl9UQUJMRVNfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZfVEFCTEVTX05FVERFViBEZXBlbmRlbmN5IENoZWNrKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHJlbWVtYmVyaW5nIHRoaXMgcmlnaHQuIGBORl9UQUJMRVNfTkVUREVWYCBpcyBhICpib29sZWFuKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXNuJiMzOTt0IGl0PyBPa2F5LCBnb29kLCBjb25maXJtaW5nIHRoYXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCYjMzk7cyBidWdnaW5nIG1lIGlzOiBkb2VzIGBuZl90YWJsZXNfYXBpLmNgICphY3R1YWxseSogcmVseSBvbiBgTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZCBzcGVjaWZpY2FsbHkgZm9yIG5ldGRldiBmYW1pbHkgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IHNvdXJjZSBmaWxlLiBJdOKAmXMgY3JpdGljYWwgSSB2ZXJpZnkgd2hldGhlciBlbmFibGluZyB0aGUgbmV0ZGV2IGZhbWlseSBpbiBuZl90YWJsZXMgaXMgdW5jb25kaXRpb25hbGx5IGF2YWlsYWJsZSBvciBpZiB0aGUgYE5GX1RBQkxFU19ORVRERVZgIG9wdGlvbiBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIElmIEkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgZGV0YWlscyBmb3IgdGhlIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORlBST1RPX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NDk9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjEtI2lmZGVmIENPTkZJR19ORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTYyOlx0XHR8fCBmYW1pbHkgPT0gTkZQUk9UT19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjMtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODg2MT1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfcGFyc2VfaG9vayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZob29rLVx1MDAzZW9wc19saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4OTI0Olx0XHRcdG9wcy1cdTAwM2VwZlx0XHRcdD0gTkZQUk9UT19ORVRERVY7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTI1LVx0XHRcdG9wcy1cdTAwM2Vob29rbnVtXHRcdD0gZmxvd3RhYmxlX2hvb2stXHUwMDNlbnVtO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk3NjA9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc5Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3OTM6XHRcdFx0b3BzLVx1MDAzZXBmXHRcdFx0PSBORlBST1RPX05FVERFVjtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3OTQtXHRcdFx0b3BzLVx1MDAzZWhvb2tudW1cdFx0PSBmbG93dGFibGUtXHUwMDNlaG9va251bTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMjAwNz1zdGF0aWMgdm9pZCBfX25mdF9yZWxlYXNlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTIwMTUtXHRcdC5uZXRcdD0gbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTIwMTY6XHRcdC5mYW1pbHlcdD0gTkZQUk9UT19ORVRERVYsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMjAxNy1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBIYXJkd2FyZSBPZmZsb2FkIGluIE5ldGZpbHRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfc3VwcG9ydGVkX2ZhbWlseWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNhbGxpbmcgb3V0IGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgc3BlY2lmaWNhbGx5IGZvciBgTkZQUk9UT19ORVRERVZgLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGF0IGBORl9UQUJMRVNfTkVUREVWYCBpcyBlc3NlbnRpYWwgZm9yIHNldHRpbmcgdXAgYSBuZXRkZXYgY2hhaW4sIHdoaWNoIGlzIGl0c2VsZiBhIHByZXJlcXVpc2l0ZSBmb3IgdXNpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gQnV0IGhvbGQgb24sIHdoYXQgYWJvdXQgdGhlIElQdjQgYW5kIElQdjYgdGFibGVzPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQsIHNvIHRob3NlIG1pZ2h0IGNvbWUgaW50byBwbGF5IHRvby4KCkxldCBtZSBzZWUsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIG9mIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLiBUaGlzIG1hc2sgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwYXlsb2FkIG1hdGNoaW5nLCB3aGljaCBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBjaGFpbiBvZmZsb2FkLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UgbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBvZiB0aGUgbmV0ZGV2IGNoYWlucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcywgdGhvdWdoLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29udHJpYnV0ZT8KCkxldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGFwcGVhcnMgdGhhdCB3ZSBoYXZlIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAuIEhtbSwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoYXQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AuIE9rYXksIHRoYXQgbWFzayBjb3ZlcnMgYSBsb3QsIElQLCBJUHY2LCBUQ1AsIFVEUCwgZXRjLiBTbyB3aGlsZSBgTkZfVEFCTEVTX0lQVjRgIGFuZCBgTkZfVEFCTEVTX0lQVjZgIG1pZ2h0IGJlIGhlbHBmdWwsIHRob3NlIGFyZSB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyB0aGV5IGFyZSBub3QgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBORl9UQUJMRVNfTkVUREVWYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCk9rYXksIGl0IGxvb2tzIGxpa2UgYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiwgc28gSSB0aGluayB3ZSYjMzk7cmUgZ29vZC4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyMz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjYte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNzojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjgtXHRzd2l0Y2ggKHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0OS1cdHN3aXRjaCAocGt0LVx1MDAzZWV0aGVydHlwZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDczMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkLmNgIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBoYXJkd2FyZSBvZmZsb2FkaW5nIGludGVyYWN0cyB3aXRoIGl0LiBJIHNlZSB0aGF0IGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgaXMgdXNlZCBpbiB0aGlzIGZpbGUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGFkZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmc7IGlzIGBORl9UQUJMRVNgIGVub3VnaD8gTm8sIGBORl9UQUJMRVNgIGlzIHRoZSBiYXNlLCBidXQgYE5GX1RBQkxFU19ORVRERVZgIGlzIHNwZWNpZmljYWxseSAqcmVxdWlyZWQqIGZvciB0aGUgbmV0ZGV2IGZhbWlseSwgd2hpY2gsIGltcG9ydGFudGx5LCBpcyBuZWVkZWQgZm9yIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAuIFNvIHllYWgsIGBORl9UQUJMRVNfTkVUREVWYCAqbXVzdCogYmUgaW5jbHVkZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBmb2N1cy4gSSYjMzk7dmUgZ290IGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gSSB0aGluayBJJiMzOTtsbCBhZGQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkYC4gSG1tLCB3YWl0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKiwgYnV0IGl0JiMzOTtzIHRoZSBvbmUgdGhhdCYjMzk7cyBhY3R1YWxseSAqbW9kaWZpZWQqLiBPa2F5LCBJJiMzOTttIHN0aWNraW5nIHdpdGggaW5jbHVkaW5nIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjazogaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgaW5saW5lZD8gSWYgaXQgKmlzKiwgc3l6a2FsbGVyIG1pZ2h0IG1pc3MgaXQuIEJ1dCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaXMgdGhlIGVudHJ5IHBvaW50LCBzbyBJJiMzOTtsbCBpbmNsdWRlIHRoYXQgbm8gbWF0dGVyIHdoYXQuIEFscmlnaHQsIEkmIzM5O2xsIGFkZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuCgpUaW1lIHRvIGNoZWNrIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgJiMzOTtzIHVzYWdlLiBBaGEsIGl0JiMzOTtzIGNhbGxlZCAxNyB0aW1lcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiBpdCYjMzk7cyBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNvIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyBsaWtlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBldGMuIFdhaXQsIGl0JiMzOTtzIHByZXR0eSBzbWFsbCwgc28gaXQgKmNvdWxkKiBiZS4gT2theSwgSSYjMzk7bSBnb2luZyB0byBoZWRnZSBteSBiZXRzIGFuZCBpbmNsdWRlIGJvdGggYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBqdXN0IHRvIGJlIHN1cmUuCgpBbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIHRoZSByZXNwb25zZToKCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIG1hc2sgZ2VuZXJhdGlvbiBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZywgYW5kIHRoYXQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4KYFJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLmAKYEZvY3VzU3ltYm9sczogWyYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7XWAKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05GX1RBQkxFUyYjMzQ7LCAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0O11gCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2s6IGlzIGBORl9UQUJMRVNfTkVUREVWYCB0aGUgZXhhY3QgbmFtZT8gWXVwLCBgY29uZmlnIE5GX1RBQkxFU19ORVRERVZgLiBHb29kLgoKQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkYD8gWWVwLCBgc3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCwgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilgLgoKQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgPyBZZXMsIGBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLCB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlncyBpbnZvbHZlZD8gTGV0JiMzOTtzIHNlZS4uLiBgTkZfRkxPV19UQUJMRWA/IElzIHRoYXQgcmVxdWlyZWQgd2l0aCBgTkZUX0NIQUlOX0hXX09GRkxPQURgPyBObywgSSBkb24mIzM5O3QgYmVsaWV2ZSBzby4gSSYjMzk7bGwgbGVhdmUgdGhhdCBvdXQgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0NIQUlOX0hXX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlx0aWYgKGN0eC1cdTAwM2VjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2MS1cdFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cdTAwM2VuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMi1cdGJhc2VjaGFpbi1cdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEzOlx0aWYgKGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTQtXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDA9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3OTc6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjg0PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cdFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfdHlwZSkgPT0gTkZUX01TR19ERVNUUk9ZQ0hBSU4gfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XHRcdCAgICBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzMyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk2LVx0XHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM1LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM2Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzctXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQyLVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NDM6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ0LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1MC1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTUxOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1Mi1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0MS1cdFx0XHRpZiAoIW5mdF9pc19iYXNlX2NoYWluKGNoYWluKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcdFx0XHQgICAgIShjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY5MgoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBvcHRpbWl6ZSB0aGlzIG9mZmxvYWQgcHJvY2Vzcy4KCioqTXkgQ3VycmVudCBFdmFsdWF0aW9uIG9mIHRoZSBPZmZsb2FkIFJlcXVpcmVtZW50cyoqCgpSaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBmdWxsIGZsb3cgb2ZmbG9hZCBoZXJlLCBzbyB0aGUgYE5GX0ZMT1dfVEFCTEVgIG1vZHVsZSBpcyBwcm9iYWJseSBvdmVya2lsbC4gV2UmIzM5O3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHJ1bGUgb2ZmbG9hZCwgd2hpY2ggcG9pbnRzIG1vcmUgZGlyZWN0bHkgdG8gYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGRpc3RpbmN0aW9uLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIHN0YW5kYXJkIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAgbW9kdWxlcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24uIEdpdmVuIHRoaXMgYXNzZXNzbWVudCwgSSYjMzk7bGwgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIHdpbGwgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjM3LjA4NzI1MTc3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzM1ODQyNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTozNy4wODcyNTkwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjA2ODIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZhY2I0MGE4Mjg5NDBhYzAwMTAxOTFlNmEwMmY4MjlkNWQ4ODgxZjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTkgMjI6NDk6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbkBAIC0yNTksOSArMjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xcbiBcXHRzdHJ1Y3QgbmZ0X2RhdGEgbWFzayA9IHt9O1xcbi1cXHRfX2JlMzIgcmVtYWluZGVyX21hc2s7XFxuIFxcbiBcXHRpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7XFxuIFxcdFxcdG1lbXNldChcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XFxuQEAgLTI3MCwxNSArMjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1zZXQoXFx1MDAyNm1hc2ssIDB4ZmYsIGZpZWxkX2xlbik7XFxuLVxcdHJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7XFxuLVxcdGlmIChyZW1haW5kZXIpIHtcXG4tXFx0XFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XFxuLVxcdFxcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XFxuLVxcdFxcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcXHUwMDNjXFx1MDAzYyAoZGVsdGEgKiBCSVRTX1BFUl9CWVRFKSkgLSAxKSk7XFxuLVxcdFxcdG1hc2suZGF0YVtrXSA9IChfX2ZvcmNlIHUzMilyZW1haW5kZXJfbWFzaztcXG4tXFx0fVxcbi1cXG4rXFx0bWVtc2V0KFxcdTAwMjZtYXNrLCAweGZmLCBwcml2X2xlbik7XFxuIFxcdG1lbWNweShcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCBcXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTozNy43MDQwMDUyNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NzE5MDc5NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhY2I0MGE4Mjg5NDBhYzAwMTAxOTFlNmEwMmY4MjlkNWQ4ODgxZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAyMjo0OTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yNTksOSArMjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xuIFx0c3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTtcbi1cdF9fYmUzMiByZW1haW5kZXJfbWFzaztcbiBcbiBcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XG5AQCAtMjcwLDE1ICsyNjgsNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgZmllbGRfbGVuKTtcbi1cdHJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7XG4tXHRpZiAocmVtYWluZGVyKSB7XG4tXHRcdGsgPSBwcml2X2xlbiAvIHNpemVvZih1MzIpO1xuLVx0XHRkZWx0YSA9IGZpZWxkX2xlbiAtIHByaXZfbGVuO1xuLVx0XHRyZW1haW5kZXJfbWFzayA9IGh0b25sKH4oKDEgXHUwMDNjXHUwMDNjIChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTtcbi1cdFx0bWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrO1xuLVx0fVxuLVxuK1x0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbiBcdG1lbWNweShcdTAwMjZyZWctXHUwMDNlbWFzaywgXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6MzcuNzA0MDA2NDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjA3NTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB0aGUgaW50ZW50IGlzIHRvIHNpbXBsaWZ5IHRoZSBtYXNrIGdlbmVyYXRpb24gd2l0aGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZnVuY3Rpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNwZWNpZmljIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjQwLjkxMDA4MzY0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1MTc3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yNzc9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDc6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MzQ2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTM4Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQ0Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDc0PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NDEuMDE4NjA4ODY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2Mjg1NDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXlsb2FkIE9mZmxvYWQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkIGFyZWEgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uIGlzICpjcnVjaWFsKiDigJMgaXQncyBhbGwgb3ZlciB0aGUgcGxhY2UsIEknbSBzZWVpbmcgaXQgdXNlZCBoZWF2aWx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gVGhhdCdzIGEgcHJldHR5IGJyb2FkIHJhbmdlLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtZWFucyBpdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoaXMsIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfcGF5bG9hZC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoYXQqIGlzIGVuYWJsZWQgYW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhdCBjb21waWxlIHRpbWUuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzExLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NDQuMTgxNDY4OTAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMzNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjQ0LjMxNTgxNDE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0ODQ5MTg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIHRhYmxlcyBhbmQsIGNydWNpYWxseSwgaXMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSB3YXkgbWFza3MgYXJlIGdlbmVyYXRlZCBmb3Igb2ZmbG9hZGluZyBuZXRmaWx0ZXIgcGF5bG9hZCBtYXRjaGVzLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdGhlIGhhbmRsaW5nIG9mIGByZW1haW5kZXJgIHdpdGhpbiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBoYXMgYmVlbiByZW1vdmVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlZCBhIHJhdGhlciBjb21wbGV4IGNhbGN1bGF0aW9uIGFuZCBtYW5pcHVsYXRpb24gb2YgYHJlbWFpbmRlcmAgYW5kIGByZW1haW5kZXJfbWFza2AsIGludm9sdmluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGJ5dGUgc3dhcHBpbmcgKGBodG9ubGApLiBUaGUgbmV3IGNvZGUgc2ltcGx5IHplcm9lcyBvdXQgdGhlIG1hc2ssIGFuZCBjb3BpZXMgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBzaW1wbGlmeWluZyB0aGUgbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3Rpbmcgb2ZmbG9hZCBiZWhhdmlvci4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIEFueSBjaGFuZ2UgdG8gdGhlc2Ugb2ZmbG9hZCBtYXNrIGNhbGN1bGF0aW9ucyBjb3VsZCBvcGVuIG5ldyBhdHRhY2sgYXZlbnVlcy5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLiBXYWl0LCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBIb3dldmVyLCBzaW5jZSBpdCBpcyBjYWxsZWQgYnkgdGhlIG90aGVycywgaXQgc3RpbGwgbmVlZHMgdG8gYmUgcmV2aWV3ZWQsIGFuZCBmdXp6aW5nLiBNYXliZSBpdCdzIGlubGluZWQ/IEkgc2hvdWxkIGNoZWNrIHRoYXQuIExldCdzIHN0YXJ0IHdpdGggYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIGFuZCBtYXliZSBpbmNsdWRlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwYCBzaW5jZSBpdCB1c2VzIHRoZSBtYXNrLiBZZWFoLCB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGF0IGZvciBub3cuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTkZfVEFCTEVTYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb2ZmbG9hZC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIFRoYXQgbWlnaHQgcmV2ZWFsIHNvbWUgb3RoZXIgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyB0aGF0IGNvdWxkIGFmZmVjdCBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NTEuNDY0MzA4MTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg2OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTo1MS41ODMxODMxMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4NDY5MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgSSdtIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gbmZfdGFibGVzIEhhcmR3YXJlIE9mZmxvYWQqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmlsaXRpZXMgaGVyZS4gSSdtIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggYG5mX3RhYmxlc2AgYW5kIEknbSBzdGFydGluZyB0byBjb25zaWRlciBob3cgaGFyZHdhcmUgb2ZmbG9hZCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgb3B0aW1pemVkLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIHRoZW9yeSwgYW5kIHRoZSBnZW5lcmFsIGNvbmNlcHRzLCBidXQgSSdtIHRyeWluZyB0byBnZXQgKnNwZWNpZmljKi4gSXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIHNwZWNpZmljIHN5bnRheCwgYSBkb2N1bWVudGVkIG1ldGhvZCwgYW55dGhpbmcgY29uY3JldGUgd2l0aGluIGBuZl90YWJsZXNgIHRoYXQgZGlyZWN0bHkgZW5hYmxlcyBvciBjb25maWd1cmVzIGhhcmR3YXJlIG9mZmxvYWQ/IEknbSBub3QganVzdCBsb29raW5nIGZvciBnZW5lcmFsIHBvaW50ZXJzOyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSdzIGEgc3BlY2lmaWMga25vYiBJIGNhbiB0dXJuLCBhIHNwZWNpZmljIHBhcmFtZXRlciBJIGNhbiB0d2Vhay4gRG9lcyBgbmZfdGFibGVzYCBoYXZlIGFueSBleHBsaWNpdCBtZWNoYW5pc21zIHRvIGhhbmQgdGFza3Mgb3ZlciB0byBhIGRlZGljYXRlZCBvZmZsb2FkIGVuZ2luZSBvbiB0aGUgaGFyZHdhcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhciBkZXRhaWxzIHRvIHJlYWxseSBhc3Nlc3MgaXRzIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhYm91dCByZWFsLXdvcmxkIGltcGxlbWVudGF0aW9uLCBub3QganVzdCB0aGVvcmV0aWNhbCBwb3RlbnRpYWwuIEkgbmVlZCB0byBnZXQgYmV5b25kIHRoZSBhYnN0cmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjU0Ljg2MTY1NDI4NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTgyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MDQ9Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA2OlxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNy1cXHRoZWxwXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwODpcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJmbG93X29mZmxvYWRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDktXFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcyMT1jb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjUtXFx0aGVscFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjY6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzI3LVxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTgxMT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DSEVDS1NVTVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxOS1cXHQgIFNvbWUgb2xkIERIQ1AgY2xpZW50cyBkcm9wIHBhY2tldHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYXdhcmVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODIwOlxcdCAgdGhhdCB0aGUgY2hlY2tzdW0gd291bGQgbm9ybWFsbHkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlIGFuZFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MjEtXFx0ICB0aHVzIHNob3VsZCBiZSBjb25zaWRlcmVkIHZhbGlkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTo1NS4wMDM2NDQyODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MTQyNzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgdmFyaWFibGUsIGFuZCBpdCdzIHBvcHBpbmcgdXAgaW4gYG5mdF9wYXlsb2FkLmNgLCB3aGljaCwgaWYgbWVtb3J5IHNlcnZlcywgaXMgbmVzdGxlZCByaWdodCBpbiB0aGUgY29yZSBvZiBgbmZfdGFibGVzYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaGVyZTogaXMgaGFyZHdhcmUgb2ZmbG9hZCwgaW4gdGhlIGNvbnRleHQgb2YgYG5mX3RhYmxlc2AgYW5kIHRoaXMgc3BlY2lmaWMgcGF5bG9hZCBtb2R1bGUsIGVuYWJsZWQgYnkgZGVmYXVsdD8gT3IgaXMgdGhlcmUgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcgb3IgbW9kdWxlIEkgbmVlZCB0byBiZSBsb29raW5nIGF0IHNlcGFyYXRlbHk/IEdvdHRhIGdldCB0aGUgY29udGV4dCByaWdodC4gSSdtIGdvaW5nIHRvIHJldmlzaXQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGlmIEkgY2FuIGZpbmQgdGhlIGFuc3dlci4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBob2xkcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NTguMDk1MDczMzA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NDA5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjAtXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9zb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTgtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwMC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzE1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzIyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSArIHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMzMjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM3MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDg5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAzLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA5LVxcdGNhc2UgSVBQUk9UT19UQ1A6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cXHRjYXNlIElQUFJPVE9fVURQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTM6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTIyOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMy1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMwLVxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjU4LjIxNTkxOTcyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEwMzI1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9mZmxvYWRpbmcgTkZUYWJsZXMgUnVsZXM6IEVudHJ5IFBvaW50IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgYC5vZmZsb2FkYCBvcGVyYXRpb24gd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfb3BzYCBhbmQgYG5mdF9wYXlsb2FkX2Zhc3Rfb3BzYCBzdHJ1Y3R1cmVzLiBTbywgYmFzaWNhbGx5LCB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBvZmZsb2FkaW5nIG5mdGFibGVzIHJ1bGVzLiBNYWtlcyBzZW5zZS5cblxuTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhlcmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3Igc29tZSBraW5kIG9mIGVuYWJsZSBmbGFnLCB0aGF0IGNvbnRyb2xzIHRoaXMgb2ZmbG9hZGluZyBmZWF0dXJlPyBJJ20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgYXJvdW5kLiBNeSBndXQgdGVsbHMgbWUgSSBzaG91bGQgY2hlY2sgb3V0IGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmNgIOKAkyBvciBzb21ldGhpbmcgc2ltaWxhciwgb2YgY291cnNlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvcmUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjAxLjYyNjI0NjU2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxOTk2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDc6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMy1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjE6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYyLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MDEuNzI0NDUxMjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDQ3MDk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipPZmZsb2FkaW5nIERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGAub2ZmbG9hZGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggb2ZmbG9hZGluZyBydWxlcywgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBhIHNwZWNpZmljIGtub2Igd2UgY2FuIHR3aWRkbGUsIHRoYXQgYWN0dWFsbHkgKmNvbnRyb2xzKiB0aGUgb2ZmbG9hZGluZyBiZWhhdmlvcj8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHJ1bGVzIHRoZW1zZWx2ZXMgYW5kIHRoZSBvZmZsb2FkaW5nIHByb2Nlc3MuXG5cbkJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgZ29pbmcgdG8gYmUgdGhlIGNvZGUsIGFuZCBjb25zaWRlcmluZyB0aGlzIGlzIGFsbCBhYm91dCBOZXRmaWx0ZXIsIHNwZWNpZmljYWxseSBOZXRmaWx0ZXIgdGFibGVzLCBJIHNob3VsZCBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBUaGF04oCZcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGAub2ZmbG9hZGAsIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBpbnZva2VkLCBhbmQgdGhhdCBzaG91bGQgY2xhcmlmeSBldmVyeXRoaW5nLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjA0Ljk2OTE2NDEyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDQ2MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwub2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy00MTAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9iaXR3aXNlX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjQxMTpcXHQub2ZmbG9hZFxcdD0gbmZ0X2JpdHdpc2Vfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NTEzPWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2JpdHdpc2VfZmFzdF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNTE4LVxcdC5kdW1wXFx0XFx0PSBuZnRfYml0d2lzZV9mYXN0X2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjUxOTpcXHQub2ZmbG9hZFxcdD0gbmZ0X2JpdHdpc2VfZmFzdF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy01MjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY21wX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5Mi1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE5MzpcXHQub2ZmbG9hZFxcdD0gbmZ0X2NtcF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5NC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9Mjc4PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NtcF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTI4My1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcF9mYXN0X2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mjg0OlxcdC5vZmZsb2FkXFx0PSBuZnRfY21wX2Zhc3Rfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODUtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTM3MT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jbXAxNl9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTM3Ni1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcDE2X2Zhc3RfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzozNzc6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9jbXAxNl9mYXN0X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMzc4LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmM9MzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb3VudGVyX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYy0zMTUtXFx0LmNsb25lXFx0XFx0PSBuZnRfY291bnRlcl9jbG9uZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmM6MzE2OlxcdC5vZmZsb2FkXFx0PSBuZnRfY291bnRlcl9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYzozMTc6XFx0Lm9mZmxvYWRfc3RhdHNcXHQ9IG5mdF9jb3VudGVyX29mZmxvYWRfc3RhdHMsXFxubmV0L25ldGZpbHRlci9uZnRfY291bnRlci5jLTMxOC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9kdXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R1cF9uZXRkZXYuYy04Mi1cXHQuZHVtcFxcdFxcdD0gbmZ0X2R1cF9uZXRkZXZfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmM6ODM6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9kdXBfbmV0ZGV2X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jOjg0OlxcdC5vZmZsb2FkX2FjdGlvblxcdD0gbmZ0X2R1cF9uZXRkZXZfb2ZmbG9hZF9hY3Rpb24sXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jLTg1LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM9MjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9md2RfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0yNjMtXFx0LnZhbGlkYXRlXFx0PSBuZnRfZndkX3ZhbGlkYXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzoyNjQ6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjI2NTpcXHQub2ZmbG9hZF9hY3Rpb25cXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0yNjYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTMyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfaW1tX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jLTMzNC1cXHQudmFsaWRhdGVcXHQ9IG5mdF9pbW1lZGlhdGVfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmM6MzM1OlxcdC5vZmZsb2FkXFx0PSBuZnRfaW1tZWRpYXRlX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmM6MzM2OlxcdC5vZmZsb2FkX2FjdGlvblxcdD0gbmZ0X2ltbWVkaWF0ZV9vZmZsb2FkX2FjdGlvbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0zMzctfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz04MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X21ldGFfZ2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDctXFx0LnZhbGlkYXRlXFx0PSBuZnRfbWV0YV9nZXRfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwODpcXHQub2ZmbG9hZFxcdD0gbmZ0X21ldGFfZ2V0X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwOS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MDUuMTE0MjE2NDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzY2NjE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBPZmZsb2FkaW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc2AgYW5kIGl0J3MgbG9va2luZyBsaWtlIG9mZmxvYWRpbmcgaXMgYSBrZXkgY29tcG9uZW50LCB3aGljaCBpcyBubyBzdXJwcmlzZSBnaXZlbiBpdHMgcGVyZm9ybWFuY2UgZ29hbHMuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgZmxhZ3Mgb3IgbW9kdWxlcyB0aGF0IGVuYWJsZSBpdC4gVGhlIGRvY3VtZW50YXRpb24gaXNuJ3QgYWx3YXlzIGNyeXN0YWwgY2xlYXIgb24gdGhpcy4gTXkgaW50dWl0aW9uIGlzIG51ZGdpbmcgbWUgdG93YXJkcyBhIGZldyBwb3NzaWJpbGl0aWVzOiBgTkZfVEFCTEVTX05FVERFVmAsIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCBvciBwZXJoYXBzIGp1c3QgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBgTkZfVEFCTEVTX09GRkxPQURgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlciBiZWluZyB0aGUgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgTkZfVEFCTEVTX09GRkxPQURgIG9yIGFueXRoaW5nIHJlc2VtYmxpbmcgaXQgdG8gY29uZmlybSBhbmQgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBhdGguIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZGVwZW5kZW5jeSBoZXJlIGZvciB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjA4LjU1MDg4MjE4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MjkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MC1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzQ6XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NTpcXHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc2LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbWl4ZWQgSVB2NC9JUHY2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NTA9Y29uZmlnIE5GVF9OQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTItXFx0c2VsZWN0IE5GX05BVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTM6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSVBWNCB8fCBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmF0IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ODY9Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODgtXFx0ZGVmYXVsdCBORlRfUkVKRUNUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjA4PWNvbmZpZyBORlRfRklCX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA5OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEwLVxcdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjI1PWNvbmZpZyBORlRfU09DS0VUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyOS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQwPWNvbmZpZyBORlRfVFBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0NC1cXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1OlxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMTplbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzExPWNvbmZpZyBORl9GTE9XX1RBQkxFXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE0LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxNTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDowOC42NDE4MTcyODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MzE2MTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQXNzZXNzaW5nIEhhcmR3YXJlIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGluaXRpYWwgYXNzZXNzbWVudC4gTXkgZmlyc3QgdGhvdWdodCBpczogKkxldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlnLiogSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAsIHJlYWxseS4gSSBuZWVkIHRvIGtub3cgaWYgd2UncmUgZXZlbiAqdXNpbmcqIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYXMgaXQgd2lsbCBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoZSByZXN0IG9mIHRoZSBhbmFseXNpcy4gSXQncyB0aGUgZ3JvdW5kd29yazsga25vd2luZyB3aGV0aGVyIG9yIG5vdCBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQgd2lsbCBpbmZsdWVuY2UgZXZlcnl0aGluZyB0aGF0IGNvbWVzIG5leHQuIEVzc2VudGlhbGx5LCBJJ20gc2V0dGluZyB0aGUgYmFzZWxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTEuNDg1MDAzMzQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjI1MzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0zMDI9c3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjQ6XFx0aWYgKHRlc3RfYml0KElQU19IV19PRkZMT0FEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjU6XFx0XFx0c2VxX3B1dHMocywgXFxcIltIV19PRkZMT0FEXSBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzY2LVxcdGVsc2UgaWYgKHRlc3RfYml0KElQU19PRkZMT0FEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05NzM9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTg2OlxcdHNldF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05ODctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk5Mj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTkzLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NDpcXHRjbGVhcl9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTUtXFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMzI9bmZfbmF0X3VzZWRfdHVwbGVfaGFyZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMzNS17XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjMzNjpcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFnc19vZmZsb2FkID0gSVBTX09GRkxPQUQgfCBJUFNfSFdfT0ZGTE9BRDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzM3LVxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqdGhhc2g7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlxcdGlmIChjdHgtXFx1MDAzZWNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzYxLVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXFx1MDAzZW5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVxcdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEyLVxcdGJhc2VjaGFpbi1cXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTM6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNC1cXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc0MD1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyODQ9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXFx0XFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ190eXBlKSA9PSBORlRfTVNHX0RFU1RST1lDSEFJTiB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XFx0XFx0ICAgIGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTYtXFx0XFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTA5Nj1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0MS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE0MjpcXHRcXHRpZiAoKGZsb3d0YWJsZS1cXHUwMDNlZGF0YS5mbGFncyBcXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkgXlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDM6XFx0XFx0ICAgIChmbGFncyBcXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQ0LVxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NzY9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTQ6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1NS1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTEyNTk9c3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9UUkFOU19BQk9SVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNDc6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0OC1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTQtXFx0XFx0XFx0bmZ0X3J1bGVfZXhwcl9hY3RpdmF0ZShcXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1OlxcdFxcdFxcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXFx0XFx0XFx0XFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzUtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDItXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0MzpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUwLVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NTE6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVxcdFxcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cXHRcXHRcXHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVxcdFxcdGNhc2UgTkZUX01TR19ERUxDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVxcdFxcdGNhc2UgTkZUX01TR19ORVdSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQxLVxcdFxcdFxcdGlmICghbmZ0X2lzX2Jhc2VfY2hhaW4oY2hhaW4pIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcXHRcXHRcXHQgICAgIShjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTEuNTgxMjYzMDc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDgwMDk4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhhcmR3YXJlIE9mZmxvYWQgYW5kIE5ldGZpbHRlciBOdWFuY2VzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgTkZfVEFCTEVTYCBzdHVmZiBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biBob3cgaGFyZHdhcmUgb2ZmbG9hZCBmaXRzIGluLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbSB1c2VkIHRvIG1vcmUgZXhwbGljaXQgY29udHJvbHMsIHNvIHRoaXMgY291bGQgbWVhbiBpdCdzIGVpdGhlciB0aWdodGx5IGludGVncmF0ZWQsIG9yIHBvc3NpYmx5IGVuYWJsZWQgYnkgc29tZXRoaW5nIGVsc2UuXG5cbk9rYXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlbiB0aGUgbW9kdWxlIGBuZl90YWJsZXNfb2ZmbG9hZC5jYCBpcyBhY3R1YWxseSBidWlsdC4gSSBiZXR0ZXIgY2hlY2sgdGhlIE5ldGZpbHRlciBgTWFrZWZpbGVgIHRvIHNlZSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkga25vdyB0aGF0IHVzdWFsbHkgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQgdGhlcmUgaW4gdGhlIE1ha2VmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjE1LjkyOTI3NjM3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMzcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkxLVxcdFxcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTI6XFx0XFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTYuMDE0MzMwNTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjUwODAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIHByZXR0eSBjbGVhciBgbmZfdGFibGVzX29mZmxvYWQub2AgaXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCBtZWFuaW5nIGBORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gY2hlY2tpbmcuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLCBhbGwgb2Ygd2hpY2ggZmVlZCBpbnRvIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBpdHNlbGYuIFNvLCBvcmlnaW5hbGx5LCBJIHRob3VnaHQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGRvd25zdHJlYW0gZnVuY3Rpb25zIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKi4gVGhhdCByYWlzZXMgYSBmbGFnLiBJdCBtaWdodCBiZSBpbmxpbmVkLiBTbywgYWx0aG91Z2ggaXQncyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudC4gRm9yIHRoYXQgcmVhc29uLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGluIHRoZSBmb2N1cyBzeW1ib2xzLiBJIHdpbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYCB0byB0aGUgbGlzdC4gSSdtIGdvaW5nIHRvIGxpc3QgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBmb3Igbm93LlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhlIHBhdGNoIGFsdGVycyBob3cgdGhlIG1hc2sgaXMgZ2VuZXJhdGVkIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gKndpdGgqIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gVGhlcmVmb3JlLCBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBgbmZ0X3BheWxvYWQuY2AuXG5cbk9rYXksIGJhY2sgdG8gY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBORl9UQUJMRVNgIGlzIGltcG9ydGFudC4gQnV0IGFyZSB0aGVyZSAqc3BlY2lmaWMqIGNvbmZpZ3MgcmVsYXRlZCB0byBvZmZsb2FkaW5nPyBXaGlsZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBjb3VsZCBiZSByZWxhdGVkLCB0aGlzIHBhcnRpY3VsYXIgb2ZmbG9hZCBhZmZlY3RzIGBuZnRfcGF5bG9hZGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBuZnRfcGF5bG9hZF9vcHMub2ZmbG9hZGAgc3RydWN0dXJlLCBhbmQgaXQgaXMgdXNlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gTGV0IG1lIGNoZWNrIGlmIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaGFzIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIHJlY2FsbCBzZWVpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCBtZW50aW9uZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjIzLjczOTQxMzQxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTA3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9DSEFJTl9IV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc1MD1zdGF0aWMgaW50IG5mdF9kZWxydWxlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjA6XFx0aWYgKGN0eC1cXHUwMDNlY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cXHUwMDNlbmV0LCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzUtXFx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTE9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXFx0YmFzZWNoYWluLVxcdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cXHRcXHRpZiAoTkZOTF9NU0dfVFlQRShpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzMzMTpcXHRcXHQgICAgY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cXHRcXHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDU9c3RhdGljIGludCBuZl90YWJsZXNfbmV3cnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDY0OlxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKG5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgTkZUX01TR19ORVdSVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgTkZUX1RSQU5TX0FCT1JUKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cXHRcXHRcXHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFxcdTAwMjZjdHgsIG5mdF90cmFuc19ydWxlKHRyYW5zKSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUyNy1cXHRcXHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUyODpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjktXFx0XFx0XFx0ICAgIG5mdF90cmFuc19jaGFpbl91cGRhdGUodHJhbnMpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzNjpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Mi1cXHRcXHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTQzOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0NC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTAtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1MTpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTItXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTY2PWludCBuZnRfZmxvd19ydWxlX29mZmxvYWRfY29tbWl0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODctXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1ODg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTUtXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5NjpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA5LVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTA6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjExLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTYyOD1zdGF0aWMgc3RydWN0IG5mdF9jaGFpbiAqX19uZnRfb2ZmbG9hZF9nZXRfY2hhaW4oY29uc3Qgc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDEtXFx0XFx0XFx0aWYgKCFuZnRfaXNfYmFzZV9jaGFpbihjaGFpbikgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjQyOlxcdFxcdFxcdCAgICAhKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDoyMy44ODAzMjU1NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NTUwMTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHVzZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaWYgdGhlcmUncyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgbmZfdGFibGVzX29mZmxvYWQub2AuIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgaXQncyBpbmNsdWRlZCBpbiB0aGUgb2JqZWN0IGxpc3QgZm9yIGBuZl90YWJsZXMtb2Jqc2AuIFRoYXQgbWVhbnMgYG5mX3RhYmxlc19vZmZsb2FkLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aGVuZXZlciBgTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGBORl9UQUJMRVNgIGl0c2VsZiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBlbmFibGUgaXQuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbDogaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgYSBzdGF0aWMgdmFyaWFibGU/IFllcywgaXQgaXMgc3RhdGljLiBPa2F5LCBjYW4gc3l6a2FsbGVyIGZ1enogc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCBpdCBjYW4sIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAodW5sZXNzIHRoZXkgYXJlIGNvbXBsZXRlbHkgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlKS4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGxpc3QgKmJvdGgqIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGUgcGF0Y2ggY2xlYXJseSBpbXBhY3RzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlIG9mZmxvYWQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmZ0X3BheWxvYWQuY2AsIGlzIHdhcnJhbnRlZC5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tcIiwgXCJuZnRfcGF5bG9hZF9vZmZsb2FkXCJcXF0qKiAtIFRoZXNlIHN5bWJvbHMgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmllZCBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiTkZfVEFCTEVTXCJcXF0qKiAtIEVuYWJsaW5nIGBORl9UQUJMRVNgIGlzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuT25lIG1vcmUgdGhpbmcuLi4gSXMgYE5GX1RBQkxFU19ORVRERVZgIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbiBmb3IgaGFyZHdhcmUgb2ZmbG9hZD8gSSdsbCBjaGVjayBgbmZ0X2NoYWluX3BhcnNlX25ldGRldmAgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLlxuXG5gYGBjXG5zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLi4uXG5cdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG5gYGBcblxuSXQgbG9va3MgbGlrZSBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHByaW1hcmlseSB1c2VkIHdpdGggY2hhaW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0ZGV2IGZhbWlseS4gTm93LCBsZXQncyBhbHNvIGNoZWNrIGBuZl90YWJsZXNfYWRkY2hhaW5gLlxuXG5gYGBjXG5cdFx0aWYgKGZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcblx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5BaCwgaXQgc2VlbXMgdGhhdCBpZiBpdCdzICpub3QqIGEgbmV0ZGV2IGNoYWluLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQncyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMgaGFyZHdhcmUgb2ZmbG9hZCBpcyBtb3JlIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgbmV0ZGV2IGZhbWlseSB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjMyLjAzNTgyOTY1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODAwMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9DSEFJTl9IV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc1MD1zdGF0aWMgaW50IG5mdF9kZWxydWxlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjA6XFx0aWYgKGN0eC1cXHUwMDNlY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cXHUwMDNlbmV0LCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzUtXFx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTE9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXFx0YmFzZWNoYWluLVxcdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cXHRcXHRpZiAoTkZOTF9NU0dfVFlQRShpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzMzMTpcXHRcXHQgICAgY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cXHRcXHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDU9c3RhdGljIGludCBuZl90YWJsZXNfbmV3cnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDY0OlxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKG5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgTkZUX01TR19ORVdSVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgTkZUX1RSQU5TX0FCT1JUKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cXHRcXHRcXHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFxcdTAwMjZjdHgsIG5mdF90cmFuc19ydWxlKHRyYW5zKSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozMi4xMzc2MzU0MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NDE4NDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gbmZfdGFibGVzX2FkZGNoYWluKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl90YWJsZXNfYWRkY2hhaW5gLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgZW52aXJvbm1lbnQgaXMgcGFyYW1vdW50LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIGNoZWNraW5nIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBjaGFpbnMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2Agc3lzdGVtLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ2xsIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHByb2NlZWQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozNS4xMzE4MjMwMTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc5MDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfYWRkY2hhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjczOD1zdGF0aWMgdTY0IGNoYWluX2lkO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc0MDpzdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzQxLVxcdFxcdFxcdCAgICAgIHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzEwMj1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjAwOlxcdHJldHVybiBuZl90YWJsZXNfYWRkY2hhaW4oXFx1MDAyNmN0eCwgZmFtaWx5LCBwb2xpY3ksIGZsYWdzLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozNS41ODA2MjEyNzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjk1MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhhdCBzbmlwcGV0OlxuXG4qKkFuYWx5emluZyB0aGUgYG5mX3RhYmxlc19hZGRjaGFpbmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZl90YWJsZXNfYWRkY2hhaW5gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc5Ny4gVGhpcyBmdW5jdGlvbiBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgYWRkaW5nIG5ldyBjaGFpbnMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUgd2l0aCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOlxuXG5gYGBjXG5cdFx0aWYgKGZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcblx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgXCJBaGEhIEhhcmR3YXJlIG9mZmxvYWQgaXMgZXhwbGljaXRseSBiZWluZyBibG9ja2VkIGZvciBjaGFpbiBjcmVhdGlvbi5cIiBUaGF0IGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgZmxhZyBpcyBpbXBvcnRhbnQsIGFuZCB0aGUgcmV0dXJuIG9mIGAtRU9QTk9UU1VQUGAgaW5kaWNhdGVzIHRoYXQgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQg4oCTIGFkZGluZyB0aGUgY2hhaW4uIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIHBvdGVudGlhbCBsaW1pdGF0aW9ucyBvciBjb25zaWRlcmF0aW9ucyB3aGVuIGNvbWJpbmluZyBjaGFpbiBjcmVhdGlvbiBhbmQgaGFyZHdhcmUgb2ZmbG9hZCB3aXRoaW4gTmV0ZmlsdGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXN0cmljdGlvbiBleGlzdHMuIEl0IGNvdWxkIGJlIGR1ZSB0byBhIHZhcmlldHkgb2YgcmVhc29ucywgbGlrZSBoYXJkd2FyZSBjb21wYXRpYmlsaXR5IGlzc3VlcywgY29tcGxleGl0aWVzIGluIG9mZmxvYWRpbmcgY2hhaW4gbWFuYWdlbWVudCwgb3IgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zLiBJJ2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0sIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IG9mZmxvYWRpbmcgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGBmbGFnc2AgYXJlIHNldCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2ODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozOS40OTM1NzU0OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlJfUENQVShzdGF0cyk7XFxuMjc4MTpcXHRcXHRcXHRcXHR9XFxuMjc4MjpcXHRcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoYmFzZWNoYWluLVxcdTAwM2VzdGF0cywgc3RhdHMpO1xcbjI3ODM6XFx0XFx0XFx0fVxcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRcXHRlcnIgPSBuZnRfYmFzZWNoYWluX2luaXQoYmFzZWNoYWluLCBmYW1pbHksIFxcdTAwMjZob29rLCBmbGFncyk7XFxuMjc4NjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI3ODc6XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuMjc4ODpcXHRcXHRcXHRcXHRrZnJlZShiYXNlY2hhaW4pO1xcbjI3ODk6XFx0XFx0XFx0XFx0ZnJlZV9wZXJjcHUoc3RhdHMpO1xcbjI3OTA6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzkxOlxcdFxcdFxcdH1cXG4yNzkyOlxcdFxcdFxcdGlmIChzdGF0cylcXG4yNzkzOlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZuZnRfY291bnRlcnNfZW5hYmxlZCk7XFxuMjc5NDpcXHRcXHR9IGVsc2Uge1xcbjI3OTU6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0JBU0UpXFxuMjc5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzk3OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbjI3OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRcXHRjaGFpbiA9IGt6YWxsb2Nfb2JqKCpjaGFpbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yODAxOlxcdFxcdFxcdGlmIChjaGFpbiA9PSBOVUxMKVxcbjI4MDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjgwMzpcXHRcXG4yODA0OlxcdFxcdFxcdGNoYWluLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbjI4MDU6XFx0XFx0fVxcbjI4MDY6XFx0XFx0Y3R4LVxcdTAwM2VjaGFpbiA9IGNoYWluO1xcbjI4MDc6XFx0XFxuMjgwODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y2hhaW4tXFx1MDAzZXJ1bGVzKTtcXG4yODA5OlxcdFxcdGNoYWluLVxcdTAwM2VoYW5kbGUgPSBuZl90YWJsZXNfYWxsb2NfaGFuZGxlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MzkuNDk0MDk4MTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTYwMjcxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gTkZUIEhhcmR3YXJlIE9mZmxvYWRpbmcqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgZmVhdHVyZSwgdGhhdCdzIGV4Y2x1c2l2ZWx5IGZvciBiYXNlIGNoYWlucy4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0LiBBbmQgaXQncyBgbmZ0X2Jhc2VjaGFpbl9pbml0YCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBIbW0sIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3Igb3B0aW9ucyB0aWVkIHRvIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGA/IFRpbWUgdG8gZGlnIGludG8gYG5mX3RhYmxlc19hcGkuY2AuIExldCdzIHNlZSB3aGF0IGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjQyLjU5MDEyODkyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDYwMDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0OlxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNS1cXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgXFx1MDAyNmhvb2stXFx1MDAzZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0Mi42OTg1OTQ0ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTUwMTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIGluIGRldGFpbC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVsZXZhbnQgY29kZSBub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHRoaW5nIGZ1bmN0aW9ucywgaXRzIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBkZXNpZ24gZGVjaXNpb25zLiBNeSBrZXkgY29uY2VybiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkaW5nLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHRoZSBvZmZsb2FkLCBob3cgcnVsZSB0cmFuc2xhdGlvbiB0byBoYXJkd2FyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiB0aGUgZmxvdy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3ZlIGltcGxlbWVudGVkIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0byBtaW5pbWl6ZSBDUFUgaW52b2x2ZW1lbnQgZHVyaW5nIHRoZSBmYXN0IHBhdGguIEFyZSB0aGV5IHVzaW5nIGJhdGNoaW5nPyBXaGF0IGFib3V0IGZsb3cgY29udHJvbD8gV2hhdCBhYm91dCBhbnkgcG90ZW50aWFsIHJhY2VzPyBJJ20gYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBvbiBob3cgdGhlIG1vZHVsZSBoYW5kbGVzIHJ1bGUgdXBkYXRlcyBhbmQgZGVsZXRpb24gY29uY3VycmVudGx5IHdpdGggdHJhZmZpYyBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6NDYuMDc4MDk4ODA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MTY3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEzLVxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTQ6XFx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE1LVxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LCBcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjEyPXN0YXRpYyBpbnQgbmZ0X2NoYWluX29mZmxvYWRfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyMjE6Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yMjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0Ni4yMDI4MjI5NTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTU3NzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCB3aXRoaW4gYG5mX3RhYmxlc19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBoZWFkYWNoZXMsIGRlcGVuZGluZyBvbiBob3cgaXQncyBpbXBsZW1lbnRlZCEpIGxpa2VseSBoYXBwZW5zIGZvciBvZmZsb2FkaW5nIGNoYWluIG9wZXJhdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjaGFpbiBzdXBwb3J0IGlzIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBmb3Igb2ZmbG9hZGluZyBwdXJwb3Nlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEga2V5IGRlY2lzaW9uIHBvaW50LCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgY2hhaW4gY2FuIGFjdHVhbGx5IGJlIG9mZmxvYWRlZCB0byB0aGUgaGFyZHdhcmUgb3IgaWYgd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gc29mdHdhcmUgcHJvY2Vzc2luZy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhpbmdzIGxpa2UgdGhlIGNvbmRpdGlvbnMgY2hlY2tlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2hhaW5zLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSAod2hhdGV2ZXIgdGhhdCBtaWdodCBiZSkgaXMgbWFuYWdlZCBoZXJlLiBUaGUgY29kZSBsaWtlbHkgaG9sZHMgY2x1ZXMgcmVnYXJkaW5nIHRoZSB0eXBlcyBvZiBjaGFpbnMgdGhhdCAqYXJlKiBvZmZsb2FkYWJsZSBhbmQgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gc2VlIHNvbWUgdmVyeSBoYXJkd2FyZSBzcGVjaWZpYyBjb2RlIGluIGhlcmUuIEZyb20gYSBoaWdoIGxldmVsIHBlcnNwZWN0aXZlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgd2hpY2ggd2lsbCBhbGxvdyB1cyB0byBkZWZpbmUgaWYgd2Ugc3VwcG9ydCBhIGNoYWluIGZvciBvZmZsb2FkaW5nIGJhc2VkIG9uIGl0cyBydWxlcywgZm9yIGV4YW1wbGUgd2hldGhlciBvciBub3Qgd2UgY2FuIHRyYW5zbGF0ZSBhIHJ1bGUgb2YgYSBjaGFpbiB0byBhIGhhcmR3YXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjQ5Ljc3ODQwMzI3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXG4gMjIxOlxcdGJvb2wgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChjb25zdCBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbilcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqb3BzO1xcbiAyMjQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjI1OlxcdFxcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKG5mdF9jaGFpbl9vZmZsb2FkX3ByaW9yaXR5KGJhc2VjaGFpbikgXFx1MDAzYyAwKVxcbiAyMjg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgbGlzdCkge1xcbiAyMzE6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbiAyMzI6XFx0XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlcGYgIT0gTkZQUk9UT19ORVRERVYgfHxcXG4gMjMzOlxcdFxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZWhvb2tudW0gIT0gTkZfTkVUREVWX0lOR1JFU1MpXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdFxcdGRldiA9IG9wcy1cXHUwMDNlZGV2O1xcbiAyMzc6XFx0XFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YyBcXHUwMDI2XFx1MDAyNlxcbiAyMzg6XFx0XFx0XFx0XFx0ICAgICFmbG93X2luZHJfZGV2X2V4aXN0cygpKVxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0OS43Nzg1Nzk4ODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjgyOTc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIENvbnN0cmFpbnQqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBzYXlzIGBvcHMtXHUwMDNlcGYgIT0gTkZQUk9UT19ORVRERVZgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyDigJMgaXQncyBzdWdnZXN0aW5nIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKm9ubHkqIHN1cHBvcnRzIGBORlBST1RPX05FVERFVmAuIFdoaWNoIG1ha2VzIG1lIHRoaW5rLCBcIldoeSBpcyB0aGF0PyBXaGF0J3MgdGhlIGRlcGVuZGVuY3kgaGVyZT9cIiBBbmQgb2YgY291cnNlLCB0aGUgYW5zd2VyIGxpa2VseSBsaWVzIHdpdGggdGhlIGBORl9UQUJMRVNfTkVUREVWYCBjb25maWcgb3B0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJZiBgTkZfVEFCTEVTX05FVERFVmAgaXNuJ3Qgc2V0LCAqY2FuKiB3ZSBldmVuIGNyZWF0ZSBhIG5ldGRldiBmYW1pbHkgY2hhaW4/IEknbSBiZXR0aW5nIHRoZSBhbnN3ZXIgaXMgbm8sIGFuZCB0aGUga2VybmVsIGNvbmZpZyBpcyB0aGUgcGxhY2UgdG8gdmVyaWZ5IHRoaXMuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGBORl9UQUJMRVNfTkVUREVWYCBpcyByZWFsbHkgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjUzLjMxNTQxMTk1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzY4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzI9Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjUzLjQxNjE4NTQ5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjE5NjQ1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5GX1RBQkxFU19ORVRERVYgRGVwZW5kZW5jeSBDaGVjayoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcmVtZW1iZXJpbmcgdGhpcyByaWdodC4gYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgKmJvb2xlYW4qIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpc24ndCBpdD8gT2theSwgZ29vZCwgY29uZmlybWluZyB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHRoYXQncyBidWdnaW5nIG1lIGlzOiBkb2VzIGBuZl90YWJsZXNfYXBpLmNgICphY3R1YWxseSogcmVseSBvbiBgTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZCBzcGVjaWZpY2FsbHkgZm9yIG5ldGRldiBmYW1pbHkgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IHNvdXJjZSBmaWxlLiBJdOKAmXMgY3JpdGljYWwgSSB2ZXJpZnkgd2hldGhlciBlbmFibGluZyB0aGUgbmV0ZGV2IGZhbWlseSBpbiBuZl90YWJsZXMgaXMgdW5jb25kaXRpb25hbGx5IGF2YWlsYWJsZSBvciBpZiB0aGUgYE5GX1RBQkxFU19ORVRERVZgIG9wdGlvbiBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIElmIEkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgZGV0YWlscyBmb3IgdGhlIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjU2LjczODE1MjU0OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5OTQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZQUk9UT19ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTU0OT1zdGF0aWMgYm9vbCBuZnRfc3VwcG9ydGVkX2ZhbWlseSh1OCBmYW1pbHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xNTYxLSNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE1NjI6XFx0XFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2My0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4NjE9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3BhcnNlX2hvb2soY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5MjQ6XFx0XFx0XFx0b3BzLVxcdTAwM2VwZlxcdFxcdFxcdD0gTkZQUk9UT19ORVRERVY7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkyNS1cXHRcXHRcXHRvcHMtXFx1MDAzZWhvb2tudW1cXHRcXHQ9IGZsb3d0YWJsZV9ob29rLVxcdTAwM2VudW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzYwPXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc5Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5NzkzOlxcdFxcdFxcdG9wcy1cXHUwMDNlcGZcXHRcXHRcXHQ9IE5GUFJPVE9fTkVUREVWO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3OTQtXFx0XFx0XFx0b3BzLVxcdTAwM2Vob29rbnVtXFx0XFx0PSBmbG93dGFibGUtXFx1MDAzZWhvb2tudW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMjAwNz1zdGF0aWMgdm9pZCBfX25mdF9yZWxlYXNlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMjAxNS1cXHRcXHQubmV0XFx0PSBuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTIwMTY6XFx0XFx0LmZhbWlseVxcdD0gTkZQUk9UT19ORVRERVYsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTIwMTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6NTYuODI0MTUyMjM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDk1NDQzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIEhhcmR3YXJlIE9mZmxvYWQgaW4gTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfc3VwcG9ydGVkX2ZhbWlseWAgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGluZyBvdXQgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBzcGVjaWZpY2FsbHkgZm9yIGBORlBST1RPX05FVERFVmAuIFJpZ2h0LCBzbyB0aGlzIGNvbmZpcm1zIHRoYXQgYE5GX1RBQkxFU19ORVRERVZgIGlzIGVzc2VudGlhbCBmb3Igc2V0dGluZyB1cCBhIG5ldGRldiBjaGFpbiwgd2hpY2ggaXMgaXRzZWxmIGEgcHJlcmVxdWlzaXRlIGZvciB1c2luZyBgTkZUX0NIQUlOX0hXX09GRkxPQURgLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCB0aGUgSVB2NCBhbmQgSVB2NiB0YWJsZXM/IFdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkLCBzbyB0aG9zZSBtaWdodCBjb21lIGludG8gcGxheSB0b28uXG5cbkxldCBtZSBzZWUsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIG9mIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLiBUaGlzIG1hc2sgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwYXlsb2FkIG1hdGNoaW5nLCB3aGljaCBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBjaGFpbiBvZmZsb2FkLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UgbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBvZiB0aGUgbmV0ZGV2IGNoYWlucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCB0aG91Z2guIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb250cmlidXRlP1xuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGFwcGVhcnMgdGhhdCB3ZSBoYXZlIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAuIEhtbSwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhhdCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC4gT2theSwgdGhhdCBtYXNrIGNvdmVycyBhIGxvdCwgSVAsIElQdjYsIFRDUCwgVURQLCBldGMuIFNvIHdoaWxlIGBORl9UQUJMRVNfSVBWNGAgYW5kIGBORl9UQUJMRVNfSVBWNmAgbWlnaHQgYmUgaGVscGZ1bCwgdGhvc2UgYXJlIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIHRoZXkgYXJlIG5vdCBjcml0aWNhbC4gSSdtIGdvaW5nIHRvIGFkZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLCBzbyBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbk9rYXksIGl0IGxvb2tzIGxpa2UgYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiwgc28gSSB0aGluayB3ZSdyZSBnb29kLiBKdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBnbyBiYWNrIGFuZCBjaGVjayBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTE6MDIuNjMzNzAwMTQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4ODY4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyMz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNzojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTI4LVxcdHN3aXRjaCAocGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTQ3LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDktXFx0c3dpdGNoIChwa3QtXFx1MDAzZWV0aGVydHlwZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MTowMi43OTA1OTMwMTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgxNjY3MTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfcGF5bG9hZC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgaGFyZHdhcmUgb2ZmbG9hZGluZyBpbnRlcmFjdHMgd2l0aCBpdC4gSSBzZWUgdGhhdCBgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIGlzIHVzZWQgaW4gdGhpcyBmaWxlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBhZGQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZzsgaXMgYE5GX1RBQkxFU2AgZW5vdWdoPyBObywgYE5GX1RBQkxFU2AgaXMgdGhlIGJhc2UsIGJ1dCBgTkZfVEFCTEVTX05FVERFVmAgaXMgc3BlY2lmaWNhbGx5ICpyZXF1aXJlZCogZm9yIHRoZSBuZXRkZXYgZmFtaWx5LCB3aGljaCwgaW1wb3J0YW50bHksIGlzIG5lZWRlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gU28geWVhaCwgYE5GX1RBQkxFU19ORVRERVZgICptdXN0KiBiZSBpbmNsdWRlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBmb2N1cy4gSSd2ZSBnb3QgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLiBJIHRoaW5rIEknbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuIEhtbSwgd2FpdCwgdGhhdCdzIGludGVyZXN0aW5nOyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgKm1vZGlmaWVkKi4gT2theSwgSSdtIHN0aWNraW5nIHdpdGggaW5jbHVkaW5nIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgY2hlY2s6IGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGlubGluZWQ/IElmIGl0ICppcyosIHN5emthbGxlciBtaWdodCBtaXNzIGl0LiBCdXQgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSdsbCBpbmNsdWRlIHRoYXQgbm8gbWF0dGVyIHdoYXQuIEFscmlnaHQsIEknbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkYC5cblxuVGltZSB0byBjaGVjayBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCdzIHVzYWdlLiBBaGEsIGl0J3MgY2FsbGVkIDE3IHRpbWVzLiBUaGF0J3MgYSBnb29kIHNpZ24gaXQncyBub3QgaW5saW5lZCBiZWNhdXNlIGl0J3MgY2FsbGVkIGZyb20gc28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIGxpa2UgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGV0Yy4gV2FpdCwgaXQncyBwcmV0dHkgc21hbGwsIHNvIGl0ICpjb3VsZCogYmUuIE9rYXksIEknbSBnb2luZyB0byBoZWRnZSBteSBiZXRzIGFuZCBpbmNsdWRlIGJvdGggYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBqdXN0IHRvIGJlIHN1cmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gd3JpdGUgdGhlIHJlc3BvbnNlOlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2UgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBtYXNrIGdlbmVyYXRpb24gZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcsIGFuZCB0aGF0IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXG5gUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hc2sgZ2VuZXJhdGlvbiBsb2dpYyBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIG5mdF9wYXlsb2FkLmMuYFxuYEZvY3VzU3ltYm9sczogW1wibmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrXCIsIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXWBcbmBFbmFibGVDb25maWdzOiBbXCJORl9UQUJMRVNcIiwgXCJORl9UQUJMRVNfTkVUREVWXCJdYFxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjazogaXMgYE5GX1RBQkxFU19ORVRERVZgIHRoZSBleGFjdCBuYW1lPyBZdXAsIGBjb25maWcgTkZfVEFCTEVTX05FVERFVmAuIEdvb2QuXG5cbkFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGA/IFllcCwgYHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpYC5cblxuQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgPyBZZXMsIGBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLCB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pYC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWdzIGludm9sdmVkPyBMZXQncyBzZWUuLi4gYE5GX0ZMT1dfVEFCTEVgPyBJcyB0aGF0IHJlcXVpcmVkIHdpdGggYE5GVF9DSEFJTl9IV19PRkZMT0FEYD8gTm8sIEkgZG9uJ3QgYmVsaWV2ZSBzby4gSSdsbCBsZWF2ZSB0aGF0IG91dCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MToxMi42MDcyNjYwMTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzI5NjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORlRfQ0hBSU5fSFdfT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlxcdGlmIChjdHgtXFx1MDAzZWNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzYxLVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXFx1MDAzZW5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVxcdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEyLVxcdGJhc2VjaGFpbi1cXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTM6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNC1cXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc0MD1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyODQ9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXFx0XFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ190eXBlKSA9PSBORlRfTVNHX0RFU1RST1lDSEFJTiB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XFx0XFx0ICAgIGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTYtXFx0XFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NzY9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTQ6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1NS1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTEyNTk9c3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9UUkFOU19BQk9SVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNDc6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0OC1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTQtXFx0XFx0XFx0bmZ0X3J1bGVfZXhwcl9hY3RpdmF0ZShcXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1OlxcdFxcdFxcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXFx0XFx0XFx0XFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzUtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDItXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0MzpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUwLVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NTE6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVxcdFxcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cXHRcXHRcXHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVxcdFxcdGNhc2UgTkZUX01TR19ERUxDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVxcdFxcdGNhc2UgTkZUX01TR19ORVdSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQxLVxcdFxcdFxcdGlmICghbmZ0X2lzX2Jhc2VfY2hhaW4oY2hhaW4pIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcXHRcXHRcXHQgICAgIShjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTE6MTIuNzEwNTY3NDhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjU4MjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEknbSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBvZmZsb2FkIHByb2Nlc3MuXG5cbioqTXkgQ3VycmVudCBFdmFsdWF0aW9uIG9mIHRoZSBPZmZsb2FkIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBmdWxsIGZsb3cgb2ZmbG9hZCBoZXJlLCBzbyB0aGUgYE5GX0ZMT1dfVEFCTEVgIG1vZHVsZSBpcyBwcm9iYWJseSBvdmVya2lsbC4gV2UncmUgdGFsa2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcnVsZSBvZmZsb2FkLCB3aGljaCBwb2ludHMgbW9yZSBkaXJlY3RseSB0byBgTkZUX0NIQUlOX0hXX09GRkxPQURgLiBUaGF0J3MgdGhlIGtleSBkaXN0aW5jdGlvbi4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGlzLCBpdCBzZWVtcyB0aGF0IHRoZSBzdGFuZGFyZCBgTkZfVEFCTEVTYCBhbmQgYE5GX1RBQkxFU19ORVRERVZgIG1vZHVsZXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uLiBHaXZlbiB0aGlzIGFzc2Vzc21lbnQsIEknbGwgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIHdpbGwgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY5MiwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MToxNi4yOTMxNTM1ODJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk5MjY0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-19 22:22:08 +0000 UTC FinishedAt: 2026-07-19 22:51:18 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c6859eed755df351a3978b33cb92365f9b3e8f06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "c6859eed755df351a3978b33cb92365f9b3e8f06", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_TABLES", "NF_TABLES_NETDEV" ], "series_id": "f4dc8824-054a-43f3-8d52-565d56e74f84" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "nft_payload_offload_mask", "nft_payload_offload" ], "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+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVNfTkVUREVWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssCiAgICAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hc2sgZ2VuZXJhdGlvbiBsb2dpYyBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIG5mdF9wYXlsb2FkLmMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2YWNiNDBhODI4OTQwYWMwMDEwMTkxZTZhMDJmODI5ZDVkODg4MWYxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBKdWwgMTkgMjI6NDk6MzUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG5pbmRleCAzOTE1MzlhMWNlYWE3Ny4uOGE0NDcyZmQ3N2Q5ZjIgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuQEAgLTI1OSw5ICYjNDM7MjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xuIFx0c3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTtcbi1cdF9fYmUzMiByZW1haW5kZXJfbWFzaztcbiBcbiBcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XG5AQCAtMjcwLDE1ICYjNDM7MjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuLVx0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIGZpZWxkX2xlbik7XG4tXHRyZW1haW5kZXIgPSBwcml2X2xlbiAlIHNpemVvZih1MzIpO1xuLVx0aWYgKHJlbWFpbmRlcikge1xuLVx0XHRrID0gcHJpdl9sZW4gLyBzaXplb2YodTMyKTtcbi1cdFx0ZGVsdGEgPSBmaWVsZF9sZW4gLSBwcml2X2xlbjtcbi1cdFx0cmVtYWluZGVyX21hc2sgPSBodG9ubCh+KCgxIFx1MDAzY1x1MDAzYyAoZGVsdGEgKiBCSVRTX1BFUl9CWVRFKSkgLSAxKSk7XG4tXHRcdG1hc2suZGF0YVtrXSA9IChfX2ZvcmNlIHUzMilyZW1haW5kZXJfbWFzaztcbi1cdH1cbi1cbiYjNDM7XHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgcHJpdl9sZW4pO1xuIFx0bWVtY3B5KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCBcdTAwMjZtYXNrLCBmaWVsZF9sZW4pO1xuIFxuIFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmFjYjQwYTgyODk0MGFjMDAxMDE5MWU2YTAyZjgyOWQ1ZDg4ODFmMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDE5IDIyOjQ5OjM1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCmluZGV4IDM5MTUzOWExY2VhYTc3Li44YTQ0NzJmZDc3ZDlmMiAxMDA2NDQKLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYwpAQCAtMjU5LDkgJiM0MzsyNTksNyBAQCBzdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsCiAJCQkJICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pCiB7Ci0JdW5zaWduZWQgaW50IHJlbWFpbmRlciwgZGVsdGEsIGs7CiAJc3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTsKLQlfX2JlMzIgcmVtYWluZGVyX21hc2s7CiAKIAlpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7CiAJCW1lbXNldCgmYW1wO3JlZy0mZ3Q7bWFzaywgMHhmZiwgcHJpdl9sZW4pOwpAQCAtMjcwLDE1ICYjNDM7MjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZywKIAkJcmV0dXJuIGZhbHNlOwogCX0KIAotCW1lbXNldCgmYW1wO21hc2ssIDB4ZmYsIGZpZWxkX2xlbik7Ci0JcmVtYWluZGVyID0gcHJpdl9sZW4gJSBzaXplb2YodTMyKTsKLQlpZiAocmVtYWluZGVyKSB7Ci0JCWsgPSBwcml2X2xlbiAvIHNpemVvZih1MzIpOwotCQlkZWx0YSA9IGZpZWxkX2xlbiAtIHByaXZfbGVuOwotCQlyZW1haW5kZXJfbWFzayA9IGh0b25sKH4oKDEgJmx0OyZsdDsgKGRlbHRhICogQklUU19QRVJfQllURSkpIC0gMSkpOwotCQltYXNrLmRhdGFba10gPSAoX19mb3JjZSB1MzIpcmVtYWluZGVyX21hc2s7Ci0JfQotCiYjNDM7CW1lbXNldCgmYW1wO21hc2ssIDB4ZmYsIHByaXZfbGVuKTsKIAltZW1jcHkoJmFtcDtyZWctJmd0O21hc2ssICZhbXA7bWFzaywgZmllbGRfbGVuKTsKIAogCXJldHVybiB0cnVlOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogODgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBORlQgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIHRvdWNoaW5nIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIG1vZGlmeWluZyB0aGUgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGluIGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0IHNlZW1zIHRoZSBpbnRlbnQgaXMgdG8gc2ltcGxpZnkgdGhlIG1hc2sgZ2VuZXJhdGlvbiB3aXRoaW4gYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIHdoaWNoIGltbWVkaWF0ZWx5IGZsYWdzIGFzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGhhdmUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIGNvcnJlY3RuZXNzIGltcHJvdmVtZW50cy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byBoZWFkIGRpcmVjdGx5IHRvIGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIGFuZCB0YWtlIGEgY2xvc2UgbG9vayBhdCB0aGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBzcGVjaWZpYyBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWRfbWFzayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjYwLVx0XHRcdFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI3Nz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIEVUSF9BTEVOKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjkyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjk4LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDAtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMxNTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMyMi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSAmIzQzOyBzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXHRcdFx0XHRcdFx0XHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0zNDY9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHNhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzYyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzY0LVx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNzI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9Mzg2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwNC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MTI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX3U4KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDQ2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3Aoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYwLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjE6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjItXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz00NzQ9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxMQoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZCBhcmVhIGFnYWluLiBJdCBsb29rcyBsaWtlIHRoZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBmdW5jdGlvbiBpcyAqY3J1Y2lhbCog4oCTIGl0JiMzOTtzIGFsbCBvdmVyIHRoZSBwbGFjZSwgSSYjMzk7bSBzZWVpbmcgaXQgdXNlZCBoZWF2aWx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBicm9hZCByYW5nZS4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1lYW5zIGl0JiMzOTtzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoaXMsIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfcGF5bG9hZC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoYXQqIGlzIGVuYWJsZWQgYW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhdCBjb21waWxlIHRpbWUuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBjaGFuZ2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9ODc9bmZfdGFibGVzLW9ianMgOj0gbmZfdGFibGVzX2NvcmUubyBuZl90YWJsZXNfYXBpLm8gbmZ0X2NoYWluX2ZpbHRlci5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTg4LVx0XHQgIG5mX3RhYmxlc190cmFjZS5vIG5mdF9pbW1lZGlhdGUubyBuZnRfY21wLm8gbmZ0X3JhbmdlLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6ODk6XHRcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXHRcdCAgbmZ0X2R5bnNldC5vIG5mdF9tZXRhLm8gbmZ0X3J0Lm8gbmZ0X2V4dGhkci5vIG5mdF9sYXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODA5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE5ldGZpbHRlciBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIGNoYW5nZSB3aXRoaW4gYG5mX3RhYmxlcy1vYmpzYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyByZWxhdGVkIHRvIG5ldGZpbHRlciB0YWJsZXMgYW5kLCBjcnVjaWFsbHksIGlzIGJ1aWx0IG9ubHkgd2hlbiBgQ09ORklHX05GX1RBQkxFU2AgaXMgZW5hYmxlZC4gVGhhdCYjMzk7cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaXRzIHNjb3BlLiBUaGUgY29yZSBvZiB0aGlzIHNlZW1zIHRvIGJlIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb24gdG8gdGhlIHdheSBtYXNrcyBhcmUgZ2VuZXJhdGVkIGZvciBvZmZsb2FkaW5nIG5ldGZpbHRlciBwYXlsb2FkIG1hdGNoZXMuIFNwZWNpZmljYWxseSwgaXQgYXBwZWFycyB0aGUgaGFuZGxpbmcgb2YgYHJlbWFpbmRlcmAgd2l0aGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGhhcyBiZWVuIHJlbW92ZWQuCgpMb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlZCBhIHJhdGhlciBjb21wbGV4IGNhbGN1bGF0aW9uIGFuZCBtYW5pcHVsYXRpb24gb2YgYHJlbWFpbmRlcmAgYW5kIGByZW1haW5kZXJfbWFza2AsIGludm9sdmluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGJ5dGUgc3dhcHBpbmcgKGBodG9ubGApLiBUaGUgbmV3IGNvZGUgc2ltcGx5IHplcm9lcyBvdXQgdGhlIG1hc2ssIGFuZCBjb3BpZXMgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBzaW1wbGlmeWluZyB0aGUgbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3Rpbmcgb2ZmbG9hZCBiZWhhdmlvci4gR2l2ZW4gdGhlIGZ1bmN0aW9uJiMzOTtzIHJlc3BvbnNpYmlsaXR5LCB0aGlzIHNjcmVhbXMgcG90ZW50aWFsIGZvciBmdXp6aW5nLiBBbnkgY2hhbmdlIHRvIHRoZXNlIG9mZmxvYWQgbWFzayBjYWxjdWxhdGlvbnMgY291bGQgb3BlbiBuZXcgYXR0YWNrIGF2ZW51ZXMuCgpUaGUgY3JpdGljYWwgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2YCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwYCwgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcGAuIFdhaXQsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGlzIHN0YXRpYywgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEhvd2V2ZXIsIHNpbmNlIGl0IGlzIGNhbGxlZCBieSB0aGUgb3RoZXJzLCBpdCBzdGlsbCBuZWVkcyB0byBiZSByZXZpZXdlZCwgYW5kIGZ1enppbmcuIE1heWJlIGl0JiMzOTtzIGlubGluZWQ/IEkgc2hvdWxkIGNoZWNrIHRoYXQuIExldCYjMzk7cyBzdGFydCB3aXRoIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBhbmQgbWF5YmUgaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAgc2luY2UgaXQgdXNlcyB0aGUgbWFzay4gWWVhaCwgdGhlIGNoYW5nZSBpcyBkaXJlY3RseSBpbiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCwgc28gSSBzaG91bGQgZm9jdXMgb24gdGhhdCBmb3Igbm93LgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTkZfVEFCTEVTYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb2ZmbG9hZC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIFRoYXQgbWlnaHQgcmV2ZWFsIHNvbWUgb3RoZXIgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyB0aGF0IGNvdWxkIGFmZmVjdCBmdXp6aW5nIHRhcmdldHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX1RBQkxFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzI6Y29uZmlnIE5GX1RBQkxFU19JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVx0ZGVwZW5kcyBvbiBJUFY2XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00ODEtXHRib29sIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTk4NwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHN1bW1hcnksIGluIHRoZSBmaXJzdCBwZXJzb24sIGFzIGlmIHRoZXNlIGFyZSBteSB0aG91Z2h0cywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gYW4gZXhwZXJ0IGluIG15IGZpZWxkOgoKKipEaWdnaW5nIGludG8gbmZfdGFibGVzIEhhcmR3YXJlIE9mZmxvYWQqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgcG9zc2liaWxpdGllcyBoZXJlLiBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggYG5mX3RhYmxlc2AgYW5kIEkmIzM5O20gc3RhcnRpbmcgdG8gY29uc2lkZXIgaG93IGhhcmR3YXJlIG9mZmxvYWQgY291bGQgYmUgaW1wbGVtZW50ZWQgYW5kIG9wdGltaXplZC4gSSBrbm93IHRoZSBiYXNpY3MsIHRoZSB0aGVvcnksIGFuZCB0aGUgZ2VuZXJhbCBjb25jZXB0cywgYnV0IEkmIzM5O20gdHJ5aW5nIHRvIGdldCAqc3BlY2lmaWMqLiBJcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBvcHRpb24sIGEgc3BlY2lmaWMgc3ludGF4LCBhIGRvY3VtZW50ZWQgbWV0aG9kLCBhbnl0aGluZyBjb25jcmV0ZSB3aXRoaW4gYG5mX3RhYmxlc2AgdGhhdCBkaXJlY3RseSBlbmFibGVzIG9yIGNvbmZpZ3VyZXMgaGFyZHdhcmUgb2ZmbG9hZD8gSSYjMzk7bSBub3QganVzdCBsb29raW5nIGZvciBnZW5lcmFsIHBvaW50ZXJzOyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGtub2IgSSBjYW4gdHVybiwgYSBzcGVjaWZpYyBwYXJhbWV0ZXIgSSBjYW4gdHdlYWsuIERvZXMgYG5mX3RhYmxlc2AgaGF2ZSBhbnkgZXhwbGljaXQgbWVjaGFuaXNtcyB0byBoYW5kIHRhc2tzIG92ZXIgdG8gYSBkZWRpY2F0ZWQgb2ZmbG9hZCBlbmdpbmUgb24gdGhlIGhhcmR3YXJlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ3JhbnVsYXIgZGV0YWlscyB0byByZWFsbHkgYXNzZXNzIGl0cyBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYWJvdXQgcmVhbC13b3JsZCBpbXBsZW1lbnRhdGlvbiwgbm90IGp1c3QgdGhlb3JldGljYWwgcG90ZW50aWFsLiBJIG5lZWQgdG8gZ2V0IGJleW9uZCB0aGUgYWJzdHJhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTUwND1jb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFx1MDAyNlx1MDAyNiBORl9GTE9XX1RBQkxFXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA2Olx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBoYXJkd2FyZSBmbG93IG9mZmxvYWQgbW9kdWxlXCYjMzQ7XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA3LVx0aGVscFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwODpcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7IGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xubmV0L25ldGZpbHRlci9LY29uZmlnLTUwOS1cdCAgY2hvb3NlIHdoYXQgZmxvd3MgYXJlIHBsYWNlZCBpbnRvIHRoZSBoYXJkd2FyZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzIxPWNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjUtXHRoZWxwXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzI2Olx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3Ncbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjctXHQgIHRvIGJlIHNob3duIGluIHByb2NmcyB1bmRlciBuZXQvbmV0ZmlsdGVyL25mX2Zsb3d0YWJsZS5cbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9ODExPWNvbmZpZyBORVRGSUxURVJfWFRfVEFSR0VUX0NIRUNLU1VNXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxOS1cdCAgU29tZSBvbGQgREhDUCBjbGllbnRzIGRyb3AgcGFja2V0cyBiZWNhdXNlIHRoZXkgYXJlIG5vdCBhd2FyZVxubmV0L25ldGZpbHRlci9LY29uZmlnOjgyMDpcdCAgdGhhdCB0aGUgY2hlY2tzdW0gd291bGQgbm9ybWFsbHkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlIGFuZFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgyMS1cdCAgdGh1cyBzaG91bGQgYmUgY29uc2lkZXJlZCB2YWxpZC5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjYxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRlbHZpbmcgaW50byB0aGUgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgTXlzdGVyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIHZhcmlhYmxlLCBhbmQgaXQmIzM5O3MgcG9wcGluZyB1cCBpbiBgbmZ0X3BheWxvYWQuY2AsIHdoaWNoLCBpZiBtZW1vcnkgc2VydmVzLCBpcyBuZXN0bGVkIHJpZ2h0IGluIHRoZSBjb3JlIG9mIGBuZl90YWJsZXNgLiBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaGVyZTogaXMgaGFyZHdhcmUgb2ZmbG9hZCwgaW4gdGhlIGNvbnRleHQgb2YgYG5mX3RhYmxlc2AgYW5kIHRoaXMgc3BlY2lmaWMgcGF5bG9hZCBtb2R1bGUsIGVuYWJsZWQgYnkgZGVmYXVsdD8gT3IgaXMgdGhlcmUgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcgb3IgbW9kdWxlIEkgbmVlZCB0byBiZSBsb29raW5nIGF0IHNlcGFyYXRlbHk/IEdvdHRhIGdldCB0aGUgY29udGV4dCByaWdodC4gSSYjMzk7bSBnb2luZyB0byByZXZpc2l0IGBuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNgIHRvIHNlZSBpZiBJIGNhbiBmaW5kIHRoZSBhbnN3ZXIuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBjb2RlIGhvbGRzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9wYXlsb2FkX29mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwNzgKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA4MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipPZmZsb2FkaW5nIE5GVGFibGVzIFJ1bGVzOiBFbnRyeSBQb2ludCBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgYC5vZmZsb2FkYCBvcGVyYXRpb24gd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfb3BzYCBhbmQgYG5mdF9wYXlsb2FkX2Zhc3Rfb3BzYCBzdHJ1Y3R1cmVzLiBTbywgYmFzaWNhbGx5LCB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgb2ZmbG9hZGluZyBuZnRhYmxlcyBydWxlcy4gTWFrZXMgc2Vuc2UuCgpOb3csIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBpcyB0aGVyZSBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvciBzb21lIGtpbmQgb2YgZW5hYmxlIGZsYWcsIHRoYXQgY29udHJvbHMgdGhpcyBvZmZsb2FkaW5nIGZlYXR1cmU/IEkmIzM5O20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBiZWhhdmlvci4gSSYjMzk7bGwgbmVlZCB0byBnbyBkaWdnaW5nIGFyb3VuZC4gTXkgZ3V0IHRlbGxzIG1lIEkgc2hvdWxkIGNoZWNrIG91dCBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jYCDigJMgb3Igc29tZXRoaW5nIHNpbWlsYXIsIG9mIGNvdXJzZS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgYW5kIGFueSByZWxhdGVkIGNvbmZpZ3VyYXRpb24gbWVjaGFuaXNtcy4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjU4LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjc3OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjg1Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBFVEhfQUxFTikpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkxLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgRVRIX0FMRU4pKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9wcm90byk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMwNzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNC1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTYtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB2bGFuX2V0aGhkciwgaF92bGFuX1RDSSkgJiM0Mzsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzIzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMxLVx0XHRcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzMzLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzU0Olx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBkYWRkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cdFx0XHRcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM3My1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozODY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVx0XHRcdFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM5NDpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgZGFkZHIpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbixcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXHRcdFx0XHRcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDExLVx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlx0XHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMy1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MjY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0MzQ6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzUtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNi1cdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0NS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHRjcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ2MTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3My1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVx0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHVkcGhkciwgc291cmNlKTpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XHRcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4OTpcdFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUwMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXHRjYXNlIElQUFJPVE9fVENQOlxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcdFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3AoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cdGNhc2UgSVBQUk9UT19VRFA6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEzOlx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxNC1cdFx0YnJlYWs7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MjMtXHRcdFx0ICAgICAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXHRjYXNlIE5GVF9QQVlMT0FEX0xMX0hFQURFUjpcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XHRcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoY3R4LCBmbG93LCBwcml2KTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXHRcdGJyZWFrO1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM0Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM1LVx0XHRicmVhaztcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzYtXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3Olx0XHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVx0XHRicmVhaztcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVx0LmR1bXBcdFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU1MjpcdC5vZmZsb2FkXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUzLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1NzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzoKCioqT2ZmbG9hZGluZyBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGAub2ZmbG9hZGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIG9mZmxvYWRpbmcgcnVsZXMsIG1ha2VzIHNlbnNlLiBCdXQgdGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcywgaXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gc2V0dGluZywgYSBzcGVjaWZpYyBrbm9iIHdlIGNhbiB0d2lkZGxlLCB0aGF0IGFjdHVhbGx5ICpjb250cm9scyogdGhlIG9mZmxvYWRpbmcgYmVoYXZpb3I/IEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBydWxlcyB0aGVtc2VsdmVzIGFuZCB0aGUgb2ZmbG9hZGluZyBwcm9jZXNzLgoKQmVzdCBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyBnb2luZyB0byBiZSB0aGUgY29kZSwgYW5kIGNvbnNpZGVyaW5nIHRoaXMgaXMgYWxsIGFib3V0IE5ldGZpbHRlciwgc3BlY2lmaWNhbGx5IE5ldGZpbHRlciB0YWJsZXMsIEkgc2hvdWxkIGhlYWQgc3RyYWlnaHQgZm9yIGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuY2AuIFRoYXTigJlzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGAub2ZmbG9hZGAsIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaW52b2tlZCwgYW5kIHRoYXQgc2hvdWxkIGNsYXJpZnkgZXZlcnl0aGluZy4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIHRvIHVuZGVyc3RhbmQgdGhpcyBiZXR0ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1xcLm9mZmxvYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEwLVx0LmR1bXBcdFx0PSBuZnRfYml0d2lzZV9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjQxMTpcdC5vZmZsb2FkXHQ9IG5mdF9iaXR3aXNlX29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEyLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jPTUxMz1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX2Zhc3Rfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy01MTgtXHQuZHVtcFx0XHQ9IG5mdF9iaXR3aXNlX2Zhc3RfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYzo1MTk6XHQub2ZmbG9hZFx0PSBuZnRfYml0d2lzZV9mYXN0X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNTIwLX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9MTg3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jbXBfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5Mi1cdC5kdW1wXHRcdD0gbmZ0X2NtcF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6MTkzOlx0Lm9mZmxvYWRcdD0gbmZ0X2NtcF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMTk0LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9Mjc4PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NtcF9mYXN0X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODMtXHQuZHVtcFx0XHQ9IG5mdF9jbXBfZmFzdF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mjg0Olx0Lm9mZmxvYWRcdD0gbmZ0X2NtcF9mYXN0X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODUtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYz0zNzE9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY21wMTZfZmFzdF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMzc2LVx0LmR1bXBcdFx0PSBuZnRfY21wMTZfZmFzdF9kdW1wLFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mzc3Olx0Lm9mZmxvYWRcdD0gbmZ0X2NtcDE2X2Zhc3Rfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTM3OC19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYz0zMDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NvdW50ZXJfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYy0zMTUtXHQuY2xvbmVcdFx0PSBuZnRfY291bnRlcl9jbG9uZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYzozMTY6XHQub2ZmbG9hZFx0PSBuZnRfY291bnRlcl9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfY291bnRlci5jOjMxNzpcdC5vZmZsb2FkX3N0YXRzXHQ9IG5mdF9jb3VudGVyX29mZmxvYWRfc3RhdHMsXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmMtMzE4LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9kdXBfbmV0ZGV2X29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmMtODItXHQuZHVtcFx0XHQ9IG5mdF9kdXBfbmV0ZGV2X2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmM6ODM6XHQub2ZmbG9hZFx0PSBuZnRfZHVwX25ldGRldl9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jOjg0Olx0Lm9mZmxvYWRfYWN0aW9uXHQ9IG5mdF9kdXBfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jLTg1LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jPTI1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfZndkX25ldGRldl9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTI2My1cdC52YWxpZGF0ZVx0PSBuZnRfZndkX3ZhbGlkYXRlLFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjI2NDpcdC5vZmZsb2FkXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWQsXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM6MjY1Olx0Lm9mZmxvYWRfYWN0aW9uXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jLTI2Ni19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTMyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfaW1tX29wcyA9IHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0zMzQtXHQudmFsaWRhdGVcdD0gbmZ0X2ltbWVkaWF0ZV92YWxpZGF0ZSxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jOjMzNTpcdC5vZmZsb2FkXHQ9IG5mdF9pbW1lZGlhdGVfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jOjMzNjpcdC5vZmZsb2FkX2FjdGlvblx0PSBuZnRfaW1tZWRpYXRlX29mZmxvYWRfYWN0aW9uLFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmMtMzM3LX07XG4tLVxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jPTgwMT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfbWV0YV9nZXRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDctXHQudmFsaWRhdGVcdD0gbmZ0X21ldGFfZ2V0X3ZhbGlkYXRlLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwODpcdC5vZmZsb2FkXHQ9IG5mdF9tZXRhX2dldF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwOS19O1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTEtXHQuZHVtcFx0XHQ9IG5mdF9wYXlsb2FkX2R1bXAsXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlx0Lm9mZmxvYWRcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NTU1PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfZmFzdF9vcHMgPSB7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cdC5kdW1wXHRcdD0gbmZ0X3BheWxvYWRfZHVtcCxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NjE6XHQub2ZmbG9hZFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2Mi19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTM3MwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpczoKCioqSW52ZXN0aWdhdGluZyBuZl90YWJsZXMgT2ZmbG9hZGluZyBDYXBhYmlsaXRpZXMqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc2AgYW5kIGl0JiMzOTtzIGxvb2tpbmcgbGlrZSBvZmZsb2FkaW5nIGlzIGEga2V5IGNvbXBvbmVudCwgd2hpY2ggaXMgbm8gc3VycHJpc2UgZ2l2ZW4gaXRzIHBlcmZvcm1hbmNlIGdvYWxzLiBCdXQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNwZWNpZmljIGZsYWdzIG9yIG1vZHVsZXMgdGhhdCBlbmFibGUgaXQuIFRoZSBkb2N1bWVudGF0aW9uIGlzbiYjMzk7dCBhbHdheXMgY3J5c3RhbCBjbGVhciBvbiB0aGlzLiBNeSBpbnR1aXRpb24gaXMgbnVkZ2luZyBtZSB0b3dhcmRzIGEgZmV3IHBvc3NpYmlsaXRpZXM6IGBORl9UQUJMRVNfTkVUREVWYCwgYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIG9yIHBlcmhhcHMganVzdCB0aGUgc3RyYWlnaHRmb3J3YXJkIGBORl9UQUJMRVNfT0ZGTE9BRGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlciBiZWluZyB0aGUgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgTkZfVEFCTEVTX09GRkxPQURgIG9yIGFueXRoaW5nIHJlc2VtYmxpbmcgaXQgdG8gY29uZmlybSBhbmQgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBhdGguIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZGVwZW5kZW5jeSBoZXJlIGZvciB0aGUgbmV4dCBzdGVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORl9UQUJMRVMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTM2PWNvbmZpZyBORVRGSUxURVJfTkVUTElOS19IT09LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTM4LVx0ZGVwZW5kcyBvbiBORVRGSUxURVJfQURWQU5DRURcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDAtXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ1NTpjb25maWcgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3MC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3My1cdGRlcGVuZHMgb24gSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NDpcdHNlbGVjdCBORl9UQUJMRVNfSVBWNFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NTpcdHNlbGVjdCBORl9UQUJMRVNfSVBWNlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3Ni1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBtaXhlZCBJUHY0L0lQdjYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ4MDpjb25maWcgTkZfVEFCTEVTX05FVERFVlxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuZXRkZXYgdGFibGVzIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NTUwPWNvbmZpZyBORlRfTkFUXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTU1Mi1cdHNlbGVjdCBORl9OQVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTM6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU19JUFY0IHx8IE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTU0LVx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBuYXQgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTU4Nj1jb25maWcgTkZUX1JFSkVDVF9JTkVUXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTg3Olx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTU4OC1cdGRlZmF1bHQgTkZUX1JFSkVDVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MDg9Y29uZmlnIE5GVF9GSUJfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnOjYwOTpcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02MTAtXHRkZXBlbmRzIG9uIE5GVF9GSUJfSVBWNFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02MjU9Y29uZmlnIE5GVF9TT0NLRVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjI4Olx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI5LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDA9Y29uZmlnIE5GVF9UUFJPWFlcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVx0c2VsZWN0IE5GX0RFRlJBR19JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQzOlx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ0LVx0c2VsZWN0IE5GX1RQUk9YWV9JUFY0XG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1Olx0c2VsZWN0IE5GX1RQUk9YWV9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQ2LVx0aGVscFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAxOmVuZGlmICMgTkZfVEFCTEVTXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MTE9Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE0LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTU6XHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcxNi1cdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY3NTQKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipBc3Nlc3NpbmcgSGFyZHdhcmUgT2ZmbG9hZCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGluaXRpYWwgYXNzZXNzbWVudC4gTXkgZmlyc3QgdGhvdWdodCBpczogKkxldCYjMzk7cyBjaGVjayBpZiB0aGVyZSBpcyBoYXJkd2FyZSBvZmZsb2FkIGNvbmZpZy4qIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgc3RlcCwgcmVhbGx5LiBJIG5lZWQgdG8ga25vdyBpZiB3ZSYjMzk7cmUgZXZlbiAqdXNpbmcqIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYXMgaXQgd2lsbCBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoZSByZXN0IG9mIHRoZSBhbmFseXNpcy4gSXQmIzM5O3MgdGhlIGdyb3VuZHdvcms7IGtub3dpbmcgd2hldGhlciBvciBub3QgaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkIHdpbGwgaW5mbHVlbmNlIGV2ZXJ5dGhpbmcgdGhhdCBjb21lcyBuZXh0LiBFc3NlbnRpYWxseSwgSSYjMzk7bSBzZXR0aW5nIHRoZSBiYXNlbGluZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SFdfT0ZGTE9BRCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0zMDI9c3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jLTM2My1cbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjQ6XHRpZiAodGVzdF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxubmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfc3RhbmRhbG9uZS5jOjM2NTpcdFx0c2VxX3B1dHMocywgXCYjMzQ7W0hXX09GRkxPQURdIFwmIzM0Oyk7XG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzY2LVx0ZWxzZSBpZiAodGVzdF9iaXQoSVBTX09GRkxPQURfQklULCBcdTAwMjZjdC1cdTAwM2VzdGF0dXMpKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTczPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2FkZChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05ODUtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk4NjpcdHNldF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcdTAwMjZvZmZsb2FkLVx1MDAzZWZsb3ctXHUwMDNlY3QtXHUwMDNlc3RhdHVzKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTg3LVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM9OTkyPXN0YXRpYyB2b2lkIGZsb3dfb2ZmbG9hZF93b3JrX2RlbChzdHJ1Y3QgZmxvd19vZmZsb2FkX3dvcmsgKm9mZmxvYWQpXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jLTk5My17XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NDpcdGNsZWFyX2JpdChJUFNfSFdfT0ZGTE9BRF9CSVQsIFx1MDAyNm9mZmxvYWQtXHUwMDNlZmxvdy1cdTAwM2VjdC1cdTAwM2VzdGF0dXMpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTUtXHRmbG93X29mZmxvYWRfdHVwbGVfZGVsKG9mZmxvYWQsIEZMT1dfT0ZGTE9BRF9ESVJfT1JJR0lOQUwpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMzI9bmZfbmF0X3VzZWRfdHVwbGVfaGFyZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYy0zMzUte1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjMzNjpcdHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIGZsYWdzX29mZmxvYWQgPSBJUFNfT0ZGTE9BRCB8IElQU19IV19PRkZMT0FEO1xubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMzNy1cdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqdGhhc2g7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzUwPXN0YXRpYyBpbnQgbmZ0X2RlbHJ1bGUoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2MDpcdGlmIChjdHgtXHUwMDNlY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXHUwMDNlbmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNS1cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXHRiYXNlY2hhaW4tXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5OC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXHRcdGlmIChORk5MX01TR19UWVBFKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzMxOlx0XHQgICAgY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cdFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDMwNT1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NjQ6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVx0XHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9jcmVhdGUobmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05MDk2PXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV91cGRhdGUoc3RydWN0IG5mdF9jdHggKmN0eCwgY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0MS1cdFx0fVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE0MjpcdFx0aWYgKChmbG93dGFibGUtXHUwMDNlZGF0YS5mbGFncyBcdTAwMjYgTkZUX0ZMT1dUQUJMRV9IV19PRkZMT0FEKSBeXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5MTQzOlx0XHQgICAgKGZsYWdzIFx1MDAyNiBORlRfRkxPV1RBQkxFX0hXX09GRkxPQUQpKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQ0LVx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM1LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM2Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzctXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQyLVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NDM6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ0LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1MC1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTUxOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1Mi1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0MS1cdFx0XHRpZiAoIW5mdF9pc19iYXNlX2NoYWluKGNoYWluKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcdFx0XHQgICAgIShjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDIxNgoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipIYXJkd2FyZSBPZmZsb2FkIGFuZCBOZXRmaWx0ZXIgTnVhbmNlcyoqCgpSaWdodCwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBgTkZfVEFCTEVTYCBzdHVmZiBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biBob3cgaGFyZHdhcmUgb2ZmbG9hZCBmaXRzIGluLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCB0aGVyZSBpc24mIzM5O3QgYSBkZWRpY2F0ZWQgY29uZmlnIG9wdGlvbiBzcGVjaWZpY2FsbHkgZm9yIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBJJiMzOTttIHVzZWQgdG8gbW9yZSBleHBsaWNpdCBjb250cm9scywgc28gdGhpcyBjb3VsZCBtZWFuIGl0JiMzOTtzIGVpdGhlciB0aWdodGx5IGludGVncmF0ZWQsIG9yIHBvc3NpYmx5IGVuYWJsZWQgYnkgc29tZXRoaW5nIGVsc2UuCgpPa2F5LCBzbyBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgYW5kIHdoZW4gdGhlIG1vZHVsZSBgbmZfdGFibGVzX29mZmxvYWQuY2AgaXMgYWN0dWFsbHkgYnVpbHQuIEkgYmV0dGVyIGNoZWNrIHRoZSBOZXRmaWx0ZXIgYE1ha2VmaWxlYCB0byBzZWUgdW5kZXIgd2hhdCBjb25kaXRpb25zIGl0IGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcyBhbmQgYnVpbGQgcHJvY2VzcyB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZS4gSSBrbm93IHRoYXQgdXN1YWxseSB0aGUgZGVwZW5kZW5jaWVzIGFyZSByaWdodCB0aGVyZSBpbiB0aGUgTWFrZWZpbGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19vZmZsb2FkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxuLS1cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTEtXHRcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTI6XHRcdCAgbmZ0X2NoYWluX3JvdXRlLm8gbmZfdGFibGVzX29mZmxvYWQubyBcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS05My1cdFx0ICBuZnRfc2V0X2hhc2gubyBuZnRfc2V0X2JpdG1hcC5vIG5mdF9zZXRfcmJ0cmVlLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NjAKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgcmlnaHQgb2ZmIHRoZSBiYXQsIGl0JiMzOTtzIHByZXR0eSBjbGVhciBgbmZfdGFibGVzX29mZmxvYWQub2AgaXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCBtZWFuaW5nIGBORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bSBjaGVja2luZy4KClRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLCBhbGwgb2Ygd2hpY2ggZmVlZCBpbnRvIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBpdHNlbGYuIFNvLCBvcmlnaW5hbGx5LCBJIHRob3VnaHQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGRvd25zdHJlYW0gZnVuY3Rpb25zIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC4KCkhvbGQgb24sIHRob3VnaC4gYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgaXMgKnN0YXRpYyouIFRoYXQgcmFpc2VzIGEgZmxhZy4gSXQgbWlnaHQgYmUgaW5saW5lZC4gU28sIGFsdGhvdWdoIGl0JiMzOTtzIHRoZSBvbmUgYmVpbmcgbW9kaWZpZWQsIEkgbmVlZCB0byB0YWtlIHRoYXQgaW50byBhY2NvdW50LiBGb3IgdGhhdCByZWFzb24sIEkmIzM5O20gZ29pbmcgdG8gaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGluIHRoZSBmb2N1cyBzeW1ib2xzLiBJIHdpbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYCB0byB0aGUgbGlzdC4gSSYjMzk7bSBnb2luZyB0byBsaXN0IGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZm9yIG5vdy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyB0aGUgcGF0Y2ggYWx0ZXJzIGhvdyB0aGUgbWFzayBpcyBnZW5lcmF0ZWQgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgY2FuIGJlIHRyaWdnZXJlZCB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiAqd2l0aCogaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgc2hvdWxkIHNwZWNpZmljYWxseSB0YXJnZXQgdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIGBuZnRfcGF5bG9hZC5jYC4KCk9rYXksIGJhY2sgdG8gY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBORl9UQUJMRVNgIGlzIGltcG9ydGFudC4gQnV0IGFyZSB0aGVyZSAqc3BlY2lmaWMqIGNvbmZpZ3MgcmVsYXRlZCB0byBvZmZsb2FkaW5nPyBXaGlsZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBjb3VsZCBiZSByZWxhdGVkLCB0aGlzIHBhcnRpY3VsYXIgb2ZmbG9hZCBhZmZlY3RzIGBuZnRfcGF5bG9hZGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBuZnRfcGF5bG9hZF9vcHMub2ZmbG9hZGAgc3RydWN0dXJlLCBhbmQgaXQgaXMgdXNlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gTGV0IG1lIGNoZWNrIGlmIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaGFzIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIHJlY2FsbCBzZWVpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCBtZW50aW9uZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O05GVF9DSEFJTl9IV19PRkZMT0FEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NzUwPXN0YXRpYyBpbnQgbmZ0X2RlbHJ1bGUoc3RydWN0IG5mdF9jdHggKmN0eCwgc3RydWN0IG5mdF9ydWxlICpydWxlKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjc2MDpcdGlmIChjdHgtXHUwMDNlY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXHUwMDNlbmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzMy1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjUzNS1cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXHRiYXNlY2hhaW4tXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3Olx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5OC1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXHRcdGlmIChORk5MX01TR19UWVBFKGluZm8tXHUwMDNlbmxoLVx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMzMxOlx0XHQgICAgY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5NC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cdFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9NDMwNT1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdydWxlKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjQ0NjQ6XHRpZiAoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVx0XHRmbG93ID0gbmZ0X2Zsb3dfcnVsZV9jcmVhdGUobmV0LCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVx0XHRcdFx0XHQgICAgICBORlRfTVNHX05FV1JVTEUpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXHRcdFx0XHRcdFx0IE5GVF9UUkFOU19BQk9SVCk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cdFx0XHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFx1MDAyNmN0eCwgbmZ0X3RyYW5zX3J1bGUodHJhbnMpKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI3LVx0XHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTI4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUyOS1cdFx0XHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNS1cdFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzNjpcdFx0XHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Mi1cdFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTQzOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0NC1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTAtXHRcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1MTpcdFx0XHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTItXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTY2PWludCBuZnRfZmxvd19ydWxlX29mZmxvYWRfY29tbWl0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVx0XHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cdFx0XHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4Ny1cdFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU4ODpcdFx0XHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg5LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5NS1cdFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTk2Olx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU5Ny1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MDktXHRcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjYxMDpcdFx0XHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02MTEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NjI4PXN0YXRpYyBzdHJ1Y3QgbmZ0X2NoYWluICpfX25mdF9vZmZsb2FkX2dldF9jaGFpbihjb25zdCBzdHJ1Y3QgbmZ0YWJsZXNfcGVybmV0ICpuZnRfbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDEtXHRcdFx0aWYgKCFuZnRfaXNfYmFzZV9jaGFpbihjaGFpbikgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2NDI6XHRcdFx0ICAgICEoY2hhaW4tXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDMtXHRcdFx0XHRjb250aW51ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNzcKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA2MzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBGdXp6aW5nIFBvdGVudGlhbCoqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaXMgdXNlZCBpbiBgbmZfdGFibGVzX2FwaS5jYC4gTXkgaW5pdGlhbCBxdWVzdGlvbiBpcyBpZiB0aGVyZSYjMzk7cyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgbmZfdGFibGVzX29mZmxvYWQub2AuIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgaXQmIzM5O3MgaW5jbHVkZWQgaW4gdGhlIG9iamVjdCBsaXN0IGZvciBgbmZfdGFibGVzLW9ianNgLiBUaGF0IG1lYW5zIGBuZl90YWJsZXNfb2ZmbG9hZC5vYCBpcyBhbHdheXMgY29tcGlsZWQgd2hlbmV2ZXIgYE5GX1RBQkxFU2AgaXMgZW5hYmxlZC4gVGhlcmVmb3JlLCBgTkZfVEFCTEVTYCBpdHNlbGYgc2hvdWxkIGJlIHN1ZmZpY2llbnQgdG8gZW5hYmxlIGl0LgoKTm93LCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZyBjcnVjaWFsOiBpcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBhIHN0YXRpYyB2YXJpYWJsZT8gWWVzLCBpdCBpcyBzdGF0aWMuIE9rYXksIGNhbiBzeXprYWxsZXIgZnV6eiBzdGF0aWMgZnVuY3Rpb25zPyBZZXMsIGl0IGNhbiwgYXMgbG9uZyBhcyB0aGV5IGFyZSBpbiB0aGUgc3ltYm9sIHRhYmxlICh1bmxlc3MgdGhleSBhcmUgY29tcGxldGVseSBpbmxpbmVkLCB3aGljaCBpcyB1bmxpa2VseSBpbiB0aGlzIGNhc2UpLiBUbyBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4sIEkmIzM5O2xsIGxpc3QgKmJvdGgqIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaW4gYEZvY3VzU3ltYm9sc2AuCgpPa2F5LCBsZXQmIzM5O3Mgc3VtbWFyaXplIG15IGZpbmRpbmdzOgoKKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGUgcGF0Y2ggY2xlYXJseSBpbXBhY3RzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlIG9mZmxvYWQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmZ0X3BheWxvYWQuY2AsIGlzIHdhcnJhbnRlZC4KKiAgICoqRm9jdXNTeW1ib2xzOiBcWyYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7XF0qKiAtIFRoZXNlIHN5bWJvbHMgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmllZCBsb2dpYy4KKiAgICoqRW5hYmxlQ29uZmlnczogXFsmIzM0O05GX1RBQkxFUyYjMzQ7XF0qKiAtIEVuYWJsaW5nIGBORl9UQUJMRVNgIGlzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS4KCk9uZSBtb3JlIHRoaW5nLi4uIElzIGBORl9UQUJMRVNfTkVUREVWYCBhIG5lY2Vzc2FyeSBjb25kaXRpb24gZm9yIGhhcmR3YXJlIG9mZmxvYWQ/IEkmIzM5O2xsIGNoZWNrIGBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2YCB3aXRoaW4gYG5mX3RhYmxlc19hcGkuY2AuCgpgYGBjCnN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sCi4uLgoJaWYgKGZsYWdzICZhbXA7IE5GVF9DSEFJTl9IV19PRkZMT0FEICZhbXA7JmFtcDsKCSAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpCmBgYAoKSXQgbG9va3MgbGlrZSBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHByaW1hcmlseSB1c2VkIHdpdGggY2hhaW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0ZGV2IGZhbWlseS4gTm93LCBsZXQmIzM5O3MgYWxzbyBjaGVjayBgbmZfdGFibGVzX2FkZGNoYWluYC4KCmBgYGMKCQlpZiAoZmxhZ3MgJmFtcDsgTkZUX0NIQUlOX0hXX09GRkxPQUQpCgkJCXJldHVybiAtRU9QTk9UU1VQUDsKYGBgCgpBaCwgaXQgc2VlbXMgdGhhdCBpZiBpdCYjMzk7cyAqbm90KiBhIG5ldGRldiBjaGFpbiwgaXQgcmV0dXJucyBgLUVPUE5PVFNVUFBgLiBUaGF0JiMzOTtzIGltcG9ydGFudC4gVGhpcyBtZWFucyBoYXJkd2FyZSBvZmZsb2FkIGlzIG1vcmUgdGlnaHRseSBjb3VwbGVkIHRvIHRoZSBuZXRkZXYgZmFtaWx5IHRoYW4gSSBpbml0aWFsbHkgdGhvdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0NIQUlOX0hXX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlx0aWYgKGN0eC1cdTAwM2VjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2MS1cdFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cdTAwM2VuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMi1cdGJhc2VjaGFpbi1cdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEzOlx0aWYgKGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTQtXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDA9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3OTc6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjg0PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cdFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfdHlwZSkgPT0gTkZUX01TR19ERVNUUk9ZQ0hBSU4gfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XHRcdCAgICBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzMyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk2LVx0XHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3MjAzCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gbmZfdGFibGVzX2FkZGNoYWluKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBvZiBgbmZfdGFibGVzX2FkZGNoYWluYC4gVGhpcyBmdW5jdGlvbiBpcyBjcml0aWNhbCBpbiB0aGUgTmV0ZmlsdGVyIGZyYW1ld29yaywgc28gYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIGVudmlyb25tZW50IGlzIHBhcmFtb3VudC4gSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdHMgc3Vycm91bmRpbmcgY29kZSwgY2hlY2tpbmcgd2hlcmUgaXQmIzM5O3MgY2FsbGVkIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBjaGFpbnMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2Agc3lzdGVtLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJiMzOTtsbCBmb2N1cyBvbiBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBsb2NraW5nIG1lY2hhbmlzbXMsIGFuZCB0aGUgb3ZlcmFsbCBkYXRhIGZsb3cuIFRoaXMgd2lsbCBnaXZlIG1lIGEgc29saWQgYmFzZSB0byBwcm9jZWVkIHdpdGggZnVydGhlciBhbmFseXNpcyBvciBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX3RhYmxlc19hZGRjaGFpbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3Mzg9c3RhdGljIHU2NCBjaGFpbl9pZDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MzktXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzQwOnN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc0MS1cdFx0XHQgICAgICB1MzIgZmxhZ3MsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMTAyPXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld2NoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE5OS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMyMDA6XHRyZXR1cm4gbmZfdGFibGVzX2FkZGNoYWluKFx1MDAyNmN0eCwgZmFtaWx5LCBwb2xpY3ksIGZsYWdzLCBleHRhY2spO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzIwMS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3Njg4CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBicmVha2Rvd24gb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBmb2N1c2luZyBvbiB0aGF0IHNuaXBwZXQ6CgoqKkFuYWx5emluZyB0aGUgYG5mX3RhYmxlc19hZGRjaGFpbmAgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc19hZGRjaGFpbmAsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAyNzk3LiBUaGlzIGZ1bmN0aW9uIGlzLCBvZiBjb3Vyc2UsIGNyaXRpY2FsIGZvciBhZGRpbmcgbmV3IGNoYWlucyB3aXRoaW4gdGhlIE5ldGZpbHRlciB0YWJsZSBpbmZyYXN0cnVjdHVyZS4gVGhlIGNvZGUgaW1tZWRpYXRlbHkgY2F1Z2h0IG15IGV5ZSB3aXRoIHRoaXMgY29uZGl0aW9uYWwgY2hlY2s6CgpgYGBjCgkJaWYgKGZsYWdzICZhbXA7IE5GVF9DSEFJTl9IV19PRkZMT0FEKQoJCQlyZXR1cm4gLUVPUE5PVFNVUFA7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzICYjMzQ7QWhhISBIYXJkd2FyZSBvZmZsb2FkIGlzIGV4cGxpY2l0bHkgYmVpbmcgYmxvY2tlZCBmb3IgY2hhaW4gY3JlYXRpb24uJiMzNDsgVGhhdCBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGZsYWcgaXMgaW1wb3J0YW50LCBhbmQgdGhlIHJldHVybiBvZiBgLUVPUE5PVFNVUFBgIGluZGljYXRlcyB0aGF0IHRoZSBmZWF0dXJlIGlzIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0IOKAkyBhZGRpbmcgdGhlIGNoYWluLiBUaGlzIHN1Z2dlc3RzIHRoZXJlIGFyZSBwb3RlbnRpYWwgbGltaXRhdGlvbnMgb3IgY29uc2lkZXJhdGlvbnMgd2hlbiBjb21iaW5pbmcgY2hhaW4gY3JlYXRpb24gYW5kIGhhcmR3YXJlIG9mZmxvYWQgd2l0aGluIE5ldGZpbHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgcmVzdHJpY3Rpb24gZXhpc3RzLiBJdCBjb3VsZCBiZSBkdWUgdG8gYSB2YXJpZXR5IG9mIHJlYXNvbnMsIGxpa2UgaGFyZHdhcmUgY29tcGF0aWJpbGl0eSBpc3N1ZXMsIGNvbXBsZXhpdGllcyBpbiBvZmZsb2FkaW5nIGNoYWluIG1hbmFnZW1lbnQsIG9yIHBvdGVudGlhbCBzZWN1cml0eSBjb25jZXJucy4gSSYjMzk7ZCBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHN5c3RlbSwgdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGFuZCBob3cgb2ZmbG9hZGluZyBpbnRlcmFjdHMgd2l0aCB0aGUgb3ZlcmFsbCBOZXRmaWx0ZXIgYXJjaGl0ZWN0dXJlLiBTcGVjaWZpY2FsbHksIEkgd291bGQgbmVlZCB0byBmaW5kIG91dCB3aGVyZSB0aGUgYGZsYWdzYCBhcmUgc2V0IGZvciBmdXJ0aGVyIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjc4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNzgwOlx0XHRcdFx0XHRyZXR1cm4gUFRSX0VSUl9QQ1BVKHN0YXRzKTtcbjI3ODE6XHRcdFx0XHR9XG4yNzgyOlx0XHRcdFx0cmN1X2Fzc2lnbl9wb2ludGVyKGJhc2VjaGFpbi1cdTAwM2VzdGF0cywgc3RhdHMpO1xuMjc4MzpcdFx0XHR9XG4yNzg0Olx0XG4yNzg1Olx0XHRcdGVyciA9IG5mdF9iYXNlY2hhaW5faW5pdChiYXNlY2hhaW4sIGZhbWlseSwgXHUwMDI2aG9vaywgZmxhZ3MpO1xuMjc4NjpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4yNzg3Olx0XHRcdFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcdTAwMjZob29rKTtcbjI3ODg6XHRcdFx0XHRrZnJlZShiYXNlY2hhaW4pO1xuMjc4OTpcdFx0XHRcdGZyZWVfcGVyY3B1KHN0YXRzKTtcbjI3OTA6XHRcdFx0XHRyZXR1cm4gZXJyO1xuMjc5MTpcdFx0XHR9XG4yNzkyOlx0XHRcdGlmIChzdGF0cylcbjI3OTM6XHRcdFx0XHRzdGF0aWNfYnJhbmNoX2luYyhcdTAwMjZuZnRfY291bnRlcnNfZW5hYmxlZCk7XG4yNzk0Olx0XHR9IGVsc2Uge1xuMjc5NTpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9CQVNFKVxuMjc5NjpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMjc5NzpcdFx0XHRpZiAoZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxuMjc5ODpcdFx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbjI3OTk6XHRcbjI4MDA6XHRcdFx0Y2hhaW4gPSBremFsbG9jX29iaigqY2hhaW4sIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4yODAxOlx0XHRcdGlmIChjaGFpbiA9PSBOVUxMKVxuMjgwMjpcdFx0XHRcdHJldHVybiAtRU5PTUVNO1xuMjgwMzpcdFxuMjgwNDpcdFx0XHRjaGFpbi1cdTAwM2VmbGFncyA9IGZsYWdzO1xuMjgwNTpcdFx0fVxuMjgwNjpcdFx0Y3R4LVx1MDAzZWNoYWluID0gY2hhaW47XG4yODA3Olx0XG4yODA4Olx0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZjaGFpbi1cdTAwM2VydWxlcyk7XG4yODA5Olx0XHRjaGFpbi1cdTAwM2VoYW5kbGUgPSBuZl90YWJsZXNfYWxsb2NfaGFuZGxlKHRhYmxlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg1MDAKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gTkZUIEhhcmR3YXJlIE9mZmxvYWRpbmcqKgoKUmlnaHQsIHNvIGl0IGxvb2tzIGxpa2UgdGhpcyBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGZlYXR1cmUsIHRoYXQmIzM5O3MgZXhjbHVzaXZlbHkgZm9yIGJhc2UgY2hhaW5zLiBJIHZhZ3VlbHkgcmVjYWxsIHRoYXQuIEFuZCBpdCYjMzk7cyBgbmZ0X2Jhc2VjaGFpbl9pbml0YCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBIbW0sIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3Igb3B0aW9ucyB0aWVkIHRvIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGA/IFRpbWUgdG8gZGlnIGludG8gYG5mX3RhYmxlc19hcGkuY2AuIExldCYjMzk7cyBzZWUgd2hhdCBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAgdGVsbHMgdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0Olx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTUtXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg5MjIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCoqCgpSaWdodCwgbGV0JiMzOTtzIGdldCBpbnRvIHRoaXMgYG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRgIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBpbXBsZW1lbnRhdGlvbiBpbiBkZXRhaWwuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBza2ltIHRoZSByZWxldmFudCBjb2RlIG5vdy4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRoaXMgdGhpbmcgZnVuY3Rpb25zLCBpdHMgYXJjaGl0ZWN0dXJlLCBhbmQgdGhlIGRlc2lnbiBkZWNpc2lvbnMuIE15IGtleSBjb25jZXJuIGhlcmUgaXMgaG93IGl0IGludGVyYWN0cyB3aXRoIGhhcmR3YXJlIG9mZmxvYWRpbmcsIGFuZCBwb3RlbnRpYWwgYm90dGxlbmVja3MuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHRoZSBvZmZsb2FkLCBob3cgcnVsZSB0cmFuc2xhdGlvbiB0byBoYXJkd2FyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiB0aGUgZmxvdy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5JiMzOTt2ZSBpbXBsZW1lbnRlZCBhbnkgY2xldmVyIG9wdGltaXphdGlvbnMgdG8gbWluaW1pemUgQ1BVIGludm9sdmVtZW50IGR1cmluZyB0aGUgZmFzdCBwYXRoLiBBcmUgdGhleSB1c2luZyBiYXRjaGluZz8gV2hhdCBhYm91dCBmbG93IGNvbnRyb2w/IFdoYXQgYWJvdXQgYW55IHBvdGVudGlhbCByYWNlcz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgcXVlc3Rpb25zIG9uIGhvdyB0aGUgbW9kdWxlIGhhbmRsZXMgcnVsZSB1cGRhdGVzIGFuZCBkZWxldGlvbiBjb25jdXJyZW50bHkgd2l0aCB0cmFmZmljIHByb2Nlc3NpbmcuIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIHRoaXMgY29kZSwgYW5kIGl0cyBpbXBhY3Qgb24gdGhlIGxhcmdlciBhcmNoaXRlY3R1cmUuIExldCYjMzk7cyBkaWcgaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0Olx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTUtXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2YmFzZWNoYWluLVx1MDAzZWhvb2tfbGlzdCwgXHUwMDI2aG9vay1cdTAwM2VsaXN0KTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjEyPXN0YXRpYyBpbnQgbmZ0X2NoYWluX29mZmxvYWRfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTIyMC1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyMjE6Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTIyMi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NDkzCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQqKgoKT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRgIHdpdGhpbiBgbmZfdGFibGVzX29mZmxvYWQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIG1hZ2ljIChvciB0aGUgcG90ZW50aWFsIGhlYWRhY2hlcywgZGVwZW5kaW5nIG9uIGhvdyBpdCYjMzk7cyBpbXBsZW1lbnRlZCEpIGxpa2VseSBoYXBwZW5zIGZvciBvZmZsb2FkaW5nIGNoYWluIG9wZXJhdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjaGFpbiBzdXBwb3J0IGlzIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBmb3Igb2ZmbG9hZGluZyBwdXJwb3Nlcy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBmdW5jdGlvbiB0byBiZSBhIGtleSBkZWNpc2lvbiBwb2ludCwgZGV0ZXJtaW5pbmcgd2hldGhlciBhIGNoYWluIGNhbiBhY3R1YWxseSBiZSBvZmZsb2FkZWQgdG8gdGhlIGhhcmR3YXJlIG9yIGlmIHdlIG5lZWQgdG8gZmFsbCBiYWNrIHRvIHNvZnR3YXJlIHByb2Nlc3NpbmcuIEkmIzM5O2xsIGJlIGxvb2tpbmcgc3BlY2lmaWNhbGx5IGZvciB0aGluZ3MgbGlrZSB0aGUgY29uZGl0aW9ucyBjaGVja2VkLCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgdG8gcmVwcmVzZW50IHRoZSBjaGFpbnMsIGFuZCBob3cgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGhhcmR3YXJlIG9mZmxvYWQgQVBJICh3aGF0ZXZlciB0aGF0IG1pZ2h0IGJlKSBpcyBtYW5hZ2VkIGhlcmUuIFRoZSBjb2RlIGxpa2VseSBob2xkcyBjbHVlcyByZWdhcmRpbmcgdGhlIHR5cGVzIG9mIGNoYWlucyB0aGF0ICphcmUqIG9mZmxvYWRhYmxlIGFuZCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucyBiZWluZyBtYWRlIGFib3V0IHRoZSBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkgbmVlZCB0byBiZSBwcmVwYXJlZCB0byBzZWUgc29tZSB2ZXJ5IGhhcmR3YXJlIHNwZWNpZmljIGNvZGUgaW4gaGVyZS4gRnJvbSBhIGhpZ2ggbGV2ZWwgcGVyc3BlY3RpdmUsIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgd2hpY2ggd2lsbCBhbGxvdyB1cyB0byBkZWZpbmUgaWYgd2Ugc3VwcG9ydCBhIGNoYWluIGZvciBvZmZsb2FkaW5nIGJhc2VkIG9uIGl0cyBydWxlcywgZm9yIGV4YW1wbGUgd2hldGhlciBvciBub3Qgd2UgY2FuIHRyYW5zbGF0ZSBhIHJ1bGUgb2YgYSBjaGFpbiB0byBhIGhhcmR3YXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjIwOlx0XG4gMjIxOlx0Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxuIDIyMjpcdHtcbiAyMjM6XHRcdHN0cnVjdCBuZl9ob29rX29wcyAqb3BzO1xuIDIyNDpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiAyMjU6XHRcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcbiAyMjY6XHRcbiAyMjc6XHRcdGlmIChuZnRfY2hhaW5fb2ZmbG9hZF9wcmlvcml0eShiYXNlY2hhaW4pIFx1MDAzYyAwKVxuIDIyODpcdFx0XHRyZXR1cm4gZmFsc2U7XG4gMjI5Olx0XG4gMjMwOlx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIFx1MDAyNmJhc2VjaGFpbi1cdTAwM2Vob29rX2xpc3QsIGxpc3QpIHtcbiAyMzE6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFx1MDAyNmhvb2stXHUwMDNlb3BzX2xpc3QsIGxpc3QpIHtcbiAyMzI6XHRcdFx0XHRpZiAob3BzLVx1MDAzZXBmICE9IE5GUFJPVE9fTkVUREVWIHx8XG4gMjMzOlx0XHRcdFx0ICAgIG9wcy1cdTAwM2Vob29rbnVtICE9IE5GX05FVERFVl9JTkdSRVNTKVxuIDIzNDpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDIzNTpcdFxuIDIzNjpcdFx0XHRcdGRldiA9IG9wcy1cdTAwM2VkZXY7XG4gMjM3Olx0XHRcdFx0aWYgKCFkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fc2V0dXBfdGMgXHUwMDI2XHUwMDI2XG4gMjM4Olx0XHRcdFx0ICAgICFmbG93X2luZHJfZGV2X2V4aXN0cygpKVxuIDIzOTpcdFx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDE3MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDEwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIENvbnN0cmFpbnQqKgoKT2theSwgc28gdGhlIGNvZGUgc2F5cyBgb3BzLSZndDtwZiAhPSBORlBST1RPX05FVERFVmAuIFRoYXQgaW1tZWRpYXRlbHkgY2xpY2tzIOKAkyBpdCYjMzk7cyBzdWdnZXN0aW5nIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKm9ubHkqIHN1cHBvcnRzIGBORlBST1RPX05FVERFVmAuIFdoaWNoIG1ha2VzIG1lIHRoaW5rLCAmIzM0O1doeSBpcyB0aGF0PyBXaGF0JiMzOTtzIHRoZSBkZXBlbmRlbmN5IGhlcmU/JiMzNDsgQW5kIG9mIGNvdXJzZSwgdGhlIGFuc3dlciBsaWtlbHkgbGllcyB3aXRoIHRoZSBgTkZfVEFCTEVTX05FVERFVmAgY29uZmlnIG9wdGlvbi4KCkkgbmVlZCB0byBjb25maXJtIHRoaXMuIElmIGBORl9UQUJMRVNfTkVUREVWYCBpc24mIzM5O3Qgc2V0LCAqY2FuKiB3ZSBldmVuIGNyZWF0ZSBhIG5ldGRldiBmYW1pbHkgY2hhaW4/IEkmIzM5O20gYmV0dGluZyB0aGUgYW5zd2VyIGlzIG5vLCBhbmQgdGhlIGtlcm5lbCBjb25maWcgaXMgdGhlIHBsYWNlIHRvIHZlcmlmeSB0aGlzLiBUaW1lIHRvIGRpZyBpbnRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgIGFuZCBzZWUgd2hhdCBgTkZfVEFCTEVTX05FVERFVmAgaXMgcmVhbGx5IGFsbCBhYm91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZfVEFCTEVTX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDcyPWNvbmZpZyBORl9UQUJMRVNfSU5FVFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVx0Ym9vbCBcJiMzNDtOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz02NDk9Y29uZmlnIE5GVF9TWU5QUk9YWVxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NTktXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjYwOmlmIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnPTY4OT1jb25maWcgTkZUX1JFSkVDVF9ORVRERVZcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjk4LVxubmV0L25ldGZpbHRlci9LY29uZmlnOjY5OTplbmRpZiAjIE5GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzIxCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTkZfVEFCTEVTX05FVERFViBEZXBlbmRlbmN5IENoZWNrKioKCkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHJlbWVtYmVyaW5nIHRoaXMgcmlnaHQuIGBORl9UQUJMRVNfTkVUREVWYCBpcyBhICpib29sZWFuKiBjb25maWd1cmF0aW9uIG9wdGlvbiwgaXNuJiMzOTt0IGl0PyBPa2F5LCBnb29kLCBjb25maXJtaW5nIHRoYXQuIE5vdywgdGhlIHJlYWwgcXVlc3Rpb24gdGhhdCYjMzk7cyBidWdnaW5nIG1lIGlzOiBkb2VzIGBuZl90YWJsZXNfYXBpLmNgICphY3R1YWxseSogcmVseSBvbiBgTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZCBzcGVjaWZpY2FsbHkgZm9yIG5ldGRldiBmYW1pbHkgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IHNvdXJjZSBmaWxlLiBJdOKAmXMgY3JpdGljYWwgSSB2ZXJpZnkgd2hldGhlciBlbmFibGluZyB0aGUgbmV0ZGV2IGZhbWlseSBpbiBuZl90YWJsZXMgaXMgdW5jb25kaXRpb25hbGx5IGF2YWlsYWJsZSBvciBpZiB0aGUgYE5GX1RBQkxFU19ORVRERVZgIG9wdGlvbiBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIElmIEkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgZGV0YWlscyBmb3IgdGhlIHNjZW5hcmlvLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtORlBST1RPX05FVERFViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTE1NDk9c3RhdGljIGJvb2wgbmZ0X3N1cHBvcnRlZF9mYW1pbHkodTggZmFtaWx5KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjEtI2lmZGVmIENPTkZJR19ORl9UQUJMRVNfTkVUREVWXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxNTYyOlx0XHR8fCBmYW1pbHkgPT0gTkZQUk9UT19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTE1NjMtI2VuZGlmXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9ODg2MT1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfcGFyc2VfaG9vayhjb25zdCBzdHJ1Y3QgbmZ0X2N0eCAqY3R4LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkob3BzLCBcdTAwMjZob29rLVx1MDAzZW9wc19saXN0LCBsaXN0KSB7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo4OTI0Olx0XHRcdG9wcy1cdTAwM2VwZlx0XHRcdD0gTkZQUk9UT19ORVRERVY7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy04OTI1LVx0XHRcdG9wcy1cdTAwM2Vob29rbnVtXHRcdD0gZmxvd3RhYmxlX2hvb2stXHUwMDNlbnVtO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTk3NjA9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX2V2ZW50KHVuc2lnbmVkIGxvbmcgZXZlbnQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc5Mi1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjk3OTM6XHRcdFx0b3BzLVx1MDAzZXBmXHRcdFx0PSBORlBST1RPX05FVERFVjtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3OTQtXHRcdFx0b3BzLVx1MDAzZWhvb2tudW1cdFx0PSBmbG93dGFibGUtXHUwMDNlaG9va251bTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMjAwNz1zdGF0aWMgdm9pZCBfX25mdF9yZWxlYXNlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTIwMTUtXHRcdC5uZXRcdD0gbmV0LFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTIwMTY6XHRcdC5mYW1pbHlcdD0gTkZQUk9UT19ORVRERVYsXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMjAxNy1cdH07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxNTEyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRGVwZW5kZW5jaWVzIGZvciBIYXJkd2FyZSBPZmZsb2FkIGluIE5ldGZpbHRlcioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfc3VwcG9ydGVkX2ZhbWlseWAgZnVuY3Rpb24gYW5kIGl0JiMzOTtzIGNhbGxpbmcgb3V0IGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgc3BlY2lmaWNhbGx5IGZvciBgTkZQUk9UT19ORVRERVZgLiBSaWdodCwgc28gdGhpcyBjb25maXJtcyB0aGF0IGBORl9UQUJMRVNfTkVUREVWYCBpcyBlc3NlbnRpYWwgZm9yIHNldHRpbmcgdXAgYSBuZXRkZXYgY2hhaW4sIHdoaWNoIGlzIGl0c2VsZiBhIHByZXJlcXVpc2l0ZSBmb3IgdXNpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gQnV0IGhvbGQgb24sIHdoYXQgYWJvdXQgdGhlIElQdjQgYW5kIElQdjYgdGFibGVzPyBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQsIHNvIHRob3NlIG1pZ2h0IGNvbWUgaW50byBwbGF5IHRvby4KCkxldCBtZSBzZWUsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIG9mIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLiBUaGlzIG1hc2sgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwYXlsb2FkIG1hdGNoaW5nLCB3aGljaCBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBjaGFpbiBvZmZsb2FkLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UgbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBvZiB0aGUgbmV0ZGV2IGNoYWlucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSYjMzk7cmUgbm90IG1pc3NpbmcgYW55IG90aGVyIGRlcGVuZGVuY2llcywgdGhvdWdoLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRoYXQgbWlnaHQgY29udHJpYnV0ZT8KCkxldCYjMzk7cyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGFwcGVhcnMgdGhhdCB3ZSBoYXZlIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAuIEhtbSwgbGV0JiMzOTtzIHRha2UgYW5vdGhlciBsb29rIGF0IHRoYXQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AuIE9rYXksIHRoYXQgbWFzayBjb3ZlcnMgYSBsb3QsIElQLCBJUHY2LCBUQ1AsIFVEUCwgZXRjLiBTbyB3aGlsZSBgTkZfVEFCTEVTX0lQVjRgIGFuZCBgTkZfVEFCTEVTX0lQVjZgIG1pZ2h0IGJlIGhlbHBmdWwsIHRob3NlIGFyZSB0eXBpY2FsbHkgZW5hYmxlZCBieSBkZWZhdWx0LCBzbyB0aGV5IGFyZSBub3QgY3JpdGljYWwuIEkmIzM5O20gZ29pbmcgdG8gYWRkIGBORl9UQUJMRVNfTkVUREVWYCB0byB0aGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QuIEkgbmVlZCB0byBiZSBjb21wbGV0ZWx5IHRob3JvdWdoIGhlcmUsIHNvIGxldCBtZSBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4KCk9rYXksIGl0IGxvb2tzIGxpa2UgYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiwgc28gSSB0aGluayB3ZSYjMzk7cmUgZ29vZC4gSnVzdCB0byBiZSBzdXJlLCBJIHdpbGwgZ28gYmFjayBhbmQgY2hlY2sgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYWdhaW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE5IDIyOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR18mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyMz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjYte1xubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNzojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05MjgtXHRzd2l0Y2ggKHBrdC1cdTAwM2Vza2ItXHUwMDNlcHJvdG9jb2wpIHtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0Ny17XG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTk0OS1cdHN3aXRjaCAocGt0LVx1MDAzZWV0aGVydHlwZSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjUzMQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDczMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5mdF9wYXlsb2FkLmNgIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBoYXJkd2FyZSBvZmZsb2FkaW5nIGludGVyYWN0cyB3aXRoIGl0LiBJIHNlZSB0aGF0IGBDT05GSUdfTkZfVEFCTEVTX05FVERFVmAgaXMgdXNlZCBpbiB0aGlzIGZpbGUuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgSSBuZWVkIHRvIGFkZCB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmc7IGlzIGBORl9UQUJMRVNgIGVub3VnaD8gTm8sIGBORl9UQUJMRVNgIGlzIHRoZSBiYXNlLCBidXQgYE5GX1RBQkxFU19ORVRERVZgIGlzIHNwZWNpZmljYWxseSAqcmVxdWlyZWQqIGZvciB0aGUgbmV0ZGV2IGZhbWlseSwgd2hpY2gsIGltcG9ydGFudGx5LCBpcyBuZWVkZWQgZm9yIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAuIFNvIHllYWgsIGBORl9UQUJMRVNfTkVUREVWYCAqbXVzdCogYmUgaW5jbHVkZWQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBmb2N1cy4gSSYjMzk7dmUgZ290IGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gSSB0aGluayBJJiMzOTtsbCBhZGQgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkYC4gSG1tLCB3YWl0LCB0aGF0JiMzOTtzIGludGVyZXN0aW5nOyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKiwgYnV0IGl0JiMzOTtzIHRoZSBvbmUgdGhhdCYjMzk7cyBhY3R1YWxseSAqbW9kaWZpZWQqLiBPa2F5LCBJJiMzOTttIHN0aWNraW5nIHdpdGggaW5jbHVkaW5nIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBjaGVjazogaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgaW5saW5lZD8gSWYgaXQgKmlzKiwgc3l6a2FsbGVyIG1pZ2h0IG1pc3MgaXQuIEJ1dCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaXMgdGhlIGVudHJ5IHBvaW50LCBzbyBJJiMzOTtsbCBpbmNsdWRlIHRoYXQgbm8gbWF0dGVyIHdoYXQuIEFscmlnaHQsIEkmIzM5O2xsIGFkZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuCgpUaW1lIHRvIGNoZWNrIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgJiMzOTtzIHVzYWdlLiBBaGEsIGl0JiMzOTtzIGNhbGxlZCAxNyB0aW1lcy4gVGhhdCYjMzk7cyBhIGdvb2Qgc2lnbiBpdCYjMzk7cyBub3QgaW5saW5lZCBiZWNhdXNlIGl0JiMzOTtzIGNhbGxlZCBmcm9tIHNvIG1hbnkgZGlmZmVyZW50IGZ1bmN0aW9ucyBsaWtlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBldGMuIFdhaXQsIGl0JiMzOTtzIHByZXR0eSBzbWFsbCwgc28gaXQgKmNvdWxkKiBiZS4gT2theSwgSSYjMzk7bSBnb2luZyB0byBoZWRnZSBteSBiZXRzIGFuZCBpbmNsdWRlIGJvdGggYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBqdXN0IHRvIGJlIHN1cmUuCgpBbHJpZ2h0LCB0aW1lIHRvIHdyaXRlIHRoZSByZXNwb25zZToKCmBXb3J0aEZ1enppbmc6IHRydWVgIC0gYmVjYXVzZSB0aGUgcGF0Y2ggaXMgY2hhbmdpbmcgdGhlIG1hc2sgZ2VuZXJhdGlvbiBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZywgYW5kIHRoYXQgbG9naWMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlcyB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4KYFJlYXNvbmluZzogVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLmAKYEZvY3VzU3ltYm9sczogWyYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrJiMzNDssICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7XWAKYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O05GX1RBQkxFUyYjMzQ7LCAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0O11gCgpOb3csIGxldCYjMzk7cyBkb3VibGUtY2hlY2s6IGlzIGBORl9UQUJMRVNfTkVUREVWYCB0aGUgZXhhY3QgbmFtZT8gWXVwLCBgY29uZmlnIE5GX1RBQkxFU19ORVRERVZgLiBHb29kLgoKQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkYD8gWWVwLCBgc3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCwgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csIGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcilgLgoKQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgPyBZZXMsIGBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLCB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pYC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIgY29uZmlncyBpbnZvbHZlZD8gTGV0JiMzOTtzIHNlZS4uLiBgTkZfRkxPV19UQUJMRWA/IElzIHRoYXQgcmVxdWlyZWQgd2l0aCBgTkZUX0NIQUlOX0hXX09GRkxPQURgPyBObywgSSBkb24mIzM5O3QgYmVsaWV2ZSBzby4gSSYjMzk7bGwgbGVhdmUgdGhhdCBvdXQgZm9yIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTkgMjI6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TkZUX0NIQUlOX0hXX09GRkxPQUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzU5LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlx0aWYgKGN0eC1cdTAwM2VjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc2MS1cdFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cdTAwM2VuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMi1cdGJhc2VjaGFpbi1cdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzEzOlx0aWYgKGNoYWluLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTQtXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI3NDA9c3RhdGljIGludCBuZl90YWJsZXNfYWRkY2hhaW4oc3RydWN0IG5mdF9jdHggKmN0eCwgdTggZmFtaWx5LCB1OCBwb2xpY3ksXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3OTc6XHRcdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zMjg0PXN0YXRpYyBpbnQgbmZfdGFibGVzX2RlbGNoYWluKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZm5sX2luZm8gKmluZm8sXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cdFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cdTAwM2VubGgtXHUwMDNlbmxtc2dfdHlwZSkgPT0gTkZUX01TR19ERVNUUk9ZQ0hBSU4gfHxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XHRcdCAgICBjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zMzMyLVx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk2LVx0XHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDYzLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcdGlmIChjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXHRcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTEwODc2PXN0YXRpYyBpbnQgbmZfdGFibGVzX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXHRcdFx0XHRcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcdFx0XHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVx0XHRcdFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMDU0Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTUtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTExMjU5PXN0YXRpYyBpbnQgX19uZl90YWJsZXNfYWJvcnQoc3RydWN0IG5ldCAqbmV0LCBlbnVtIG5mbmxfYWJvcnRfYWN0aW9uIGFjdGlvbilcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cdFx0XHRcdFx0XHQgTkZUX1RSQU5TX0FCT1JUKTtcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzQ3Olx0XHRcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDgtXHRcdFx0XHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzU0LVx0XHRcdG5mdF9ydWxlX2V4cHJfYWN0aXZhdGUoXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XHRcdFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cdFx0XHRcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM1LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTM2Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzctXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQyLVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NDM6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTQ0LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1MC1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTUxOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU1Mi1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01NjY9aW50IG5mdF9mbG93X3J1bGVfb2ZmbG9hZF9jb21taXQoc3RydWN0IG5ldCAqbmV0KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXHRcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVx0XHRcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVx0XHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4Olx0XHRcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXHUwMDNlZmxhZ3MgXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXHRcdFx0XHRjb250aW51ZTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVx0XHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XHRcdFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVx1MDAzZWZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVx0XHRcdFx0Y29udGludWU7XG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cdFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlx0XHRcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXG4tLVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0MS1cdFx0XHRpZiAoIW5mdF9pc19iYXNlX2NoYWluKGNoYWluKSB8fFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcdFx0XHQgICAgIShjaGFpbi1cdTAwM2VmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjY5MgoJCQkJCQkJb3V0cHV0OiAxMTEKCQkJCQkJCXRob3VnaHRzOiA4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB1bmRlcnN0YW5kaW5nLCBjb25zaWRlcmluZyBJJiMzOTttIHRyeWluZyB0byBvcHRpbWl6ZSB0aGlzIG9mZmxvYWQgcHJvY2Vzcy4KCioqTXkgQ3VycmVudCBFdmFsdWF0aW9uIG9mIHRoZSBPZmZsb2FkIFJlcXVpcmVtZW50cyoqCgpSaWdodCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gSXQgZG9lc24mIzM5O3QgbG9vayBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBmdWxsIGZsb3cgb2ZmbG9hZCBoZXJlLCBzbyB0aGUgYE5GX0ZMT1dfVEFCTEVgIG1vZHVsZSBpcyBwcm9iYWJseSBvdmVya2lsbC4gV2UmIzM5O3JlIHRhbGtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IHJ1bGUgb2ZmbG9hZCwgd2hpY2ggcG9pbnRzIG1vcmUgZGlyZWN0bHkgdG8gYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gVGhhdCYjMzk7cyB0aGUga2V5IGRpc3RpbmN0aW9uLiBUaGVyZWZvcmUsIGJhc2VkIG9uIHRoaXMsIGl0IHNlZW1zIHRoYXQgdGhlIHN0YW5kYXJkIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAgbW9kdWxlcyBzaG91bGQgcHJvdmlkZSB0aGUgbmVjZXNzYXJ5IGZvdW5kYXRpb24uIEdpdmVuIHRoaXMgYXNzZXNzbWVudCwgSSYjMzk7bGwgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIHdpbGwgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOSAyMjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDssCiAgICAmIzM0O05GX1RBQkxFU19ORVRERVYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2smIzM0OywKICAgICYjMzQ7bmZ0X3BheWxvYWRfb2ZmbG9hZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWFzayBnZW5lcmF0aW9uIGxvZ2ljIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZSBjb25maWd1cmF0aW9uIHdpdGggaGFyZHdhcmUgb2ZmbG9hZCBlbmFibGVkLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgb2ZmbG9hZCBmdW5jdGlvbnMgaW4gbmZ0X3BheWxvYWQuYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjM3LjA4NzI1MTc3OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk5MzM1ODQyNzIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTozNy4wODcyNTkwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjA2ODIxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDZhY2I0MGE4Mjg5NDBhYzAwMTAxOTFlNmEwMmY4MjlkNWQ4ODgxZjFcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFN1biBKdWwgMTkgMjI6NDk6MzUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jIGIvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXFxuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xcbkBAIC0yNTksOSArMjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXFxuIHN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxuIFxcdFxcdFxcdFxcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xcbiBcXHRzdHJ1Y3QgbmZ0X2RhdGEgbWFzayA9IHt9O1xcbi1cXHRfX2JlMzIgcmVtYWluZGVyX21hc2s7XFxuIFxcbiBcXHRpZiAocHJpdl9sZW4gPT0gZmllbGRfbGVuKSB7XFxuIFxcdFxcdG1lbXNldChcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XFxuQEAgLTI3MCwxNSArMjY4LDcgQEAgc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXHR9XFxuIFxcbi1cXHRtZW1zZXQoXFx1MDAyNm1hc2ssIDB4ZmYsIGZpZWxkX2xlbik7XFxuLVxcdHJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7XFxuLVxcdGlmIChyZW1haW5kZXIpIHtcXG4tXFx0XFx0ayA9IHByaXZfbGVuIC8gc2l6ZW9mKHUzMik7XFxuLVxcdFxcdGRlbHRhID0gZmllbGRfbGVuIC0gcHJpdl9sZW47XFxuLVxcdFxcdHJlbWFpbmRlcl9tYXNrID0gaHRvbmwofigoMSBcXHUwMDNjXFx1MDAzYyAoZGVsdGEgKiBCSVRTX1BFUl9CWVRFKSkgLSAxKSk7XFxuLVxcdFxcdG1hc2suZGF0YVtrXSA9IChfX2ZvcmNlIHUzMilyZW1haW5kZXJfbWFzaztcXG4tXFx0fVxcbi1cXG4rXFx0bWVtc2V0KFxcdTAwMjZtYXNrLCAweGZmLCBwcml2X2xlbik7XFxuIFxcdG1lbWNweShcXHUwMDI2cmVnLVxcdTAwM2VtYXNrLCBcXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcXG4gXFxuIFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTozNy43MDQwMDUyNDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk4NzE5MDc5NTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDZhY2I0MGE4Mjg5NDBhYzAwMTAxOTFlNmEwMmY4MjlkNWQ4ODgxZjFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAxOSAyMjo0OTozNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYyBiL25ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1xuaW5kZXggMzkxNTM5YTFjZWFhNzcuLjhhNDQ3MmZkNzdkOWYyIDEwMDY0NFxuLS0tIGEvbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcbkBAIC0yNTksOSArMjU5LDcgQEAgc3RhdGljIGludCBuZnRfcGF5bG9hZF9kdW1wKHN0cnVjdCBza19idWZmICpza2IsXG4gc3RhdGljIGJvb2wgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHN0cnVjdCBuZnRfb2ZmbG9hZF9yZWcgKnJlZyxcbiBcdFx0XHRcdCAgICAgdTMyIHByaXZfbGVuLCB1MzIgZmllbGRfbGVuKVxuIHtcbi1cdHVuc2lnbmVkIGludCByZW1haW5kZXIsIGRlbHRhLCBrO1xuIFx0c3RydWN0IG5mdF9kYXRhIG1hc2sgPSB7fTtcbi1cdF9fYmUzMiByZW1haW5kZXJfbWFzaztcbiBcbiBcdGlmIChwcml2X2xlbiA9PSBmaWVsZF9sZW4pIHtcbiBcdFx0bWVtc2V0KFx1MDAyNnJlZy1cdTAwM2VtYXNrLCAweGZmLCBwcml2X2xlbik7XG5AQCAtMjcwLDE1ICsyNjgsNyBAQCBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4tXHRtZW1zZXQoXHUwMDI2bWFzaywgMHhmZiwgZmllbGRfbGVuKTtcbi1cdHJlbWFpbmRlciA9IHByaXZfbGVuICUgc2l6ZW9mKHUzMik7XG4tXHRpZiAocmVtYWluZGVyKSB7XG4tXHRcdGsgPSBwcml2X2xlbiAvIHNpemVvZih1MzIpO1xuLVx0XHRkZWx0YSA9IGZpZWxkX2xlbiAtIHByaXZfbGVuO1xuLVx0XHRyZW1haW5kZXJfbWFzayA9IGh0b25sKH4oKDEgXHUwMDNjXHUwMDNjIChkZWx0YSAqIEJJVFNfUEVSX0JZVEUpKSAtIDEpKTtcbi1cdFx0bWFzay5kYXRhW2tdID0gKF9fZm9yY2UgdTMyKXJlbWFpbmRlcl9tYXNrO1xuLVx0fVxuLVxuK1x0bWVtc2V0KFx1MDAyNm1hc2ssIDB4ZmYsIHByaXZfbGVuKTtcbiBcdG1lbWNweShcdTAwMjZyZWctXHUwMDNlbWFzaywgXHUwMDI2bWFzaywgZmllbGRfbGVuKTtcbiBcbiBcdHJldHVybiB0cnVlO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6MzcuNzA0MDA2NDQ1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIwNjA3NTE3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5GVCBQYXlsb2FkIE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdG91Y2hpbmcgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFNwZWNpZmljYWxseSwgaXQncyBtb2RpZnlpbmcgdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbiBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoaXMgY2hhbmdlLiBJdCBzZWVtcyB0aGUgaW50ZW50IGlzIHRvIHNpbXBsaWZ5IHRoZSBtYXNrIGdlbmVyYXRpb24gd2l0aGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBhcyBzb21ldGhpbmcgdGhhdCBjb3VsZCBoYXZlIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBjb3JyZWN0bmVzcyBpbXByb3ZlbWVudHMuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcuIFRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIGhlYWQgZGlyZWN0bHkgdG8gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgYW5kIHRha2UgYSBjbG9zZSBsb29rIGF0IHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgZnVuY3Rpb24sIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHNwZWNpZmljIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjQwLjkxMDA4MzY0OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg1MTc3MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz0yNzc9c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDc6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MzQ2PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTM4Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTQ0Nj1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9NDc0PXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NDEuMDE4NjA4ODY3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE2Mjg1NDg3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldGZpbHRlciBQYXlsb2FkIE9mZmxvYWQgTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkIGFyZWEgYWdhaW4uIEl0IGxvb2tzIGxpa2UgdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGZ1bmN0aW9uIGlzICpjcnVjaWFsKiDigJMgaXQncyBhbGwgb3ZlciB0aGUgcGxhY2UsIEknbSBzZWVpbmcgaXQgdXNlZCBoZWF2aWx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYC4gVGhhdCdzIGEgcHJldHR5IGJyb2FkIHJhbmdlLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtZWFucyBpdCdzIGEgZnVuZGFtZW50YWwgcGFydCBvZiBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3b3JrcyBpbiB0aGF0IGNvbnRleHQuIEdpdmVuIHRoaXMsIGl0IG1ha2VzIHNlbnNlIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIGBuZnRfcGF5bG9hZC5jYCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgKndoYXQqIGlzIGVuYWJsZWQgYW5kIGhvdyB0aGluZ3MgYXJlIHNldCB1cCBhdCBjb21waWxlIHRpbWUuIEkgbmVlZCB0byBnZXQgdGhlIGJpZ2dlciBwaWN0dXJlIHNvIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiBhbnkgY29kZSBjaGFuZ2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzExLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NDQuMTgxNDY4OTAyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNDMzNjY5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfcGF5bG9hZC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT04Nz1uZl90YWJsZXMtb2JqcyA6PSBuZl90YWJsZXNfY29yZS5vIG5mX3RhYmxlc19hcGkubyBuZnRfY2hhaW5fZmlsdGVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtODgtXFx0XFx0ICBuZl90YWJsZXNfdHJhY2UubyBuZnRfaW1tZWRpYXRlLm8gbmZ0X2NtcC5vIG5mdF9yYW5nZS5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjg5OlxcdFxcdCAgbmZ0X2JpdHdpc2UubyBuZnRfYnl0ZW9yZGVyLm8gbmZ0X3BheWxvYWQubyBuZnRfbG9va3VwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtOTAtXFx0XFx0ICBuZnRfZHluc2V0Lm8gbmZ0X21ldGEubyBuZnRfcnQubyBuZnRfZXh0aGRyLm8gbmZ0X2xhc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjQ0LjMxNTgxNDE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzE0ODQ5MTg3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXRmaWx0ZXIgT2ZmbG9hZCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgY2hhbmdlIHdpdGhpbiBgbmZfdGFibGVzLW9ianNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHJlbGF0ZWQgdG8gbmV0ZmlsdGVyIHRhYmxlcyBhbmQsIGNydWNpYWxseSwgaXMgYnVpbHQgb25seSB3aGVuIGBDT05GSUdfTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIGl0cyBzY29wZS4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHRvIHRoZSB3YXkgbWFza3MgYXJlIGdlbmVyYXRlZCBmb3Igb2ZmbG9hZGluZyBuZXRmaWx0ZXIgcGF5bG9hZCBtYXRjaGVzLiBTcGVjaWZpY2FsbHksIGl0IGFwcGVhcnMgdGhlIGhhbmRsaW5nIG9mIGByZW1haW5kZXJgIHdpdGhpbiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBoYXMgYmVlbiByZW1vdmVkLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlIGRpZmYsIHRoZSBvcmlnaW5hbCBpbXBsZW1lbnRhdGlvbiBpbmNsdWRlZCBhIHJhdGhlciBjb21wbGV4IGNhbGN1bGF0aW9uIGFuZCBtYW5pcHVsYXRpb24gb2YgYHJlbWFpbmRlcmAgYW5kIGByZW1haW5kZXJfbWFza2AsIGludm9sdmluZyBiaXR3aXNlIG9wZXJhdGlvbnMgYW5kIGJ5dGUgc3dhcHBpbmcgKGBodG9ubGApLiBUaGUgbmV3IGNvZGUgc2ltcGx5IHplcm9lcyBvdXQgdGhlIG1hc2ssIGFuZCBjb3BpZXMgaXQuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGxpa2VseSBzaW1wbGlmeWluZyB0aGUgbG9naWMsIGJ1dCBwb3RlbnRpYWxseSBpbXBhY3Rpbmcgb2ZmbG9hZCBiZWhhdmlvci4gR2l2ZW4gdGhlIGZ1bmN0aW9uJ3MgcmVzcG9uc2liaWxpdHksIHRoaXMgc2NyZWFtcyBwb3RlbnRpYWwgZm9yIGZ1enppbmcuIEFueSBjaGFuZ2UgdG8gdGhlc2Ugb2ZmbG9hZCBtYXNrIGNhbGN1bGF0aW9ucyBjb3VsZCBvcGVuIG5ldyBhdHRhY2sgYXZlbnVlcy5cblxuVGhlIGNyaXRpY2FsIHN5bWJvbHMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLiBXYWl0LCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBIb3dldmVyLCBzaW5jZSBpdCBpcyBjYWxsZWQgYnkgdGhlIG90aGVycywgaXQgc3RpbGwgbmVlZHMgdG8gYmUgcmV2aWV3ZWQsIGFuZCBmdXp6aW5nLiBNYXliZSBpdCdzIGlubGluZWQ/IEkgc2hvdWxkIGNoZWNrIHRoYXQuIExldCdzIHN0YXJ0IHdpdGggYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIGFuZCBtYXliZSBpbmNsdWRlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwYCBzaW5jZSBpdCB1c2VzIHRoZSBtYXNrLiBZZWFoLCB0aGUgY2hhbmdlIGlzIGRpcmVjdGx5IGluIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLCBzbyBJIHNob3VsZCBmb2N1cyBvbiB0aGF0IGZvciBub3cuXG5cbk5vdywgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgTkZfVEFCTEVTYCBpcyB0aGUgbWFpbiBvbmUsIGFzIGV4cGVjdGVkLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgb2ZmbG9hZC1yZWxhdGVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IEkgbWlnaHQgaGF2ZSBtaXNzZWQuIFRoYXQgbWlnaHQgcmV2ZWFsIHNvbWUgb3RoZXIgYnVpbGQtdGltZSBkZXBlbmRlbmNpZXMgb3IgZWRnZSBjYXNlcyB0aGF0IGNvdWxkIGFmZmVjdCBmdXp6aW5nIHRhcmdldHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NTEuNDY0MzA4MTczWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODg2OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDUzPWVuZGlmICMgTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ1NC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDU1OmNvbmZpZyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU2LVxcdHNlbGVjdCBORVRGSUxURVJfTkVUTElOS1xcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTQ3MT1pZiBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDcyOmNvbmZpZyBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NzMtXFx0ZGVwZW5kcyBvbiBJUFY2XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTo1MS41ODMxODMxMzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjc4NDY5MTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgaW4gdGhlIGZpcnN0IHBlcnNvbiwgYXMgaWYgdGhlc2UgYXJlIG15IHRob3VnaHRzLCBrZWVwaW5nIGluIG1pbmQgSSdtIGFuIGV4cGVydCBpbiBteSBmaWVsZDpcblxuKipEaWdnaW5nIGludG8gbmZfdGFibGVzIEhhcmR3YXJlIE9mZmxvYWQqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHBvc3NpYmlsaXRpZXMgaGVyZS4gSSdtIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggYG5mX3RhYmxlc2AgYW5kIEknbSBzdGFydGluZyB0byBjb25zaWRlciBob3cgaGFyZHdhcmUgb2ZmbG9hZCBjb3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgb3B0aW1pemVkLiBJIGtub3cgdGhlIGJhc2ljcywgdGhlIHRoZW9yeSwgYW5kIHRoZSBnZW5lcmFsIGNvbmNlcHRzLCBidXQgSSdtIHRyeWluZyB0byBnZXQgKnNwZWNpZmljKi4gSXMgdGhlcmUgYSBwYXJ0aWN1bGFyIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBhIHNwZWNpZmljIHN5bnRheCwgYSBkb2N1bWVudGVkIG1ldGhvZCwgYW55dGhpbmcgY29uY3JldGUgd2l0aGluIGBuZl90YWJsZXNgIHRoYXQgZGlyZWN0bHkgZW5hYmxlcyBvciBjb25maWd1cmVzIGhhcmR3YXJlIG9mZmxvYWQ/IEknbSBub3QganVzdCBsb29raW5nIGZvciBnZW5lcmFsIHBvaW50ZXJzOyBJIG5lZWQgdG8ga25vdyBpZiB0aGVyZSdzIGEgc3BlY2lmaWMga25vYiBJIGNhbiB0dXJuLCBhIHNwZWNpZmljIHBhcmFtZXRlciBJIGNhbiB0d2Vhay4gRG9lcyBgbmZfdGFibGVzYCBoYXZlIGFueSBleHBsaWNpdCBtZWNoYW5pc21zIHRvIGhhbmQgdGFza3Mgb3ZlciB0byBhIGRlZGljYXRlZCBvZmZsb2FkIGVuZ2luZSBvbiB0aGUgaGFyZHdhcmU/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBncmFudWxhciBkZXRhaWxzIHRvIHJlYWxseSBhc3Nlc3MgaXRzIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhYm91dCByZWFsLXdvcmxkIGltcGxlbWVudGF0aW9uLCBub3QganVzdCB0aGVvcmV0aWNhbCBwb3RlbnRpYWwuIEkgbmVlZCB0byBnZXQgYmV5b25kIHRoZSBhYnN0cmFjdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NTk4NywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjU0Ljg2MTY1NDI4NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQxOTgyNDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm9mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01MDQ9Y29uZmlnIE5GVF9GTE9XX09GRkxPQURcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLIFxcdTAwMjZcXHUwMDI2IE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA2OlxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBtb2R1bGVcXFwiXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNy1cXHRoZWxwXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwODpcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIFxcXCJmbG93X29mZmxvYWRcXFwiIGV4cHJlc3Npb24gdGhhdCB5b3UgY2FuIHVzZSB0b1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDktXFx0ICBjaG9vc2Ugd2hhdCBmbG93cyBhcmUgcGxhY2VkIGludG8gdGhlIGhhcmR3YXJlLlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTcyMT1jb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjUtXFx0aGVscFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjY6XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIGZvciB0aGUgZmxvdyB0YWJsZSBvZmZsb2FkIHN0YXRpc3RpY3NcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzI3LVxcdCAgdG8gYmUgc2hvd24gaW4gcHJvY2ZzIHVuZGVyIG5ldC9uZXRmaWx0ZXIvbmZfZmxvd3RhYmxlLlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTgxMT1jb25maWcgTkVURklMVEVSX1hUX1RBUkdFVF9DSEVDS1NVTVxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTgxOS1cXHQgIFNvbWUgb2xkIERIQ1AgY2xpZW50cyBkcm9wIHBhY2tldHMgYmVjYXVzZSB0aGV5IGFyZSBub3QgYXdhcmVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6ODIwOlxcdCAgdGhhdCB0aGUgY2hlY2tzdW0gd291bGQgbm9ybWFsbHkgYmUgb2ZmbG9hZGVkIHRvIGhhcmR3YXJlIGFuZFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy04MjEtXFx0ICB0aHVzIHNob3VsZCBiZSBjb25zaWRlcmVkIHZhbGlkLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo0OTo1NS4wMDM2NDQyODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5MTQyNzMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWx2aW5nIGludG8gdGhlIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIE15c3RlcnkqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgdmFyaWFibGUsIGFuZCBpdCdzIHBvcHBpbmcgdXAgaW4gYG5mdF9wYXlsb2FkLmNgLCB3aGljaCwgaWYgbWVtb3J5IHNlcnZlcywgaXMgbmVzdGxlZCByaWdodCBpbiB0aGUgY29yZSBvZiBgbmZfdGFibGVzYC4gVGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gY2xhcmlmeSBzb21ldGhpbmcgaGVyZTogaXMgaGFyZHdhcmUgb2ZmbG9hZCwgaW4gdGhlIGNvbnRleHQgb2YgYG5mX3RhYmxlc2AgYW5kIHRoaXMgc3BlY2lmaWMgcGF5bG9hZCBtb2R1bGUsIGVuYWJsZWQgYnkgZGVmYXVsdD8gT3IgaXMgdGhlcmUgc29tZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGZsYWcgb3IgbW9kdWxlIEkgbmVlZCB0byBiZSBsb29raW5nIGF0IHNlcGFyYXRlbHk/IEdvdHRhIGdldCB0aGUgY29udGV4dCByaWdodC4gSSdtIGdvaW5nIHRvIHJldmlzaXQgYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AgdG8gc2VlIGlmIEkgY2FuIGZpbmQgdGhlIGFuc3dlci4gTGV0J3Mgc2VlIGlmIHRoaXMgY29kZSBob2xkcyB0aGUga2V5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjE5LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NDk6NTguMDk1MDczMzA4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjA4NDA5NTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTI0Mz1zdGF0aWMgaW50IG5mdF9wYXlsb2FkX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNTgtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI1OTpzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNjAtXFx0XFx0XFx0XFx0ICAgICB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc2LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyNzc6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjc4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGV0aGhkciwgaF9zb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyODU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjg2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX2Rlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIEVUSF9BTEVOKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMjkzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTgtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mjk5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwMC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA2LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzA3OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMwOC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE0LVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fZW5jYXBzdWxhdGVkX3Byb3RvKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzE1OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMxNi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzIyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IHZsYW5fZXRoaGRyLCBoX3ZsYW5fVENJKSArIHNpemVvZihzdHJ1Y3Qgdmxhbl9oZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzI0LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzEtXFx0XFx0XFx0XFx0XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMzMjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzQ2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM0Ny1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM1NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzYzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNjQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzcxLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM3MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzczLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM4NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzg3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzkzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIHNhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzk0OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTUtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQwMi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBkYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQwMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDA0LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2NmhkciwgbmV4dGhkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQxMjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fdTgpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDEzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQyNjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbmgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MjctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzMtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM2LVxcdGNhc2UgaHRvbnMoRVRIX1BfSVBWNik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQzNzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNihjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzgtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ0Ny1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDU1LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NjAtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdGNwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDYxOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2Mi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDczLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NzQ6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ3NS1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBzb3VyY2UpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODI6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDgzLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODgtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgdWRwaGRyLCBkZXN0KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDg5OlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ5MC1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MDI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTAzLVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTA5LVxcdGNhc2UgSVBQUk9UT19UQ1A6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTEtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMi1cXHRjYXNlIElQUFJPVE9fVURQOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MTM6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTE0LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTIyOnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUyMy1cXHRcXHRcXHQgICAgICAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMwLVxcdGNhc2UgTkZUX1BBWUxPQURfTExfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzE6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9sbChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzItXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMy1cXHRjYXNlIE5GVF9QQVlMT0FEX05FVFdPUktfSEVBREVSOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MzQ6XFx0XFx0ZXJyID0gbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzUtXFx0XFx0YnJlYWs7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNi1cXHRjYXNlIE5GVF9QQVlMT0FEX1RSQU5TUE9SVF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3RoKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X3BheWxvYWRfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1MS1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTUyOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NTMtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYz01NTU9Y29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9wYXlsb2FkX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjU2MTpcXHQub2ZmbG9hZFxcdD0gbmZ0X3BheWxvYWRfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTYyLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjQ5OjU4LjIxNTkxOTcyNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDEwMzI1MjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk9mZmxvYWRpbmcgTkZUYWJsZXMgUnVsZXM6IEVudHJ5IFBvaW50IGFuZCBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGZ1bmN0aW9uLiBJdCBsb29rcyBsaWtlIHRoaXMgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciB0aGUgYC5vZmZsb2FkYCBvcGVyYXRpb24gd2l0aGluIHRoZSBgbmZ0X3BheWxvYWRfb3BzYCBhbmQgYG5mdF9wYXlsb2FkX2Zhc3Rfb3BzYCBzdHJ1Y3R1cmVzLiBTbywgYmFzaWNhbGx5LCB0aGlzIGlzIHdoYXQgZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBvZmZsb2FkaW5nIG5mdGFibGVzIHJ1bGVzLiBNYWtlcyBzZW5zZS5cblxuTm93LCBteSBpbW1lZGlhdGUgdGhvdWdodCBpczogaXMgdGhlcmUgYSBjb25maWd1cmF0aW9uIG9wdGlvbiwgb3Igc29tZSBraW5kIG9mIGVuYWJsZSBmbGFnLCB0aGF0IGNvbnRyb2xzIHRoaXMgb2ZmbG9hZGluZyBmZWF0dXJlPyBJJ20gZ29pbmcgdG8gd2FudCB0byB2ZXJpZnkgdGhlIGVuYWJsaW5nIG9yIGRpc2FibGluZyBiZWhhdmlvci4gSSdsbCBuZWVkIHRvIGdvIGRpZ2dpbmcgYXJvdW5kLiBNeSBndXQgdGVsbHMgbWUgSSBzaG91bGQgY2hlY2sgb3V0IGBuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmNgIOKAkyBvciBzb21ldGhpbmcgc2ltaWxhciwgb2YgY291cnNlLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvcmUgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IGFuZCBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9uIG1lY2hhbmlzbXMuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDA3OCwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjAxLjYyNjI0NjU2NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxOTk2NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9MjQzPXN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI1OC1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MjU5OnN0YXRpYyBib29sIG5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhzdHJ1Y3QgbmZ0X29mZmxvYWRfcmVnICpyZWcsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI2MC1cXHRcXHRcXHRcXHQgICAgIHUzMiBwcml2X2xlbiwgdTMyIGZpZWxkX2xlbilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzYtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI3NzpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfbGwoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yNzgtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgZXRoaGRyLCBoX3NvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI4NTpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yODYtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfZGVzdCk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjI5MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgRVRIX0FMRU4pKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0yOTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTI5OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBldGhoZHIsIGhfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzoyOTk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzAwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMDYtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMDc6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzA4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMTQtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9lbmNhcHN1bGF0ZWRfcHJvdG8pOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozMTU6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzE2LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjItXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3Qgdmxhbl9ldGhoZHIsIGhfdmxhbl9UQ0kpICsgc2l6ZW9mKHN0cnVjdCB2bGFuX2hkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjMyMzpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zMjQtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMS1cXHRcXHRcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IHZsYW5faGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzMyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX19iZTE2KSkpXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTMzMy1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ1LVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNDY6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzQ3LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5mdF9mbG93X3J1bGUgKmZsb3csXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzUzLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBzYWRkcik6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjM1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtMzU1LVxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2Mi1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcGhkciwgZGFkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozNjM6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM2NC1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzEtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6MzcyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zNzMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM4NS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6Mzg2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDYoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zODctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy0zOTMtXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgaXB2Nmhkciwgc2FkZHIpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzozOTQ6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTM5NS1cXHRcXHRcXHRcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDAyLVxcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGlwdjZoZHIsIGRhZGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDAzOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MDQtXFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQxMS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBpcHY2aGRyLCBuZXh0aGRyKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDEyOlxcdFxcdGlmICghbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrKHJlZywgcHJpdi1cXHUwMDNlbGVuLCBzaXplb2YoX191OCkpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MTMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDI2OnN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZF9uaChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQyNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzMy1cXHRjYXNlIGh0b25zKEVUSF9QX0lQKTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM0OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXAoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDM1LVxcdFxcdGJyZWFrO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00MzYtXFx0Y2FzZSBodG9ucyhFVEhfUF9JUFY2KTpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NDM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfaXA2KGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQzOC1cXHRcXHRicmVhaztcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NDUtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ0NjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDQ3LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ1My1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ1NDpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NTUtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ2MC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB0Y3BoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0NjE6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDYyLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00NzMtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ3NDpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDc1LVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4MS1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIHNvdXJjZSk6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjQ4MjpcXHRcXHRpZiAoIW5mdF9wYXlsb2FkX29mZmxvYWRfbWFzayhyZWcsIHByaXYtXFx1MDAzZWxlbiwgc2l6ZW9mKF9fYmUxNikpKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy00ODMtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTQ4OC1cXHRjYXNlIG9mZnNldG9mKHN0cnVjdCB1ZHBoZHIsIGRlc3QpOlxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo0ODk6XFx0XFx0aWYgKCFuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2socmVnLCBwcml2LVxcdTAwM2VsZW4sIHNpemVvZihfX2JlMTYpKSlcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNDkwLVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDEtXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUwMjpzdGF0aWMgaW50IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoc3RydWN0IG5mdF9vZmZsb2FkX2N0eCAqY3R4LFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDMtXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MDktXFx0Y2FzZSBJUFBST1RPX1RDUDpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTEwOlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGNwKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUxMS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTEyLVxcdGNhc2UgSVBQUk9UT19VRFA6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUxMzpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX3VkcChjdHgsIGZsb3csIHByaXYpO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MTQtXFx0XFx0YnJlYWs7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIxLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1MjI6c3RhdGljIGludCBuZnRfcGF5bG9hZF9vZmZsb2FkKHN0cnVjdCBuZnRfb2ZmbG9hZF9jdHggKmN0eCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTIzLVxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbmZ0X2Zsb3dfcnVsZSAqZmxvdyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01MzAtXFx0Y2FzZSBORlRfUEFZTE9BRF9MTF9IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzMTpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzMi1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTMzLVxcdGNhc2UgTkZUX1BBWUxPQURfTkVUV09SS19IRUFERVI6XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjUzNDpcXHRcXHRlcnIgPSBuZnRfcGF5bG9hZF9vZmZsb2FkX25oKGN0eCwgZmxvdywgcHJpdik7XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTUzNS1cXHRcXHRicmVhaztcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM2LVxcdGNhc2UgTkZUX1BBWUxPQURfVFJBTlNQT1JUX0hFQURFUjpcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTM3OlxcdFxcdGVyciA9IG5mdF9wYXlsb2FkX29mZmxvYWRfdGgoY3R4LCBmbG93LCBwcml2KTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTM4LVxcdFxcdGJyZWFrO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MDEuNzI0NDUxMjkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDQ3MDk5MDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIHJlYXNvbmluZzpcblxuKipPZmZsb2FkaW5nIERlZXAgRGl2ZSoqXG5cblJpZ2h0LCBzbyB3ZSdyZSB0YWxraW5nIGFib3V0IGAub2ZmbG9hZGAuIFRoYXQgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB3ZSdyZSBkZWFsaW5nIHdpdGggb2ZmbG9hZGluZyBydWxlcywgbWFrZXMgc2Vuc2UuIEJ1dCB0aGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGVyZSBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBzZXR0aW5nLCBhIHNwZWNpZmljIGtub2Igd2UgY2FuIHR3aWRkbGUsIHRoYXQgYWN0dWFsbHkgKmNvbnRyb2xzKiB0aGUgb2ZmbG9hZGluZyBiZWhhdmlvcj8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIHJ1bGVzIHRoZW1zZWx2ZXMgYW5kIHRoZSBvZmZsb2FkaW5nIHByb2Nlc3MuXG5cbkJlc3QgcGxhY2UgdG8gc3RhcnQsIGFzIGFsd2F5cywgaXMgZ29pbmcgdG8gYmUgdGhlIGNvZGUsIGFuZCBjb25zaWRlcmluZyB0aGlzIGlzIGFsbCBhYm91dCBOZXRmaWx0ZXIsIHNwZWNpZmljYWxseSBOZXRmaWx0ZXIgdGFibGVzLCBJIHNob3VsZCBoZWFkIHN0cmFpZ2h0IGZvciBgbmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNgLiBUaGF04oCZcyB3aGVyZSBJJ2xsIGZpbmQgdGhlIGltcGxlbWVudGF0aW9uIG9mIGAub2ZmbG9hZGAsIHNlZSBob3cgaXQncyBkZWZpbmVkIGFuZCBpbnZva2VkLCBhbmQgdGhhdCBzaG91bGQgY2xhcmlmeSBldmVyeXRoaW5nLiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyB0byB1bmRlcnN0YW5kIHRoaXMgYmV0dGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzU3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjA0Ljk2OTE2NDEyN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ1MDQ2MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwub2ZmbG9hZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NDA1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9iaXR3aXNlX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy00MTAtXFx0LmR1bXBcXHRcXHQ9IG5mdF9iaXR3aXNlX2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjQxMTpcXHQub2ZmbG9hZFxcdD0gbmZ0X2JpdHdpc2Vfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNDEyLX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmM9NTEzPWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2JpdHdpc2VfZmFzdF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9iaXR3aXNlLmMtNTE4LVxcdC5kdW1wXFx0XFx0PSBuZnRfYml0d2lzZV9mYXN0X2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfYml0d2lzZS5jOjUxOTpcXHQub2ZmbG9hZFxcdD0gbmZ0X2JpdHdpc2VfZmFzdF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2JpdHdpc2UuYy01MjAtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTE4Nz1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfY21wX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5Mi1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jOjE5MzpcXHQub2ZmbG9hZFxcdD0gbmZ0X2NtcF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTE5NC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM9Mjc4PWNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2NtcF9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTI4My1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcF9mYXN0X2R1bXAsXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmM6Mjg0OlxcdC5vZmZsb2FkXFx0PSBuZnRfY21wX2Zhc3Rfb2ZmbG9hZCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYy0yODUtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jPTM3MT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jbXAxNl9mYXN0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NtcC5jLTM3Ni1cXHQuZHVtcFxcdFxcdD0gbmZ0X2NtcDE2X2Zhc3RfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jbXAuYzozNzc6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9jbXAxNl9mYXN0X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfY21wLmMtMzc4LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmM9MzA3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9jb3VudGVyX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYy0zMTUtXFx0LmNsb25lXFx0XFx0PSBuZnRfY291bnRlcl9jbG9uZSxcXG5uZXQvbmV0ZmlsdGVyL25mdF9jb3VudGVyLmM6MzE2OlxcdC5vZmZsb2FkXFx0PSBuZnRfY291bnRlcl9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2NvdW50ZXIuYzozMTc6XFx0Lm9mZmxvYWRfc3RhdHNcXHQ9IG5mdF9jb3VudGVyX29mZmxvYWRfc3RhdHMsXFxubmV0L25ldGZpbHRlci9uZnRfY291bnRlci5jLTMxOC19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jPTc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9kdXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2R1cF9uZXRkZXYuYy04Mi1cXHQuZHVtcFxcdFxcdD0gbmZ0X2R1cF9uZXRkZXZfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9kdXBfbmV0ZGV2LmM6ODM6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9kdXBfbmV0ZGV2X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jOjg0OlxcdC5vZmZsb2FkX2FjdGlvblxcdD0gbmZ0X2R1cF9uZXRkZXZfb2ZmbG9hZF9hY3Rpb24sXFxubmV0L25ldGZpbHRlci9uZnRfZHVwX25ldGRldi5jLTg1LX07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9md2RfbmV0ZGV2LmM9MjU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9md2RfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0yNjMtXFx0LnZhbGlkYXRlXFx0PSBuZnRfZndkX3ZhbGlkYXRlLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYzoyNjQ6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfZndkX25ldGRldi5jOjI2NTpcXHQub2ZmbG9hZF9hY3Rpb25cXHQ9IG5mdF9md2RfbmV0ZGV2X29mZmxvYWRfYWN0aW9uLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Z3ZF9uZXRkZXYuYy0yNjYtfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jPTMyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfaW1tX29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2ltbWVkaWF0ZS5jLTMzNC1cXHQudmFsaWRhdGVcXHQ9IG5mdF9pbW1lZGlhdGVfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmM6MzM1OlxcdC5vZmZsb2FkXFx0PSBuZnRfaW1tZWRpYXRlX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfaW1tZWRpYXRlLmM6MzM2OlxcdC5vZmZsb2FkX2FjdGlvblxcdD0gbmZ0X2ltbWVkaWF0ZV9vZmZsb2FkX2FjdGlvbixcXG5uZXQvbmV0ZmlsdGVyL25mdF9pbW1lZGlhdGUuYy0zMzctfTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYz04MDE9c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X21ldGFfZ2V0X29wcyA9IHtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X21ldGEuYy04MDctXFx0LnZhbGlkYXRlXFx0PSBuZnRfbWV0YV9nZXRfdmFsaWRhdGUsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jOjgwODpcXHQub2ZmbG9hZFxcdD0gbmZ0X21ldGFfZ2V0X29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfbWV0YS5jLTgwOS19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG5mdF9leHByX29wcyBuZnRfcGF5bG9hZF9vcHMgPSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtNTUxLVxcdC5kdW1wXFx0XFx0PSBuZnRfcGF5bG9hZF9kdW1wLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYzo1NTI6XFx0Lm9mZmxvYWRcXHQ9IG5mdF9wYXlsb2FkX29mZmxvYWQsXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU1My19O1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTU1NT1jb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9wYXlsb2FkX2Zhc3Rfb3BzID0ge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTU2MC1cXHQuZHVtcFxcdFxcdD0gbmZ0X3BheWxvYWRfZHVtcCxcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6NTYxOlxcdC5vZmZsb2FkXFx0PSBuZnRfcGF5bG9hZF9vZmZsb2FkLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy01NjItfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MDUuMTE0MjE2NDE0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0MzY2NjE3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpczpcblxuKipJbnZlc3RpZ2F0aW5nIG5mX3RhYmxlcyBPZmZsb2FkaW5nIENhcGFiaWxpdGllcyoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG5mX3RhYmxlc2AgYW5kIGl0J3MgbG9va2luZyBsaWtlIG9mZmxvYWRpbmcgaXMgYSBrZXkgY29tcG9uZW50LCB3aGljaCBpcyBubyBzdXJwcmlzZSBnaXZlbiBpdHMgcGVyZm9ybWFuY2UgZ29hbHMuIEJ1dCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc3BlY2lmaWMgZmxhZ3Mgb3IgbW9kdWxlcyB0aGF0IGVuYWJsZSBpdC4gVGhlIGRvY3VtZW50YXRpb24gaXNuJ3QgYWx3YXlzIGNyeXN0YWwgY2xlYXIgb24gdGhpcy4gTXkgaW50dWl0aW9uIGlzIG51ZGdpbmcgbWUgdG93YXJkcyBhIGZldyBwb3NzaWJpbGl0aWVzOiBgTkZfVEFCTEVTX05FVERFVmAsIGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCBvciBwZXJoYXBzIGp1c3QgdGhlIHN0cmFpZ2h0Zm9yd2FyZCBgTkZfVEFCTEVTX09GRkxPQURgLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gbGVhbmluZyB0b3dhcmQgdGhlIGxhdHRlciBiZWluZyB0aGUgbW9yZSBkaXJlY3QgYXBwcm9hY2guIExldCBtZSBxdWlja2x5IGNoZWNrIHRoZSBrZXJuZWwgY29uZmlnIGZvciBgTkZfVEFCTEVTX09GRkxPQURgIG9yIGFueXRoaW5nIHJlc2VtYmxpbmcgaXQgdG8gY29uZmlybSBhbmQgZGV0ZXJtaW5lIHRoZSBjb3JyZWN0IHBhdGguIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZGVwZW5kZW5jeSBoZXJlIGZvciB0aGUgbmV4dCBzdGVwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTM3MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjA4LjU1MDg4MjE4NFoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA5MjkwMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZfVEFCTEVTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9MzY9Y29uZmlnIE5FVEZJTFRFUl9ORVRMSU5LX0hPT0tcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy0zOC1cXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9BRFZBTkNFRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzozOTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00MC1cXHRzZWxlY3QgTkVURklMVEVSX05FVExJTktcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NTM9ZW5kaWYgIyBORl9DT05OVFJBQ0tcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDU0LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NTU6Y29uZmlnIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy00NTYtXFx0c2VsZWN0IE5FVEZJTFRFUl9ORVRMSU5LXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDcwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzE6aWYgTkZfVEFCTEVTXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3Mjpjb25maWcgTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDczLVxcdGRlcGVuZHMgb24gSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0NzQ6XFx0c2VsZWN0IE5GX1RBQkxFU19JUFY0XFxubmV0L25ldGZpbHRlci9LY29uZmlnOjQ3NTpcXHRzZWxlY3QgTkZfVEFCTEVTX0lQVjZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc2LVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbWl4ZWQgSVB2NC9JUHY2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ3OS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NDgwOmNvbmZpZyBORl9UQUJMRVNfTkVUREVWXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTQ4MS1cXHRib29sIFxcXCJOZXRmaWx0ZXIgbmZfdGFibGVzIG5ldGRldiB0YWJsZXMgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01NTA9Y29uZmlnIE5GVF9OQVRcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTItXFx0c2VsZWN0IE5GX05BVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1NTM6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSVBWNCB8fCBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01NTQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmF0IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz01ODY9Y29uZmlnIE5GVF9SRUpFQ1RfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo1ODc6XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01ODgtXFx0ZGVmYXVsdCBORlRfUkVKRUNUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjA4PWNvbmZpZyBORlRfRklCX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjA5OlxcdGRlcGVuZHMgb24gTkZfVEFCTEVTX0lORVRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjEwLVxcdGRlcGVuZHMgb24gTkZUX0ZJQl9JUFY0XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjI1PWNvbmZpZyBORlRfU09DS0VUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjI3LVxcdHNlbGVjdCBORl9TT0NLRVRfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2Mjg6XFx0c2VsZWN0IE5GX1NPQ0tFVF9JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTYyOS1cXHRoZWxwXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NjQwPWNvbmZpZyBORlRfVFBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjQyLVxcdHNlbGVjdCBORl9ERUZSQUdfSVBWNFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NDM6XFx0c2VsZWN0IE5GX0RFRlJBR19JUFY2IGlmIE5GX1RBQkxFU19JUFY2XFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY0NC1cXHRzZWxlY3QgTkZfVFBST1hZX0lQVjRcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NjQ1OlxcdHNlbGVjdCBORl9UUFJPWFlfSVBWNiBpZiBORl9UQUJMRVNfSVBWNlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NDYtXFx0aGVscFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMTplbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9NzExPWNvbmZpZyBORl9GTE9XX1RBQkxFXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzE0LVxcdGRlcGVuZHMgb24gTkZfQ09OTlRSQUNLXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxNTpcXHRkZXBlbmRzIG9uIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTYtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDowOC42NDE4MTcyODNaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg0MzE2MTg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6XG5cbioqQXNzZXNzaW5nIEhhcmR3YXJlIE9mZmxvYWQgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIGJlZm9yZSBkaXZpbmcgdG9vIGRlZXAgaW50byB0aGlzLCBJIG5lZWQgdG8gbWFrZSBhIHF1aWNrIGluaXRpYWwgYXNzZXNzbWVudC4gTXkgZmlyc3QgdGhvdWdodCBpczogKkxldCdzIGNoZWNrIGlmIHRoZXJlIGlzIGhhcmR3YXJlIG9mZmxvYWQgY29uZmlnLiogSXQncyBhIGZ1bmRhbWVudGFsIHN0ZXAsIHJlYWxseS4gSSBuZWVkIHRvIGtub3cgaWYgd2UncmUgZXZlbiAqdXNpbmcqIGhhcmR3YXJlIGFjY2VsZXJhdGlvbiwgYXMgaXQgd2lsbCBmdW5kYW1lbnRhbGx5IGFsdGVyIGhvdyBJIGFwcHJvYWNoIHRoZSByZXN0IG9mIHRoZSBhbmFseXNpcy4gSXQncyB0aGUgZ3JvdW5kd29yazsga25vd2luZyB3aGV0aGVyIG9yIG5vdCBoYXJkd2FyZSBvZmZsb2FkIGlzIGVuYWJsZWQgd2lsbCBpbmZsdWVuY2UgZXZlcnl0aGluZyB0aGF0IGNvbWVzIG5leHQuIEVzc2VudGlhbGx5LCBJJ20gc2V0dGluZyB0aGUgYmFzZWxpbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NzU0LCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTEuNDg1MDAzMzQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjI1MzkyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJIV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYz0zMDI9c3RhdGljIGludCBjdF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnMsIHZvaWQgKnYpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzYzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjQ6XFx0aWYgKHRlc3RfYml0KElQU19IV19PRkZMT0FEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3N0YW5kYWxvbmUuYzozNjU6XFx0XFx0c2VxX3B1dHMocywgXFxcIltIV19PRkZMT0FEXSBcXFwiKTtcXG5uZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19zdGFuZGFsb25lLmMtMzY2LVxcdGVsc2UgaWYgKHRlc3RfYml0KElQU19PRkZMT0FEX0JJVCwgXFx1MDAyNmN0LVxcdTAwM2VzdGF0dXMpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYz05NzM9c3RhdGljIHZvaWQgZmxvd19vZmZsb2FkX3dvcmtfYWRkKHN0cnVjdCBmbG93X29mZmxvYWRfd29yayAqb2ZmbG9hZClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTg1LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmM6OTg2OlxcdHNldF9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05ODctXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jPTk5Mj1zdGF0aWMgdm9pZCBmbG93X29mZmxvYWRfd29ya19kZWwoc3RydWN0IGZsb3dfb2ZmbG9hZF93b3JrICpvZmZsb2FkKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9vZmZsb2FkLmMtOTkzLXtcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfb2ZmbG9hZC5jOjk5NDpcXHRjbGVhcl9iaXQoSVBTX0hXX09GRkxPQURfQklULCBcXHUwMDI2b2ZmbG9hZC1cXHUwMDNlZmxvdy1cXHUwMDNlY3QtXFx1MDAzZXN0YXR1cyk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX29mZmxvYWQuYy05OTUtXFx0Zmxvd19vZmZsb2FkX3R1cGxlX2RlbChvZmZsb2FkLCBGTE9XX09GRkxPQURfRElSX09SSUdJTkFMKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfbmF0X2NvcmUuYz0zMzI9bmZfbmF0X3VzZWRfdHVwbGVfaGFyZGVyKGNvbnN0IHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGUgKnR1cGxlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jLTMzNS17XFxubmV0L25ldGZpbHRlci9uZl9uYXRfY29yZS5jOjMzNjpcXHRzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBmbGFnc19vZmZsb2FkID0gSVBTX09GRkxPQUQgfCBJUFNfSFdfT0ZGTE9BRDtcXG5uZXQvbmV0ZmlsdGVyL25mX25hdF9jb3JlLmMtMzM3LVxcdHN0cnVjdCBuZl9jb25udHJhY2tfdHVwbGVfaGFzaCAqdGhhc2g7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlxcdGlmIChjdHgtXFx1MDAzZWNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzYxLVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXFx1MDAzZW5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVxcdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEyLVxcdGJhc2VjaGFpbi1cXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTM6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNC1cXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc0MD1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyODQ9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXFx0XFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ190eXBlKSA9PSBORlRfTVNHX0RFU1RST1lDSEFJTiB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XFx0XFx0ICAgIGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTYtXFx0XFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9OTA5Nj1zdGF0aWMgaW50IG5mdF9mbG93dGFibGVfdXBkYXRlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTE0MS1cXHRcXHR9XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6OTE0MjpcXHRcXHRpZiAoKGZsb3d0YWJsZS1cXHUwMDNlZGF0YS5mbGFncyBcXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkgXlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjkxNDM6XFx0XFx0ICAgIChmbGFncyBcXHUwMDI2IE5GVF9GTE9XVEFCTEVfSFdfT0ZGTE9BRCkpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy05MTQ0LVxcdFxcdFxcdGVyciA9IC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NzY9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTQ6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1NS1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTEyNTk9c3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9UUkFOU19BQk9SVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNDc6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0OC1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTQtXFx0XFx0XFx0bmZ0X3J1bGVfZXhwcl9hY3RpdmF0ZShcXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1OlxcdFxcdFxcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXFx0XFx0XFx0XFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzUtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDItXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0MzpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUwLVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NTE6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVxcdFxcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cXHRcXHRcXHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVxcdFxcdGNhc2UgTkZUX01TR19ERUxDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVxcdFxcdGNhc2UgTkZUX01TR19ORVdSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQxLVxcdFxcdFxcdGlmICghbmZ0X2lzX2Jhc2VfY2hhaW4oY2hhaW4pIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcXHRcXHRcXHQgICAgIShjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTEuNTgxMjYzMDc0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNDgwMDk4MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkhhcmR3YXJlIE9mZmxvYWQgYW5kIE5ldGZpbHRlciBOdWFuY2VzKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgTkZfVEFCTEVTYCBzdHVmZiBhbmQgdHJ5aW5nIHRvIG5haWwgZG93biBob3cgaGFyZHdhcmUgb2ZmbG9hZCBmaXRzIGluLiBJdCBzZWVtcyBsaWtlIHRoZSBhcmNoaXRlY3R1cmUgaGFzIGV2b2x2ZWQsIGFuZCB0aGVyZSBpc24ndCBhIGRlZGljYXRlZCBjb25maWcgb3B0aW9uIHNwZWNpZmljYWxseSBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCwgd2hpY2ggaXMgaW50ZXJlc3RpbmcuIEknbSB1c2VkIHRvIG1vcmUgZXhwbGljaXQgY29udHJvbHMsIHNvIHRoaXMgY291bGQgbWVhbiBpdCdzIGVpdGhlciB0aWdodGx5IGludGVncmF0ZWQsIG9yIHBvc3NpYmx5IGVuYWJsZWQgYnkgc29tZXRoaW5nIGVsc2UuXG5cbk9rYXksIHNvIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBhbmQgd2hlbiB0aGUgbW9kdWxlIGBuZl90YWJsZXNfb2ZmbG9hZC5jYCBpcyBhY3R1YWxseSBidWlsdC4gSSBiZXR0ZXIgY2hlY2sgdGhlIE5ldGZpbHRlciBgTWFrZWZpbGVgIHRvIHNlZSB1bmRlciB3aGF0IGNvbmRpdGlvbnMgaXQgaXMgZW5hYmxlZC4gVGhhdCdzIHRoZSBsb2dpY2FsIG5leHQgc3RlcCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMgYW5kIGJ1aWxkIHByb2Nlc3MgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUuIEkga25vdyB0aGF0IHVzdWFsbHkgdGhlIGRlcGVuZGVuY2llcyBhcmUgcmlnaHQgdGhlcmUgaW4gdGhlIE1ha2VmaWxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIxNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjE1LjkyOTI3NjM3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODUwMzcxNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZfdGFibGVzX29mZmxvYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTg3PW5mX3RhYmxlcy1vYmpzIDo9IG5mX3RhYmxlc19jb3JlLm8gbmZfdGFibGVzX2FwaS5vIG5mdF9jaGFpbl9maWx0ZXIubyBcXFxcXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkxLVxcdFxcdCAgbmZ0X2NvdW50ZXIubyBuZnRfb2JqcmVmLm8gbmZ0X2lubmVyLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6OTI6XFx0XFx0ICBuZnRfY2hhaW5fcm91dGUubyBuZl90YWJsZXNfb2ZmbG9hZC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTkzLVxcdFxcdCAgbmZ0X3NldF9oYXNoLm8gbmZ0X3NldF9iaXRtYXAubyBuZnRfc2V0X3JidHJlZS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MTYuMDE0MzMwNTk0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc3MjUwODAwMDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHJpZ2h0IG9mZiB0aGUgYmF0LCBpdCdzIHByZXR0eSBjbGVhciBgbmZfdGFibGVzX29mZmxvYWQub2AgaXMgcGFydCBvZiBgbmZfdGFibGVzLW9ianNgLCBtZWFuaW5nIGBORl9UQUJMRVNgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb24gaGVyZS4gQXJlIHRoZXJlIGFueSAqb3RoZXIqIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byB3b3JyeSBhYm91dD8gVGhhdCdzIHRoZSBmaXJzdCB0aGluZyBJJ20gY2hlY2tpbmcuXG5cblRoZSBwYXRjaCBtb2RpZmllcyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCB3aXRoaW4gYG5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuY2AuIFRoaXMgaXMgY2FsbGVkIGJ5IHNldmVyYWwgb3RoZXIgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLCBhbGwgb2Ygd2hpY2ggZmVlZCBpbnRvIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCBpdHNlbGYuIFNvLCBvcmlnaW5hbGx5LCBJIHRob3VnaHQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIHRob3NlIGRvd25zdHJlYW0gZnVuY3Rpb25zIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC5cblxuSG9sZCBvbiwgdGhvdWdoLiBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKi4gVGhhdCByYWlzZXMgYSBmbGFnLiBJdCBtaWdodCBiZSBpbmxpbmVkLiBTbywgYWx0aG91Z2ggaXQncyB0aGUgb25lIGJlaW5nIG1vZGlmaWVkLCBJIG5lZWQgdG8gdGFrZSB0aGF0IGludG8gYWNjb3VudC4gRm9yIHRoYXQgcmVhc29uLCBJJ20gZ29pbmcgdG8gaW5jbHVkZSBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgYW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGluIHRoZSBmb2N1cyBzeW1ib2xzLiBJIHdpbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2xsYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfaXBgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcDZgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF90Y3BgLCBhbmQgYG5mdF9wYXlsb2FkX29mZmxvYWRfdWRwYCB0byB0aGUgbGlzdC4gSSdtIGdvaW5nIHRvIGxpc3QgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBmb3Igbm93LlxuXG5UaGUgcmVhc29uaW5nIGhlcmUgaXMgdGhlIHBhdGNoIGFsdGVycyBob3cgdGhlIG1hc2sgaXMgZ2VuZXJhdGVkIGZvciBuZXRmaWx0ZXIgcGF5bG9hZCBvZmZsb2FkaW5nLiBUaGlzIGNhbiBiZSB0cmlnZ2VyZWQgdGhyb3VnaCBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gKndpdGgqIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gVGhlcmVmb3JlLCBmdXp6aW5nIHNob3VsZCBzcGVjaWZpY2FsbHkgdGFyZ2V0IHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBgbmZ0X3BheWxvYWQuY2AuXG5cbk9rYXksIGJhY2sgdG8gY29uZmlndXJhdGlvbnMuIENsZWFybHksIGBORl9UQUJMRVNgIGlzIGltcG9ydGFudC4gQnV0IGFyZSB0aGVyZSAqc3BlY2lmaWMqIGNvbmZpZ3MgcmVsYXRlZCB0byBvZmZsb2FkaW5nPyBXaGlsZSBgTkZfRkxPV19UQUJMRWAgYW5kIGBORlRfRkxPV19PRkZMT0FEYCBjb3VsZCBiZSByZWxhdGVkLCB0aGlzIHBhcnRpY3VsYXIgb2ZmbG9hZCBhZmZlY3RzIGBuZnRfcGF5bG9hZGAsIHdoaWNoIGlzIHBhcnQgb2YgdGhlIGBuZnRfcGF5bG9hZF9vcHMub2ZmbG9hZGAgc3RydWN0dXJlLCBhbmQgaXQgaXMgdXNlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gTGV0IG1lIGNoZWNrIGlmIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgaGFzIGFueSAqc3BlY2lmaWMqIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIHJlY2FsbCBzZWVpbmcgYE5GVF9DSEFJTl9IV19PRkZMT0FEYCBtZW50aW9uZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjYwLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTgwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjIzLjczOTQxMzQxNloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQwOTA3MDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9DSEFJTl9IV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc1MD1zdGF0aWMgaW50IG5mdF9kZWxydWxlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjA6XFx0aWYgKGN0eC1cXHUwMDNlY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cXHUwMDNlbmV0LCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzUtXFx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTE9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXFx0YmFzZWNoYWluLVxcdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cXHRcXHRpZiAoTkZOTF9NU0dfVFlQRShpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzMzMTpcXHRcXHQgICAgY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cXHRcXHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDU9c3RhdGljIGludCBuZl90YWJsZXNfbmV3cnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDY0OlxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKG5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgTkZUX01TR19ORVdSVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgTkZUX1RSQU5TX0FCT1JUKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cXHRcXHRcXHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFxcdTAwMjZjdHgsIG5mdF90cmFuc19ydWxlKHRyYW5zKSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTUxNj1zdGF0aWMgdm9pZCBuZnRfZmxvd19ydWxlX29mZmxvYWRfYWJvcnQoc3RydWN0IG5ldCAqbmV0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUyNy1cXHRcXHRjYXNlIE5GVF9NU0dfTkVXQ0hBSU46XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUyODpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjktXFx0XFx0XFx0ICAgIG5mdF90cmFuc19jaGFpbl91cGRhdGUodHJhbnMpKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMQ0hBSU46XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjUzNjpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTM3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0Mi1cXHRcXHRjYXNlIE5GVF9NU0dfTkVXUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTQzOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU0NC1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTAtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTFJVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU1MTpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NTItXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9NTY2PWludCBuZnRfZmxvd19ydWxlX29mZmxvYWRfY29tbWl0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NzgtXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Nzk6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTgwLVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODctXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1ODg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTUtXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU5NjpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01OTctXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjA5LVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo2MTA6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjExLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTYyOD1zdGF0aWMgc3RydWN0IG5mdF9jaGFpbiAqX19uZnRfb2ZmbG9hZF9nZXRfY2hhaW4oY29uc3Qgc3RydWN0IG5mdGFibGVzX3Blcm5ldCAqbmZ0X25ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy02NDEtXFx0XFx0XFx0aWYgKCFuZnRfaXNfYmFzZV9jaGFpbihjaGFpbikgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjQyOlxcdFxcdFxcdCAgICAhKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQzLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDoyMy44ODAzMjU1NjNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODE1NTUwMTc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOZXRmaWx0ZXIgUGF5bG9hZCBPZmZsb2FkIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHVzZWQgaW4gYG5mX3RhYmxlc19hcGkuY2AuIE15IGluaXRpYWwgcXVlc3Rpb24gaXMgaWYgdGhlcmUncyBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBvcHRpb24gcmVsYXRlZCB0byBgbmZfdGFibGVzX29mZmxvYWQub2AuIExldCBtZSBjaGVjay4uLiBBaCwgcmlnaHQsIGluIHRoZSBgbmV0L25ldGZpbHRlci9NYWtlZmlsZWAgaXQncyBpbmNsdWRlZCBpbiB0aGUgb2JqZWN0IGxpc3QgZm9yIGBuZl90YWJsZXMtb2Jqc2AuIFRoYXQgbWVhbnMgYG5mX3RhYmxlc19vZmZsb2FkLm9gIGlzIGFsd2F5cyBjb21waWxlZCB3aGVuZXZlciBgTkZfVEFCTEVTYCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGBORl9UQUJMRVNgIGl0c2VsZiBzaG91bGQgYmUgc3VmZmljaWVudCB0byBlbmFibGUgaXQuXG5cbk5vdywgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBzb21ldGhpbmcgY3J1Y2lhbDogaXMgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AgYSBzdGF0aWMgdmFyaWFibGU/IFllcywgaXQgaXMgc3RhdGljLiBPa2F5LCBjYW4gc3l6a2FsbGVyIGZ1enogc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCBpdCBjYW4sIGFzIGxvbmcgYXMgdGhleSBhcmUgaW4gdGhlIHN5bWJvbCB0YWJsZSAodW5sZXNzIHRoZXkgYXJlIGNvbXBsZXRlbHkgaW5saW5lZCwgd2hpY2ggaXMgdW5saWtlbHkgaW4gdGhpcyBjYXNlKS4gVG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIGxpc3QgKmJvdGgqIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAgaW4gYEZvY3VzU3ltYm9sc2AuXG5cbk9rYXksIGxldCdzIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOiB0cnVlKiogLSBUaGUgcGF0Y2ggY2xlYXJseSBpbXBhY3RzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgbG9naWMgaXMgYWNjZXNzaWJsZSB0aHJvdWdoIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiwgcGFydGljdWxhcmx5IHdoZW4gaGFyZHdhcmUgb2ZmbG9hZCBpcyBlbmFibGVkLiBUaGVyZWZvcmUsIGZ1enppbmcgdGhlIG9mZmxvYWQgZnVuY3Rpb25zLCBlc3BlY2lhbGx5IHdpdGhpbiBgbmZ0X3BheWxvYWQuY2AsIGlzIHdhcnJhbnRlZC5cbiogICAqKkZvY3VzU3ltYm9sczogXFxbXCJuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tcIiwgXCJuZnRfcGF5bG9hZF9vZmZsb2FkXCJcXF0qKiAtIFRoZXNlIHN5bWJvbHMgYXJlIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBtb2RpZmllZCBsb2dpYy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6IFxcW1wiTkZfVEFCTEVTXCJcXF0qKiAtIEVuYWJsaW5nIGBORl9UQUJMRVNgIGlzIHN1ZmZpY2llbnQgdG8gYnVpbGQgYW5kIGVuYWJsZSB0aGUgcmVsZXZhbnQgZnVuY3Rpb25hbGl0eS5cblxuT25lIG1vcmUgdGhpbmcuLi4gSXMgYE5GX1RBQkxFU19ORVRERVZgIGEgbmVjZXNzYXJ5IGNvbmRpdGlvbiBmb3IgaGFyZHdhcmUgb2ZmbG9hZD8gSSdsbCBjaGVjayBgbmZ0X2NoYWluX3BhcnNlX25ldGRldmAgd2l0aGluIGBuZl90YWJsZXNfYXBpLmNgLlxuXG5gYGBjXG5zdGF0aWMgaW50IG5mdF9jaGFpbl9wYXJzZV9uZXRkZXYoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuLi4uXG5cdGlmIChmbGFncyBcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXHUwMDI2XHUwMDI2XG5cdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXG5gYGBcblxuSXQgbG9va3MgbGlrZSBgTkZUX0NIQUlOX0hXX09GRkxPQURgIGlzIHByaW1hcmlseSB1c2VkIHdpdGggY2hhaW5zIGFzc29jaWF0ZWQgd2l0aCB0aGUgbmV0ZGV2IGZhbWlseS4gTm93LCBsZXQncyBhbHNvIGNoZWNrIGBuZl90YWJsZXNfYWRkY2hhaW5gLlxuXG5gYGBjXG5cdFx0aWYgKGZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcblx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5BaCwgaXQgc2VlbXMgdGhhdCBpZiBpdCdzICpub3QqIGEgbmV0ZGV2IGNoYWluLCBpdCByZXR1cm5zIGAtRU9QTk9UU1VQUGAuIFRoYXQncyBpbXBvcnRhbnQuIFRoaXMgbWVhbnMgaGFyZHdhcmUgb2ZmbG9hZCBpcyBtb3JlIHRpZ2h0bHkgY291cGxlZCB0byB0aGUgbmV0ZGV2IGZhbWlseSB0aGFuIEkgaW5pdGlhbGx5IHRob3VnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0Mzc3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjMyLjAzNTgyOTY1NloiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxODAwMzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GVF9DSEFJTl9IV19PRkZMT0FEXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTc1MD1zdGF0aWMgaW50IG5mdF9kZWxydWxlKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfcnVsZSAqcnVsZSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTc1OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo3NjA6XFx0aWYgKGN0eC1cXHUwMDNlY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NjEtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKGN0eC1cXHUwMDNlbmV0LCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI1MTE9c3RhdGljIGludCBuZnRfY2hhaW5fcGFyc2VfbmV0ZGV2KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjUzNDpcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI1MzUtXFx0ICAgIGxpc3RfZW1wdHkoaG9va19saXN0KSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTI2OTE9c3RhdGljIGludCBuZnRfYmFzZWNoYWluX2luaXQoc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4sIHU4IGZhbWlseSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MTItXFx0YmFzZWNoYWluLVxcdTAwM2Vwb2xpY3kgPSBORl9BQ0NFUFQ7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MjcxMzpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE0LVxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNzQwPXN0YXRpYyBpbnQgbmZfdGFibGVzX2FkZGNoYWluKHN0cnVjdCBuZnRfY3R4ICpjdHgsIHU4IGZhbWlseSwgdTggcG9saWN5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjc5Ni1cXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzk3OlxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTgtXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzI4ND1zdGF0aWMgaW50IG5mX3RhYmxlc19kZWxjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMC1cXHRcXHRpZiAoTkZOTF9NU0dfVFlQRShpbmZvLVxcdTAwM2VubGgtXFx1MDAzZW5sbXNnX3R5cGUpID09IE5GVF9NU0dfREVTVFJPWUNIQUlOIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MzMzMTpcXHRcXHQgICAgY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzMzMi1cXHRcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0zNzYzPXN0YXRpYyBpbnQgbmZfdGFibGVzX2ZpbGxfcnVsZV9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTQtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mzc5NTpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzc5Ni1cXHRcXHRuZnRfZmxvd19ydWxlX3N0YXRzKGNoYWluLCBydWxlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTQzMDU9c3RhdGljIGludCBuZl90YWJsZXNfbmV3cnVsZShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNDQ2My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo0NDY0OlxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjUtXFx0XFx0ZmxvdyA9IG5mdF9mbG93X3J1bGVfY3JlYXRlKG5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMDg3Nj1zdGF0aWMgaW50IG5mX3RhYmxlc19jb21taXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNDAtXFx0XFx0XFx0XFx0XFx0ICAgICAgTkZUX01TR19ORVdSVUxFKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA0MTpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQyLVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1My1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTA1NDpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDU1LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMTI1OT1zdGF0aWMgaW50IF9fbmZfdGFibGVzX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCwgZW51bSBuZm5sX2Fib3J0X2FjdGlvbiBhY3Rpb24pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0Ni1cXHRcXHRcXHRcXHRcXHRcXHQgTkZUX1RSQU5TX0FCT1JUKTtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoxMTM0NzpcXHRcXHRcXHRpZiAobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMzQ4LVxcdFxcdFxcdFxcdG5mdF9mbG93X3J1bGVfZGVzdHJveShuZnRfdHJhbnNfZmxvd19ydWxlKHRyYW5zKSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1NC1cXHRcXHRcXHRuZnRfcnVsZV9leHByX2FjdGl2YXRlKFxcdTAwMjZjdHgsIG5mdF90cmFuc19ydWxlKHRyYW5zKSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNTU6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM1Ni1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozMi4xMzc2MzU0MjNaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk5NDE4NDcyOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gbmZfdGFibGVzX2FkZGNoYWluKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBuZl90YWJsZXNfYWRkY2hhaW5gLiBUaGlzIGZ1bmN0aW9uIGlzIGNyaXRpY2FsIGluIHRoZSBOZXRmaWx0ZXIgZnJhbWV3b3JrLCBzbyBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgZW52aXJvbm1lbnQgaXMgcGFyYW1vdW50LiBJJ20gZ29pbmcgdG8gcXVpY2tseSByZXZpZXcgaXRzIHN1cnJvdW5kaW5nIGNvZGUsIGNoZWNraW5nIHdoZXJlIGl0J3MgY2FsbGVkIGFuZCB3aGF0IGRhdGEgc3RydWN0dXJlcyBpdCBpbnRlcmFjdHMgd2l0aC4gSSBuZWVkIHRvIHNlZSBleGFjdGx5IGhvdyBjaGFpbnMgYXJlIGJlaW5nIGFkZGVkIHdpdGhpbiB0aGUgYG5mX3RhYmxlc2Agc3lzdGVtLCBtYWtpbmcgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIGNvcmUgTmV0ZmlsdGVyIGluZnJhc3RydWN0dXJlLiBJJ2xsIGZvY3VzIG9uIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIGxvY2tpbmcgbWVjaGFuaXNtcywgYW5kIHRoZSBvdmVyYWxsIGRhdGEgZmxvdy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBiYXNlIHRvIHByb2NlZWQgd2l0aCBmdXJ0aGVyIGFuYWx5c2lzIG9yIGRlYnVnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjcyMDMsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozNS4xMzE4MjMwMTJaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0ODc5MDM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl90YWJsZXNfYWRkY2hhaW5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjczOD1zdGF0aWMgdTY0IGNoYWluX2lkO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3MzktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc0MDpzdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzQxLVxcdFxcdFxcdCAgICAgIHUzMiBmbGFncywgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MzEwMj1zdGF0aWMgaW50IG5mX3RhYmxlc19uZXdjaGFpbihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmZubF9pbmZvICppbmZvLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMzE5OS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzozMjAwOlxcdHJldHVybiBuZl90YWJsZXNfYWRkY2hhaW4oXFx1MDAyNmN0eCwgZmFtaWx5LCBwb2xpY3ksIGZsYWdzLCBleHRhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMyMDEtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozNS41ODA2MjEyNzNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzkxMjk1MDMyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgYnJlYWtkb3duIG9mIG15IHRob3VnaHQgcHJvY2VzcywgZm9jdXNpbmcgb24gdGhhdCBzbmlwcGV0OlxuXG4qKkFuYWx5emluZyB0aGUgYG5mX3RhYmxlc19hZGRjaGFpbmAgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIGBuZl90YWJsZXNfYWRkY2hhaW5gLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjc5Ny4gVGhpcyBmdW5jdGlvbiBpcywgb2YgY291cnNlLCBjcml0aWNhbCBmb3IgYWRkaW5nIG5ldyBjaGFpbnMgd2l0aGluIHRoZSBOZXRmaWx0ZXIgdGFibGUgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBjb2RlIGltbWVkaWF0ZWx5IGNhdWdodCBteSBleWUgd2l0aCB0aGlzIGNvbmRpdGlvbmFsIGNoZWNrOlxuXG5gYGBjXG5cdFx0aWYgKGZsYWdzIFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcblx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgXCJBaGEhIEhhcmR3YXJlIG9mZmxvYWQgaXMgZXhwbGljaXRseSBiZWluZyBibG9ja2VkIGZvciBjaGFpbiBjcmVhdGlvbi5cIiBUaGF0IGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgZmxhZyBpcyBpbXBvcnRhbnQsIGFuZCB0aGUgcmV0dXJuIG9mIGAtRU9QTk9UU1VQUGAgaW5kaWNhdGVzIHRoYXQgdGhlIGZlYXR1cmUgaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQg4oCTIGFkZGluZyB0aGUgY2hhaW4uIFRoaXMgc3VnZ2VzdHMgdGhlcmUgYXJlIHBvdGVudGlhbCBsaW1pdGF0aW9ucyBvciBjb25zaWRlcmF0aW9ucyB3aGVuIGNvbWJpbmluZyBjaGFpbiBjcmVhdGlvbiBhbmQgaGFyZHdhcmUgb2ZmbG9hZCB3aXRoaW4gTmV0ZmlsdGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyByZXN0cmljdGlvbiBleGlzdHMuIEl0IGNvdWxkIGJlIGR1ZSB0byBhIHZhcmlldHkgb2YgcmVhc29ucywgbGlrZSBoYXJkd2FyZSBjb21wYXRpYmlsaXR5IGlzc3VlcywgY29tcGxleGl0aWVzIGluIG9mZmxvYWRpbmcgY2hhaW4gbWFuYWdlbWVudCwgb3IgcG90ZW50aWFsIHNlY3VyaXR5IGNvbmNlcm5zLiBJJ2QgbmVlZCB0byBjb25zaWRlciB0aGUgYnJvYWRlciBjb250ZXh0IG9mIHRoZSBzeXN0ZW0sIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlLCBhbmQgaG93IG9mZmxvYWRpbmcgaW50ZXJhY3RzIHdpdGggdGhlIG92ZXJhbGwgTmV0ZmlsdGVyIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBJIHdvdWxkIG5lZWQgdG8gZmluZCBvdXQgd2hlcmUgdGhlIGBmbGFnc2AgYXJlIHNldCBmb3IgZnVydGhlciBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2ODgsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDozOS40OTM1NzU0OTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTE5MzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI3ODAsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI3ODA6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIFBUUl9FUlJfUENQVShzdGF0cyk7XFxuMjc4MTpcXHRcXHRcXHRcXHR9XFxuMjc4MjpcXHRcXHRcXHRcXHRyY3VfYXNzaWduX3BvaW50ZXIoYmFzZWNoYWluLVxcdTAwM2VzdGF0cywgc3RhdHMpO1xcbjI3ODM6XFx0XFx0XFx0fVxcbjI3ODQ6XFx0XFxuMjc4NTpcXHRcXHRcXHRlcnIgPSBuZnRfYmFzZWNoYWluX2luaXQoYmFzZWNoYWluLCBmYW1pbHksIFxcdTAwMjZob29rLCBmbGFncyk7XFxuMjc4NjpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbjI3ODc6XFx0XFx0XFx0XFx0bmZ0X2NoYWluX3JlbGVhc2VfaG9vayhcXHUwMDI2aG9vayk7XFxuMjc4ODpcXHRcXHRcXHRcXHRrZnJlZShiYXNlY2hhaW4pO1xcbjI3ODk6XFx0XFx0XFx0XFx0ZnJlZV9wZXJjcHUoc3RhdHMpO1xcbjI3OTA6XFx0XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4yNzkxOlxcdFxcdFxcdH1cXG4yNzkyOlxcdFxcdFxcdGlmIChzdGF0cylcXG4yNzkzOlxcdFxcdFxcdFxcdHN0YXRpY19icmFuY2hfaW5jKFxcdTAwMjZuZnRfY291bnRlcnNfZW5hYmxlZCk7XFxuMjc5NDpcXHRcXHR9IGVsc2Uge1xcbjI3OTU6XFx0XFx0XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0JBU0UpXFxuMjc5NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4yNzk3OlxcdFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbjI3OTg6XFx0XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRcXHRjaGFpbiA9IGt6YWxsb2Nfb2JqKCpjaGFpbiwgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4yODAxOlxcdFxcdFxcdGlmIChjaGFpbiA9PSBOVUxMKVxcbjI4MDI6XFx0XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjgwMzpcXHRcXG4yODA0OlxcdFxcdFxcdGNoYWluLVxcdTAwM2VmbGFncyA9IGZsYWdzO1xcbjI4MDU6XFx0XFx0fVxcbjI4MDY6XFx0XFx0Y3R4LVxcdTAwM2VjaGFpbiA9IGNoYWluO1xcbjI4MDc6XFx0XFxuMjgwODpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2Y2hhaW4tXFx1MDAzZXJ1bGVzKTtcXG4yODA5OlxcdFxcdGNoYWluLVxcdTAwM2VoYW5kbGUgPSBuZl90YWJsZXNfYWxsb2NfaGFuZGxlKHRhYmxlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6MzkuNDk0MDk4MTAzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTYwMjcxMTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gTkZUIEhhcmR3YXJlIE9mZmxvYWRpbmcqKlxuXG5SaWdodCwgc28gaXQgbG9va3MgbGlrZSB0aGlzIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGAgZmVhdHVyZSwgdGhhdCdzIGV4Y2x1c2l2ZWx5IGZvciBiYXNlIGNoYWlucy4gSSB2YWd1ZWx5IHJlY2FsbCB0aGF0LiBBbmQgaXQncyBgbmZ0X2Jhc2VjaGFpbl9pbml0YCB0aGF0IHRha2VzIGNhcmUgb2YgdGhlIGluaXRpYWxpemF0aW9uLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBzcGVjaWZpYyBjb25maWd1cmF0aW9uLiBIbW0sIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3BlY2lmaWMgc2V0dGluZ3Mgb3Igb3B0aW9ucyB0aWVkIHRvIGBORlRfQ0hBSU5fSFdfT0ZGTE9BRGA/IFRpbWUgdG8gZGlnIGludG8gYG5mX3RhYmxlc19hcGkuY2AuIExldCdzIHNlZSB3aGF0IGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCB0ZWxscyB1cy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg1MDAsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjQyLjU5MDEyODkyOVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4NDYwMDE4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MjY5MT1zdGF0aWMgaW50IG5mdF9iYXNlY2hhaW5faW5pdChzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbiwgdTggZmFtaWx5LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxMy1cXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzoyNzE0OlxcdCAgICAhbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChiYXNlY2hhaW4pKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNS1cXHRcXHRsaXN0X3NwbGljZV9pbml0KFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgXFx1MDAyNmhvb2stXFx1MDAzZWxpc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0Mi42OTg1OTQ0ODdaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3OTUwMTE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAqKlxuXG5SaWdodCwgbGV0J3MgZ2V0IGludG8gdGhpcyBgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydGAgbW9kdWxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGltcGxlbWVudGF0aW9uIGluIGRldGFpbC4gSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2tpbSB0aGUgcmVsZXZhbnQgY29kZSBub3cuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGlzIHRoaW5nIGZ1bmN0aW9ucywgaXRzIGFyY2hpdGVjdHVyZSwgYW5kIHRoZSBkZXNpZ24gZGVjaXNpb25zLiBNeSBrZXkgY29uY2VybiBoZXJlIGlzIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkaW5nLCBhbmQgcG90ZW50aWFsIGJvdHRsZW5lY2tzLiBTcGVjaWZpY2FsbHksIEknbSB0aGlua2luZyBhYm91dCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHVzZWQgZm9yIHRoZSBvZmZsb2FkLCBob3cgcnVsZSB0cmFuc2xhdGlvbiB0byBoYXJkd2FyZSBpcyBoYW5kbGVkLCBhbmQgdGhlIGVycm9yIHBhdGhzIHdpdGhpbiB0aGUgZmxvdy4gSSB3YW50IHRvIHNlZSBpZiB0aGV5J3ZlIGltcGxlbWVudGVkIGFueSBjbGV2ZXIgb3B0aW1pemF0aW9ucyB0byBtaW5pbWl6ZSBDUFUgaW52b2x2ZW1lbnQgZHVyaW5nIHRoZSBmYXN0IHBhdGguIEFyZSB0aGV5IHVzaW5nIGJhdGNoaW5nPyBXaGF0IGFib3V0IGZsb3cgY29udHJvbD8gV2hhdCBhYm91dCBhbnkgcG90ZW50aWFsIHJhY2VzPyBJJ20gYW50aWNpcGF0aW5nIHF1ZXN0aW9ucyBvbiBob3cgdGhlIG1vZHVsZSBoYW5kbGVzIHJ1bGUgdXBkYXRlcyBhbmQgZGVsZXRpb24gY29uY3VycmVudGx5IHdpdGggdHJhZmZpYyBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGlzIGNvZGUsIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBsYXJnZXIgYXJjaGl0ZWN0dXJlLiBMZXQncyBkaWcgaW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4OTIyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6NDYuMDc4MDk4ODA4WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjQ3MTY3ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEzLVxcdGlmIChjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTQ6XFx0ICAgICFuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGJhc2VjaGFpbikpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzE1LVxcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmJhc2VjaGFpbi1cXHUwMDNlaG9va19saXN0LCBcXHUwMDI2aG9vay1cXHUwMDNlbGlzdCk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM9MjEyPXN0YXRpYyBpbnQgbmZ0X2NoYWluX29mZmxvYWRfcHJpb3JpdHkoY29uc3Qgc3RydWN0IG5mdF9iYXNlX2NoYWluICpiYXNlY2hhaW4pXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtMjIwLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzoyMjE6Ym9vbCBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0KGNvbnN0IHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy0yMjIte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0Ni4yMDI4MjI5NTVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU3NTU3NzcxNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIG5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQqKlxuXG5Pa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBuZnRfY2hhaW5fb2ZmbG9hZF9zdXBwb3J0YCB3aXRoaW4gYG5mX3RhYmxlc19vZmZsb2FkLmNgLiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyAob3IgdGhlIHBvdGVudGlhbCBoZWFkYWNoZXMsIGRlcGVuZGluZyBvbiBob3cgaXQncyBpbXBsZW1lbnRlZCEpIGxpa2VseSBoYXBwZW5zIGZvciBvZmZsb2FkaW5nIGNoYWluIG9wZXJhdGlvbnMgaW4gdGhlIE5ldGZpbHRlciBmcmFtZXdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBjaGFpbiBzdXBwb3J0IGlzIGhhbmRsZWQgYXQgYSBmdW5kYW1lbnRhbCBsZXZlbCBmb3Igb2ZmbG9hZGluZyBwdXJwb3Nlcy4gSSdtIGV4cGVjdGluZyB0aGlzIGZ1bmN0aW9uIHRvIGJlIGEga2V5IGRlY2lzaW9uIHBvaW50LCBkZXRlcm1pbmluZyB3aGV0aGVyIGEgY2hhaW4gY2FuIGFjdHVhbGx5IGJlIG9mZmxvYWRlZCB0byB0aGUgaGFyZHdhcmUgb3IgaWYgd2UgbmVlZCB0byBmYWxsIGJhY2sgdG8gc29mdHdhcmUgcHJvY2Vzc2luZy4gSSdsbCBiZSBsb29raW5nIHNwZWNpZmljYWxseSBmb3IgdGhpbmdzIGxpa2UgdGhlIGNvbmRpdGlvbnMgY2hlY2tlZCwgdGhlIGRhdGEgc3RydWN0dXJlcyB1c2VkIHRvIHJlcHJlc2VudCB0aGUgY2hhaW5zLCBhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBoYXJkd2FyZSBvZmZsb2FkIEFQSSAod2hhdGV2ZXIgdGhhdCBtaWdodCBiZSkgaXMgbWFuYWdlZCBoZXJlLiBUaGUgY29kZSBsaWtlbHkgaG9sZHMgY2x1ZXMgcmVnYXJkaW5nIHRoZSB0eXBlcyBvZiBjaGFpbnMgdGhhdCAqYXJlKiBvZmZsb2FkYWJsZSBhbmQgdGhlIHVuZGVybHlpbmcgYXNzdW1wdGlvbnMgYmVpbmcgbWFkZSBhYm91dCB0aGUgaGFyZHdhcmUgY2FwYWJpbGl0aWVzLiBJIG5lZWQgdG8gYmUgcHJlcGFyZWQgdG8gc2VlIHNvbWUgdmVyeSBoYXJkd2FyZSBzcGVjaWZpYyBjb2RlIGluIGhlcmUuIEZyb20gYSBoaWdoIGxldmVsIHBlcnNwZWN0aXZlLCBJJ20gZXhwZWN0aW5nIHRvIHNlZSBzb21ldGhpbmcgd2hpY2ggd2lsbCBhbGxvdyB1cyB0byBkZWZpbmUgaWYgd2Ugc3VwcG9ydCBhIGNoYWluIGZvciBvZmZsb2FkaW5nIGJhc2VkIG9uIGl0cyBydWxlcywgZm9yIGV4YW1wbGUgd2hldGhlciBvciBub3Qgd2UgY2FuIHRyYW5zbGF0ZSBhIHJ1bGUgb2YgYSBjaGFpbiB0byBhIGhhcmR3YXJlIHNwZWNpZmljIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTQ5MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjQ5Ljc3ODQwMzI3OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ0ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDIyMDpcXHRcXG4gMjIxOlxcdGJvb2wgbmZ0X2NoYWluX29mZmxvYWRfc3VwcG9ydChjb25zdCBzdHJ1Y3QgbmZ0X2Jhc2VfY2hhaW4gKmJhc2VjaGFpbilcXG4gMjIyOlxcdHtcXG4gMjIzOlxcdFxcdHN0cnVjdCBuZl9ob29rX29wcyAqb3BzO1xcbiAyMjQ6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjI1OlxcdFxcdHN0cnVjdCBuZnRfaG9vayAqaG9vaztcXG4gMjI2OlxcdFxcbiAyMjc6XFx0XFx0aWYgKG5mdF9jaGFpbl9vZmZsb2FkX3ByaW9yaXR5KGJhc2VjaGFpbikgXFx1MDAzYyAwKVxcbiAyMjg6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbiAyMjk6XFx0XFxuIDIzMDpcXHRcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGhvb2ssIFxcdTAwMjZiYXNlY2hhaW4tXFx1MDAzZWhvb2tfbGlzdCwgbGlzdCkge1xcbiAyMzE6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbiAyMzI6XFx0XFx0XFx0XFx0aWYgKG9wcy1cXHUwMDNlcGYgIT0gTkZQUk9UT19ORVRERVYgfHxcXG4gMjMzOlxcdFxcdFxcdFxcdCAgICBvcHMtXFx1MDAzZWhvb2tudW0gIT0gTkZfTkVUREVWX0lOR1JFU1MpXFxuIDIzNDpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIDIzNTpcXHRcXG4gMjM2OlxcdFxcdFxcdFxcdGRldiA9IG9wcy1cXHUwMDNlZGV2O1xcbiAyMzc6XFx0XFx0XFx0XFx0aWYgKCFkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19zZXR1cF90YyBcXHUwMDI2XFx1MDAyNlxcbiAyMzg6XFx0XFx0XFx0XFx0ICAgICFmbG93X2luZHJfZGV2X2V4aXN0cygpKVxcbiAyMzk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MDo0OS43Nzg1Nzk4ODlaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUzNjgyOTc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBgTkZQUk9UT19ORVRERVZgIENvbnN0cmFpbnQqKlxuXG5Pa2F5LCBzbyB0aGUgY29kZSBzYXlzIGBvcHMtXHUwMDNlcGYgIT0gTkZQUk9UT19ORVRERVZgLiBUaGF0IGltbWVkaWF0ZWx5IGNsaWNrcyDigJMgaXQncyBzdWdnZXN0aW5nIHRoYXQgdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gKm9ubHkqIHN1cHBvcnRzIGBORlBST1RPX05FVERFVmAuIFdoaWNoIG1ha2VzIG1lIHRoaW5rLCBcIldoeSBpcyB0aGF0PyBXaGF0J3MgdGhlIGRlcGVuZGVuY3kgaGVyZT9cIiBBbmQgb2YgY291cnNlLCB0aGUgYW5zd2VyIGxpa2VseSBsaWVzIHdpdGggdGhlIGBORl9UQUJMRVNfTkVUREVWYCBjb25maWcgb3B0aW9uLlxuXG5JIG5lZWQgdG8gY29uZmlybSB0aGlzLiBJZiBgTkZfVEFCTEVTX05FVERFVmAgaXNuJ3Qgc2V0LCAqY2FuKiB3ZSBldmVuIGNyZWF0ZSBhIG5ldGRldiBmYW1pbHkgY2hhaW4/IEknbSBiZXR0aW5nIHRoZSBhbnN3ZXIgaXMgbm8sIGFuZCB0aGUga2VybmVsIGNvbmZpZyBpcyB0aGUgcGxhY2UgdG8gdmVyaWZ5IHRoaXMuIFRpbWUgdG8gZGlnIGludG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IGBORl9UQUJMRVNfTkVUREVWYCBpcyByZWFsbHkgYWxsIGFib3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDE3MywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjUzLjMxNTQxMTk1MloiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwNzY4MTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk5GX1RBQkxFU19ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00NzI9Y29uZmlnIE5GX1RBQkxFU19JTkVUXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDc5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo0ODA6Y29uZmlnIE5GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNDgxLVxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgbmV0ZGV2IHRhYmxlcyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnPTY0OT1jb25maWcgTkZUX1NZTlBST1hZXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNjU5LVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo2NjA6aWYgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy02NjEtXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc9Njg5PWNvbmZpZyBORlRfUkVKRUNUX05FVERFVlxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTY5OC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6Njk5OmVuZGlmICMgTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjUzLjQxNjE4NTQ5WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMjE5NjQ1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk5GX1RBQkxFU19ORVRERVYgRGVwZW5kZW5jeSBDaGVjayoqXG5cbkhtbSwgaG9sZCBvbiBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gcmVtZW1iZXJpbmcgdGhpcyByaWdodC4gYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgKmJvb2xlYW4qIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBpc24ndCBpdD8gT2theSwgZ29vZCwgY29uZmlybWluZyB0aGF0LiBOb3csIHRoZSByZWFsIHF1ZXN0aW9uIHRoYXQncyBidWdnaW5nIG1lIGlzOiBkb2VzIGBuZl90YWJsZXNfYXBpLmNgICphY3R1YWxseSogcmVseSBvbiBgTkZfVEFCTEVTX05FVERFVmAgYmVpbmcgZW5hYmxlZCBzcGVjaWZpY2FsbHkgZm9yIG5ldGRldiBmYW1pbHkgZnVuY3Rpb25hbGl0eT8gSSBuZWVkIHRvIHF1aWNrbHkgc2NhbiB0aGF0IHNvdXJjZSBmaWxlLiBJdOKAmXMgY3JpdGljYWwgSSB2ZXJpZnkgd2hldGhlciBlbmFibGluZyB0aGUgbmV0ZGV2IGZhbWlseSBpbiBuZl90YWJsZXMgaXMgdW5jb25kaXRpb25hbGx5IGF2YWlsYWJsZSBvciBpZiB0aGUgYE5GX1RBQkxFU19ORVRERVZgIG9wdGlvbiBpcyBhIGhhcmQgcmVxdWlyZW1lbnQuIElmIEkgZmluZCBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGxvZ2ljLCB0aGVuIEkgd2lsbCBrbm93IG1vcmUgZGV0YWlscyBmb3IgdGhlIHNjZW5hcmlvLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDcyMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE5VDIyOjUwOjU2LjczODE1MjU0OFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODU5OTQ1NjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTkZQUk9UT19ORVRERVZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTU0OT1zdGF0aWMgYm9vbCBuZnRfc3VwcG9ydGVkX2ZhbWlseSh1OCBmYW1pbHkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xNTYxLSNpZmRlZiBDT05GSUdfTkZfVEFCTEVTX05FVERFVlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjE1NjI6XFx0XFx0fHwgZmFtaWx5ID09IE5GUFJPVE9fTkVUREVWXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTU2My0jZW5kaWZcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTg4NjE9c3RhdGljIGludCBuZnRfZmxvd3RhYmxlX3BhcnNlX2hvb2soY29uc3Qgc3RydWN0IG5mdF9jdHggKmN0eCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTg5MjMtXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShvcHMsIFxcdTAwMjZob29rLVxcdTAwM2VvcHNfbGlzdCwgbGlzdCkge1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjg5MjQ6XFx0XFx0XFx0b3BzLVxcdTAwM2VwZlxcdFxcdFxcdD0gTkZQUk9UT19ORVRERVY7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtODkyNS1cXHRcXHRcXHRvcHMtXFx1MDAzZWhvb2tudW1cXHRcXHQ9IGZsb3d0YWJsZV9ob29rLVxcdTAwM2VudW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz05NzYwPXN0YXRpYyBpbnQgbmZ0X2Zsb3d0YWJsZV9ldmVudCh1bnNpZ25lZCBsb25nIGV2ZW50LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtOTc5Mi1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYzo5NzkzOlxcdFxcdFxcdG9wcy1cXHUwMDNlcGZcXHRcXHRcXHQ9IE5GUFJPVE9fTkVUREVWO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTk3OTQtXFx0XFx0XFx0b3BzLVxcdTAwM2Vob29rbnVtXFx0XFx0PSBmbG93dGFibGUtXFx1MDAzZWhvb2tudW07XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0xMjAwNz1zdGF0aWMgdm9pZCBfX25mdF9yZWxlYXNlX3RhYmxlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5mdF90YWJsZSAqdGFibGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMjAxNS1cXHRcXHQubmV0XFx0PSBuZXQsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTIwMTY6XFx0XFx0LmZhbWlseVxcdD0gTkZQUk9UT19ORVRERVYsXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTIwMTctXFx0fTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTA6NTYuODI0MTUyMjM2WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU4MDk1NDQzNDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEZXBlbmRlbmNpZXMgZm9yIEhhcmR3YXJlIE9mZmxvYWQgaW4gTmV0ZmlsdGVyKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIGBuZnRfc3VwcG9ydGVkX2ZhbWlseWAgZnVuY3Rpb24gYW5kIGl0J3MgY2FsbGluZyBvdXQgYENPTkZJR19ORl9UQUJMRVNfTkVUREVWYCBzcGVjaWZpY2FsbHkgZm9yIGBORlBST1RPX05FVERFVmAuIFJpZ2h0LCBzbyB0aGlzIGNvbmZpcm1zIHRoYXQgYE5GX1RBQkxFU19ORVRERVZgIGlzIGVzc2VudGlhbCBmb3Igc2V0dGluZyB1cCBhIG5ldGRldiBjaGFpbiwgd2hpY2ggaXMgaXRzZWxmIGEgcHJlcmVxdWlzaXRlIGZvciB1c2luZyBgTkZUX0NIQUlOX0hXX09GRkxPQURgLiBCdXQgaG9sZCBvbiwgd2hhdCBhYm91dCB0aGUgSVB2NCBhbmQgSVB2NiB0YWJsZXM/IFdlJ3JlIGRlYWxpbmcgd2l0aCBoYXJkd2FyZSBvZmZsb2FkLCBzbyB0aG9zZSBtaWdodCBjb21lIGludG8gcGxheSB0b28uXG5cbkxldCBtZSBzZWUsIHRoZSBjb3JlIGNoYW5nZSBzZWVtcyB0byBiZSBpbiBgbmZ0X3BheWxvYWQuY2AsIHNwZWNpZmljYWxseSB0aGUgbW9kaWZpY2F0aW9uIG9mIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgLiBUaGlzIG1hc2sgaXMgdXNlZCBmb3Igb2ZmbG9hZGluZyBwYXlsb2FkIG1hdGNoaW5nLCB3aGljaCBpcyB0aGUgbWVjaGFuaXNtIHVzZWQgZm9yIHRoZSBjaGFpbiBvZmZsb2FkLiBUaGlzIGNvbmZpcm1zIHRoYXQgd2UgbmVlZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gZW5hYmxlIHRoaXMgaGFyZHdhcmUgb2ZmbG9hZCBvZiB0aGUgbmV0ZGV2IGNoYWlucy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSdyZSBub3QgbWlzc2luZyBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzLCB0aG91Z2guIElzIHRoZXJlIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBjb250cmlidXRlP1xuXG5MZXQncyBzZWUuLi4gbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbnMsIGl0IGFwcGVhcnMgdGhhdCB3ZSBoYXZlIGBORl9UQUJMRVNgIGFuZCBgTkZfVEFCTEVTX05FVERFVmAuIEhtbSwgbGV0J3MgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhhdCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYC4gT2theSwgdGhhdCBtYXNrIGNvdmVycyBhIGxvdCwgSVAsIElQdjYsIFRDUCwgVURQLCBldGMuIFNvIHdoaWxlIGBORl9UQUJMRVNfSVBWNGAgYW5kIGBORl9UQUJMRVNfSVBWNmAgbWlnaHQgYmUgaGVscGZ1bCwgdGhvc2UgYXJlIHR5cGljYWxseSBlbmFibGVkIGJ5IGRlZmF1bHQsIHNvIHRoZXkgYXJlIG5vdCBjcml0aWNhbC4gSSdtIGdvaW5nIHRvIGFkZCBgTkZfVEFCTEVTX05FVERFVmAgdG8gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LiBJIG5lZWQgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCBoZXJlLCBzbyBsZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuXG5cbk9rYXksIGl0IGxvb2tzIGxpa2UgYE5GX1RBQkxFU19ORVRERVZgIGlzIGEgc2ltcGxlIGJvb2xlYW4gY29uZmlndXJhdGlvbiwgc28gSSB0aGluayB3ZSdyZSBnb29kLiBKdXN0IHRvIGJlIHN1cmUsIEkgd2lsbCBnbyBiYWNrIGFuZCBjaGVjayBgbmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jYCBhZ2Fpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE1MTIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTE6MDIuNjMzNzAwMTQ5WiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTY4ODY4MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jPTkyMz1zdGF0aWMgYm9vbCBuZnRfbmhfd3JpdGVfb2tfbmV0ZGV2KGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jLTkyNi17XFxubmV0L25ldGZpbHRlci9uZnRfcGF5bG9hZC5jOjkyNzojaWZkZWYgQ09ORklHX05GX1RBQkxFU19ORVRERVZcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTI4LVxcdHN3aXRjaCAocGt0LVxcdTAwM2Vza2ItXFx1MDAzZXByb3RvY29sKSB7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM9OTQ0PXN0YXRpYyBib29sIG5mdF9uaF93cml0ZV9va19icmlkZ2UoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmMtOTQ3LXtcXG5uZXQvbmV0ZmlsdGVyL25mdF9wYXlsb2FkLmM6OTQ4OiNpZiBJU19FTkFCTEVEKENPTkZJR19ORl9UQUJMRVNfQlJJREdFKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X3BheWxvYWQuYy05NDktXFx0c3dpdGNoIChwa3QtXFx1MDAzZWV0aGVydHlwZSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MTowMi43OTA1OTMwMTZaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTgxNjY3MTE1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTmV0ZmlsdGVyIFBheWxvYWQgT2ZmbG9hZCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfcGF5bG9hZC5jYCBhbmQgc3BlY2lmaWNhbGx5LCBob3cgaGFyZHdhcmUgb2ZmbG9hZGluZyBpbnRlcmFjdHMgd2l0aCBpdC4gSSBzZWUgdGhhdCBgQ09ORklHX05GX1RBQkxFU19ORVRERVZgIGlzIHVzZWQgaW4gdGhpcyBmaWxlLiBUaGF0IGltbWVkaWF0ZWx5IHRlbGxzIG1lIEkgbmVlZCB0byBhZGQgdGhhdCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZzsgaXMgYE5GX1RBQkxFU2AgZW5vdWdoPyBObywgYE5GX1RBQkxFU2AgaXMgdGhlIGJhc2UsIGJ1dCBgTkZfVEFCTEVTX05FVERFVmAgaXMgc3BlY2lmaWNhbGx5ICpyZXF1aXJlZCogZm9yIHRoZSBuZXRkZXYgZmFtaWx5LCB3aGljaCwgaW1wb3J0YW50bHksIGlzIG5lZWRlZCBmb3IgYE5GVF9DSEFJTl9IV19PRkZMT0FEYC4gU28geWVhaCwgYE5GX1RBQkxFU19ORVRERVZgICptdXN0KiBiZSBpbmNsdWRlZC5cblxuTm93LCBsZXQncyBuYWlsIGRvd24gdGhlIGtleSBzeW1ib2xzIHRoYXQgc2hvdWxkIGJlIGluIHRoZSBmb2N1cy4gSSd2ZSBnb3QgYG5mdF9wYXlsb2FkX29mZmxvYWRfbWFza2AsIGBuZnRfcGF5bG9hZF9vZmZsb2FkYCwgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX2lwNmAsIGBuZnRfcGF5bG9hZF9vZmZsb2FkX3RjcGAsIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF91ZHBgLiBJIHRoaW5rIEknbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuIEhtbSwgd2FpdCwgdGhhdCdzIGludGVyZXN0aW5nOyBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBpcyAqc3RhdGljKiwgYnV0IGl0J3MgdGhlIG9uZSB0aGF0J3MgYWN0dWFsbHkgKm1vZGlmaWVkKi4gT2theSwgSSdtIHN0aWNraW5nIHdpdGggaW5jbHVkaW5nIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGAuXG5cbkxldCdzIGRvIGEgcXVpY2sgY2hlY2s6IGlzIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgIGlubGluZWQ/IElmIGl0ICppcyosIHN5emthbGxlciBtaWdodCBtaXNzIGl0LiBCdXQgYG5mdF9wYXlsb2FkX29mZmxvYWRgIGlzIHRoZSBlbnRyeSBwb2ludCwgc28gSSdsbCBpbmNsdWRlIHRoYXQgbm8gbWF0dGVyIHdoYXQuIEFscmlnaHQsIEknbGwgYWRkIGBuZnRfcGF5bG9hZF9vZmZsb2FkYC5cblxuVGltZSB0byBjaGVjayBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCdzIHVzYWdlLiBBaGEsIGl0J3MgY2FsbGVkIDE3IHRpbWVzLiBUaGF0J3MgYSBnb29kIHNpZ24gaXQncyBub3QgaW5saW5lZCBiZWNhdXNlIGl0J3MgY2FsbGVkIGZyb20gc28gbWFueSBkaWZmZXJlbnQgZnVuY3Rpb25zIGxpa2UgYG5mdF9wYXlsb2FkX29mZmxvYWRfbGxgLCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9pcGAsIGV0Yy4gV2FpdCwgaXQncyBwcmV0dHkgc21hbGwsIHNvIGl0ICpjb3VsZCogYmUuIE9rYXksIEknbSBnb2luZyB0byBoZWRnZSBteSBiZXRzIGFuZCBpbmNsdWRlIGJvdGggYG5mdF9wYXlsb2FkX29mZmxvYWRgIGFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrYCBqdXN0IHRvIGJlIHN1cmUuXG5cbkFscmlnaHQsIHRpbWUgdG8gd3JpdGUgdGhlIHJlc3BvbnNlOlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYCAtIGJlY2F1c2UgdGhlIHBhdGNoIGlzIGNoYW5naW5nIHRoZSBtYXNrIGdlbmVyYXRpb24gZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcsIGFuZCB0aGF0IGxvZ2ljIGlzIHJlYWNoYWJsZSB2aWEgbmZ0YWJsZXMgcnVsZXMgd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuXG5gUmVhc29uaW5nOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1hc2sgZ2VuZXJhdGlvbiBsb2dpYyBmb3IgbmV0ZmlsdGVyIHBheWxvYWQgb2ZmbG9hZGluZy4gVGhpcyBpcyByZWFjaGFibGUgdmlhIG5mdGFibGVzIHJ1bGUgY29uZmlndXJhdGlvbiB3aXRoIGhhcmR3YXJlIG9mZmxvYWQgZW5hYmxlZC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG9mZmxvYWQgZnVuY3Rpb25zIGluIG5mdF9wYXlsb2FkLmMuYFxuYEZvY3VzU3ltYm9sczogW1wibmZ0X3BheWxvYWRfb2ZmbG9hZF9tYXNrXCIsIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXWBcbmBFbmFibGVDb25maWdzOiBbXCJORl9UQUJMRVNcIiwgXCJORl9UQUJMRVNfTkVUREVWXCJdYFxuXG5Ob3csIGxldCdzIGRvdWJsZS1jaGVjazogaXMgYE5GX1RBQkxFU19ORVRERVZgIHRoZSBleGFjdCBuYW1lPyBZdXAsIGBjb25maWcgTkZfVEFCTEVTX05FVERFVmAuIEdvb2QuXG5cbkFuZCBgbmZ0X3BheWxvYWRfb2ZmbG9hZGA/IFllcCwgYHN0YXRpYyBpbnQgbmZ0X3BheWxvYWRfb2ZmbG9hZChzdHJ1Y3QgbmZ0X29mZmxvYWRfY3R4ICpjdHgsIHN0cnVjdCBuZnRfZmxvd19ydWxlICpmbG93LCBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIpYC5cblxuQW5kIGBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2tgPyBZZXMsIGBzdGF0aWMgYm9vbCBuZnRfcGF5bG9hZF9vZmZsb2FkX21hc2soc3RydWN0IG5mdF9vZmZsb2FkX3JlZyAqcmVnLCB1MzIgcHJpdl9sZW4sIHUzMiBmaWVsZF9sZW4pYC5cblxuQXJlIHRoZXJlIGFueSBvdGhlciBjb25maWdzIGludm9sdmVkPyBMZXQncyBzZWUuLi4gYE5GX0ZMT1dfVEFCTEVgPyBJcyB0aGF0IHJlcXVpcmVkIHdpdGggYE5GVF9DSEFJTl9IV19PRkZMT0FEYD8gTm8sIEkgZG9uJ3QgYmVsaWV2ZSBzby4gSSdsbCBsZWF2ZSB0aGF0IG91dCBmb3Igbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjUzMSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjczMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MToxMi42MDcyNjYwMTNaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzI5NjMwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJORlRfQ0hBSU5fSFdfT0ZGTE9BRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvbmV0ZmlsdGVyL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz03NTA9c3RhdGljIGludCBuZnRfZGVscnVsZShzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCBzdHJ1Y3QgbmZ0X3J1bGUgKnJ1bGUpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy03NTktXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NzYwOlxcdGlmIChjdHgtXFx1MDAzZWNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSB7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtNzYxLVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShjdHgtXFx1MDAzZW5ldCwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNTExPXN0YXRpYyBpbnQgbmZ0X2NoYWluX3BhcnNlX25ldGRldihzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTMzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI1MzQ6XFx0aWYgKGZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQgXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNTM1LVxcdCAgICBsaXN0X2VtcHR5KGhvb2tfbGlzdCkpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz0yNjkxPXN0YXRpYyBpbnQgbmZ0X2Jhc2VjaGFpbl9pbml0KHN0cnVjdCBuZnRfYmFzZV9jaGFpbiAqYmFzZWNoYWluLCB1OCBmYW1pbHksXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzEyLVxcdGJhc2VjaGFpbi1cXHUwMDNlcG9saWN5ID0gTkZfQUNDRVBUO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjI3MTM6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEIFxcdTAwMjZcXHUwMDI2XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMjcxNC1cXHQgICAgIW5mdF9jaGFpbl9vZmZsb2FkX3N1cHBvcnQoYmFzZWNoYWluKSkge1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mjc0MD1zdGF0aWMgaW50IG5mX3RhYmxlc19hZGRjaGFpbihzdHJ1Y3QgbmZ0X2N0eCAqY3R4LCB1OCBmYW1pbHksIHU4IHBvbGljeSxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTI3OTYtXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6Mjc5NzpcXHRcXHRpZiAoZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0yNzk4LVxcdFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jPTMyODQ9c3RhdGljIGludCBuZl90YWJsZXNfZGVsY2hhaW4oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzAtXFx0XFx0aWYgKE5GTkxfTVNHX1RZUEUoaW5mby1cXHUwMDNlbmxoLVxcdTAwM2VubG1zZ190eXBlKSA9PSBORlRfTVNHX0RFU1RST1lDSEFJTiB8fFxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjMzMzE6XFx0XFx0ICAgIGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTMzMzItXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9Mzc2Mz1zdGF0aWMgaW50IG5mX3RhYmxlc19maWxsX3J1bGVfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0zNzk0LVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjM3OTU6XFx0aWYgKGNoYWluLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTM3OTYtXFx0XFx0bmZ0X2Zsb3dfcnVsZV9zdGF0cyhjaGFpbiwgcnVsZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYz00MzA1PXN0YXRpYyBpbnQgbmZfdGFibGVzX25ld3J1bGUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5mbmxfaW5mbyAqaW5mbyxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTQ0NjMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6NDQ2NDpcXHRpZiAoY2hhaW4tXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHtcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy00NDY1LVxcdFxcdGZsb3cgPSBuZnRfZmxvd19ydWxlX2NyZWF0ZShuZXQsIHJ1bGUpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTA4NzY9c3RhdGljIGludCBuZl90YWJsZXNfY29tbWl0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jLTExMDQwLVxcdFxcdFxcdFxcdFxcdCAgICAgIE5GVF9NU0dfTkVXUlVMRSk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNDE6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA0Mi1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEwNTMtXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEwNTQ6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTA1NS1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM9MTEyNTk9c3RhdGljIGludCBfX25mX3RhYmxlc19hYm9ydChzdHJ1Y3QgbmV0ICpuZXQsIGVudW0gbmZubF9hYm9ydF9hY3Rpb24gYWN0aW9uKVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNDYtXFx0XFx0XFx0XFx0XFx0XFx0IE5GVF9UUkFOU19BQk9SVCk7XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmM6MTEzNDc6XFx0XFx0XFx0aWYgKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRClcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19hcGkuYy0xMTM0OC1cXHRcXHRcXHRcXHRuZnRfZmxvd19ydWxlX2Rlc3Ryb3kobmZ0X3RyYW5zX2Zsb3dfcnVsZSh0cmFucykpO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTQtXFx0XFx0XFx0bmZ0X3J1bGVfZXhwcl9hY3RpdmF0ZShcXHUwMDI2Y3R4LCBuZnRfdHJhbnNfcnVsZSh0cmFucykpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX2FwaS5jOjExMzU1OlxcdFxcdFxcdGlmIChuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfYXBpLmMtMTEzNTYtXFx0XFx0XFx0XFx0bmZ0X2Zsb3dfcnVsZV9kZXN0cm95KG5mdF90cmFuc19mbG93X3J1bGUodHJhbnMpKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz01MTY9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2Fib3J0KHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MjctXFx0XFx0Y2FzZSBORlRfTVNHX05FV0NIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1Mjg6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTI5LVxcdFxcdFxcdCAgICBuZnRfdHJhbnNfY2hhaW5fdXBkYXRlKHRyYW5zKSlcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01MzUtXFx0XFx0Y2FzZSBORlRfTVNHX0RFTENIQUlOOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1MzY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTUzNy1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDItXFx0XFx0Y2FzZSBORlRfTVNHX05FV1JVTEU6XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjU0MzpcXHRcXHRcXHRpZiAoIShuZnRfdHJhbnNfcnVsZV9jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01NDQtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUwLVxcdFxcdGNhc2UgTkZUX01TR19ERUxSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1NTE6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTUyLVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jPTU2Nj1pbnQgbmZ0X2Zsb3dfcnVsZV9vZmZsb2FkX2NvbW1pdChzdHJ1Y3QgbmV0ICpuZXQpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTc4LVxcdFxcdGNhc2UgTkZUX01TR19ORVdDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTc5OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTU4MC1cXHRcXHRcXHQgICAgbmZ0X3RyYW5zX2NoYWluX3VwZGF0ZSh0cmFucykpXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTg3LVxcdFxcdGNhc2UgTkZUX01TR19ERUxDSEFJTjpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NTg4OlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19jaGFpbih0cmFucyktXFx1MDAzZWZsYWdzIFxcdTAwMjYgTkZUX0NIQUlOX0hXX09GRkxPQUQpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYy01ODktXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk1LVxcdFxcdGNhc2UgTkZUX01TR19ORVdSVUxFOlxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYzo1OTY6XFx0XFx0XFx0aWYgKCEobmZ0X3RyYW5zX3J1bGVfY2hhaW4odHJhbnMpLVxcdTAwM2VmbGFncyBcXHUwMDI2IE5GVF9DSEFJTl9IV19PRkZMT0FEKSlcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNTk3LVxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYwOS1cXHRcXHRjYXNlIE5GVF9NU0dfREVMUlVMRTpcXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmM6NjEwOlxcdFxcdFxcdGlmICghKG5mdF90cmFuc19ydWxlX2NoYWluKHRyYW5zKS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTYxMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfdGFibGVzX29mZmxvYWQuYz02Mjg9c3RhdGljIHN0cnVjdCBuZnRfY2hhaW4gKl9fbmZ0X29mZmxvYWRfZ2V0X2NoYWluKGNvbnN0IHN0cnVjdCBuZnRhYmxlc19wZXJuZXQgKm5mdF9uZXQsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX3RhYmxlc19vZmZsb2FkLmMtNjQxLVxcdFxcdFxcdGlmICghbmZ0X2lzX2Jhc2VfY2hhaW4oY2hhaW4pIHx8XFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jOjY0MjpcXHRcXHRcXHQgICAgIShjaGFpbi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBORlRfQ0hBSU5fSFdfT0ZGTE9BRCkpXFxubmV0L25ldGZpbHRlci9uZl90YWJsZXNfb2ZmbG9hZC5jLTY0My1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTlUMjI6NTE6MTIuNzEwNTY3NDhaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU4MjU4MjE4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHVuZGVyc3RhbmRpbmcsIGNvbnNpZGVyaW5nIEknbSB0cnlpbmcgdG8gb3B0aW1pemUgdGhpcyBvZmZsb2FkIHByb2Nlc3MuXG5cbioqTXkgQ3VycmVudCBFdmFsdWF0aW9uIG9mIHRoZSBPZmZsb2FkIFJlcXVpcmVtZW50cyoqXG5cblJpZ2h0LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBJdCBkb2Vzbid0IGxvb2sgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdGhlIGNvbXBsZXhpdGllcyBvZiBmdWxsIGZsb3cgb2ZmbG9hZCBoZXJlLCBzbyB0aGUgYE5GX0ZMT1dfVEFCTEVgIG1vZHVsZSBpcyBwcm9iYWJseSBvdmVya2lsbC4gV2UncmUgdGFsa2luZyBzcGVjaWZpY2FsbHkgYWJvdXQgcnVsZSBvZmZsb2FkLCB3aGljaCBwb2ludHMgbW9yZSBkaXJlY3RseSB0byBgTkZUX0NIQUlOX0hXX09GRkxPQURgLiBUaGF0J3MgdGhlIGtleSBkaXN0aW5jdGlvbi4gVGhlcmVmb3JlLCBiYXNlZCBvbiB0aGlzLCBpdCBzZWVtcyB0aGF0IHRoZSBzdGFuZGFyZCBgTkZfVEFCTEVTYCBhbmQgYE5GX1RBQkxFU19ORVRERVZgIG1vZHVsZXMgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBmb3VuZGF0aW9uLiBHaXZlbiB0aGlzIGFzc2Vzc21lbnQsIEknbGwgcHJvY2VlZCB3aXRoIHRoZSBuZXh0IHN0ZXAsIHdoaWNoIHdpbGwgYmUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjY5MiwiT3V0cHV0VG9rZW5zIjoxMTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOVQyMjo1MToxNi4yOTMxNTM1ODJaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjk5MjY0MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX1RBQkxFU1wiLFxuICAgIFwiTkZfVEFCTEVTX05FVERFVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5mdF9wYXlsb2FkX29mZmxvYWRfbWFza1wiLFxuICAgIFwibmZ0X3BheWxvYWRfb2ZmbG9hZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtYXNrIGdlbmVyYXRpb24gbG9naWMgZm9yIG5ldGZpbHRlciBwYXlsb2FkIG9mZmxvYWRpbmcuIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBuZnRhYmxlcyBydWxlIGNvbmZpZ3VyYXRpb24gd2l0aCBoYXJkd2FyZSBvZmZsb2FkIGVuYWJsZWQuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBvZmZsb2FkIGZ1bmN0aW9ucyBpbiBuZnRfcGF5bG9hZC5jLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[1] Phase: Succeeded StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-19 22:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-19 22:51:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2] Phase: Succeeded StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-19 22:51:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-19 22:51:28 +0000 UTC FinishedAt: 2026-07-19 22:51:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow2l2pr/series-workflow2l2pr-convert-artifact-3586156515/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-19 22:51:38 +0000 UTC FinishedAt: 2026-07-19 23:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-19 22:51:38 +0000 UTC FinishedAt: 2026-07-19 23:26:11 +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:*515bf432-75a8-42fb-aa22-1819679d569a,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-workflow2l2pr/series-workflow2l2pr-convert-artifact-3586156515/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": "a325d2f1-4e18-415e-aeec-5c414a85d87d", "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-workflow2l2pr/series-workflow2l2pr-build-action-2514256721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-19 22:51:38 +0000 UTC FinishedAt: 2026-07-19 23:26:01 +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:*515bf432-75a8-42fb-aa22-1819679d569a,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-workflow2l2pr/series-workflow2l2pr-convert-artifact-3586156515/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": "a325d2f1-4e18-415e-aeec-5c414a85d87d", "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-workflow2l2pr/series-workflow2l2pr-build-action-2514256721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-19 23:26:11 +0000 UTC FinishedAt: 2026-07-19 23:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-19 23:26:11 +0000 UTC FinishedAt: 2026-07-19 23:26:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-19 23:26:11 +0000 UTC FinishedAt: 2026-07-19 23:26:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-19 23:26:11 +0000 UTC FinishedAt: 2026-07-19 23:26:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow2l2pr/series-workflow2l2pr-convert-artifact-1814755098/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-19 23:26:21 +0000 UTC FinishedAt: 2026-07-19 23:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-19 23:26:21 +0000 UTC FinishedAt: 2026-07-19 23:28:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a325d2f1-4e18-415e-aeec-5c414a85d87d,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-workflow2l2pr/series-workflow2l2pr-build-action-2514256721/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-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-19 23:28:59 +0000 UTC FinishedAt: 2026-07-19 23:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-19 23:28:59 +0000 UTC FinishedAt: 2026-07-19 23:28:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-19 23:28:59 +0000 UTC FinishedAt: 2026-07-20 00:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-19 23:28:59 +0000 UTC FinishedAt: 2026-07-20 00:16:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*515bf432-75a8-42fb-aa22-1819679d569a,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-workflow2l2pr/series-workflow2l2pr-convert-artifact-1814755098/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": "da8bb4a8-5102-4d62-82f4-ab2eaf34dfee", "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-workflow2l2pr/series-workflow2l2pr-build-action-2192745214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-19 23:28:59 +0000 UTC FinishedAt: 2026-07-20 00:16:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*515bf432-75a8-42fb-aa22-1819679d569a,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-workflow2l2pr/series-workflow2l2pr-convert-artifact-1814755098/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": "da8bb4a8-5102-4d62-82f4-ab2eaf34dfee", "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-workflow2l2pr/series-workflow2l2pr-build-action-2192745214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-20 00:16:57 +0000 UTC FinishedAt: 2026-07-20 00:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-20 00:16:57 +0000 UTC FinishedAt: 2026-07-20 00:16:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-20 00:16:57 +0000 UTC FinishedAt: 2026-07-20 00:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-20 00:16:57 +0000 UTC FinishedAt: 2026-07-20 00:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da8bb4a8-5102-4d62-82f4-ab2eaf34dfee,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-workflow2l2pr/series-workflow2l2pr-build-action-2192745214/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-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +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":["nft_payload_offload_mask","nft_payload_offload"],"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:*a325d2f1-4e18-415e-aeec-5c414a85d87d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da8bb4a8-5102-4d62-82f4-ab2eaf34dfee,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-workflow2l2pr/series-workflow2l2pr-build-action-2514256721/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-workflow2l2pr/series-workflow2l2pr-build-action-2192745214/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 00:19:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 00:19:19 +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":["nft_payload_offload_mask","nft_payload_offload"],"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-workflow2l2pr/series-workflow2l2pr-convert-artifact-3741850063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 00:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 00:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-20 00:19:11 +0000 UTC FinishedAt: 2026-07-20 00:19:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-20 00:19:21 +0000 UTC FinishedAt: 2026-07-20 03:22:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2l2pr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["nft_payload_offload_mask","nft_payload_offload"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"c6859eed755df351a3978b33cb92365f9b3e8f06","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_TABLES","NF_TABLES_NETDEV"],"series_id":"f4dc8824-054a-43f3-8d52-565d56e74f84","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-20 00:19:21 +0000 UTC FinishedAt: 2026-07-20 03:22:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a325d2f1-4e18-415e-aeec-5c414a85d87d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*da8bb4a8-5102-4d62-82f4-ab2eaf34dfee,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-workflow2l2pr/series-workflow2l2pr-build-action-2514256721/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-workflow2l2pr/series-workflow2l2pr-build-action-2192745214/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-workflow2l2pr/series-workflow2l2pr-convert-artifact-3741850063/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,}