Name: series-workflowkzklk Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[0] Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 06:59:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[0].run-triage Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 06:59:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "96f01b53c2d05e003b040892256de54a586e8529", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM_USER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "96f01b53c2d05e003b040892256de54a586e8529", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM_USER", "PAGE_POOL" ], "series_id": "5eecbacd-57ac-4d56-bee2-5abc521c71ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_skb_add_frags", "iptfs_consume_frags", "iptfs_output_queued", "iptfs_reassem_cont", "iptfs_pskb_add_frags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "96f01b53c2d05e003b040892256de54a586e8529", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX3NrYl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfY29uc3VtZV9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgICAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICAgJiMzNDtpcHRmc19wc2tiX2FkZF9mcmFncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDY5MjA5NDBhMzViNDkuLmQzYmNhOTBlMmMzODQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2Vjbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbkBAIC00ODYsNyAmIzQzOzQ4NywxMCBAQCBzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHR9XG4tXHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4mIzQzO1x0XHRpZiAod2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxuJiM0MztcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcbiBcdFx0c2hpbmZvLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOztcbiBcdFx0c2hpbmZvLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xuIFxuQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuIFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG4tXHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOyk7XG4mIzQzO1x0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxuJiM0MztcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncyk7XG4mIzQzO1x0XHR0b2ktXHUwMDNlbnJfZnJhZ3MmIzQzOyYjNDM7O1xuIFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzJiMzNDssCiAgICAmIzM0O2lwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA2OTIwOTQwYTM1YjQ5Li5kM2JjYTkwZTJjMzg0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0X2Vjbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKQEAgLTQ4Niw3ICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJdG9mcmFnLSZndDtsZW4gLT0gb2Zmc2V0OwogCQkJb2Zmc2V0ID0gMDsKIAkJfQotCQlfX3NrYl9mcmFnX3JlZih0b2ZyYWcpOwomIzQzOwkJaWYgKHdhbGstJmd0O3BwX3JlY3ljbGUpCiYjNDM7CQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJX19za2JfZnJhZ19yZWYodG9mcmFnKTsKIAkJc2hpbmZvLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCXNoaW5mby0mZ3Q7ZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7CiAKQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKQogCQluZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpOwogCX0gZWxzZSB7CiAJCWlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKTsKLQkJc2tiX2ZyYWdfcmVmKHRvLCB0b2ktJmd0O25yX2ZyYWdzJiM0MzsmIzQzOyk7CiYjNDM7CQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKJiM0MzsJCQlwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSgmYW1wO3RvaS0mZ3Q7ZnJhZ3NbdG9pLSZndDtucl9mcmFnc10pKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwomIzQzOwkJdG9pLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCW5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGZybV9pcHRmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGJlZm9yZSBtZSBpbnZvbHZlcyBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZ2l0IGRpZmYuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBub3QganVzdCB0aGUgY2hhbmdlZCBsaW5lcywgYnV0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB6ZXJvIGluIG9uIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0ODYgYW5kIGxpbmUgMjE3MSwgZ2V0IGEgZmVlbCBmb3IgdGhlIGFyZWFzIGRpcmVjdGx5IGFmZmVjdGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgY2hhbmdlcyBpbiBvbmUgcGFydCBjYW4gcmlwcGxlIHRocm91Z2ggb3RoZXJzLgoKQW5kIG9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29ycmVzcG9uZGluZyBLY29uZmlnIGZvciB0aGF0IGZpbGUuIENvbmZpZ3VyYXRpb25zIGFyZSBhIGtleSBwYXJ0IG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSAmIzQzOz0geGZybV9pbnRlcmZhY2Uub1xubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyOi8qIHhmcm1fdHJhY2VfaXB0ZnMuaFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0zLSAqXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05LSN1bmRlZiBUUkFDRV9TWVNURU1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA6I2RlZmluZSBUUkFDRV9TWVNURU0gaXB0ZnNcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTEtXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjEtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIyOlRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMzpcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MTYgYmxrb2ZmKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXHQgICAgVFBfQVJHUyhza2IsIHh0ZnMsIGJsa29mZiksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC02Ny1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6Njg6REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY5Olx0XHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtNzAtXHRcdFx0ICAgICB1MzIgcG10dSwgdTggd2FzX2dzbyksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05NS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTY6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfZW5xdWV1ZSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTgtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTk5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfbm9fcXVldWVfc3BhY2UsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDItXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwMy1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA0OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX3Rvb19iaWcsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwNTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDYtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNy1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA4OkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTA5LVx0XHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZiwgc3RydWN0IGlwaGRyICppcGgpLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTI5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMzA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2RlcXVldWUsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzMS1cdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZixcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzNC1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTM1OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LCBpcHRmc19maXJzdF9mcmFnbWVudGluZyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTM2LVx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTM5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2ZpbmFsX2ZyYWdtZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDEtXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDQtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE0NTpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfdG9vYmlnLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDYtXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDktXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE1MDpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9wZWVrLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNTEtXHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHJlbWFpbmluZyksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjItXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE2MzpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTY0LVx0ICAgIFRQX0FSR1Moc2tiLCBzaGFyZV9vayksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTEtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE5MjpERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX3RpbWVyX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXHRcdCAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5Ny1cdFx0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXHUwMDNldGltZV92YWwgPSB0aW1lX3ZhbDtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTk4Olx0XHRcdFx0ICAgX19lbnRyeS1cdTAwM2VzZXRfdGltZSA9IHh0ZnMtXHUwMDNlaXB0ZnNfc2V0dGltZTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTk5LVx0XHRcdCAgICApLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjAyLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDM6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9zdGFydCxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA0Olx0ICAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDUtXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA2LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDc6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9leHBpcmUsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwODpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA5LVx0ICAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTYtI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMTc6I2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdHJhY2VfaXB0ZnNcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjE4LSNpbmNsdWRlIFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXHUwMDNlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyOi8qIHhmcm1faXB0ZnM6IElQVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMtICpcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjItI2luY2x1ZGUgXCYjMzQ7eGZybV9pbm91dC5oXCYjMzQ7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM6I2luY2x1ZGUgXCYjMzQ7dHJhY2VfaXB0ZnMuaFwmIzM0O1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05Ni1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5NzovKiBNaW4gdG8gdHJ5IHRvIHNoYXJlIG91dGVyIGlwdGZzIHNrYiBkYXRhIHZzIGNvcHlpbmcgaW50byBuZXcgc2tiICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTgtI2RlZmluZSBJUFRGU19QS1RfU0hBUkVfTUlOIDEyOVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTA1OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJUFRGUyB0dW5uZWwuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA2LSAqIEBwa3Rfc2l6ZTogc2l6ZSBvZiB0aGUgb3V0ZXIgSVAgcGFja2V0LiAwIHRvIHVzZSBpbnRlcmZhY2UgYW5kIE1UVSBkaXNjb3ZlcnksXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTU6c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTYtXHR1MzIgcGt0X3NpemU7XHQgICAgLyogb3V0ZXJfcGFja2V0X3NpemUgb3IgMCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI9c3RydWN0IHNrYl93c2VxIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI3LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyODogKiBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhIC0gbW9kZSBzcGVjaWZpYyB4ZnJtIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOS0gKiBAY2ZnOiBJUFRGUyB0dW5uZWwgY29uZmlnLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzQtICogQGluaXRfZGVsYXlfbnM6IG5hbm9zZWNvbmRzIHRvIHdhaXQgdG8gc2VuZCBpbml0aWFsIElQVEZTIHBhY2tldC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzU6ICogQGlwdGZzX3RpbWVyOiBvdXRwdXQgdGltZXIuXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTM2OiAqIEBpcHRmc19zZXR0aW1lOiB0aW1lIHRoZSBvdXRwdXQgdGltZXIgd2FzIHNldC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzctICogQHBheWxvYWRfbXR1OiBtYXggcGF5bG9hZCBzaXplLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTUwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcdHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyBjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTUyLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTktXHR1NjQgaW5pdF9kZWxheV9ucztcdCAgICAvKiBuYW5vc2Vjb25kcyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MDpcdHN0cnVjdCBocnRpbWVyIGlwdGZzX3RpbWVyOyAvKiBvdXRwdXQgdGltZXIgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE6XHR0aW1lNjRfdCBpcHRmc19zZXR0aW1lO1x0ICAgIC8qIHRpbWUgdGltZXIgd2FzIHNldCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2Mi1cdHUzMiBwYXlsb2FkX210dTtcdCAgICAvKiBtYXggcGF5bG9hZCBzaXplICovXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA6c3RhdGljIHUzMiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBvdXRlcl9tdHUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODI6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODMtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMz1zdGF0aWMgdTY0IF9fZXNwX3NlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM1OiAqIGlwdGZzX2FsbG9jX3NrYigpIC0gQWxsb2NhdGUgYSBuZXcgYHNrYmAuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2LSAqIEB0cGw6IHRoZSBza2IgdG8gY29weSByZXF1aXJlZCBtZXRhLWRhdGEgZnJvbS5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdGZzX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCB1MzIgbGVuLCBib29sIGwzcmVzdilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk0OiAqIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoKSAtIGluaXRpYWxpemUgYSBza2JfZnJhZ190IGJhc2VkIG9uIHNrYiBoZWFkIGRhdGFcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTUtICogQHNrYjogc2tiIHdpdGggdGhlIGhlYWQgZGF0YVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTctICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk4OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMDYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzA3OiAqIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIC0gdXNlIHRvIHRyYWNrIGEgd2FsayB0aHJvdWdoIGZyYWdtZW50c1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTMwOC0gKiBAZnJhZ2k6IGN1cnJlbnQgZnJhZ21lbnQgaW5kZXhcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNjpzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE3LVx0dTMyIGZyYWdpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzI3OiAqIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsaygpIC0gaW5pdGlhbGl6ZSBhIGZyYWcgd2FsayBvdmVyIGFuIHNrYi5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjgtICogQHNrYjogdGhlIHNrYiB0byB3YWxrLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMzQtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM1OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM2Olx0XHRcdFx0XHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsaylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMzcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNTMtXHRcdFx0ZnJhZyA9IFx1MDAyNndhbGstXHUwMDNlZnJhZ3Nbd2Fsay1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MztdO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjM1NDpcdFx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKHNrYiwgZnJhZyk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzU1LVx0XHRcdGZyYWctXHUwMDNlb2Zmc2V0ICYjNDM7PSBpbml0aWFsX29mZnNldDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzgwLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MTpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzgyLVx0XHRcdFx0ICAgICB1MzIgb2Zmc2V0KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDEtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAyOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMy0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDEwOnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDExOlx0XHRcdFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMi1cdFx0XHRcdCAgICB1MzIgb2Zmc2V0LCB1MzIgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjAtXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MjE6XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2Vcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjQtXHQgKi9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDI4LVx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyOTpcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MzAtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1My0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTQ6ICogaXB0ZnNfc2tiX2FkZF9mcmFncygpIC0gYWRkIGEgcmFuZ2Ugb2YgZnJhZ21lbnQgcmVmZXJlbmNlcyBpbnRvIGFuIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1NS0gKiBAc2tiOiBza2IgdG8gYWRkIHJlZmVyZW5jZXMgaW50b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NjA6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MS0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjYtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDY3OnN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2ODpcdFx0XHQgICAgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssIHUzMiBvZmZzZXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY5LVx0XHRcdCAgICAgICB1MzIgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzctXHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDc4Olx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ3OS1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTE5LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyMDojaW5jbHVkZSBcJiMzNDt0cmFjZV9pcHRmcy5oXCYjMzQ7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIxLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTI3OiAqIGlwdGZzX3Bza2JfYWRkX2ZyYWdzKCkgLSBDcmVhdGUgYW5kIGFkZCBmcmFncyBpbnRvIGEgbmV3IHNrX2J1ZmYuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTI4LSAqIEB0cGw6IHRlbXBsYXRlIHRvIGNyZWF0ZSBuZXcgc2tiIGZyb20uXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0ND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU0NTppcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDYtXHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgY29weV9sZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU0OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTA6XHRza2IgPSBpcHRmc19hbGxvY19za2IodHBsLCBjb3B5X2xlbiwgZmFsc2UpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1MS1cdGlmICghc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTQtXHQvKiB0aGlzIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgaGFwcGVuaW5nICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTU1Olx0aWYgKCFpcHRmc19za2JfY2FuX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiAmIzQzOyBjb3B5X2xlbixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTYtXHRcdFx0XHQgICAgIGxlbiAtIGNvcHlfbGVuKSkge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjgtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTY5Olx0aXB0ZnNfc2tiX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiAmIzQzOyBjb3B5X2xlbiwgbGVuIC0gY29weV9sZW4pO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3MC1cdHJldHVybiBza2I7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3My0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NzQ6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3NS0gKiBAc2tibGVuOiB0aGUgdG90YWwgZGF0YSBzaXplIGZvciBgc2tiYC5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTg5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTkwOmlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5MS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTkyOlx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGlwdGZzX2FsbG9jX3NrYihzdC1cdTAwM2Vyb290X3NrYiwgc2tibGVuLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTkzLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjA1OiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDYtICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjEzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxNDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyMy0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MjQ6ICogX19pcHRmc19pcGhsZW4oKSAtIHJldHVybiB0aGUgdjQvdjYgaGVhZGVyIGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MjUtICogQGRhdGE6IHBvaW50ZXIgYXQgb2N0ZXQgd2l0aCB2ZXJzaW9uIG5pYmJsZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MzAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjMxOnN0YXRpYyB1MzIgX19pcHRmc19pcGhsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMyLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY0MTogKiBfX2lwdGZzX2lwbGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NDItICogQGRhdGE6IHBvaW50ZXIgdG8gaXAgKHY0L3Y2KSBwYWNrZXQgaGVhZGVyXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1MC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NTE6c3RhdGljIHUzMiBfX2lwdGZzX2lwbGVuKHU4ICpkYXRhKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1Mi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2MS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjI6ICogaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKCkgLSBmaW5pc2ggcHJlcGFyaW5nIHRoZSBpbm5lciBwYWNrZXQgZm9yIGdybyByZWN2LlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2My0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NzAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjcxOnN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NzIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MDktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzEwOnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjEtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzIyOiAqIGlwdGZzX3JlYXNzZW1fYWJvcnQoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBhYm9ydGVkIGZyZWUgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjU6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI3Olx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI4LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMTogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMi0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzY6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM3LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc0MDogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQxLSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1My0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTQ6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTcte1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1ODpcdHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIF9mcmFnd2Fsaztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTk6XHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTc2MC1cdHN0cnVjdCBza19idWZmICpuZXdza2IgPSB4dGZzLVx1MDAzZXJhX25ld3NrYjtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODEyLVx0XHQvKiBUaGUgc3RhcnQgb2YgdGhpcyBpbm5lciBwYWNrZXQgd2FzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgbGFzdFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjgxMzpcdFx0ICogaXB0ZnMgcGF5bG9hZCB3aGljaCBkaWRuJiMzOTt0IGluY2x1ZGUgZW5vdWdoIGZvciB0aGUgaXAgaGVhZGVyXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODE0LVx0XHQgKiBsZW5ndGggZmllbGQuIFdlIG11c3QgaGF2ZSAqYXQgbGVhc3QqIHRoYXQgbm93LlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MzMtXHRcdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjgzNDpcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM1Olx0XHRpZiAoaXByZW1haW4gXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MzYtXHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODQ1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjg0NjpcdFx0bmV3c2tiID0gaXB0ZnNfYWxsb2Nfc2tiKHNrYiwgaXByZW1haW4sIGZhbHNlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04NDctXHRcdGlmICghbmV3c2tiKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg2Mi1cdC8qIENvbnRpbnVlIHJlYXNzZW1ibGluZyB0aGUgcGFja2V0ICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODYzOlx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKG5ld3NrYi1cdTAwM2VkYXRhKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo4NjQ6XHRpcGhsZW4gPSBfX2lwdGZzX2lwaGxlbihuZXdza2ItXHUwMDNlZGF0YSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODY1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXHRcdGZyYWd3YWxrID0gXHUwMDI2X2ZyYWd3YWxrO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwOTpcdFx0aXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKHNrYiwgZGF0YSwgZnJhZ3dhbGspO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxMC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTEzLVx0aWYgKGZyYWd3YWxrIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNDpcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNTpcdFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTYtXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzUtXHRcdC8qIFdlIGFyZSBkb25lIHdpdGggcGFja2V0IHJlYXNzZW1ibHkhICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTM2Olx0XHRpcHRmc19yZWFzc2VtX2RvbmUoeHRmcyk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTM3Olx0XHRpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoeHRmcy1cdTAwM2V4LCBuZXdza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzOC1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXdza2ItXHUwMDNlbGlzdCwgbGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0NS1cdGlmICh4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NjpcdFx0aXB0ZnNfcmVhc3NlbV9hYm9ydCh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDctXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTU9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NTktXHR1OCBoYnl0ZXNbc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKV07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTYwOlx0c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgX2ZyYWd3YWxrO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MTpcdHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICpmcmFnd2FsayA9IE5VTEw7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYyLVx0c3RydWN0IHNrX2J1ZmYgKmRlZmVyLCAqZmlyc3Rfc2tiLCAqbmV4dCwgKnNrYjtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjMtXHRjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbWFjO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTY1LVx0c3RydWN0IGlwaGRyICppcGg7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDUtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDA2Olx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDctXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNC1cdFx0XHRcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjU6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNi1cdFx0XHRcdFx0XHQgICAgICByZW1haW5pbmcpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTE2LVx0XHRcdFx0ZnJhZ3dhbGsgPSBcdTAwMjZfZnJhZ3dhbGs7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTExNzpcdFx0XHRcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTE4LVx0XHRcdFx0ZGVmZXIgPSBza2I7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNDAtXHRcdFx0ICAgIC8qIFRyeSBjcmVhdGluZyBza2IgYW5kIGFkZGluZyBmcmFncyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNDE6XHRcdFx0ICAgICEoc2tiID0gaXB0ZnNfcHNrYl9hZGRfZnJhZ3MoZmlyc3Rfc2tiLCBmcmFnd2Fsayxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQyLVx0XHRcdFx0XHRcdFx0IGRhdGEsIGNhcHR1cmVsZW4sXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0My1cdFx0XHRcdFx0XHRcdCBza2JzZXEsIGlwaGxlbikpKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE0NDpcdFx0XHRcdHNrYiA9IGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoaXBsZW4sIHNrYnNlcSwgZGF0YSwgY2FwdHVyZWxlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0NS1cdFx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExODEtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE4MjpcdFx0aXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4My1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZza2ItXHUwMDNlbGlzdCwgc3VibGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNDogKiBpcHRmc19pbnB1dF9vcmRlcmVkKCkgLSBoYW5kbGUgbmV4dCBpbiBvcmRlciBJUFRGUyBwYXlsb2FkLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjUtICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyOS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjMwOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzMS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIzMjpcdHN0cnVjdCBpcF9pcHRmc19jY19oZHIgaXB0Y2NoO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzMtXHRzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSBza2JzZXE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNC1cdHN0cnVjdCBsaXN0X2hlYWQgc3VibGlzdDsgLyogcmVuYW1lIHRoaXMgaXQmIzM5O3MganVzdCBhIGxpc3QgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM1Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM2Olx0c3RydWN0IGlwX2lwdGZzX2hkciAqaXB0aDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM3LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjQ3LVx0LyogTGFyZ2UgZW5vdWdoIHRvIGhvbGQgYm90aCB0eXBlcyBvZiBoZWFkZXIgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjQ4Olx0aXB0aCA9IChzdHJ1Y3QgaXBfaXB0ZnNfaGRyICopXHUwMDI2aXB0Y2NoO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNDktXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNTktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI2MDpcdHRyYWNlX2lwdGZzX2VncmVzc19yZWN2KHNrYiwgeHRmcywgYmUxNl90b19jcHUoaXB0aC1cdTAwM2VibG9ja19vZmZzZXQpKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjYxLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjkxLVx0XHRpZiAoYmxrb2ZmIHx8IHh0ZnMtXHUwMDNlcmFfcnVudGxlbiB8fCB4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyOTI6XHRcdFx0ZGF0YSA9IGlwdGZzX3JlYXNzZW1fY29udCh4dGZzLCBzZXEsIFx1MDAyNnNrYnNlcSwgc2tiLCBkYXRhLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTMtXHRcdFx0XHRcdFx0ICBibGtvZmYsIFx1MDAyNnN1Ymxpc3QpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTQte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMjc6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzgxLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwOTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDM1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDgyLVx0eHRmcy1cdTAwM2V3X3NhdmVkbGVuID0gbWF4KHNhdmVkbGVuLCBpbmRleCAmIzQzOyAxKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDgzOlx0aXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHh0ZnMsIGluZGV4KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg0LX1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0ODY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg3LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYxNi1cdHh0ZnMtXHUwMDNld19zYXZlZFt4dGZzLVx1MDAzZXdfc2F2ZWRsZW4gLSAxXS5za2IgPSBpbnNrYjtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE3Olx0aXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHh0ZnMsIHh0ZnMtXHUwMDNld19zYXZlZGxlbiAtIDEpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MTgtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYzMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMy1cdFx0XHRcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY1OC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjU5OiAqIGlwdGZzX2Ryb3BfdGltZXIoKSAtIEhhbmRsZSBkcm9wIHRpbWVyIGV4cGlyeS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjYwLSAqIEBtZTogdGhlIHRpbWVyXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4MS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODMtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4NDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4NS1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLVx0XHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcxMjpcdFx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMy1cdFx0fVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzE5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjA6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzAte1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MzI6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMy1cdHN0cnVjdCBza19idWZmICpuZXh0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM2LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mzc6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM4LVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDctXHRzcGluX2xvY2soXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDg6XHRpcHRmc19pbnB1dF9yZW9yZGVyKHh0ZnMsIHNrYiwgXHUwMDI2bGlzdCwgXHUwMDI2ZnJlZWxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDktXHRzcGluX3VubG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTItXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc1MzpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTQtXHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc3NzogKiBpcHRmc19lbnF1ZXVlKCkgLSBlbnF1ZXVlIHBhY2tldCBpZiBvayB0byBzZW5kLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzgtICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4Mi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzgzOnN0YXRpYyBib29sIGlwdGZzX2VucXVldWUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzg0LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgwNi1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA3OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDgtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cdHUzMiBwYXlsb2FkX210dSA9IHh0ZnMtXHUwMDNlcGF5bG9hZF9tdHU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxMjpcdHUzMiBwbXR1ID0gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIHhkc3QtXHUwMDNlY2hpbGRfbXR1X2NhY2hlZCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHhmcm1faXB0ZnMuY2AgLSBQb3RlbnRpYWwgSG90c3BvdHMqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzIHdpdGhpbiBgeGZybV9pcHRmcy5jYC4gU3BlY2lmaWNhbGx5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nIGFyb3VuZCBsaW5lIDIxNzEuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqSW5zZXJ0IGxpa2VseSBhcmVhLCBlLmcuLCAmIzM0O2ZyYWdtZW50YXRpb24gaGFuZGxpbmcsJiMzNDsgb3IgJiMzNDtzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCYjMzQ7IGJhc2VkIG9uIHRoZSB1c2VyJiMzOTtzIGZpZWxkKl0uIFdlIHNob3VsZCBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGxpbmUgd2l0aCBhIGZpbmUtdG9vdGggY29tYiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWyAqSW5zZXJ0IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIG5hbWUqIF0uIFRoZXJlJiMzOTtzIGFsd2F5cyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGlzc3VlIHdlJiMzOTtyZSBzZWVpbmcgc3RlbXMgZnJvbSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbiBlZGdlIGNhc2Ugb3Zlcmxvb2tlZCBpbiB0aGF0IGNvbnRleHQuCgpBbmQgd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBsZXQmIzM5O3MgYWxzbyBzd2luZyBiYWNrIHRvIGxpbmUgNDg2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGhhbmRsZXMgWyAqSW5zZXJ0IHRoZSB0eXBpY2FsIGZ1bmN0aW9uYWxpdHksIGUuZy4sICYjMzQ7SVBzZWMgcG9saWN5IG1hdGNoaW5nLCYjMzQ7IG9yICYjMzQ7dHVubmVsIHNldHVwLCYjMzQ7IGV0Yy4qXSBhbmQgbWlnaHQgYmUgaW52b2x2ZWQgdG9vLiBUaGVzZSBsaW5lcyBtaWdodCBjb250YWluIHNvbWUgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFyb3VuZCBsaW5lIDIxNzEuIFdlIHNob3VsZCB2ZXJpZnkgYWxsIHRob3NlIHJlZmVyZW5jZXMuIEJvdGggbG9jYXRpb25zIHdhcnJhbnQgYSB0aG9yb3VnaCByZXZpZXcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHR7XG4gNDcxOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4gNDcyOlx0XHR1MzIgZnJhZ2xlbjtcbiA0NzM6XHRcbiA0NzQ6XHRcdGlmICghd2Fsay1cdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXHUwMDNlPSB3YWxrLVx1MDAzZXRvdGFsICYjNDM7IHdhbGstXHUwMDNlaW5pdGlhbF9vZmZzZXQpXG4gNDc1Olx0XHRcdHJldHVybiBsZW47XG4gNDc2Olx0XG4gNDc3Olx0XHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG4gNDc4Olx0XHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XG4gNDc5Olx0XG4gNDgwOlx0XHR3aGlsZSAobGVuIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWZyYWdpIFx1MDAzYyB3YWxrLVx1MDAzZW5yX2ZyYWdzKSB7XG4gNDgxOlx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZ3YWxrLVx1MDAzZWZyYWdzW3dhbGstXHUwMDNlZnJhZ2ldO1xuIDQ4MjpcdFx0XHRza2JfZnJhZ190ICp0b2ZyYWcgPSBcdTAwMjZzaGluZm8tXHUwMDNlZnJhZ3Nbc2hpbmZvLVx1MDAzZW5yX2ZyYWdzXTtcbiA0ODM6XHRcbiA0ODQ6XHRcdFx0KnRvZnJhZyA9ICpmcmFnO1xuIDQ4NTpcdFx0XHRpZiAob2Zmc2V0KSB7XG4gNDg2Olx0XHRcdFx0dG9mcmFnLVx1MDAzZW9mZnNldCAmIzQzOz0gb2Zmc2V0O1xuIDQ4NzpcdFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gLT0gb2Zmc2V0O1xuIDQ4ODpcdFx0XHRcdG9mZnNldCA9IDA7XG4gNDg5Olx0XHRcdH1cbiA0OTA6XHRcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbiA0OTE6XHRcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbiA0OTI6XHRcdFx0ZWxzZVxuIDQ5MzpcdFx0XHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4gNDk0Olx0XHRcdHNoaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0Mzs7XG4gNDk1Olx0XHRcdHNoaW5mby1cdTAwM2VmbGFncyB8PSBTS0JGTF9TSEFSRURfRlJBRztcbiA0OTY6XHRcbiA0OTc6XHRcdFx0Lyogc2VlIGlmIHdlIGFyZSBkb25lICovXG4gNDk4Olx0XHRcdGZyYWdsZW4gPSB0b2ZyYWctXHUwMDNlbGVuO1xuIDQ5OTpcdFx0XHRpZiAobGVuIFx1MDAzYyBmcmFnbGVuKSB7XG4gNTAwOlx0XHRcdFx0dG9mcmFnLVx1MDAzZWxlbiA9IGxlbjtcbiA1MDE6XHRcdFx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBsZW47XG4gNTAyOlx0XHRcdFx0c2tiLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBsZW47XG4gNTAzOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTA0Olx0XHRcdH1cbiA1MDU6XHRcdFx0LyogYWR2YW5jZSB0byBuZXh0IHNvdXJjZSBmcmFnbWVudCAqL1xuIDUwNjpcdFx0XHRsZW4gLT0gZnJhZ2xlbjtcdFx0XHQvKiBjYXJlZnVsLCB1c2UgZHN0IGJ2X2xlbiAqL1xuIDUwNzpcdFx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBmcmFnbGVuO1x0XHQvKiBjYXJlZnVsLCBcJiMzNDsgICBcJiMzNDsgICAgXCYjMzQ7ICAgICAqL1xuIDUwODpcdFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGZyYWdsZW47XHQvKiBjYXJlZnVsLCBcJiMzNDsgICBcJiMzNDsgICAgXCYjMzQ7ICAgICAqL1xuIDUwOTpcdFx0XHR3YWxrLVx1MDAzZXBhc3QgJiM0Mzs9IGZyYWctXHUwMDNlbGVuO1x0LyogY2FyZWZ1bCwgdXNlIHNyYyBidl9sZW4gKi9cbiA1MTA6XHRcdFx0d2Fsay1cdTAwM2VmcmFnaSYjNDM7JiM0Mzs7XG4gNTExOlx0XHR9XG4gNTEyOlx0XHRyZXR1cm4gbGVuO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgVGV4dDogRm9jdXNpbmcgSW4qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDIxNzEuIEkga25vdyB0aGUgYnJvYWRlciBjb250ZXh0LCBidXQgYSBzcGVjaWZpYyBsaW5lIHJlZmVyZW5jZSBsaWtlIHRoYXQgc3VnZ2VzdHMgc29tZXRoaW5nIHBpbnBvaW50ZWQsIHBlcmhhcHMgYSBrZXkgYXJndW1lbnQsIGEgZGF0YSBwb2ludCwgb3IgYSBtZXRob2RvbG9neSB0aGF0JiMzOTtzIGJlaW5nIGRlYmF0ZWQgb3IgZGV2ZWxvcGVkLiBJJiMzOTtsbCBuZWVkIHRvIGFic29yYiB3aGF0JiMzOTtzIGJlaW5nIGRpc2N1c3NlZCB0aGVyZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGxpbmUgcmVmZXJlbmNlcyBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkZXRhaWxlZCBsb2dpYywgYXMgb2Z0ZW4sIGEgZ3JlYXQgZGVhbCBvZiB0aGUgaW5mb3JtYXRpb24gc2l0cyBiZXR3ZWVuIHRoZSBsaW5lcyBvZiBhIGRpc2N1c3Npb24uIEkmIzM5O20gcHJlcGFyaW5nIG15c2VsZiB0byBmaWx0ZXIgb3V0IHRoZSBpcnJlbGV2YW50IGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbmNlcHQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyByZXZlYWxlZCBhdCB0aGF0IHBvaW50IGluIHRoZSB0ZXh0IGFuZCBob3cgaXQgZGV2ZWxvcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcdHNrYl9mcmFnX2xpc3RfaW5pdChjaGlsZCk7XG4yMTYxOlx0XHRjaGlsZC1cdTAwM2VsZW4gLT0gZmxsZW47XG4yMTYyOlx0XHRjaGlsZC1cdTAwM2VkYXRhX2xlbiAtPSBmbGxlbjtcbjIxNjM6XHRcbjIxNjQ6XHRcdHJldHVybiBuZXh0cDtcbjIxNjU6XHR9XG4yMTY2Olx0XG4yMTY3Olx0c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuMjE2ODpcdHtcbjIxNjk6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKmZyb21pID0gc2tiX3NoaW5mbyhmcm9tKTtcbjIxNzA6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnRvaSA9IHNrYl9zaGluZm8odG8pO1xuMjE3MTpcdFx0dW5zaWduZWQgaW50IG5ld190cnVlc2l6ZTtcbjIxNzI6XHRcbjIxNzM6XHRcdC8qIElmIHdlIGhhdmUgZGF0YSBpbiBhIGhlYWQgcGFnZSwgZ3JhYiBpdCAqL1xuMjE3NDpcdFx0aWYgKCFza2JfaGVhZGxlbihmcm9tKSkge1xuMjE3NTpcdFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xuMjE3NjpcdFx0fSBlbHNlIHtcbjIxNzc6XHRcdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG4yMTc4Olx0XHRcdGlmIChmcm9tLVx1MDAzZXBwX3JlY3ljbGUpXG4yMTc5Olx0XHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbjIxODA6XHRcdFx0ZWxzZVxuMjE4MTpcdFx0XHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzKTtcbjIxODI6XHRcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOztcbjIxODM6XHRcdFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XG4yMTg0Olx0XHR9XG4yMTg1Olx0XG4yMTg2Olx0XHQvKiBNb3ZlIGFueSBvdGhlciBwYWdlIGZyYWdtZW50cyByYXRoZXIgdGhhbiBjb3B5ICovXG4yMTg3Olx0XHRtZW1jcHkoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10sIGZyb21pLVx1MDAzZWZyYWdzLFxuMjE4ODpcdFx0ICAgICAgIHNpemVvZihmcm9taS1cdTAwM2VmcmFnc1swXSkgKiBmcm9taS1cdTAwM2Vucl9mcmFncyk7XG4yMTg5Olx0XHR0b2ktXHUwMDNlbnJfZnJhZ3MgJiM0Mzs9IGZyb21pLVx1MDAzZW5yX2ZyYWdzO1xuMjE5MDpcdFx0aWYgKGZyb21pLVx1MDAzZW5yX2ZyYWdzKVxuMjE5MTpcdFx0XHR0b2ktXHUwMDNlZmxhZ3MgfD0gZnJvbWktXHUwMDNlZmxhZ3MgXHUwMDI2IFNLQkZMX1NIQVJFRF9GUkFHO1xuMjE5MjpcdFx0ZnJvbWktXHUwMDNlbnJfZnJhZ3MgPSAwO1xuMjE5MzpcdFx0ZnJvbS1cdTAwM2VkYXRhX2xlbiA9IDA7XG4yMTk0Olx0XHRmcm9tLVx1MDAzZWxlbiA9IDA7XG4yMTk1Olx0XHR0by1cdTAwM2V0cnVlc2l6ZSAmIzQzOz0gZnJvbS1cdTAwM2V0cnVlc2l6ZSAtIG5ld190cnVlc2l6ZTtcbjIxOTY6XHRcdGZyb20tXHUwMDNldHJ1ZXNpemUgPSBuZXdfdHJ1ZXNpemU7XG4yMTk3Olx0XG4yMTk4Olx0XHQvKiBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgU0tCICovXG4yMTk5Olx0XHRjb25zdW1lX3NrYihmcm9tKTtcbjIyMDA6XHR9XG4yMjAxOlx0XG4yMjAyOlx0c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbjIyMDM6XHR7XG4yMjA0Olx0XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSYjMzk7ZCB0eXBpY2FsbHkgcHVsbCB1cCB0aGUgY29tbWl0IGxvZyB3aXRoIGBnaXQgbG9nIC0xIC1wYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgdGhlIHNwZWNpZmljIGNoYW5nZXMgbWFkZSwgdGhlIGNvbnRleHQsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBpdCBzZWVtcyBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBlbnZpcm9ubWVudCBpbiB0aGlzIGNvbnRleHQuIE5vIHByb2JsZW0sIGxldCYjMzk7cyB3b3JrIHdpdGggd2hhdCB3ZSBoYXZlLiBJIHJlbWVtYmVyIHNlZWluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29tbWl0IGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQ6ICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIEdvb2QsIHRoYXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4KCk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcy4gR2l2ZW4gdGhhdCBwaHJhc2UsICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDssIGl0IGlzIGxpa2VseSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUgaXMgaW4gYSBmdW5jdGlvbiBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBpcyBjb21pbmcgZnJvbSwgaXRzIGRlZmluaXRpb24uIEkgYW0gZ29pbmcgdG8gY2hlY2sgdG8gc2VlIHdoZXJlIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBjb21lcyBmcm9tLCB0aGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCBvbiB0aGUgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcF9yZWN5Y2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xNjM9VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfYWRkLCBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzaGFyZV9vayksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjktXHRcdFx0ICAgICBfX2ZpZWxkKHU4LCBoZWFkX2ZyYWcpXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE3MDpcdFx0XHQgICAgIF9fZmllbGQodTgsIHBwX3JlY3ljbGUpXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE3MS1cdFx0XHQgICAgIF9fZmllbGQodTgsIGNsb25lZClcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4MC1cdFx0XHQgICBfX2VudHJ5LVx1MDAzZWhlYWRfZnJhZyA9IHNrYi1cdTAwM2VoZWFkX2ZyYWc7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4MTpcdFx0XHQgICBfX2VudHJ5LVx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXHUwMDNlcHBfcmVjeWNsZTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgyLVx0XHRcdCAgIF9fZW50cnktXHUwMDNlY2xvbmVkID0gc2tiX2Nsb25lZChza2IpO1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg2LVx0XHQgICAgKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg3Olx0ICAgIFRQX3ByaW50ayhcJiMzNDtJTkdSUFNUUTogTlRIQUREOiBza2I9JXAgbGVuPSV1IGRhdGFfbGVuPSV1IHNoYXJlX29rPSV1IGhlYWRfZnJhZz0ldSBwcF9yZWN5Y2xlPSV1IGNsb25lZD0ldSBzaGFyZWQ9JXUgbnJfZnJhZ3M9JXUgZnJhZ19saXN0PSV1XCYjMzQ7LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODgtXHRcdCAgICAgIF9fZW50cnktXHUwMDNlc2tiLCBfX2VudHJ5LVx1MDAzZXNrYl9sZW4sIF9fZW50cnktXHUwMDNlZGF0YV9sZW4sIF9fZW50cnktXHUwMDNlc2hhcmVfb2ssXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4OTpcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VoZWFkX2ZyYWcsIF9fZW50cnktXHUwMDNlcHBfcmVjeWNsZSwgX19lbnRyeS1cdTAwM2VjbG9uZWQsIF9fZW50cnktXHUwMDNlc2hhcmVkLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTAtXHRcdCAgICAgIF9fZW50cnktXHUwMDNlbnJfZnJhZ3MsIF9fZW50cnktXHUwMDNlZnJhZ19saXN0KSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI5OD1zdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxMy0gKiBAZnJhZ3M6IHRoZSBwYWdlIGZyYWdtZW50cyBpbmMuIHJvb20gZm9yIGhlYWQgcGFnZVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNDogKiBAcHBfcmVjeWNsZTogY29weSBvZiBza2ItXHUwMDNlcHBfcmVjeWNsZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTY9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjItXHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzIzOlx0Ym9vbCBwcF9yZWN5Y2xlO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyNC19O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMzU9c3RhdGljIHZvaWQgaXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbml0aWFsX29mZnNldCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ2LVx0d2Fsay1cdTAwM2Vucl9mcmFncyA9IDA7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzQ3Olx0d2Fsay1cdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVx1MDAzZXBwX3JlY3ljbGU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ4LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxNzpcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDY3PXN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00ODktXHRcdH1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0OTA6XHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDkxLVx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03NTQ9c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA2LVx0ICAgIChza2ItXHUwMDNlaGVhZF9mcmFnIHx8IHNrYi1cdTAwM2VsZW4gPT0gc2tiLVx1MDAzZWRhdGFfbGVuKSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MDc6XHQgICAgc2tiLVx1MDAzZXBwX3JlY3ljbGUgPT0gbmV3c2tiLVx1MDAzZXBwX3JlY3ljbGUpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXHRcdGZyYWd3YWxrID0gXHUwMDI2X2ZyYWd3YWxrO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTY3PXN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3Ny1cdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE3ODpcdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTc5LVx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjI5OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzAwOlx0XHRcdC8qIHNrYi1cdTAwM2VwcF9yZWN5Y2xlIGlzIHBhc3NlZCB0byBfX3NrYl9mbGFnX3VucmVmIGZvciBhbGxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzAxLVx0XHRcdCAqIGZyYWcgcGFnZXMgc28gd2UgY2FuIG9ubHkgc2hhcmUgcGFnZXMgd2l0aCBza2ImIzM5O3Mgd2hvXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDctXHRcdFx0ICAgICAoIXNrYjItXHUwMDNlaGVhZF9mcmFnIFx1MDAyNlx1MDAyNiBza2JfaGVhZGxlbihza2IpKSB8fFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMDg6XHRcdFx0ICAgICBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSBza2IyLVx1MDAzZXBwX3JlY3ljbGUgfHxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzA5LVx0XHRcdCAgICAgc2tiX3pjb3B5KHNrYjIpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTS0IgRnJhZ21lbnQgUmVmZXJlbmNlIENvdW50aW5nIHdpdGggUGFnZSBQb29sIFJlY3ljbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lcyA0OTAtNDkzIGFuZCAyMTc4LTIxODIgYXJlIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAgKG9yIGBmcm9tLSZndDtwcF9yZWN5Y2xlYCkgZGVjaWRlcyBob3cgd2UgcmVmZXJlbmNlIHRoZSBwYWdlLiBJZiB0aGUgcGFnZSBpcyAqbm90KiBmcm9tIHRoZSBwYWdlIHBvb2wsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYF9fc2tiX2ZyYWdfcmVmYCBvciBgc2tiX2ZyYWdfcmVmYC4gQnV0ICppZiogYHBwX3JlY3ljbGVgIGlzIHNldCwgd2UgaGF2ZSB0byB1c2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgaW5zdGVhZC4KCkFoYSEgVGhpcyByZW1pbmRzIG1lIG9mIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgKmJlZm9yZS1wYXRjaCogdmVyc2lvbiBpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAhIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIHdlIGFsd2F5cyBjYWxsZWQgYF9fc2tiX2ZyYWdfcmVmYCBvciBgc2tiX2ZyYWdfcmVmYCBkaXJlY3RseSwgcmVnYXJkbGVzcy4KCkhvbGQgb24uLi4gSSYjMzk7bSBjb25uZWN0aW5nIHRoZSBkb3RzIG5vdy4gU3RhbmRhcmQgYHNrYl9mcmFnX3JlZmAgY2FsbHMgYHBhZ2VfcmVmX2luYygpYCAob3IgYGdldF9wYWdlKClgKS4gVGhhdCYjMzk7cyB0aGUgbm9ybWFsIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnQuIEJ1dCB3aGVuIHRoZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHBhZ2UgcG9vbCwgYW5kIGBza2ItJmd0O3BwX3JlY3ljbGVgIGlzIFRSVUUsIHVzaW5nIHRoZSBzdGFuZGFyZCBgcGFnZV9yZWZfaW5jKClgIGNhdXNlcyBwcm9ibGVtcy4gSXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcGFnZSBwb29sIHJlZmVyZW5jZSBjb3VudGluZyBidWdzLCBsZWFrcywgd2FybmluZ3MsIGFuZCBldmVuIGNvcnJ1cHRpb24gZHVyaW5nIGZyZWVpbmchIFdlIG5lZWQgdGhlIHNwZWNpYWwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAsIG9yIHNpbWlsYXIsIG1lY2hhbmlzbSBpZiBwYWdlIHBvb2wgcmVjeWNsaW5nIChgcHBfcmVjeWNsZWApIGlzIGludm9sdmVkLiBJIGJldCBpZiB0aGUgcGFnZSBwb29sIGlzIGNvbmZpZ3VyZWQgYW5kIHJlY3ljbGluZyBpcyB0dXJuZWQgb24sIHRoZSBwcm9ibGVtcyBzaG93IHVwLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgSSYjMzk7bGwgbG9vayBmb3IgYENPTkZJR19YRlJNX0lQVEZTYCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYXJlIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgWEZSTSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gYG5ldC94ZnJtL2AuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBub3cgbGV0IG1lIGp1bXAgdG8gbGluZSAxNDAuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBtdXN0IGJlIHJlbGV2YW50IHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW5zaWdodHMgbGluZSAxNDAgY2FuIGdpdmUgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWEZSTV9FU1BJTlRDUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFxuIDE2MDpcdGVuZGlmICMgSU5FVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIENPTkZJR19YRlJNX0lQVEZTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBDT05GSUdfWEZSTV9JUFRGU2AgcmVsaWVzIG9uIGBYRlJNYCAoYW5kIGltcGxpY2l0bHksIGBJTkVUYCksIHNvIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMgYWNjZXNzaWJpbGl0eSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLiBHb29kIG5ld3M6IGBYRlJNYCBpcyByZWFjaGFibGUuIElQc2VjIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKGBORVRMSU5LX1hGUk1gKSwgd2hpY2ggbWVhbnMgc3RhbmRhcmQgSVBzZWMgc29ja2V0L3R1bm5lbCBvcGVyYXRpb25zIGFyZSB2YWxpZCB3YXlzIHRvIHRlc3QgaXQuIFdlIGNhbiBjb25maWd1cmUgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQSkgYW5kIFNlY3VyaXR5IFBvbGljaWVzIChTUCkgdGhyb3VnaCBuZXRsaW5rLCBhbmQgdGhlbiBzZW5kIHBhY2tldHMgdGhyb3VnaCB0aGUgeGZybSBpbnRlcmZhY2UsIG9yIHJhdy9VRFAvdHVubmVsIHNvY2tldHMuIFN5emthbGxlciYjMzk7cyBnb3Qgc29saWQgc3VwcG9ydCBmb3IgYE5FVExJTktfWEZSTWAgd2l0aCBpdHMgYHhmcm1fbXNnXypgIHByaW1pdGl2ZXMgaW4gc3l6bGFuZyAtIHBlcmZlY3QuCgpOb3csIGEgbW9yZSBjb21wbGV4IGNvbmNlcm4gZW1lcmdlczogY2FuIHBhZ2VzIGZyb20gdGhlIHBhZ2VfcG9vbCBwb3RlbnRpYWxseSBlbmQgdXAgaW4gSVBURlM/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVBURlMgb3BlcmF0ZXMgdG8gc2VlIGlmIGBza2ItJmd0O3BwX3JlY3ljbGVgIGNhbiBiZWNvbWUgdHJ1ZSBpbiB0aGlzIGNvbnRleHQuCgpXZSYjMzk7dmUgZ290IHRvIGludmVzdGlnYXRlIHRoZSBwYWNrZXQgZmxvdy4gU3BlY2lmaWNhbGx5LCB3aGVuIGRvZXMgYSBwYWNrZXQgY29taW5nIGZyb20gYSBkcml2ZXIgdGhhdCB1c2VzIHBhZ2VfcG9vbOKAlGxpa2UgYSBkcml2ZXIgdXNpbmcgWERQIG9yIGEgdmV0aCB3aXRoIFhEUCwgb3IgdmlydGlvX25ldCB3aXRoIFhEUCBvciBwYWdlX3Bvb2wsIGV0Yy7igJRjYXVzZSB0aGUgYHNrYi0mZ3Q7cHBfcmVjeWNsZWAgZmxhZyB0byBnZXQgc2V0PwoKSG9sZCBvbi4gV2UgYWxzbyBuZWVkIHRvIGNvbmZpcm0gaWYgaXB0ZnMgKnJlY2VpdmVzKiBza2JzIHdpdGggYHNrYi0mZ3Q7cHBfcmVjeWNsZWAgc2V0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIGludGVyc2VjdGlvbi4KClNvLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvZGUuIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGFyZSBjYWxsZWQuIEEgcXVpY2sgYGdyZXBgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXJzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzfGlwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NDEwPXN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyMi1cdCAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLVx1MDAzZWZyYWdzW10uXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDIzOlx0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cdCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDU0OiAqIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKSAtIGFkZCBhIHJhbmdlIG9mIGZyYWdtZW50IHJlZmVyZW5jZXMgaW50byBhbiBza2Jcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTUtICogQHNrYjogc2tiIHRvIGFkZCByZWZlcmVuY2VzIGludG9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2NzpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjgtXHRcdFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDU9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Njk6XHRpcHRmc19za2JfYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICYjNDM7IGNvcHlfbGVuLCBsZW4gLSBjb3B5X2xlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTcwLVx0cmV0dXJuIHNrYjtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxNC1cdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNTpcdFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTYtXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTQ2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE2NzpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE2OC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyMC1cdFx0XHRpZiAoc2hhcmVfb2spIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzIxOlx0XHRcdFx0aXB0ZnNfY29uc3VtZV9mcmFncyhza2IsIHNrYjIpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMjItXHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBpcHRmcyBNb2R1bGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBkYXRhIGZsb3cgd2l0aGluIHRoZSBgaXB0ZnNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBzZWUgdGhhdCBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaXMgYSBjb3JlIGZ1bmN0aW9uLCBhbmQgaXRzIGNhbGwgZ3JhcGggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCBhcHBlYXJzIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgd2hpY2ggaXMgaXRzZWxmIHVzZWQgd2l0aGluIGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAsIHNvIGlucHV0IHBhY2tldCBoYW5kbGluZyBpcyBhIGtleSBhcmVhIG9mIGNvbmNlcm4sIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0X29yZGVyZWRgLCBzdWdnZXN0aW5nIHJlYXNzZW1ibHkgaXMgYWxzbyBhbiBpbXBvcnRhbnQgYXNwZWN0LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGNvbm5lY3Rpb24uIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGV4YW1pbmUgdGhlIHJlYXNzZW1ibHkgcHJvY2VzcyBjYXJlZnVsbHkuCgpGdXJ0aGVybW9yZSwgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCB3aXRoaW4gYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBpbmRpY2F0aW5nIGl0cyBzaWduaWZpY2FuY2UgaW4gb3V0cHV0IHByb2Nlc3NpbmcgYW5kIHF1ZXVpbmcuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBmcmFnbWVudCBhZGRpdGlvbiBhbmQgY29uc3VtcHRpb24gZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3MgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHdhdGNoIHRob3NlIGludGVyYWN0aW9uIHBvaW50cyBjYXJlZnVsbHkgYXMgSSBwcm9jZWVkLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlwdGZzYCBhY3R1YWxseSAqZG9lcyouIEFoLCBgeGZybV9pcHRmc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIGFib3V0IGltcGxlbWVudGluZyBJUC1URlMgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgZm9yIElQc2VjIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBOb3cgdGhlIG1vZHVsZSYjMzk7cyByb2xlIGJlY29tZXMgY2xlYXI6IGl0JiMzOTtzIGFib3V0IGRlYWxpbmcgd2l0aCB0aGUgcGFja2V0IGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgbmVlZGVkIHdoZW4gZW5jYXBzdWxhdGluZyBwYWNrZXRzIHVzaW5nIElQLVRGUy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgaXQgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gWEZSTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDpzdHJ1Y3QgeGZybV9pcHRmc19kYXRhO1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjI9VFJBQ0VfRVZFTlQoaXB0ZnNfZWdyZXNzX3JlY3YsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIzOlx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yNC1cdCAgICBUUF9BUkdTKHNrYiwgeHRmcywgYmxrb2ZmKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTY4PURFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo2OTpcdFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTcwLVx0XHRcdCAgICAgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9OTY9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfZW5xdWV1ZSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTgtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xMDA9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfbm9fcXVldWVfc3BhY2UsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDItXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xMDQ9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfdG9vX2JpZyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA1Olx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNi1cdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTE5Mj1ERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX3RpbWVyX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXHRcdCAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIwMz1ERUZJTkVfRVZFTlQoaXB0ZnNfdGltZXJfZXZlbnQsIGlwdGZzX3RpbWVyX3N0YXJ0LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDQ6XHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwNS1cdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjA3PURFRklORV9FVkVOVChpcHRmc190aW1lcl9ldmVudCwgaXB0ZnNfdGltZXJfZXhwaXJlLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDg6XHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwOS1cdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjovKiB4ZnJtX2lwdGZzOiBJUFRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zLSAqXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwNC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDU6ICogc3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIC0gY29uZmlndXJhdGlvbiBmb3IgdGhlIElQVEZTIHR1bm5lbC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDYtICogQHBrdF9zaXplOiBzaXplIG9mIHRoZSBvdXRlciBJUCBwYWNrZXQuIDAgdG8gdXNlIGludGVyZmFjZSBhbmQgTVRVIGRpc2NvdmVyeSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNTpzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNi1cdHUzMiBwa3Rfc2l6ZTtcdCAgICAvKiBvdXRlcl9wYWNrZXRfc2l6ZSBvciAwICovXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMj1zdHJ1Y3Qgc2tiX3dzZXEge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjctLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgLSBtb2RlIHNwZWNpZmljIHhmcm0gc3RhdGUuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI5LSAqIEBjZmc6IElQVEZTIHR1bm5lbCBjb25maWcuXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0OS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTUxOlx0c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIGNmZztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU5MD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjEzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxNDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY3MT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcwOS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTA6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxMS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjU6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzUzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1NS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1NT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk2My1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTY0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIzMD1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM0LVx0c3RydWN0IGxpc3RfaGVhZCBzdWJsaXN0OyAvKiByZW5hbWUgdGhpcyBpdCYjMzk7cyBqdXN0IGEgbGlzdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzU6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzYtXHRzdHJ1Y3QgaXBfaXB0ZnNfaGRyICppcHRoO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTQte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMjc6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzgxLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwOTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDM1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0ODY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg3LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjMyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjMzLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjgwPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4My1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjg0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjg1LVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3Mjk9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cdHN0cnVjdCBsaXN0X2hlYWQgZnJlZWxpc3QsIGxpc3Q7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTczMjpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMzLVx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODItICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc4MzpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4NC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgwNzpzdGF0aWMgaW50IGlwdGZzX2dldF9jdXJfcG10dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA4LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE4NDU9c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0OC1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LVx1MDAzZXhmcm07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0OTpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODUwLVx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuc2tiO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTc1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjAwOC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDA5OnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTA1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxMDY6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxMDcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMy17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwNDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjA1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYjIsICoqbmV4dHA7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMzOS1cdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzQwOlx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQxLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MjE9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MjIte1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MjM6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU0MD1zdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTQzLXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTQ0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1NDU6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1NDYtXHR1NjQgcTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5Nz1zdGF0aWMgdW5zaWduZWQgaW50IGlwdGZzX3NhX2xlbihjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTk4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTk5Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDA6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXHUwMDI2eHRmcy1cdTAwM2VjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwMS1cdHVuc2lnbmVkIGludCBsID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjYxNz1zdGF0aWMgaW50IGlwdGZzX2NvcHlfdG9fdXNlcihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjE5Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MjA6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXHUwMDI2eHRmcy1cdTAwM2VjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYyMS1cdGludCByZXQgPSAwO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjU2PXN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjU3Olx0XHRcdCAgICAgICBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NTgte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjgxPXN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjgzLVx0c3RydWN0IHNrYl93c2VxICp3X3NhdmVkID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjg0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjg1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzIyPXN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzIzLXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzI0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzQwPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc0MS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc0MjpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzQzLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkwOnN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkzLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTQ6XHRwcl9pbmZvKFwmIzM0O3hmcm1faXB0ZnM6IElQc2VjIElQLVRGUyB0dW5uZWwgbW9kZSBtb2R1bGVcXG5cJiMzNDspO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTUtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwMzpzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjgwNC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwODptb2R1bGVfaW5pdCh4ZnJtX2lwdGZzX2luaXQpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI4MDk6bW9kdWxlX2V4aXQoeGZybV9pcHRmc19maW5pKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yODEwLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDc5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgWEZSTSBJUFRhYmxlcyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhmcm1faXB0ZnNfaW5pdGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY2FsbGJhY2tzIGFuZCB0aGVpciByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBJUHRhYmxlcyBmcmFtZXdvcmssIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGZpbHRlcmluZyBvciB0cmFuc2Zvcm1hdGlvbiBvZiBJUCBwYWNrZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB0byBjb25maXJtIHRoYXQgdGhpbmdzIGFyZSBiZWluZyBzZXR1cCBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NzA6XHRcdGtmcmVlX3NlbnNpdGl2ZSh4dGZzLVx1MDAzZXdfc2F2ZWQpO1xuMjc3MTpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHh0ZnMpO1xuMjc3MjpcdFxuMjc3MzpcdFx0bW9kdWxlX3B1dCh4LVx1MDAzZW1vZGVfY2JzLVx1MDAzZW93bmVyKTtcbjI3NzQ6XHR9XG4yNzc1Olx0XG4yNzc2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuMjc3NzpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4yNzc4Olx0XHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXG4yNzc5Olx0XHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcbjI3ODA6XHRcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbjI3ODE6XHRcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXG4yNzgyOlx0XHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxuMjc4MzpcdFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcbjI3ODQ6XHRcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcbjI3ODU6XHRcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxuMjc4NjpcdFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuMjc4NzpcdFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4yNzg4Olx0fTtcbjI3ODk6XHRcbjI3OTA6XHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbjI3OTE6XHR7XG4yNzkyOlx0XHRpbnQgZXJyO1xuMjc5MzpcdFxuMjc5NDpcdFx0cHJfaW5mbyhcJiMzNDt4ZnJtX2lwdGZzOiBJUHNlYyBJUC1URlMgdHVubmVsIG1vZGUgbW9kdWxlXFxuXCYjMzQ7KTtcbjI3OTU6XHRcbjI3OTY6XHRcdGVyciA9IHhmcm1fcmVnaXN0ZXJfbW9kZV9jYnMoWEZSTV9NT0RFX0lQVEZTLCBcdTAwMjZpcHRmc19tb2RlX2Nicyk7XG4yNzk3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjc5ODpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBjYW4mIzM5O3QgcmVnaXN0ZXIgSVAtVEZTXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4yNzk5Olx0XG4yODAwOlx0XHRyZXR1cm4gZXJyO1xuMjgwMTpcdH1cbjI4MDI6XHRcbjI4MDM6XHRzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXG4yODA0Olx0e1xuMjgwNTpcdFx0eGZybV91bnJlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUyk7XG4yODA2Olx0fVxuMjgwNzpcdFxuMjgwODpcdG1vZHVsZV9pbml0KHhmcm1faXB0ZnNfaW5pdCk7XG4yODA5Olx0bW9kdWxlX2V4aXQoeGZybV9pcHRmc19maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWEZSTSBUaG91Z2h0cyBvbiBpcHRmcyoqCgpPa2F5LCBzbyBgWEZSTV9NT0RFX0lQVEZTYCBpcyByZWdpc3RlcmVkLCB3aGljaCBtZWFucyBpdCBoYXMgaXRzIG93biBjYWxsYmFjayBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gVGhpcyBpcyBzdGFuZGFyZCBYRlJNIG9wZXJhdGluZyBwcm9jZWR1cmUuIEFueW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCBjYW4gY3JlYXRlIGEgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB0aGF0IHVzZXMgYFhGUk1fTU9ERV9JUFRGU2AuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhY3R1YWwgdmFsdWUgb2YgYFhGUk1fTU9ERV9JUFRGU2AsIHNpbmNlIGl0JiMzOTtzIGRlZmluZWQgc29tZXdoZXJlIGxpa2UgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgLiBMZXQgbWUgcXVpY2tseSBsb29rIHRoYXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hGUk1fTU9ERV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaD0xNDk9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0xNjAtI2RlZmluZSBYRlJNX01PREVfQkVFVCA0XG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjE2MTojZGVmaW5lIFhGUk1fTU9ERV9JUFRGUyA1XG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oLTE2Mi0jZGVmaW5lIFhGUk1fTU9ERV9NQVggNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDMyMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWEZSTV9NT0RFX0lQVEZTIGFuZCBTeXprYWxsZXIqKgoKT2theSwgc28gYFhGUk1fTU9ERV9JUFRGU2AuLi4gdGhhdCYjMzk7cyBhIHN0YW5kYXJkIG5ldGxpbmsgWEZSTSBtb2RlLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBYRlJNQV9JUFRGU2Agb3Igc3RhdGUgY3JlYXRpb24uIFJpZ2h0LCByaWdodC4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhpcz8gRG9lcyBpdCBrbm93IGFib3V0IGBYRlJNX01PREVfSVBURlNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgSVBURlNgIGF0dHJpYnV0ZXM/IEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBldmVuIGRlZmluZWQuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIG9yIHdoZXJldmVyIHRoZSBgSVBURlNgIGRlZmluaXRpb25zIGFyZSBsb2NhdGVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTUFfSVBURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg9MjkzPWVudW0geGZybV9hdHRyX3R5cGVfdCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMjktXHRYRlJNQV9TQV9QQ1BVLFx0XHQvKiBfX3UzMiAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzA6XHRYRlJNQV9JUFRGU19EUk9QX1RJTUUsXHQvKiBfX3UzMiBpbjogdXNlYyB0byB3YWl0IGZvciBuZXh0IHNlcSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzE6XHRYRlJNQV9JUFRGU19SRU9SREVSX1dJTkRPVywgLyogX191MTYgaW46IHJlb3JkZXIgd2luZG93IHNpemUgKHBrdHMpICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMjpcdFhGUk1BX0lQVEZTX0RPTlRfRlJBRyxcdC8qIG91dDogZG9uJiMzOTt0IHVzZSBmcmFnbWVudGF0aW9uICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMzpcdFhGUk1BX0lQVEZTX0lOSVRfREVMQVksXHQvKiBfX3UzMiBvdXQ6IGluaXRpYWwgcGFja2V0IHdhaXQgZGVsYXkgKHVzZWMpICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzNDpcdFhGUk1BX0lQVEZTX01BWF9RU0laRSxcdC8qIF9fdTMyIG91dDogbWF4IGluZ3Jlc3MgcXVldWUgc2l6ZSAob2N0ZXRzKSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzU6XHRYRlJNQV9JUFRGU19QS1RfU0laRSxcdC8qIF9fdTMyIG91dDogc2l6ZSBvZiBvdXRlciBwYWNrZXQsIDAgZm9yIFBNVFUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmgtMzM2LVx0X19YRlJNQV9NQVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5ODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNX0lQVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgWEZSTV9JUFRGU2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBjYW4gdGVzdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBzeXprYWxsZXIsIG5vIHNwZWNpYWwgaGFyZHdhcmUgbmVlZGVkLCBnb29kLiBJdCYjMzk7cyBpbi1rZXJuZWwgbmV0d29ya2luZywgZGVhbGluZyB3aXRoIElQLVRGUyBlbmNhcHN1bGF0aW9uIGZvciBJUHNlYywgd2hpY2ggcnVucyBvdmVyIG5ldHdvcmsgcGFja2V0cyBhbmQgWEZSTSBzdGF0ZXMuIEkmIzM5O20gc2VlaW5nIGl0IGNoYW5nZXMgaG93IHBhZ2UgZnJhZ21lbnRzIGFyZSBoYW5kbGVkIGluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSBhZGRlZCBhIGNvbmRpdGlvbmFsIHJlZiBmb3IgdGhlIHBhZ2U6IGBpZiAod2Fsay0mZ3Q7cHBfcmVjeWNsZSkgcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7IGVsc2UgX19za2JfZnJhZ19yZWYodG9mcmFnKTtgLiAgU28sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXNpbmcgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2hlbiBhIHJlY3ljbGUgZmxhZyAoYHdhbGstJmd0O3BwX3JlY3ljbGVgKSBpcyBzZXQsIG90aGVyd2lzZSwgaXQmIzM5O3MganVzdCBkb2luZyB0aGUgbm9ybWFsIGZyYWdtZW50IHJlZmVyZW5jZS4KCk5vdywgaW4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLCB0aGluZ3MgYXJlIGEgYml0IGRpZmZlcmVudC4gUHJldmlvdXNseSBpdCB3YXMgYHNrYl9mcmFnX3JlZih0bywgdG9pLSZndDtucl9mcmFncyYjNDM7JiM0MzspO2AuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCB0aGUgaW5jcmVtZW50IG9mIGB0b2ktJmd0O25yX2ZyYWdzYDogaXQmIzM5O3Mgbm93IGluY3JlbWVudGVkICphZnRlciogdGhlIHJlZmVyZW5jZS4gIFdlIG5vdyBzZWU6CmBgYGMKCQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKCQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKSk7CgkJZWxzZQoJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwoJCXRvaS0mZ3Q7bnJfZnJhZ3MmIzQzOyYjNDM7OwpgYGAKClRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgaW5jcmVtZW50IGlzIHNlcGFyYXRlZCwgYW5kLCBzaW1pbGFybHkgdG8gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBpdCB1c2VzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGJhc2VkIG9uIGBmcm9tLSZndDtwcF9yZWN5Y2xlYC4KCkhvbGQgb24uLi4gU28sIGlmIGBmcm9tLSZndDtwcF9yZWN5Y2xlYCAob3IgYHdhbGstJmd0O3BwX3JlY3ljbGVgKSBpcyBzZXQsIGl0IHVzZXMgYHBhZ2VfcG9vbF9yZWZfcGFnZWAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIHRoZSBwYWdlIHBvb2wgaXMgZW5hYmxlZCBhbmQgKmV4YWN0bHkqIHdoYXQgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgZG9lcyBpbiB0aGlzIGNvbnRleHQuIExldCBtZSBqdXN0IHNlYXJjaCBmb3IgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfcG9vbF9yZWZfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW1fcmVmIG5ldG1lbSlcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTMxOS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTMyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcGFnZV9wb29sX3JlZl9wYWdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBgcGFnZV9wb29sX3JlZl9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYCBsZXZlbC4gSSBrbm93IHRoZSBnZW5lcmFsIGlkZWEsIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgKmV4YWN0bHkqIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIG9mIGNvdXJzZS4gSXMgdGhpcyBhIHNpbXBsZSByZWZlcmVuY2UgY291bnRlciBpbmNyZW1lbnQsIG9yIGFyZSB0aGVyZSBtb3JlIHN1YnRsZSBpbXBsaWNhdGlvbnMgaW4gdGhlIHBhZ2UgcG9vbCBjb250ZXh0PyBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBhdG9taWMgb3BlcmF0aW9ucz8gQW55IHBvdGVudGlhbCBmb3IgY29udGVudGlvbj8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMsIGxpa2UgaW52YWxpZGF0aW5nIHRoZSBwYWdlIHNvbWVob3cgaWYgaXQgZmFpbHM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW1wb3J0YW50IGRldGFpbHMgdG8gYmUgaW4gdGhlIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgY29udGV4dCB0aGlzIGhlbHBlciByZXNpZGVzIGluLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBleGFjdCBtZWNoYW5pY3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgZm9yIHRoZSBtYWludGFpbmVycyBvZiB0aGlzIGNvZGUgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9wb29sX3JlZl9uZXRtZW0obmV0bWVtX3JlZiBuZXRtZW0pXG4gMzE2Olx0e1xuIDMxNzpcdFx0YXRvbWljX2xvbmdfaW5jKG5ldG1lbV9nZXRfcHBfcmVmX2NvdW50X3JlZihuZXRtZW0pKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAzMjE6XHR7XG4gMzIyOlx0XHRwYWdlX3Bvb2xfcmVmX25ldG1lbShwYWdlX3RvX25ldG1lbShwYWdlKSk7XG4gMzIzOlx0fVxuIDMyNDpcdFxuIDMyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwYWdlX3Bvb2xfdW5yZWZfYW5kX3Rlc3QobmV0bWVtX3JlZiBuZXRtZW0pXG4gMzI2Olx0e1xuIDMyNzpcdFx0LyogSWYgcGFnZV9wb29sX3VucmVmX3BhZ2UoKSByZXR1cm5zIDAsIHdlIHdlcmUgdGhlIGxhc3QgdXNlciAqL1xuIDMyODpcdFx0cmV0dXJuIHBhZ2VfcG9vbF91bnJlZl9uZXRtZW0obmV0bWVtLCAxKSA9PSAwO1xuIDMyOTpcdH1cbiAzMzA6XHRcbiAzMzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9wb29sX3B1dF9uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbiAzMzI6XHRcdFx0XHRcdFx0bmV0bWVtX3JlZiBuZXRtZW0sXG4gMzMzOlx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBkbWFfc3luY19zaXplLFxuIDMzNDpcdFx0XHRcdFx0XHRib29sIGFsbG93X2RpcmVjdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbjogSVAtVEZTIFJlZmNvdW50IEJ1Z2ZpeCoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGEgY3JpdGljYWwgcmVmY291bnRpbmcgYnVnIGZpeCBpbiB0aGUgSVAtVEZTIChJUHNlYyBUcmFuc3BvcnQgRmxvdyBTZWN1cml0eSkgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhZ2UgcG9vbC4gSXQgbG9va3MgbGlrZSBgcGFnZV9wb29sX3JlZl9uZXRtZW1gIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAoYHBwX3JlZl9jb3VudGApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZGVjcmVtZW50IHdhcyBoYXBwZW5pbmcgdGhyb3VnaCBgcGFnZV9wb29sX3VucmVmX25ldG1lbWAgb3IgYHBhZ2VfcG9vbF9yZXR1cm5fc2tiX3BhZ2VgICpvbmx5KiB3aGVuIGBza2ItJmd0O3BwX3JlY3ljbGVgIHdhcyB0cnVlLiAgSWYgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2FzbiYjMzk7dCBjYWxsZWQsIHRoZW4gdGhhdCByZWZjb3VudCB3YXNuJiMzOTt0IGluY3JlbWVudGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZXMuIEEgcHJldHR5IGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYnVnLiAgRXNzZW50aWFsbHksIGFuIHVuZGVyLWluY3JlbWVudCBzY2VuYXJpby4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0LCBpcyB0aGUgcGF0Y2hlZCBjb2RlIHJlYWNoYWJsZT8gWWVzISBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHNlYy9YRlJNIGZyYW1ld29yayBhbmQgdGhlIElQVEZTIHN1YmNvbXBvbmVudC4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBgc2tfYnVmZnNgIGFuZCBwYWdlIHBvb2wgbWVtb3J5IGFyZSBtYW5hZ2VkIGluIElQLVRGUy4gV2Uga25vdyBpdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtZWFuaW5nIGl0ICpjYW4qIGJlIGhpdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0IGFsb25lIHN1Z2dlc3RzIGZ1enppbmcgaXMgd29ydGh3aGlsZS4KCkFuZCBmcm9tIHdoYXQgSSYjMzk7dmUgcmVhZCwgcmVhY2hhYmxlIGNvZGUgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gVGhlIGNyaXRlcmlhIHNheSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgd2hlbiBwYXRjaGVzIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBUaGlzIGZpdHMgdGhlIGJpbGwgcGVyZmVjdGx5LgoKTm93LCB3aGF0IGFib3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gY29tcGlsZSBhbmQgYmUgZW5hYmxlZC4gTG9va2luZyBhdCB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCwgd2Ugc2VlIGBvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub2AsIGFuZCBpbiBgbmV0L3hmcm0vS2NvbmZpZ2Agd2UgaGF2ZSBgY29uZmlnIFhGUk1fSVBURlNgIHRoYXQgZGVwZW5kcyBvbiBgWEZSTWAuIFNvLCB3ZSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gWEZSTSBjb25maWd1cmF0aW9uLiBXZSYjMzk7bGwgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBpbiBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZWxzZSB3ZSBtaWdodCBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQveGZybS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZmlyc3QgbGluZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGxpa2VseSB0byBiZSBmb2N1c2VkIG9uIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcyBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGVudGlyZSBYRlJNIGZyYW1ld29yayBhbmQgaXRzIGNvcmUgY29tcG9uZW50cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgYXQgdGhlIHRvcCwgdGhpcyBjb3VsZCBiZSBkZWZpbmluZyBzb21lIG1vZHVsZXMgdGhhdCBJIG1heSB3YW50IHRvIGZvY3VzIG9uIGZ1cnRoZXIsIGRlcGVuZGluZyBvbiBteSBuZWVkLiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBtYXliZSBldmVuIHNvbWUgYmFzaWMgaGVscCB0ZXh0IHRoYXQgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBYRlJNIGlzIGFsbCBhYm91dCwgb3IgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFx1MDAyNlx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXHUwMDI2XHUwMDI2IFxcXG4gIDM1Olx0XHRcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiAgMzY6XHRcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM3Olx0XHRoZWxwXG4gIDM4Olx0XHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xuICAzOTpcdFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBicmluZ2luZyBpbiBgQ09ORklHX1hGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4sIGltcGxpZXMgYENPTkZJR19YRlJNYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCwgYW5kIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBDT05GSUdfWEZSTV9JUFRGU2AmIzM5O3MgcmVsYXRpb25zaGlwLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBDT05GSUdfWEZSTWAgdG9vLiBObyBzdXJwcmlzZXMgdGhlcmUgZWl0aGVyLgoKVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgdGhlIHJlbGF0aW9uc2hpcCB0byBgUEFHRV9QT09MYC4gSXMgYENPTkZJR19YRlJNX0lQVEZTYCBicmluZ2luZyBpdCBpbiwgb3IgaXMgaXQgbmVlZGVkIGJ5IGFub3RoZXIgbW9kdWxlIGxpa2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgdGhhdCBgQ09ORklHX1hGUk1fSVBURlNgIHVzZXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXAgdGhyb3VnaCBgbmV0L2AgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXRoZXIgYFBBR0VfUE9PTGAgaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSByZWxhdGVkIHRvIGBDT05GSUdfWEZSTV9JUFRGU2AuIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTM2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHNvbWV0aGluZyBrZXJuZWwtcmVsYXRlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYG5ldGAgc3Vic3lzdGVtIGlzIGEgbGlrZWx5IGN1bHByaXQsIGFuZCBiYXNlZCBvbiB0aGUgc3ltcHRvbXMgSSYjMzk7bSBzZWVpbmcsIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBzZWVtcyBwbGF1c2libGUuIFNvLCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0OTEuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGFyZWFzIHRoYXQgbWlnaHQgbmVlZCB0d2Vha2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4ODpcdFx0Ym9vbFxuIDQ4OTpcdFx0ZGVmYXVsdCBuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIFBBR0VfUE9PTFxuIDQ5MjpcdFx0Ym9vbFxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbiA0OTU6XHRcdGRlZmF1bHQgblxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtQYWdlIHBvb2wgc3RhdHNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gNDk4Olx0XHRoZWxwXG4gNDk5Olx0XHQgIEVuYWJsZSBwYWdlIHBvb2wgc3RhdGlzdGljcyB0byB0cmFjayBwYWdlIGFsbG9jYXRpb24gYW5kIHJlY3ljbGluZ1xuIDUwMDpcdFx0ICBpbiBwYWdlIHBvb2xzLiBUaGlzIG9wdGlvbiBpbmN1cnMgYWRkaXRpb25hbCBDUFUgY29zdCBpbiBhbGxvY2F0aW9uXG4gNTAxOlx0XHQgIGFuZCByZWN5Y2xlIHBhdGhzIGFuZCBhZGRpdGlvbmFsIG1lbW9yeSBjb3N0IHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzLlxuIDUwMjpcdFx0ICBUaGVzZSBzdGF0aXN0aWNzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBpZlxuIDUwMzpcdFx0ICB0aGUgZHJpdmVyIHVzaW5nIHRoZSBwYWdlIHBvb2wgc3VwcG9ydHMgZXhwb3J0aW5nIHRoaXMgZGF0YS5cbiA1MDQ6XHRcbiA1MDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA1MDY6XHRcbiA1MDc6XHRjb25maWcgRkFJTE9WRVJcbiA1MDg6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgZmFpbG92ZXIgbW9kdWxlXCYjMzQ7XG4gNTA5Olx0XHRoZWxwXG4gNTEwOlx0XHQgIFRoZSBmYWlsb3ZlciBtb2R1bGUgcHJvdmlkZXMgYSBnZW5lcmljIGludGVyZmFjZSBmb3IgcGFyYXZpcnR1YWxcbiA1MTE6XHRcdCAgZHJpdmVycyB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgYSBzZXQgb2Ygb3BzIHdpdGggYSBmYWlsb3ZlclxuIDUxMjpcdFx0ICBpbnN0YW5jZS4gVGhlIG9wcyBhcmUgdXNlZCBhcyBldmVudCBoYW5kbGVycyB0aGF0IGdldCBjYWxsZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUEFHRV9QT09MIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhpcyBgUEFHRV9QT09MYCB0aGluZy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgYFBBR0VfUE9PTGAgYWN0dWFsbHkgKnNlbGVjdGVkKj8gSXMgaXQgYWx3YXlzIGF2YWlsYWJsZSwgb3IgZG9lcyBzb21ldGhpbmcgZXhwbGljaXRseSBlbmFibGUgaXQ/IE9yIG1heWJlIHNvbWUgb3RoZXIgcGllY2Ugb2YgdGhlIGtlcm5lbCBsb2dpYyBjaG9vc2VzIGl0IGJhc2VkIG9uIHNvbWUgY3JpdGVyaWE/IEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBhdmFpbGFiaWxpdHkuCgpNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgLiBJJiMzOTttIGhvcGluZyBpdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGl0ICpyZXF1aXJlcyogYENPTkZJR19QQUdFX1BPT0xgIHRvIGJlIHNldCwgb3IgaWYgaXQgaGFzIHNvbWUgc3R1YiBpbXBsZW1lbnRhdGlvbiB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBkaXNhYmxlZC4gUGVyaGFwcyBpdCBpcyBhbHdheXMgY29tcGlsZWQsIGJ1dCBjb25kaXRpb25hbGx5IGRlZmluZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVncmF0ZXMgKG9yIGRvZXNuJiMzOTt0KSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuCgpBbHRlcm5hdGl2ZWx5LCB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IG9mZmVyIGNsdWVzLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIGNpcmNsZSBiYWNrIHRvIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYCBpZiB0aGF0IGZhaWxzIHRvIGJlIGluZm9ybWF0aXZlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbiBtYWtpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjQ9b2JqLXkgJiM0Mzs9IG5ldGRldl9xdWV1ZXMub1xubmV0L2NvcmUvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1BBR0VfUE9PTCkgJiM0Mzs9IHBhZ2VfcG9vbC5vIHBhZ2VfcG9vbF91c2VyLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gbmV0LXByb2Nmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIFBBR0VfUE9PTCBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQUdFX1BPT0xgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBkaXJlY3RseSB3aXRoaW4gYG5ldC94ZnJtL0tjb25maWdgLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNlbGVjdGlvbnMgb2YgYFBBR0VfUE9PTGAgZGVmaW5lZCB0aGVyZS4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldHdvcmtpbmctcmVsYXRlZCBmZWF0dXJlIGxpa2UgdGhpcy4KCklmIHRoYXQgY29tZXMgdXAgZW1wdHksIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBEcml2ZXJzIGFyZSBvZnRlbiB0aGUga2V5OyB0aGV5IG1pZ2h0IGJlIHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgcmVxdWlyZSBhbmQgdGhlcmVmb3JlIHNlbGVjdCBgUEFHRV9QT09MYC4gU28sIEkmIzM5O2xsIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsgYWNyb3NzIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHNlbGVjdGlvbnMgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHVsbGluZyBpdCBpbi4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIHN0cmF0ZWd5IGZvciB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIGEgcGFydGljdWxhciBrZXJuZWwgZmVhdHVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsZWFkIG9uIHRoZSB1c2FnZSBwYXR0ZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFBBR0VfUE9PTFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDctXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODctXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjEtXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxMy1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYxLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzUtXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnLTIzLVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMxLVx0c2VsZWN0IEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0xNTMtXHRzZWxlY3QgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc6NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY1LVx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMi1cdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Nj1jb25maWcgTUxYNF9FTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjEwOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTExLVx0c2VsZWN0IE1MWDRfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTI5PWNvbmZpZyBNTFg1X0NPUkVfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcdTAwMjZcdTAwMjYgRVRIRVJORVQgXHUwMDI2XHUwMDI2IElORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgTUxYNV9DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMzLVx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTIzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMjUtXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI3LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9MTEwPWNvbmZpZyBSVEFTRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0yOT1jb25maWcgUkFWQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cdHNlbGVjdCBNRElPX0JJVEJBTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNy1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZz0yNT1jb25maWcgU05JX05FVFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0zMC1cdHNlbGVjdCBNSUlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXHRzZWxlY3QgUENTX1hQQ1NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTAtXHRzZWxlY3QgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnPTI2PWNvbmZpZyBURUhVVElfVE40MFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnOjI5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMzAtXHRzZWxlY3QgRldfTE9BREVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz01MD1jb25maWcgVElfQ1BTV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXHRzZWxlY3QgTUZEX1NZU0NPTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo1NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTctXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVx0ZGVwZW5kcyBvbiBUSV9DUFRTIHx8ICFUSV9DUFRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjcwOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03MS1cdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVx0c2VsZWN0IFBIWUxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTAyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDMtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTIwND1jb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjEwLVx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjMtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTI9Y29uZmlnIE1UNzZfQ09SRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM3LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBFbGVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBQQUdFX1BPT0xgIGlzIHJlbGV2YW50IGhlcmUsIHNlbGVjdGVkIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAsIGBWRVRIYCwgYW5kIGBWSVJUSU9fTkVUYC4gVGhhdCB0cmlnZ2VycyBhbiBpbml0aWFsIHRob3VnaHQgdG8gY2hlY2sgaWYgYENPTkZJR19YRlJNX0lQVEZTYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBmb3IgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgYFhGUk1fVVNFUmAgaXMgbmVjZXNzYXJ5LCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQgY29udHJvbHMgd2hldGhlciB1c2Vyc3BhY2UgY2FuIGludGVyYWN0IHdpdGggSVBURlMgc3RhdGVzIGFuZCBwb2xpY2llcy4gWWVzLCBgQ09ORklHX1hGUk1fVVNFUmAgaXMgbmVlZGVkLCBiZWNhdXNlIHRoYXQgaXMgaG93IHVzZXJzcGFjZSBjb25maWd1cmVzIFhGUk0gc3RhdGVzIHVzaW5nIG5ldGxpbmsuIE5vdywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgUEFHRV9QT09MYCBjYW4gYmUgZW5hYmxlZCwgYW5kIG5vdCBqdXN0IGluZGlyZWN0bHkgdGhyb3VnaCB0aG9zZSBzZWxlY3Rpb25zLiBJIHNlZSB0aGF0IGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIGluIGBuZXQvS2NvbmZpZ2AsIGJ1dCBpdCBsYWNrcyBhIHByb21wdC4gVGhlIEtjb25maWcgc3lzdGVtIG1pZ2h0IGlnbm9yZSBpdCBpZiBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBzZWxlY3RlZC4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBQQUdFX1BPT0xgIGlzIGhhbmRsZWQsIGFuZCBpZiBpdCBpcyBlbmFibGVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgc29tZXRoaW5nIGxpa2UgYE5FVERFVlNJTWAgb3IgYEJQRl9TWVNDQUxMYCwgYW5kIGhvdyBgS2NvbmZpZ2AgaGFuZGxlcyBpdHMgbGFjayBvZiBhIHByb21wdC4KCkkgaGF2ZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhGUk1fSVBURlNgIGFuZCBgWEZSTV9VU0VSYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueXRoaW5nICplbHNlKi4gTG9va2luZyBhdCBgbmV0L3hmcm0vS2NvbmZpZ2AsIEkgc2VlIGl0IGRlcGVuZHMgb24gYFhGUk1gLiBBbmQsIGxvb2tpbmcgZnVydGhlciwgYFhGUk1gIGRlcGVuZHMgb24gYElORVRgLiBUaGVuLCBgWEZSTV9VU0VSYCBzZWxlY3RzIGBYRlJNX0FMR09gIHdoaWNoIHRoZW4gc2VsZWN0cyBgWEZSTWAuIEFuZCBzaW5jZSBgSU5FVGAgaXMgc3RhbmRhcmQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFhGUk1fSVBURlNgIGFuZCBgWEZSTV9VU0VSYCBhcmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBhcmVhLgoKTm93IGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGZvY3VzIG9uIHNwZWNpZmljIGNvZGUgc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIHNlZSB3aGF0IHRoZSBmb2N1cyBzeW1ib2xzIGFyZS4gTGV0JiMzOTtzIGNoZWNrIGBpcHRmc19za2JfYWRkX2ZyYWdzYDogSXQmIzM5O3MgYHN0YXRpY2AsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIE5vdywgYWxzbyBsb29raW5nIGF0IGBpcHRmc19jb25zdW1lX2ZyYWdzYDogVGhpcyBpcyBhbHNvIGBzdGF0aWNgLiBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYC4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgY2FsbHMgYGlwdGZzX291dHB1dF9xdWV1ZWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAxLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIyMDI6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjMzNz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzY5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNzA6XHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFx1MDAyNmxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDIwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpcHRmc19kZWxheV90aW1lcmAgYW5kIGBpcHRmc19vdXRwdXRfcXVldWVkYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgdGltaW5nIGFuZCBvdXRwdXQgcXVldWluZyBpbiB0aGUgYHhmcm1faXB0ZnNgIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCB3aGVyZSBgaXB0ZnNfZGVsYXlfdGltZXJgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgdXRpbGl6ZSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgc3R1ZmYsIHJpZ2h0PyBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBkZWxheWVkIHByb2Nlc3NpbmcgY29tZXMgaW50byBwbGF5LiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGVuIHdvcmsgYmFja3dhcmQgaWYgbmVjZXNzYXJ5LgoKVG8gZ2V0IHN0YXJ0ZWQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIzNjAgdGhyb3VnaCAyNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc3BlY2lmaWMgcG9pbnQgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgYW5kIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBhIHVzZWZ1bCBpbnNpZ2h0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuMjM2MTpcdFxuMjM2MjpcdFx0LyogQWZ0ZXIgdGhlIGFib3ZlIHVubG9jaywgcGFja2V0cyBjYW4gYmVnaW4gcXVldWluZyBhZ2FpbiwgYW5kIHRoZVxuMjM2MzpcdFx0ICogdGltZXIgY2FuIGJlIHNldCBhZ2FpbiwgZnJvbSBhbm90aGVyIENQVSBlaXRoZXIgaW4gc29mdGlycSBvciB1c2VyXG4yMzY0Olx0XHQgKiBjb250ZXh0IChub3QgZnJvbSB0aGlzIG9uZSBzaW5jZSB3ZSBhcmUgcnVubmluZyBhdCBzb2Z0aXJxIGxldmVsXG4yMzY1Olx0XHQgKiBhbHJlYWR5KS5cbjIzNjY6XHRcdCAqL1xuMjM2NzpcdFxuMjM2ODpcdFx0dHJhY2VfaXB0ZnNfdGltZXJfZXhwaXJlKHh0ZnMsICh1bnNpZ25lZCBsb25nIGxvbmcpKGt0aW1lX2dldF9yYXdfZmFzdF9ucygpIC0gc2V0dGltZSkpO1xuMjM2OTpcdFxuMjM3MDpcdFx0aXB0ZnNfb3V0cHV0X3F1ZXVlZCh4LCBcdTAwMjZsaXN0KTtcbjIzNzE6XHRcbjIzNzI6XHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbjIzNzM6XHR9XG4yMzc0Olx0XG4yMzc1Olx0LyoqXG4yMzc2Olx0ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcbjIzNzc6XHQgKiBAeDogeGZybSBzdGF0ZVxuMjM3ODpcdCAqIEBza2I6IHRoZSBwYWNrZXRcbjIzNzk6XHQgKlxuMjM4MDpcdCAqIFRoaXMgd2FzIG9yaWdpbmFsbHkgdGFrZW4gZnJvbSB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkLiBUaGUgcmVhc29uIGZvciB0aGVcbjIzODE6XHQgKiBjb3B5IGlzIHRoYXQgSVAtVEZTL0FHR0ZSQUcgY2FuIGhhdmUgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkgZm9yIGhvdyB0byBzZXRcbjIzODI6XHQgKiB0aGUgVE9TL0RTQ1AgYml0cy4gU2V0cyB0aGUgcHJvdG9jb2wgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYW5kIGRvZXNuJiMzOTt0IGRvXG4yMzgzOlx0ICogYW55dGhpbmcgd2l0aCBpbm5lciBoZWFkZXJzIGFzIHRoZXkgYXJlbiYjMzk7dCBwb2ludGluZyBpbnRvIGEgbm9ybWFsIElQXG4yMzg0Olx0ICogc2luZ2xldG9uIGlubmVyIHBhY2tldC5cbjIzODU6XHQgKlxuMjM4NjpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4yMzg3Olx0ICovXG4yMzg4Olx0c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIzODk6XHR7XG4yMzkwOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7XG4yMzkxOlx0XHRzdHJ1Y3QgaXBoZHIgKnRvcF9pcGg7XG4yMzkyOlx0XG4yMzkzOlx0XHRza2JfcmVzZXRfaW5uZXJfbmV0d29ya19oZWFkZXIoc2tiKTtcbjIzOTQ6XHRcdHNrYl9yZXNldF9pbm5lcl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4yMzk1Olx0XG4yMzk2Olx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLSh4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKSk7XG4yMzk3Olx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbjIzOTg6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4yMzk5Olx0XG4yNDAwOlx0XHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XG4yNDAxOlx0XHR0b3BfaXBoLVx1MDAzZWlobCA9IDU7XG4yNDAyOlx0XHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA0O1xuMjQwMzpcdFx0dG9wX2lwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fQUdHRlJBRztcbjI0MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpcHRmc19vdXRwdXRfcXVldWVkYCBGdW5jdGlvbiYjMzk7cyBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBpcHRmc19vdXRwdXRfcXVldWVkYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCBieSBgaXB0ZnNfZGVsYXlfdGltZXJgLCB0aGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY2FsbCBncmFwaCB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgaG9saXN0aWNhbGx5LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYWxzbyBjYWxsIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gS25vd2luZyB0aGUgKmNvbXBsZXRlKiBsaXN0IG9mIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIG91dHB1dCBxdWV1ZSBtaWdodCBiZSBjb250ZW5kZWQgb3IgaW1wcm9wZXJseSBtYW5hZ2VkLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTY3PXN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMjAyOnN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMy17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcwOlx0aXB0ZnNfb3V0cHV0X3F1ZXVlZCh4LCBcdTAwMjZsaXN0KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzcxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDAxMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgVHJhY2UgVGhyb3VnaCBJUFRGUyBJbnB1dC9PdXRwdXQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgcGFja2V0IGZsb3cgZm9yIElQc2VjIFNBcyB1c2luZyBgWEZSTV9NT0RFX0lQVEZTYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgYGlwdGZzX2lucHV0YC4gUmlnaHQsIGl0JiMzOTtzIHRoZSBgLmlucHV0YCBjYWxsYmFjayBkZWZpbmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBTbywgd2hlbiBhbiBpbmNvbWluZyBwYWNrZXQgdGhhdCBtYXRjaGVzIGFuIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9uIHVzaW5nIHRoZSBJUFRGUyBtb2RlIGhpdHMgdGhlIHN5c3RlbSwgYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQuCgpOb3csIHdpdGhpbiBgaXB0ZnNfaW5wdXRgLCBpdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHBhdGhzLiBJdCBldmVudHVhbGx5IGNhbGxzIGBpcHRmc19pbnB1dF9vcmRlcmVkYCwgd2hpY2ggaGFuZGxlcyByZWFzc2VtYmx5IGFuZCBwcm9jZXNzaW5nLiBJbnNpZGUgYGlwdGZzX2lucHV0X29yZGVyZWRgLCB3ZSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBpcHRmc19yZWFzc2VtX2NvbnRgIGFuZCBgX19pbnB1dF9wcm9jZXNzX3BheWxvYWRgLiBUaGV5IGJvdGggZW5kIHVwIGNhbGxpbmcgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBjb21tb24gcG9pbnQgZm9yIGZyYWdtZW50IGhhbmRsaW5nLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgX19pbnB1dF9wcm9jZXNzX3BheWxvYWRgIGFsc28gaGFzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIHdoaWNoIGFsc28gY2FsbHMgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLgoKRm9yIG91dHB1dCwgaXQgbG9va3MgbGlrZSBgLm91dHB1dGAgaXMgc2V0IHRvIGBpcHRmc19vdXRwdXRfY29sbGVjdGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBkZXNjcmlwdGl2ZS4gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgb3V0Z29pbmcgcGFja2V0cyBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggdGhlbS4gUmlnaHQsIGl0IGVucXVldWVzIHRoZSBwYWNrZXRzIG9udG8gYHh0ZnMtJmd0O3F1ZXVlYCwgd2hpY2ggcHJvYmFibHkgaXMgc29tZSBraW5kIG9mIGludGVybmFsIHF1ZXVlLiBJdCBhbHNvIHNldHMgdXAgYGlwdGZzX2RlbGF5X3RpbWVyYCwgd2hpY2ggaGludHMgYXQgc29tZSBraW5kIG9mIGRlbGF5ZWQgZmx1c2gsIG9yIHBvdGVudGlhbGx5IGEgYmF0Y2hpbmcgc3RyYXRlZ3kuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgIGFnYWluLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnkgaW1tZWRpYXRlIGZsdXNoIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdHN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4xODQ2Olx0e1xuMTg0NzpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMTg0ODpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3QtXHUwMDNleGZybTtcbjE4NDk6XHRcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbjE4NTA6XHRcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcbjE4NTE6XHRcdHUzMiBwbXR1ID0gMDtcbjE4NTI6XHRcdGJvb2wgb2sgPSB0cnVlO1xuMTg1MzpcdFx0Ym9vbCB3YXNfZ3NvO1xuMTg1NDpcdFxuMTg1NTpcdFx0LyogV2UgaGF2ZSBob29rZWQgaW50byBkc3RfZW50cnktXHUwMDNlb3V0cHV0IHdoaWNoIG1lYW5zIHdlIGhhdmUgc2tpcHBlZCB0aGVcbjE4NTY6XHRcdCAqIHByb3RvY29sIHNwZWNpZmljIG5ldGZpbHRlciAoc2VlIHhmcm00X291dHB1dCwgeGZybTZfb3V0cHV0KS5cbjE4NTc6XHRcdCAqIHdoZW4gb3VyIHRpbWVyIHJ1bnMgd2Ugd2lsbCBlbmQgdXAgY2FsbGluZyB4ZnJtX291dHB1dCBkaXJlY3RseSBvblxuMTg1ODpcdFx0ICogdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLlxuMTg1OTpcdFx0ICpcbjE4NjA6XHRcdCAqIEZvciBib3RoIGNhc2VzIHRoaXMgaXMgdGhlIE5GX0lORVRfUE9TVF9ST1VUSU5HIGhvb2sgd2hpY2ggYWxsb3dzXG4xODYxOlx0XHQgKiBjaGFuZ2luZyB0aGUgc2tiLVx1MDAzZWRzdCBlbnRyeSB3aGljaCB0aGVuIG1heSBub3QgYmUgeGZybSBiYXNlZCBhbnltb3JlXG4xODYyOlx0XHQgKiBpbiB3aGljaCBjYXNlIGEgUkVST1VURUQgZmxhZyBpcyBzZXQuIGFuZCBkc3Rfb3V0cHV0IGlzIGNhbGxlZC5cbjE4NjM6XHRcdCAqXG4xODY0Olx0XHQgKiBGb3IgSVB2NiB3ZSBhcmUgYWxzbyBza2lwcGluZyBmcmFnbWVudGF0aW9uIGhhbmRsaW5nIGZvciBsb2NhbFxuMTg2NTpcdFx0ICogc29ja2V0cywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgZ29vZCBkZXBlbmRpbmcgb24gb3VyIHR1bm5lbCBERlxuMTg2NjpcdFx0ICogc2V0dGluZy4gTm9ybWFsbHkgd2l0aCBmcmFnbWVudGF0aW9uIHN1cHBvcnRlZCB3ZSB3YW50IHRvIHNraXAgdGhpc1xuMTg2NzpcdFx0ICogZnJhZ21lbnRhdGlvbi5cbjE4Njg6XHRcdCAqL1xuMTg2OTpcdFxuMTg3MDpcdFx0aWYgKHh0ZnMtXHUwMDNlY2ZnLmRvbnRfZnJhZylcbjE4NzE6XHRcdFx0cG10dSA9IGlwdGZzX2dldF9jdXJfcG10dSh4LCB4dGZzLCBza2IpO1xuMTg3MjpcdFxuMTg3MzpcdFx0LyogQnJlYWsgYXBhcnQgR1NPIHNrYnMuIElmIHRoZSBxdWV1ZSBpcyBuZWFyaW5nIGZ1bGwgdGhlbiB3ZSB3YW50IHRoZVxuMTg3NDpcdFx0ICogYWNjb3VudGluZyBhbmQgcXVldWluZyB0byBiZSBiYXNlZCBvbiB0aGUgaW5kaXZpZHVhbCBwYWNrZXRzIG5vdCBvbiB0aGVcbjE4NzU6XHRcdCAqIGFnZ3JlZ2F0ZSBHU08gYnVmZmVyLlxuMTg3NjpcdFx0ICovXG4xODc3Olx0XHR3YXNfZ3NvID0gc2tiX2lzX2dzbyhza2IpO1xuMTg3ODpcdFx0aWYgKCF3YXNfZ3NvKSB7XG4xODc5Olx0XHRcdHNlZ3MgPSBza2I7XG4xODgwOlx0XHR9IGVsc2Uge1xuMTg4MTpcdFx0XHRzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7XG4xODgyOlx0XHRcdGlmIChJU19FUlJfT1JfTlVMTChzZWdzKSkge1xuMTg4MzpcdFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1PVVRFUlJPUik7XG4xODg0Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xODg1Olx0XHRcdFx0aWYgKElTX0VSUihzZWdzKSlcbjE4ODY6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNlZ3MpO1xuMTg4NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4ODpcdFx0XHR9XG4xODg5Olx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4xODkwOlx0XHRcdHNrYiA9IE5VTEw7XG4xODkxOlx0XHR9XG4xODkyOlx0XG4xODkzOlx0XHQvKiBXZSBjYW4gYmUgcnVubmluZyBvbiBtdWx0aXBsZSBjb3JlcyBhbmQgZnJvbSB0aGUgbmV0d29yayBzb2Z0aXJxIG9yXG4xODk0Olx0XHQgKiBmcm9tIHVzZXIgY29udGV4dCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHBhY2tldCBpcyBjb21pbmcgZnJvbS5cbjE4OTU6XHRcdCAqL1xuMTg5NjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG4xODk3Olx0XG4xODk4Olx0XHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuc2tiKSB7XG4xODk5Olx0XHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNrYik7XG4xOTAwOlx0XG4xOTAxOlx0XHRcdC8qIE9uY2Ugd2UgZHJvcCBkdWUgdG8gbm8gcXVldWUgc3BhY2Ugd2UgY29udGludWUgdG8gZHJvcCB0aGVcbjE5MDI6XHRcdFx0ICogcmVzdCBvZiB0aGUgcGFja2V0cyBmcm9tIHRoYXQgR1JPLlxuMTkwMzpcdFx0XHQgKi9cbjE5MDQ6XHRcdFx0aWYgKCFvaykge1xuMTkwNTpcdG5vc3BhY2U6XG4xOTA2Olx0XHRcdFx0dHJhY2VfaXB0ZnNfbm9fcXVldWVfc3BhY2Uoc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKTtcbjE5MDc6XHRcdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNT1VUTk9RU1BBQ0UpO1xuMTkwODpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HKTtcbjE5MDk6XHRcdFx0XHRjb250aW51ZTtcbjE5MTA6XHRcdFx0fVxuMTkxMTpcdFxuMTkxMjpcdFx0XHQvKiBJZiB0aGUgdXNlciBpbmRpY2F0ZWQgbm8gaXB0ZnMgZnJhZ21lbnRpbmcgY2hlY2sgYmVmb3JlXG4xOTEzOlx0XHRcdCAqIGVucXVldWUuXG4xOTE0Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTgyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVBURlMgUGFja2V0IEhhbmRsaW5nIGZvciBDb21wcmVoZW5zaXZlIENvdmVyYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gSVBURlMgcGFja2V0IHByb2Nlc3NpbmcgdG8gZW5zdXJlIHRob3JvdWdoIGNvZGUgY292ZXJhZ2UuIFRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlOiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19jb25zdW1lX2ZyYWdzYCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiAgYGlwdGZzX291dHB1dF9xdWV1ZWRgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb25zdW1pbmcgcGFja2V0IGZyYWdtZW50cyB3aGVuIGFzc2VtYmxpbmcgdGhlIG91dHB1dCwgY2FsbGluZyBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHdoaWxlIHRoZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaGFuZGxlcyByZWFzc2VtYmx5IGZvciB0aGUgaW5jb21pbmcgcGF5bG9hZHMgKGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGFyaXNlczogYXJlIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyPyAgVGhhdCBjb3VsZCBpbXBhY3QgbXkgY292ZXJhZ2UgYW5hbHlzaXMuIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBpcyBzdGF0aWMgYW5kIGRlZmluZWQgd2l0aGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX3JlYXNzZW1fY29udGAuICBJdCYjMzk7cyBhIGZ1bmN0aW9uIG9mIGEgcmVhc29uYWJsZSBzaXplLCBhYm91dCA1MCBsaW5lcywgc28gSSB3b3VsZCBoYXZlIHRvIGd1ZXNzIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBidXQgSSB3aWxsIGludmVzdGlnYXRlLiBgaXB0ZnNfY29uc3VtZV9mcmFnc2AgaXMgYWxzbyBzdGF0aWMgYW5kIGlzIGNhbGxlZCBmcm9tIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gIEl0IG1pZ2h0IGJlIGlubGluZWQuICBTbywgaW5jbHVkaW5nIHRob3NlIGZ1bmN0aW9ucyAoYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfY29uc3VtZV9mcmFnc2ApIGFuZCB0aGVpciBkaXJlY3QgY2FsbGVycyAoYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX2lucHV0YCwgYW5kIGBpcHRmc19vdXRwdXRfY29sbGVjdGApIHdpbGwgcHJvdmlkZSBzb2xpZCBjb3ZlcmFnZS4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgWEZSTV9JUFRGU2AsIGBYRlJNX1VTRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFdhaXQsIGBQQUdFX1BPT0xgIGlzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQuIEl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgaXQgZGlyZWN0bHkgbWlnaHQgcmVxdWlyZSBlbmFibGluZyBhIHBhcmVudCBzdWJzeXN0ZW0gbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYEJQRl9TWVNDQUxMYCwgc2luY2UgdGhleSBzZWxlY3QgaXQuIE9yIHBlcmhhcHMgdGhlIHN5emthbGxlciBLY29uZmlnIGdlbmVyYXRvciBlbmFibGVzIGJvb2xzIHdpdGhvdXQgcHJvbXB0cy4gVGhlIGluc3RydWN0aW9ucyBoZXJlIGFsc28gcG9pbnQgb3V0IHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIGBLY29uZmlnYCBmb3IgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuCgpgWEZSTV9JUFRGU2AgZGVwZW5kcyBvbiBgWEZSTWAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgSU5FVGAuICBgWEZSTV9VU0VSYCBhbGxvd3MgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIHhmcm0gc3RhdGVzIGFuZCBtb2Rlcy4gQnV0IGBQQUdFX1BPT0xgLCB0aGF0JiMzOTtzIHVzZWQgYnkgZHJpdmVycyBhbmQgQlBGLiAgV2FpdCwgdGhlIGB4ZnJtX2lwdGZzLmNgIGZpbGUgKnNob3VsZCogY29tcGlsZSBldmVuIHdpdGhvdXQgYFBBR0VfUE9PTGAgZW5hYmxlZCwgcmlnaHQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW5jbHVkZSBwYXRoIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGhlYWRlciBmaWxlIHdvcmtzIGNvcnJlY3RseSB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQgZm9yIG15IHRlc3Rpbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wYWdlX3Bvb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC02MC1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6NjE6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtNjItLyogRGVwcmVjYXRlZCBkcml2ZXItZmFjaW5nIEFQSSwgdXNlIG5ldGxpbmsgaW5zdGVhZCAqL1xuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzMxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtMzM4LVx0ICovXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oOjMzOTojaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zNDAtXHRpZiAoIXBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW0pKVxuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oPTg3PXN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0xMDctXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoxMDg6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTEwOS0vKipcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0xNzY9c3RydWN0IHBhZ2VfcG9vbCB7XG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTg1LVx0Ym9vbCBkbWFfc3luY19mb3JfY3B1OjE7XHQvKiBQZXJmb3JtIERNQSBzeW5jIGZvciBjcHUgKi9cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjE4NjojaWZkZWYgQ09ORklHX1BBR0VfUE9PTF9TVEFUU1xuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTg3LVx0Ym9vbCBzeXN0ZW06MTtcdFx0XHQvKiBUaGlzIGlzIGEgZ2xvYmFsIHBlcmNwdSBwb29sICovXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjAwLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjAxOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yMDItXHQvKiB0aGVzZSBzdGF0cyBhcmUgaW5jcmVtZW50ZWQgd2hpbGUgaW4gc29mdGlycSBjb250ZXh0ICovXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjM5LVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjQwOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNDEtXHQvKiByZWN5Y2xlIHN0YXRzIGFyZSBwZXItY3B1IHRvIGF2b2lkIGxvY2tpbmcgKi9cbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0yNzU9c3RydWN0IHhkcF9tZW1faW5mbztcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTI3Ni1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjI3NzojaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjc4LXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg9MzA4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX3Bvb2xfY29tcGlsZWRfaW4odm9pZClcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMwOS17XG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDozMTA6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMxMS1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAyOAoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gSXQmIzM5O3MgY2FsbGluZyBgcGFnZV9wb29sX3JlZl9uZXRtZW0ocGFnZV90b19uZXRtZW0ocGFnZSkpYC4gU28sIHRoYXQmIzM5O3MgdGhlIGNvcmUuIFRoZW4sIEkgc2VlIGBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW0pYCBzaW1wbHkgaW5jcmVtZW50cyBhbiBhdG9taWMgY291bnRlcjogYGF0b21pY19sb25nX2luYyhuZXRtZW1fZ2V0X3BwX3JlZl9jb3VudF9yZWYobmV0bWVtKSlgLiBUaGF0IGZ1bmN0aW9uLCBgbmV0bWVtX2dldF9wcF9yZWZfY291bnRfcmVmYCwgaXMgYWx3YXlzIHRoZXJlLCBubyBwcm9ibGVtLgoKVGhlIGtleSBpcyB0aGF0IGZvciBhbiBgc2tiYCB0byBoYXZlIGBza2ItJmd0O3BwX3JlY3ljbGUgPSB0cnVlYCwgaXQgbXVzdCBvcmlnaW5hdGUgZnJvbSBhIG5ldHdvcmsgZGV2aWNlICp1c2luZyogcGFnZV9wb29sLCBvciBwYWdlIHBvb2wgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgcGFnZSBwb29sIGlzIGVuYWJsZWQuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24sIGBQQUdFX1BPT0xgIGdldHMgZW5hYmxlZCBpZiB3ZSBoYXZlIHBhZ2UtcG9vbC1zdXBwb3J0aW5nIG5ldGRldnMgbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYE5FVERFVlNJTWAsIG9yIGlmIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KClJpZ2h0LCBhbmQgYFhGUk1fSVBURlNgIGlzIHdoYXQgZW5hYmxlcyBgeGZybV9pcHRmcy5jYCwgd2hpY2ggaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gc2V0IHRoaXMgdXAuCgpTbywgbGV0JiMzOTtzIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOgoqICAgYFhGUk1fSVBURlNgIChuZWNlc3NhcnkgZm9yIGB4ZnJtX2lwdGZzLmNgIGZ1bmN0aW9uYWxpdHkpCiogICBgWEZSTV9VU0VSYCAobGlrZWx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBYRlJNLCBwZXJoYXBzIHVzZWZ1bCkKKiAgIGBQQUdFX1BPT0xgIChlbnN1cmVzIHBhZ2UgcG9vbCBpcyBlbmFibGVkKQoKTm93LCBJJiMzOTttIHJlYWR5IHRvIHBvcHVsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgc3RhY2sgY29kZSBpbiBYRlJNIElQLVRGUyBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nLiBNb3JlIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgZml4aW5nIGBza2JgIGZyYWdtZW50IHJlZmNvdW50aW5nIGZvciBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIHdpdGhpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGxpZmVjeWNsZSBvZiBuZXR3b3JrIGJ1ZmZlcnMsIHNvIGl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQuCiogICBgRm9jdXNTeW1ib2xzYDogYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19wc2tiX2FkZF9mcmFnc2Ag4oCTIHRob3NlIGZ1bmN0aW9ucyBsb29rIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4KKiAgIGBFbmFibGVDb25maWdzYDogYFhGUk1fSVBURlNgLCBgWEZSTV9VU0VSYCwgYFBBR0VfUE9PTGAg4oCTIHRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuCgpMb29rcyBnb29kISBFdmVyeXRoaW5nIGlzIHdlbGwtc3VwcG9ydGVkIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcGFyYW1ldGVycy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX3NrYl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfY29uc3VtZV9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgICAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICAgJiMzNDtpcHRmc19wc2tiX2FkZF9mcmFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIGZyYWdtZW50IHBhZ2UgcmVmY291bnRpbmcgbG9naWMgaW4gbmV0L3hmcm0veGZybV9pcHRmcy5jIHRvIGNvcnJlY3RseSBoYW5kbGUgcGFnZV9wb29sLWJhY2tlZCBwYWdlcyAoY2hlY2tpbmcgcHBfcmVjeWNsZSBhbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIHBvb2wgcmVmY291bnQgdmlhIHBhZ2VfcG9vbF9yZWZfcGFnZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhZ2UgcmVmY291bnRpbmcpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBhbmQgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyIGxpZmVjeWNsZSwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzJiMzNDssCiAgICAmIzM0O2lwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA2OTIwOTQwYTM1YjQ5Li5kM2JjYTkwZTJjMzg0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0X2Vjbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKQEAgLTQ4Niw3ICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJdG9mcmFnLSZndDtsZW4gLT0gb2Zmc2V0OwogCQkJb2Zmc2V0ID0gMDsKIAkJfQotCQlfX3NrYl9mcmFnX3JlZih0b2ZyYWcpOwomIzQzOwkJaWYgKHdhbGstJmd0O3BwX3JlY3ljbGUpCiYjNDM7CQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJX19za2JfZnJhZ19yZWYodG9mcmFnKTsKIAkJc2hpbmZvLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCXNoaW5mby0mZ3Q7ZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7CiAKQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKQogCQluZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpOwogCX0gZWxzZSB7CiAJCWlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKTsKLQkJc2tiX2ZyYWdfcmVmKHRvLCB0b2ktJmd0O25yX2ZyYWdzJiM0MzsmIzQzOyk7CiYjNDM7CQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKJiM0MzsJCQlwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSgmYW1wO3RvaS0mZ3Q7ZnJhZ3NbdG9pLSZndDtucl9mcmFnc10pKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwomIzQzOwkJdG9pLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCW5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNwoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTZWN1cml0eSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLiBGaXJzdCwgSSYjMzk7bGwgcmV2aWV3IHRoZSBkaWZmIGl0c2VsZiDigJMgcXVpY2tseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHpvb20gb3V0IGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnM6IHRoZSBhcmVhIGFyb3VuZCBsaW5lcyA0ODAtNTEwLCB3aGljaCBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHBsYXVzaWJsZSBjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFuZCB0aGlzIGZpbGUuIEV4YW1wbGU6ICYjMzQ7cGFja2V0IGNsYXNzaWZpY2F0aW9uJiMzNDsgb3IgJiMzNDtwb2xpY3kgbWFuYWdlbWVudCYjMzQ7XSwgYW5kIHRoZW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDIxNjAtMjIwMC4gVGhpcyBzZWNvbmQgYXJlYSBpcyBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHBsYXVzaWJsZSBjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIHlvdXIga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIHRoaXMgZmlsZS4gRXhhbXBsZTogJiMzNDtoYW5kbGluZyBzcGVjaWZpYyBzZWN1cml0eSBwcm90b2NvbHMmIzM0OyBvciAmIzM0O2tleSBtYW5hZ2VtZW50JiMzNDtdLiBCeSBleGFtaW5pbmcgdGhlc2UgcmFuZ2VzIHNwZWNpZmljYWxseSwgSSBjYW4gcmFwaWRseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0e1xuIDQ3MTpcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xuIDQ3MjpcdFx0dTMyIGZyYWdsZW47XG4gNDczOlx0XG4gNDc0Olx0XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuIDQ3NTpcdFx0XHRyZXR1cm4gbGVuO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xuIDQ3ODpcdFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0d2hpbGUgKGxlbiBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2VmcmFnaSBcdTAwM2Mgd2Fsay1cdTAwM2Vucl9mcmFncykge1xuIDQ4MTpcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2d2Fsay1cdTAwM2VmcmFnc1t3YWxrLVx1MDAzZWZyYWdpXTtcbiA0ODI6XHRcdFx0c2tiX2ZyYWdfdCAqdG9mcmFnID0gXHUwMDI2c2hpbmZvLVx1MDAzZWZyYWdzW3NoaW5mby1cdTAwM2Vucl9mcmFnc107XG4gNDgzOlx0XG4gNDg0Olx0XHRcdCp0b2ZyYWcgPSAqZnJhZztcbiA0ODU6XHRcdFx0aWYgKG9mZnNldCkge1xuIDQ4NjpcdFx0XHRcdHRvZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IG9mZnNldDtcbiA0ODc6XHRcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiA0ODg6XHRcdFx0XHRvZmZzZXQgPSAwO1xuIDQ4OTpcdFx0XHR9XG4gNDkwOlx0XHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gNDkxOlx0XHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4gNDkyOlx0XHRcdGVsc2VcbiA0OTM6XHRcdFx0XHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xuIDQ5NDpcdFx0XHRzaGluZm8tXHUwMDNlbnJfZnJhZ3MmIzQzOyYjNDM7O1xuIDQ5NTpcdFx0XHRzaGluZm8tXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4gNDk2Olx0XG4gNDk3Olx0XHRcdC8qIHNlZSBpZiB3ZSBhcmUgZG9uZSAqL1xuIDQ5ODpcdFx0XHRmcmFnbGVuID0gdG9mcmFnLVx1MDAzZWxlbjtcbiA0OTk6XHRcdFx0aWYgKGxlbiBcdTAwM2MgZnJhZ2xlbikge1xuIDUwMDpcdFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gPSBsZW47XG4gNTAxOlx0XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gbGVuO1xuIDUwMjpcdFx0XHRcdHNrYi1cdTAwM2VkYXRhX2xlbiAmIzQzOz0gbGVuO1xuIDUwMzpcdFx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFx0XHR9XG4gNTA1Olx0XHRcdC8qIGFkdmFuY2UgdG8gbmV4dCBzb3VyY2UgZnJhZ21lbnQgKi9cbiA1MDY6XHRcdFx0bGVuIC09IGZyYWdsZW47XHRcdFx0LyogY2FyZWZ1bCwgdXNlIGRzdCBidl9sZW4gKi9cbiA1MDc6XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gZnJhZ2xlbjtcdFx0LyogY2FyZWZ1bCwgXCYjMzQ7ICAgXCYjMzQ7ICAgIFwmIzM0OyAgICAgKi9cbiA1MDg6XHRcdFx0c2tiLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBmcmFnbGVuO1x0LyogY2FyZWZ1bCwgXCYjMzQ7ICAgXCYjMzQ7ICAgIFwmIzM0OyAgICAgKi9cbiA1MDk6XHRcdFx0d2Fsay1cdTAwM2VwYXN0ICYjNDM7PSBmcmFnLVx1MDAzZWxlbjtcdC8qIGNhcmVmdWwsIHVzZSBzcmMgYnZfbGVuICovXG4gNTEwOlx0XHRcdHdhbGstXHUwMDNlZnJhZ2kmIzQzOyYjNDM7O1xuIDUxMTpcdFx0fVxuIDUxMjpcdFx0cmV0dXJuIGxlbjtcbiA1MTM6XHR9XG4gNTE0Olx0XG4gNTE1Olx0LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIDUxNjpcdC8qIElQVEZTIFRyYWNlIEV2ZW50IERlZmluaXRpb25zICAgICAgKi9cbiA1MTc6XHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4gNTE4Olx0XG4gNTE5Olx0I2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XHRza2JfZnJhZ19saXN0X2luaXQoY2hpbGQpO1xuMjE2MTpcdFx0Y2hpbGQtXHUwMDNlbGVuIC09IGZsbGVuO1xuMjE2MjpcdFx0Y2hpbGQtXHUwMDNlZGF0YV9sZW4gLT0gZmxsZW47XG4yMTYzOlx0XG4yMTY0Olx0XHRyZXR1cm4gbmV4dHA7XG4yMTY1Olx0fVxuMjE2NjpcdFxuMjE2NzpcdHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbjIxNjg6XHR7XG4yMTY5Olx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpmcm9taSA9IHNrYl9zaGluZm8oZnJvbSk7XG4yMTcwOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICp0b2kgPSBza2Jfc2hpbmZvKHRvKTtcbjIxNzE6XHRcdHVuc2lnbmVkIGludCBuZXdfdHJ1ZXNpemU7XG4yMTcyOlx0XG4yMTczOlx0XHQvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gYSBoZWFkIHBhZ2UsIGdyYWIgaXQgKi9cbjIxNzQ6XHRcdGlmICghc2tiX2hlYWRsZW4oZnJvbSkpIHtcbjIxNzU6XHRcdFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcbjIxNzY6XHRcdH0gZWxzZSB7XG4yMTc3Olx0XHRcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pO1xuMjE3ODpcdFx0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxuMjE3OTpcdFx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG4yMTgwOlx0XHRcdGVsc2VcbjIxODE6XHRcdFx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncyk7XG4yMTgyOlx0XHRcdHRvaS1cdTAwM2Vucl9mcmFncyYjNDM7JiM0Mzs7XG4yMTgzOlx0XHRcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xuMjE4NDpcdFx0fVxuMjE4NTpcdFxuMjE4NjpcdFx0LyogTW92ZSBhbnkgb3RoZXIgcGFnZSBmcmFnbWVudHMgcmF0aGVyIHRoYW4gY29weSAqL1xuMjE4NzpcdFx0bWVtY3B5KFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdLCBmcm9taS1cdTAwM2VmcmFncyxcbjIxODg6XHRcdCAgICAgICBzaXplb2YoZnJvbWktXHUwMDNlZnJhZ3NbMF0pICogZnJvbWktXHUwMDNlbnJfZnJhZ3MpO1xuMjE4OTpcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzICYjNDM7PSBmcm9taS1cdTAwM2Vucl9mcmFncztcbjIxOTA6XHRcdGlmIChmcm9taS1cdTAwM2Vucl9mcmFncylcbjIxOTE6XHRcdFx0dG9pLVx1MDAzZWZsYWdzIHw9IGZyb21pLVx1MDAzZWZsYWdzIFx1MDAyNiBTS0JGTF9TSEFSRURfRlJBRztcbjIxOTI6XHRcdGZyb21pLVx1MDAzZW5yX2ZyYWdzID0gMDtcbjIxOTM6XHRcdGZyb20tXHUwMDNlZGF0YV9sZW4gPSAwO1xuMjE5NDpcdFx0ZnJvbS1cdTAwM2VsZW4gPSAwO1xuMjE5NTpcdFx0dG8tXHUwMDNldHJ1ZXNpemUgJiM0Mzs9IGZyb20tXHUwMDNldHJ1ZXNpemUgLSBuZXdfdHJ1ZXNpemU7XG4yMTk2Olx0XHRmcm9tLVx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xuMjE5NzpcdFxuMjE5ODpcdFx0LyogV2UgYXJlIGRvbmUgd2l0aCB0aGlzIFNLQiAqL1xuMjE5OTpcdFx0Y29uc3VtZV9za2IoZnJvbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUgaXMgZGVmaW5lZCBvciBpbml0aWFsaXplZC4gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIGBncmVwYCBzZWFyY2ggZm9yIGBwcF9yZWN5Y2xlYCB0byBzZWUgd2hlcmUgaXQgc2hvd3MgdXAgaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGB4ZnJtX2lwdGZzLmNgLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGl0LiBBZnRlciB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGV4cGFuZCBteSBzY29wZSBhbmQgZG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgcmV2aWV3IG9mIHRoZSBlbnRpcmUgYHhmcm1faXB0ZnMuY2AgZmlsZSB0byBnZXQgYSBmZWVsIGZvciBob3cgYHdhbGstJmd0O3BwX3JlY3ljbGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUmIzM5O3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgd2hvbGUgZmlsZSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBfcmVjeWNsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS90cmFjZV9pcHRmcy5oPTE2Mz1UUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2OS1cdFx0XHQgICAgIF9fZmllbGQodTgsIGhlYWRfZnJhZylcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTcwOlx0XHRcdCAgICAgX19maWVsZCh1OCwgcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTcxLVx0XHRcdCAgICAgX19maWVsZCh1OCwgY2xvbmVkKVxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgwLVx0XHRcdCAgIF9fZW50cnktXHUwMDNlaGVhZF9mcmFnID0gc2tiLVx1MDAzZWhlYWRfZnJhZztcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTgxOlx0XHRcdCAgIF9fZW50cnktXHUwMDNlcHBfcmVjeWNsZSA9IHNrYi1cdTAwM2VwcF9yZWN5Y2xlO1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODItXHRcdFx0ICAgX19lbnRyeS1cdTAwM2VjbG9uZWQgPSBza2JfY2xvbmVkKHNrYik7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODYtXHRcdCAgICApLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxODc6XHQgICAgVFBfcHJpbnRrKFwmIzM0O0lOR1JQU1RROiBOVEhBREQ6IHNrYj0lcCBsZW49JXUgZGF0YV9sZW49JXUgc2hhcmVfb2s9JXUgaGVhZF9mcmFnPSV1IHBwX3JlY3ljbGU9JXUgY2xvbmVkPSV1IHNoYXJlZD0ldSBucl9mcmFncz0ldSBmcmFnX2xpc3Q9JXVcJiMzNDssXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4OC1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vza2IsIF9fZW50cnktXHUwMDNlc2tiX2xlbiwgX19lbnRyeS1cdTAwM2VkYXRhX2xlbiwgX19lbnRyeS1cdTAwM2VzaGFyZV9vayxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg5Olx0XHQgICAgICBfX2VudHJ5LVx1MDAzZWhlYWRfZnJhZywgX19lbnRyeS1cdTAwM2VwcF9yZWN5Y2xlLCBfX2VudHJ5LVx1MDAzZWNsb25lZCwgX19lbnRyeS1cdTAwM2VzaGFyZWQsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5MC1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vucl9mcmFncywgX19lbnRyeS1cdTAwM2VmcmFnX2xpc3QpKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjk4PXN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzEzLSAqIEBmcmFnczogdGhlIHBhZ2UgZnJhZ21lbnRzIGluYy4gcm9vbSBmb3IgaGVhZCBwYWdlXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzE0OiAqIEBwcF9yZWN5Y2xlOiBjb3B5IG9mIHNrYi1cdTAwM2VwcF9yZWN5Y2xlXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jPTMxNj1zdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyMi1cdHNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHUyAmIzQzOyAxXTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMjM6XHRib29sIHBwX3JlY3ljbGU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI0LX07XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTMzNT1zdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDYtXHR3YWxrLVx1MDAzZW5yX2ZyYWdzID0gMDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozNDc6XHR3YWxrLVx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXHUwMDNlcHBfcmVjeWNsZTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDgtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTQxMD1zdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDE3Olx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00Njc9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ4OS1cdFx0fVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ5MDpcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00OTEtXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTc1ND1zdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDYtXHQgICAgKHNrYi1cdTAwM2VoZWFkX2ZyYWcgfHwgc2tiLVx1MDAzZWxlbiA9PSBza2ItXHUwMDNlZGF0YV9sZW4pIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwNzpcdCAgICBza2ItXHUwMDNlcHBfcmVjeWNsZSA9PSBuZXdza2ItXHUwMDNlcHBfcmVjeWNsZSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOC1cdFx0ZnJhZ3dhbGsgPSBcdTAwMjZfZnJhZ3dhbGs7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTc3LVx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMTc4Olx0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzktXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjIwMj1zdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjk5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMDA6XHRcdFx0Lyogc2tiLVx1MDAzZXBwX3JlY3ljbGUgaXMgcGFzc2VkIHRvIF9fc2tiX2ZsYWdfdW5yZWYgZm9yIGFsbFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDEtXHRcdFx0ICogZnJhZyBwYWdlcyBzbyB3ZSBjYW4gb25seSBzaGFyZSBwYWdlcyB3aXRoIHNrYiYjMzk7cyB3aG9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMwNy1cdFx0XHQgICAgICghc2tiMi1cdTAwM2VoZWFkX2ZyYWcgXHUwMDI2XHUwMDI2IHNrYl9oZWFkbGVuKHNrYikpIHx8XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwODpcdFx0XHQgICAgIHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHNrYjItXHUwMDNlcHBfcmVjeWNsZSB8fFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDktXHRcdFx0ICAgICBza2JfemNvcHkoc2tiMikgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAxMDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYWdlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpcHRmcyBmb3IgUGFnZSBQb29sIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHBhZ2UgcmVmZXJlbmNlcywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgcGFnZV9wb29sYCBtZWNoYW5pc20gd2l0aGluIHRoZSBgaXB0ZnNgIHN1YnN5c3RlbS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFuZGFyZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaG93IHRoZSBgcGFnZV9wb29sYCBoYW5kbGVzIGl0LgoKUHJldmlvdXNseSwgYF9fc2tiX2ZyYWdfcmVmYCBhbmQgYHNrYl9mcmFnX3JlZmAgd2VyZSB1c2VkLCB3aGljaCByZWx5IG9uIHRoZSB0eXBpY2FsIGBwYWdlX3JlZl9pbmNgIGFuZCBgZ2V0X3BhZ2VgIG1ldGhvZHMuIEhvd2V2ZXIsIGZvciBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBgcGFnZV9wb29sYCAoYHBwX3JlY3ljbGVgIGlzIHNldCksIHRoZXNlIHN0YW5kYXJkIG1ldGhvZHMgYXJlIGluY29ycmVjdC4gVXNpbmcgdGhlbSBsZWFkcyB0byBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gcmVmZXJlbmNlIGNvdW50IGVycm9ycyB3aXRoaW4gdGhlIGBwYWdlX3Bvb2xgIGl0c2VsZi4gV2hlbiBhIHBhZ2UgaXMgZnJlZWQsIHRoZSBgcGFnZV9wb29sYCBjaGVja3MgaXRzIG93biByZWZlcmVuY2UgY291bnQgb3IgcmVjeWNsaW5nIGxvZ2ljLiBUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBpZiBhIHBhZ2UgY29tZXMgZnJvbSB0aGUgcG9vbCwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgaXMgdXNlZCBpbnN0ZWFkLiBUaGlzIHRoZW4gY2FsbHMgYHBhZ2VfcG9vbF9yZWZfbmV0bWVtYCB3aGljaCBpcyB0aGUgY29ycmVjdCBtZXRob2QuCgpNeSBhbmFseXNpcyBub3cgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBhcHBseSBteSBleHBlcnRpc2UgYW5kIHN5c3RlbWF0aWNhbGx5IHJldmlldyB0aGUgY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U6KiogTm9wZSwgbm90aGluZyBoZXJlIGludm9sdmVzIHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLiBCb3RoIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBhbmQgYGZyb20tJmd0O3BwX3JlY3ljbGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGZpcnN0IGlzIGluaXRpYWxpemVkIGR1cmluZyBmcmFnIHdhbGsgcHJlcGFyYXRpb24sIGFuZCB0aGUgc2Vjb25kIGlzIHBhcnQgb2YgdGhlIGBza19idWZmYCBzdHJ1Y3QsIHdoaWNoIGlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgY3JlYXRlZC4KMy4gICoqVW5pbml0aWFsaXplZCBmaWVsZHMgaW4gbmV3bHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlczoqKiBBZ2Fpbiwgbm90aGluZy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogTm8sIHRoaXMgaXNuJiMzOTt0IGEgY29uY2VybiBoZXJlLgoKU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IE5vLCB0aGlzIHBhdGNoIGp1c3QgY2hhbmdlcyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSwgc3dpdGNoaW5nIHRvIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIHdoZW4gYXBwcm9wcmlhdGUuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgcmVmZXJlbmNlIGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlIHBvb2wgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZSBwcm9ibGVtcyB0aGF0IGNhbiBhcmlzZSBmcm9tIHRoaXMgKmluY29ycmVjdCogcmVmIGNvdW50aW5nIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4KCkkgYW0gY29uZmlkZW50LiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlIGludHJvZHVjZWQgaGVyZS4gVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTJiMzNDsgcnVsZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTEuODM1Nzg0NDE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NDE3MTExOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfc2tiX2FkZF9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfY29uc3VtZV9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICAgIFwiaXB0ZnNfcmVhc3NlbV9jb250XCIsXG4gICAgXCJpcHRmc19wc2tiX2FkZF9mcmFnc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgZnJhZ21lbnQgcGFnZSByZWZjb3VudGluZyBsb2dpYyBpbiBuZXQveGZybS94ZnJtX2lwdGZzLmMgdG8gY29ycmVjdGx5IGhhbmRsZSBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIChjaGVja2luZyBwcF9yZWN5Y2xlIGFuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgcG9vbCByZWZjb3VudCB2aWEgcGFnZV9wb29sX3JlZl9wYWdlIGluc3RlYWQgb2Ygc3RhbmRhcmQgcGFnZSByZWZjb3VudGluZykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIGFuZCBhZmZlY3RzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBidWZmZXIgbGlmZWN5Y2xlLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjQ5OjUxLjgzNTc4ODQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTI3NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDY6NDk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNjkyMDk0MGEzNWI0OS4uZDNiY2E5MGUyYzM4NCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2ljbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2NyeXB0by9hZWFkLmhcXHUwMDNlXFxuQEAgLTQ4Niw3ICs0ODcsMTAgQEAgc3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuIC09IG9mZnNldDtcXG4gXFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xcbitcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG4rXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcXG4gXFx0XFx0c2hpbmZvLVxcdTAwM2Vucl9mcmFncysrO1xcbiBcXHRcXHRzaGluZm8tXFx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xcbiBcXG5AQCAtMjE3MSw3ICsyMTc1LDExIEBAIHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4gXFx0XFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxuLVxcdFxcdHNrYl9mcmFnX3JlZih0bywgdG9pLVxcdTAwM2Vucl9mcmFncysrKTtcXG4rXFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxuK1xcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXFx1MDAzZW5yX2ZyYWdzKTtcXG4rXFx0XFx0dG9pLVxcdTAwM2Vucl9mcmFncysrO1xcbiBcXHRcXHRuZXdfdHJ1ZXNpemUgPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTMuMzA1NzMzMTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDM5MDkxMTI1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19za2JfYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19vdXRwdXRfcXVldWVkXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcImlwdGZzX3Bza2JfYWRkX2ZyYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNTE2MDBmMjdmNWFkMzU4MjQ4MDM2ZmU4N2Y5MGJkYzQ5Y2EyOWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDY6NDk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDY5MjA5NDBhMzViNDkuLmQzYmNhOTBlMmMzODQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZWNuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVhZC5oXHUwMDNlXG5AQCAtNDg2LDcgKzQ4NywxMCBAQCBzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHR9XG4tXHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4rXHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4rXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xuIFx0XHRzaGluZm8tXHUwMDNlbnJfZnJhZ3MrKztcbiBcdFx0c2hpbmZvLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xuIFxuQEAgLTIxNzEsNyArMjE3NSwxMSBAQCBzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4gXHRcdG5ld190cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChmcm9tKSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKTtcbi1cdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MrKyk7XG4rXHRcdGlmIChmcm9tLVx1MDAzZXBwX3JlY3ljbGUpXG4rXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzKTtcbitcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzKys7XG4gXHRcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTMuMzA1NzM1MTA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQwMjc4NjcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ZnJtX2lwdGZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGJlZm9yZSBtZSBpbnZvbHZlcyBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZ2l0IGRpZmYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIG5vdCBqdXN0IHRoZSBjaGFuZ2VkIGxpbmVzLCBidXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIHplcm8gaW4gb24gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDQ4NiBhbmQgbGluZSAyMTcxLCBnZXQgYSBmZWVsIGZvciB0aGUgYXJlYXMgZGlyZWN0bHkgYWZmZWN0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBjaGFuZ2VzIGluIG9uZSBwYXJ0IGNhbiByaXBwbGUgdGhyb3VnaCBvdGhlcnMuXG5cbkFuZCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmb3IgdGhhdCBmaWxlLiBDb25maWd1cmF0aW9ucyBhcmUgYSBrZXkgcGFydCBvZiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjM3LjMzMzYwNTA1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjI6LyogeGZybV90cmFjZV9pcHRmcy5oXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0zLSAqXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTktI3VuZGVmIFRSQUNFX1NZU1RFTVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA6I2RlZmluZSBUUkFDRV9TWVNURU0gaXB0ZnNcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTExLVxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGE7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIyOlRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjM6XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXFx0ICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBibGtvZmYpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC02Ny1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY4OkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6Njk6XFx0XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC03MC1cXHRcXHRcXHQgICAgIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTUtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo5NjpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LCBpcHRmc19lbnF1ZXVlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05OC1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05OS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMDpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LCBpcHRmc19ub19xdWV1ZV9zcGFjZSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwMi1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDMtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDQ6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfdG9vX2JpZyxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwNTpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNi1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDctXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDg6REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTA5LVxcdFxcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLCBzdHJ1Y3QgaXBoZHIgKmlwaCksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEyOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEzMDpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfZGVxdWV1ZSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzMS1cXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzNC1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEzNTpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfZnJhZ21lbnRpbmcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMzYtXFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMzktXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2ZpbmFsX2ZyYWdtZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTQxLVxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZixcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTQ0LVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTQ1OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LCBpcHRmc19maXJzdF90b29iaWcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDYtXFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDktXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNTA6VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfcGVlayxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE1MS1cXHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHJlbWFpbmluZyksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2Mi1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE2MzpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2NC1cXHQgICAgVFBfQVJHUyhza2IsIHNoYXJlX29rKSxcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTkxLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTkyOkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfdGltZXJfZXZlbnQsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XFx0XFx0ICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXFx0XFx0ICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTctXFx0XFx0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXFx1MDAzZXRpbWVfdmFsID0gdGltZV92YWw7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTg6XFx0XFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlc2V0X3RpbWUgPSB4dGZzLVxcdTAwM2VpcHRmc19zZXR0aW1lO1xcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTk5LVxcdFxcdFxcdCAgICApLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDItXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDM6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9zdGFydCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwNDpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDUtXFx0ICAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDYtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDc6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9leHBpcmUsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDg6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA5LVxcdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTYtI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjE3OiNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlX2lwdGZzXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTgtI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjovKiB4ZnJtX2lwdGZzOiBJUFRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMy0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyLSNpbmNsdWRlIFxcXCJ4ZnJtX2lub3V0LmhcXFwiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzOiNpbmNsdWRlIFxcXCJ0cmFjZV9pcHRmcy5oXFxcIlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05Ni1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTc6LyogTWluIHRvIHRyeSB0byBzaGFyZSBvdXRlciBpcHRmcyBza2IgZGF0YSB2cyBjb3B5aW5nIGludG8gbmV3IHNrYiAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OC0jZGVmaW5lIElQVEZTX1BLVF9TSEFSRV9NSU4gMTI5XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA0LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDU6ICogc3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIC0gY29uZmlndXJhdGlvbiBmb3IgdGhlIElQVEZTIHR1bm5lbC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA2LSAqIEBwa3Rfc2l6ZTogc2l6ZSBvZiB0aGUgb3V0ZXIgSVAgcGFja2V0LiAwIHRvIHVzZSBpbnRlcmZhY2UgYW5kIE1UVSBkaXNjb3ZlcnksXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTU6c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE2LVxcdHUzMiBwa3Rfc2l6ZTtcXHQgICAgLyogb3V0ZXJfcGFja2V0X3NpemUgb3IgMCAqL1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMj1zdHJ1Y3Qgc2tiX3dzZXEge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNy0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgLSBtb2RlIHNwZWNpZmljIHhmcm0gc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOS0gKiBAY2ZnOiBJUFRGUyB0dW5uZWwgY29uZmlnLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzNC0gKiBAaW5pdF9kZWxheV9uczogbmFub3NlY29uZHMgdG8gd2FpdCB0byBzZW5kIGluaXRpYWwgSVBURlMgcGFja2V0Llxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzU6ICogQGlwdGZzX3RpbWVyOiBvdXRwdXQgdGltZXIuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzNjogKiBAaXB0ZnNfc2V0dGltZTogdGltZSB0aGUgb3V0cHV0IHRpbWVyIHdhcyBzZXQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzNy0gKiBAcGF5bG9hZF9tdHU6IG1heCBwYXlsb2FkIHNpemUuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgY2ZnO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTU5LVxcdHU2NCBpbml0X2RlbGF5X25zO1xcdCAgICAvKiBuYW5vc2Vjb25kcyAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjA6XFx0c3RydWN0IGhydGltZXIgaXB0ZnNfdGltZXI7IC8qIG91dHB1dCB0aW1lciAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE6XFx0dGltZTY0X3QgaXB0ZnNfc2V0dGltZTtcXHQgICAgLyogdGltZSB0aW1lciB3YXMgc2V0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2Mi1cXHR1MzIgcGF5bG9hZF9tdHU7XFx0ICAgIC8qIG1heCBwYXlsb2FkIHNpemUgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgyOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjM9c3RhdGljIHU2NCBfX2VzcF9zZXEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNTogKiBpcHRmc19hbGxvY19za2IoKSAtIEFsbG9jYXRlIGEgbmV3IGBza2JgLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYtICogQHRwbDogdGhlIHNrYiB0byBjb3B5IHJlcXVpcmVkIG1ldGEtZGF0YSBmcm9tLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfYWxsb2Nfc2tiKHN0cnVjdCBza19idWZmICp0cGwsIHUzMiBsZW4sIGJvb2wgbDNyZXN2KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5My0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk0OiAqIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoKSAtIGluaXRpYWxpemUgYSBza2JfZnJhZ190IGJhc2VkIG9uIHNrYiBoZWFkIGRhdGFcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk1LSAqIEBza2I6IHNrYiB3aXRoIHRoZSBoZWFkIGRhdGFcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI5ODpzdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzA2LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMDc6ICogc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgLSB1c2UgdG8gdHJhY2sgYSB3YWxrIHRocm91Z2ggZnJhZ21lbnRzXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMwOC0gKiBAZnJhZ2k6IGN1cnJlbnQgZnJhZ21lbnQgaW5kZXhcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMTUtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNjpzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNy1cXHR1MzIgZnJhZ2k7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI2LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMjc6ICogaXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKCkgLSBpbml0aWFsaXplIGEgZnJhZyB3YWxrIG92ZXIgYW4gc2tiLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjgtICogQHNrYjogdGhlIHNrYiB0byB3YWxrLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM1OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMzNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzM3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNTMtXFx0XFx0XFx0ZnJhZyA9IFxcdTAwMjZ3YWxrLVxcdTAwM2VmcmFnc1t3YWxrLVxcdTAwM2Vucl9mcmFncysrXTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzU0OlxcdFxcdFxcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoc2tiLCBmcmFnKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzU1LVxcdFxcdFxcdGZyYWctXFx1MDAzZW9mZnNldCArPSBpbml0aWFsX29mZnNldDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zODAtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MTpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4Mi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmZzZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDI6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMy0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDEwOnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxMTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMi1cXHRcXHRcXHRcXHQgICAgdTMyIG9mZnNldCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjAtXFx0LyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsaydzIGRhdGFcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDIxOlxcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjgtXFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Mjk6XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MzAtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDUzLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTQ6ICogaXB0ZnNfc2tiX2FkZF9mcmFncygpIC0gYWRkIGEgcmFuZ2Ugb2YgZnJhZ21lbnQgcmVmZXJlbmNlcyBpbnRvIGFuIHNrYlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTUtICogQHNrYjogc2tiIHRvIGFkZCByZWZlcmVuY2VzIGludG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktICpcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDYwOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiB0byB2ZXJpZnlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDYxLSAqIHRoYXQgdGhlIGRlc3RpbmF0aW9uIEBza2IgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWxrIGFuZCBoYXMgc3BhY2UgaW4gdGhlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY2LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Njc6c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssIHUzMiBvZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2OS1cXHRcXHRcXHQgICAgICAgdTMyIGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzctXFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Nzg6XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTE5LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1MjA6I2luY2x1ZGUgXFxcInRyYWNlX2lwdGZzLmhcXFwiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTUyMS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjYtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyNzogKiBpcHRmc19wc2tiX2FkZF9mcmFncygpIC0gQ3JlYXRlIGFuZCBhZGQgZnJhZ3MgaW50byBhIG5ldyBza19idWZmLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjgtICogQHRwbDogdGVtcGxhdGUgdG8gY3JlYXRlIG5ldyBza2IgZnJvbS5cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTQ1OmlwdGZzX3Bza2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICp0cGwsIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDYtXFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBjb3B5X2xlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU1MDpcXHRza2IgPSBpcHRmc19hbGxvY19za2IodHBsLCBjb3B5X2xlbiwgZmFsc2UpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTEtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTU0LVxcdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTU1OlxcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgKyBjb3B5X2xlbixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTU2LVxcdFxcdFxcdFxcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTY4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Njk6XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiArIGNvcHlfbGVuLCBsZW4gLSBjb3B5X2xlbik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3MC1cXHRyZXR1cm4gc2tiO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3My0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTc0OiAqIGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoKSAtIENyZWF0ZSBhbmQgbG9hZCBkYXRhIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc1LSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1OTA6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5MS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaXB0ZnNfYWxsb2Nfc2tiKHN0LVxcdTAwM2Vyb290X3NrYiwgc2tibGVuLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjYwNTogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwNi0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyMy0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjI0OiAqIF9faXB0ZnNfaXBobGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGhlYWRlciBsZW5ndGggdXNpbmcgcGFja2V0IGRhdGEuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyNS0gKiBAZGF0YTogcG9pbnRlciBhdCBvY3RldCB3aXRoIHZlcnNpb24gbmliYmxlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MzE6c3RhdGljIHUzMiBfX2lwdGZzX2lwaGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NDAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY0MTogKiBfX2lwdGZzX2lwbGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQyLSAqIEBkYXRhOiBwb2ludGVyIHRvIGlwICh2NC92NikgcGFja2V0IGhlYWRlclxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1MC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjUxOnN0YXRpYyB1MzIgX19pcHRmc19pcGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjUyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjEtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY2MjogKiBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoKSAtIGZpbmlzaCBwcmVwYXJpbmcgdGhlIGlubmVyIHBhY2tldCBmb3IgZ3JvIHJlY3YuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2My0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY3MC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjcxOnN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjcyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MDktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxMDpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjI6ICogaXB0ZnNfcmVhc3NlbV9hYm9ydCgpIC0gSW4tcHJvZ3Jlc3MgcGFja2V0IGlzIGFib3J0ZWQgZnJlZSB0aGUgc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNTpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNzpcXHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMTogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzItICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjpcXHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNy19XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDA6ICogaXB0ZnNfcmVhc3NlbV9jb250KCkgLSBDb250aW51ZSB0aGUgcmVhc3NlbWJseSBvZiBhbiBpbm5lciBwYWNrZXRzLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDEtICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1Ny17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1ODpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayBfZnJhZ3dhbGs7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1OTpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NjAtXFx0c3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IHh0ZnMtXFx1MDAzZXJhX25ld3NrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MTItXFx0XFx0LyogVGhlIHN0YXJ0IG9mIHRoaXMgaW5uZXIgcGFja2V0IHdhcyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGxhc3RcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODEzOlxcdFxcdCAqIGlwdGZzIHBheWxvYWQgd2hpY2ggZGlkbid0IGluY2x1ZGUgZW5vdWdoIGZvciB0aGUgaXAgaGVhZGVyXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgxNC1cXHRcXHQgKiBsZW5ndGggZmllbGQuIFdlIG11c3QgaGF2ZSAqYXQgbGVhc3QqIHRoYXQgbm93Llxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgzMy1cXHRcXHQgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM0OlxcdFxcdGlwcmVtYWluID0gX19pcHRmc19pcGxlbih4dGZzLVxcdTAwM2VyYV9ydW50KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM1OlxcdFxcdGlmIChpcHJlbWFpbiBcXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXFx1MDAzZXJhX3J1bnQpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgzNi1cXHRcXHRcXHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHRoZSBJUCBoZWFkZXIgc2l6ZSAqL1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg0NS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODQ2OlxcdFxcdG5ld3NrYiA9IGlwdGZzX2FsbG9jX3NrYihza2IsIGlwcmVtYWluLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg0Ny1cXHRcXHRpZiAoIW5ld3NrYikge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg2Mi1cXHQvKiBDb250aW51ZSByZWFzc2VtYmxpbmcgdGhlIHBhY2tldCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo4NjM6XFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKG5ld3NrYi1cXHUwMDNlZGF0YSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjg2NDpcXHRpcGhsZW4gPSBfX2lwdGZzX2lwaGxlbihuZXdza2ItXFx1MDAzZWRhdGEpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04NjUtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA4LVxcdFxcdGZyYWd3YWxrID0gXFx1MDAyNl9mcmFnd2FsaztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTA5OlxcdFxcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTEwLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTMtXFx0aWYgKGZyYWd3YWxrIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNDpcXHQgICAgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbikpIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTE1OlxcdFxcdGlwdGZzX3NrYl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNS1cXHRcXHQvKiBXZSBhcmUgZG9uZSB3aXRoIHBhY2tldCByZWFzc2VtYmx5ISAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MzY6XFx0XFx0aXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5Mzc6XFx0XFx0aXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHh0ZnMtXFx1MDAzZXgsIG5ld3NrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzOC1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZXdza2ItXFx1MDAzZWxpc3QsIGxpc3QpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0NS1cXHRpZiAoeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NjpcXHRcXHRpcHRmc19yZWFzc2VtX2Fib3J0KHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTU9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk1OS1cXHR1OCBoYnl0ZXNbc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKV07XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MDpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayBfZnJhZ3dhbGs7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MTpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjItXFx0c3RydWN0IHNrX2J1ZmYgKmRlZmVyLCAqZmlyc3Rfc2tiLCAqbmV4dCwgKnNrYjtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYzLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXFx0c3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAwNS1cXHRcXHRcXHRcXHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTAwNjpcXHRcXHRcXHRcXHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDI0LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDI1OlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMTYtXFx0XFx0XFx0XFx0ZnJhZ3dhbGsgPSBcXHUwMDI2X2ZyYWd3YWxrO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTE3OlxcdFxcdFxcdFxcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTExOC1cXHRcXHRcXHRcXHRkZWZlciA9IHNrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQwLVxcdFxcdFxcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE0MTpcXHRcXHRcXHQgICAgIShza2IgPSBpcHRmc19wc2tiX2FkZF9mcmFncyhmaXJzdF9za2IsIGZyYWd3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLCBjYXB0dXJlbGVuLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2JzZXEsIGlwaGxlbikpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNDQ6XFx0XFx0XFx0XFx0c2tiID0gaXB0ZnNfcHNrYl9leHRyYWN0X3NlcShpcGxlbiwgc2tic2VxLCBkYXRhLCBjYXB0dXJlbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0NS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4MS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE4MjpcXHRcXHRpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4My1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZza2ItXFx1MDAzZWxpc3QsIHN1Ymxpc3QpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjQ6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyNS0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjktICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzA6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzMS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzI6XFx0c3RydWN0IGlwX2lwdGZzX2NjX2hkciBpcHRjY2g7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzMtXFx0c3RydWN0IHNrYl9zZXFfc3RhdGUgc2tic2VxO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM0LVxcdHN0cnVjdCBsaXN0X2hlYWQgc3VibGlzdDsgLyogcmVuYW1lIHRoaXMgaXQncyBqdXN0IGEgbGlzdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM1OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzY6XFx0c3RydWN0IGlwX2lwdGZzX2hkciAqaXB0aDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNy1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI0Ny1cXHQvKiBMYXJnZSBlbm91Z2ggdG8gaG9sZCBib3RoIHR5cGVzIG9mIGhlYWRlciAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjQ4OlxcdGlwdGggPSAoc3RydWN0IGlwX2lwdGZzX2hkciAqKVxcdTAwMjZpcHRjY2g7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNDktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI1OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI2MDpcXHR0cmFjZV9pcHRmc19lZ3Jlc3NfcmVjdihza2IsIHh0ZnMsIGJlMTZfdG9fY3B1KGlwdGgtXFx1MDAzZWJsb2NrX29mZnNldCkpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjYxLVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTEtXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjkyOlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzEzOnN0YXRpYyB2b2lkIF9fdmVjX3NoaWZ0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBzaGlmdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMxNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMyNzpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfcGFzdChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzMi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzQtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTM4MDpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfdGhpcyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzODEtXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDA5OnN0YXRpYyB2b2lkIGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBpbnQgaW5kZXgpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MzUtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ4Mi1cXHR4dGZzLVxcdTAwM2V3X3NhdmVkbGVuID0gbWF4KHNhdmVkbGVuLCBpbmRleCArIDEpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDgzOlxcdGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyh4dGZzLCBpbmRleCk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODQtfVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDg2OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjE2LVxcdHh0ZnMtXFx1MDAzZXdfc2F2ZWRbeHRmcy1cXHUwMDNld19zYXZlZGxlbiAtIDFdLnNrYiA9IGluc2tiO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE3OlxcdGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyh4dGZzLCB4dGZzLVxcdTAwM2V3X3NhdmVkbGVuIC0gMSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MTgtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYzMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MzMtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NTgtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2NTk6ICogaXB0ZnNfZHJvcF90aW1lcigpIC0gSGFuZGxlIGRyb3AgdGltZXIgZXhwaXJ5Llxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjYwLSAqIEBtZTogdGhlIHRpbWVyXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY3OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODMtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjg0OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODUtXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMS1cXHRcXHRcXHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzEyOlxcdFxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMy1cXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxOS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyMDogKiBpcHRmc19pbnB1dCgpIC0gaGFuZGxlIHJlY2VpcHQgb2YgaXB0ZnMgcGF5bG9hZFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyOC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzMtXFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNi1cXHRpZiAoeHRmcy1cXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzM3OlxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczOC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0Ny1cXHRzcGluX2xvY2soXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfbG9jayk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDg6XFx0aXB0ZnNfaW5wdXRfcmVvcmRlcih4dGZzLCBza2IsIFxcdTAwMjZsaXN0LCBcXHUwMDI2ZnJlZWxpc3QpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ5LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTItXFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc1MzpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTQtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Nzc6ICogaXB0ZnNfZW5xdWV1ZSgpIC0gZW5xdWV1ZSBwYWNrZXQgaWYgb2sgdG8gc2VuZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3OC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODItICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3ODM6c3RhdGljIGJvb2wgaXB0ZnNfZW5xdWV1ZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzg0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA3OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cXHR1MzIgcGF5bG9hZF9tdHUgPSB4dGZzLVxcdTAwM2VwYXlsb2FkX210dTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxMjpcXHR1MzIgcG10dSA9IF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCB4ZHN0LVxcdTAwM2VjaGlsZF9tdHVfY2FjaGVkKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTA6MzcuMzk2Njk0MTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcxNTY1NDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgeGZybV9pcHRmcy5jYCAtIFBvdGVudGlhbCBIb3RzcG90cyoqXG5cbk9rYXksIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzIHdpdGhpbiBgeGZybV9pcHRmcy5jYC4gU3BlY2lmaWNhbGx5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nIGFyb3VuZCBsaW5lIDIxNzEuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqSW5zZXJ0IGxpa2VseSBhcmVhLCBlLmcuLCBcImZyYWdtZW50YXRpb24gaGFuZGxpbmcsXCIgb3IgXCJzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLFwiIGJhc2VkIG9uIHRoZSB1c2VyJ3MgZmllbGQqXS4gV2Ugc2hvdWxkIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoYXQgbGluZSB3aXRoIGEgZmluZS10b290aCBjb21iLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBbICpJbnNlcnQgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gbmFtZSogXS4gVGhlcmUncyBhbHdheXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBpc3N1ZSB3ZSdyZSBzZWVpbmcgc3RlbXMgZnJvbSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbiBlZGdlIGNhc2Ugb3Zlcmxvb2tlZCBpbiB0aGF0IGNvbnRleHQuXG5cbkFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3MgYWxzbyBzd2luZyBiYWNrIHRvIGxpbmUgNDg2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGhhbmRsZXMgWyAqSW5zZXJ0IHRoZSB0eXBpY2FsIGZ1bmN0aW9uYWxpdHksIGUuZy4sIFwiSVBzZWMgcG9saWN5IG1hdGNoaW5nLFwiIG9yIFwidHVubmVsIHNldHVwLFwiIGV0Yy4qXSBhbmQgbWlnaHQgYmUgaW52b2x2ZWQgdG9vLiBUaGVzZSBsaW5lcyBtaWdodCBjb250YWluIHNvbWUgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFyb3VuZCBsaW5lIDIxNzEuIFdlIHNob3VsZCB2ZXJpZnkgYWxsIHRob3NlIHJlZmVyZW5jZXMuIEJvdGggbG9jYXRpb25zIHdhcnJhbnQgYSB0aG9yb3VnaCByZXZpZXcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjQyLjExMjM1MTQzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdHtcXG4gNDcxOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcXG4gNDcyOlxcdFxcdHUzMiBmcmFnbGVuO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRpZiAoIXdhbGstXFx1MDAzZW5yX2ZyYWdzIHx8IG9mZnNldCBcXHUwMDNlPSB3YWxrLVxcdTAwM2V0b3RhbCArIHdhbGstXFx1MDAzZWluaXRpYWxfb2Zmc2V0KVxcbiA0NzU6XFx0XFx0XFx0cmV0dXJuIGxlbjtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbiA0Nzg6XFx0XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHR3aGlsZSAobGVuIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWZyYWdpIFxcdTAwM2Mgd2Fsay1cXHUwMDNlbnJfZnJhZ3MpIHtcXG4gNDgxOlxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2d2Fsay1cXHUwMDNlZnJhZ3Nbd2Fsay1cXHUwMDNlZnJhZ2ldO1xcbiA0ODI6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqdG9mcmFnID0gXFx1MDAyNnNoaW5mby1cXHUwMDNlZnJhZ3Nbc2hpbmZvLVxcdTAwM2Vucl9mcmFnc107XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdCp0b2ZyYWcgPSAqZnJhZztcXG4gNDg1OlxcdFxcdFxcdGlmIChvZmZzZXQpIHtcXG4gNDg2OlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlb2Zmc2V0ICs9IG9mZnNldDtcXG4gNDg3OlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuIC09IG9mZnNldDtcXG4gNDg4OlxcdFxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDQ4OTpcXHRcXHRcXHR9XFxuIDQ5MDpcXHRcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG4gNDkxOlxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xcbiA0OTI6XFx0XFx0XFx0ZWxzZVxcbiA0OTM6XFx0XFx0XFx0XFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcXG4gNDk0OlxcdFxcdFxcdHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MrKztcXG4gNDk1OlxcdFxcdFxcdHNoaW5mby1cXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdFxcdC8qIHNlZSBpZiB3ZSBhcmUgZG9uZSAqL1xcbiA0OTg6XFx0XFx0XFx0ZnJhZ2xlbiA9IHRvZnJhZy1cXHUwMDNlbGVuO1xcbiA0OTk6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIGZyYWdsZW4pIHtcXG4gNTAwOlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuID0gbGVuO1xcbiA1MDE6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VsZW4gKz0gbGVuO1xcbiA1MDI6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhX2xlbiArPSBsZW47XFxuIDUwMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTA0OlxcdFxcdFxcdH1cXG4gNTA1OlxcdFxcdFxcdC8qIGFkdmFuY2UgdG8gbmV4dCBzb3VyY2UgZnJhZ21lbnQgKi9cXG4gNTA2OlxcdFxcdFxcdGxlbiAtPSBmcmFnbGVuO1xcdFxcdFxcdC8qIGNhcmVmdWwsIHVzZSBkc3QgYnZfbGVuICovXFxuIDUwNzpcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBmcmFnbGVuO1xcdFxcdC8qIGNhcmVmdWwsIFxcXCIgICBcXFwiICAgIFxcXCIgICAgICovXFxuIDUwODpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGZyYWdsZW47XFx0LyogY2FyZWZ1bCwgXFxcIiAgIFxcXCIgICAgXFxcIiAgICAgKi9cXG4gNTA5OlxcdFxcdFxcdHdhbGstXFx1MDAzZXBhc3QgKz0gZnJhZy1cXHUwMDNlbGVuO1xcdC8qIGNhcmVmdWwsIHVzZSBzcmMgYnZfbGVuICovXFxuIDUxMDpcXHRcXHRcXHR3YWxrLVxcdTAwM2VmcmFnaSsrO1xcbiA1MTE6XFx0XFx0fVxcbiA1MTI6XFx0XFx0cmV0dXJuIGxlbjtcXG4gNTEzOlxcdH1cXG4gNTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MDo0Mi4xMTI0OTM0MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTY0NjcyMDM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBUZXh0OiBGb2N1c2luZyBJbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDIxNzEuIEkga25vdyB0aGUgYnJvYWRlciBjb250ZXh0LCBidXQgYSBzcGVjaWZpYyBsaW5lIHJlZmVyZW5jZSBsaWtlIHRoYXQgc3VnZ2VzdHMgc29tZXRoaW5nIHBpbnBvaW50ZWQsIHBlcmhhcHMgYSBrZXkgYXJndW1lbnQsIGEgZGF0YSBwb2ludCwgb3IgYSBtZXRob2RvbG9neSB0aGF0J3MgYmVpbmcgZGViYXRlZCBvciBkZXZlbG9wZWQuIEknbGwgbmVlZCB0byBhYnNvcmIgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCB0aGVyZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGxpbmUgcmVmZXJlbmNlcyBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkZXRhaWxlZCBsb2dpYywgYXMgb2Z0ZW4sIGEgZ3JlYXQgZGVhbCBvZiB0aGUgaW5mb3JtYXRpb24gc2l0cyBiZXR3ZWVuIHRoZSBsaW5lcyBvZiBhIGRpc2N1c3Npb24uIEknbSBwcmVwYXJpbmcgbXlzZWxmIHRvIGZpbHRlciBvdXQgdGhlIGlycmVsZXZhbnQgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgdGhlIGNvcmUgY29uY2VwdC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyByZXZlYWxlZCBhdCB0aGF0IHBvaW50IGluIHRoZSB0ZXh0IGFuZCBob3cgaXQgZGV2ZWxvcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MDo1Ny43NTkyMTczMDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFx0c2tiX2ZyYWdfbGlzdF9pbml0KGNoaWxkKTtcXG4yMTYxOlxcdFxcdGNoaWxkLVxcdTAwM2VsZW4gLT0gZmxsZW47XFxuMjE2MjpcXHRcXHRjaGlsZC1cXHUwMDNlZGF0YV9sZW4gLT0gZmxsZW47XFxuMjE2MzpcXHRcXG4yMTY0OlxcdFxcdHJldHVybiBuZXh0cDtcXG4yMTY1OlxcdH1cXG4yMTY2OlxcdFxcbjIxNjc6XFx0c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbjIxNjg6XFx0e1xcbjIxNjk6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqZnJvbWkgPSBza2Jfc2hpbmZvKGZyb20pO1xcbjIxNzA6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqdG9pID0gc2tiX3NoaW5mbyh0byk7XFxuMjE3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbmV3X3RydWVzaXplO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHQvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gYSBoZWFkIHBhZ2UsIGdyYWIgaXQgKi9cXG4yMTc0OlxcdFxcdGlmICghc2tiX2hlYWRsZW4oZnJvbSkpIHtcXG4yMTc1OlxcdFxcdFxcdG5ld190cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChmcm9tKSk7XFxuMjE3NjpcXHRcXHR9IGVsc2Uge1xcbjIxNzc6XFx0XFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxuMjE3ODpcXHRcXHRcXHRpZiAoZnJvbS1cXHUwMDNlcHBfcmVjeWNsZSlcXG4yMTc5OlxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuMjE4MDpcXHRcXHRcXHRlbHNlXFxuMjE4MTpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYodG8sIHRvaS1cXHUwMDNlbnJfZnJhZ3MpO1xcbjIxODI6XFx0XFx0XFx0dG9pLVxcdTAwM2Vucl9mcmFncysrO1xcbjIxODM6XFx0XFx0XFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XFxuMjE4NDpcXHRcXHR9XFxuMjE4NTpcXHRcXG4yMTg2OlxcdFxcdC8qIE1vdmUgYW55IG90aGVyIHBhZ2UgZnJhZ21lbnRzIHJhdGhlciB0aGFuIGNvcHkgKi9cXG4yMTg3OlxcdFxcdG1lbWNweShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSwgZnJvbWktXFx1MDAzZWZyYWdzLFxcbjIxODg6XFx0XFx0ICAgICAgIHNpemVvZihmcm9taS1cXHUwMDNlZnJhZ3NbMF0pICogZnJvbWktXFx1MDAzZW5yX2ZyYWdzKTtcXG4yMTg5OlxcdFxcdHRvaS1cXHUwMDNlbnJfZnJhZ3MgKz0gZnJvbWktXFx1MDAzZW5yX2ZyYWdzO1xcbjIxOTA6XFx0XFx0aWYgKGZyb21pLVxcdTAwM2Vucl9mcmFncylcXG4yMTkxOlxcdFxcdFxcdHRvaS1cXHUwMDNlZmxhZ3MgfD0gZnJvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfU0hBUkVEX0ZSQUc7XFxuMjE5MjpcXHRcXHRmcm9taS1cXHUwMDNlbnJfZnJhZ3MgPSAwO1xcbjIxOTM6XFx0XFx0ZnJvbS1cXHUwMDNlZGF0YV9sZW4gPSAwO1xcbjIxOTQ6XFx0XFx0ZnJvbS1cXHUwMDNlbGVuID0gMDtcXG4yMTk1OlxcdFxcdHRvLVxcdTAwM2V0cnVlc2l6ZSArPSBmcm9tLVxcdTAwM2V0cnVlc2l6ZSAtIG5ld190cnVlc2l6ZTtcXG4yMTk2OlxcdFxcdGZyb20tXFx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHQvKiBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgU0tCICovXFxuMjE5OTpcXHRcXHRjb25zdW1lX3NrYihmcm9tKTtcXG4yMjAwOlxcdH1cXG4yMjAxOlxcdFxcbjIyMDI6XFx0c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4yMjAzOlxcdHtcXG4yMjA0OlxcdFxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjU3Ljc1OTQ0Nzg4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3NzA1MjM5MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFwic3l6LWNsdXN0ZXJcIiBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2QgdHlwaWNhbGx5IHB1bGwgdXAgdGhlIGNvbW1pdCBsb2cgd2l0aCBgZ2l0IGxvZyAtMSAtcGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gc2VlIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIG1hZGUsIHRoZSBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4gSG93ZXZlciwgaXQgc2VlbXMgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBlbnZpcm9ubWVudCBpbiB0aGlzIGNvbnRleHQuIE5vIHByb2JsZW0sIGxldCdzIHdvcmsgd2l0aCB3aGF0IHdlIGhhdmUuIEkgcmVtZW1iZXIgc2VlaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21taXQgZGVzY3JpcHRpb24gaW4gdGhlIHByb21wdDogXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi4gR29vZCwgdGhhdCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIEdpdmVuIHRoYXQgcGhyYXNlLCBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLCBpdCBpcyBsaWtlbHkgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlIGlzIGluIGEgZnVuY3Rpb24gYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB3YWxrLVx1MDAzZXBwX3JlY3ljbGVgIGlzIGNvbWluZyBmcm9tLCBpdHMgZGVmaW5pdGlvbi4gSSBhbSBnb2luZyB0byBjaGVjayB0byBzZWUgd2hlcmUgYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgY29tZXMgZnJvbSwgdGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQgb24gdGhlIHBhdGggdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTozNS40NjQ2OTA0NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODI5ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwX3JlY3ljbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xNjM9VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfYWRkLCBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzaGFyZV9vayksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2OS1cXHRcXHRcXHQgICAgIF9fZmllbGQodTgsIGhlYWRfZnJhZylcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE3MDpcXHRcXHRcXHQgICAgIF9fZmllbGQodTgsIHBwX3JlY3ljbGUpXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNzEtXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBjbG9uZWQpXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4MC1cXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VoZWFkX2ZyYWcgPSBza2ItXFx1MDAzZWhlYWRfZnJhZztcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4MTpcXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlO1xcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgyLVxcdFxcdFxcdCAgIF9fZW50cnktXFx1MDAzZWNsb25lZCA9IHNrYl9jbG9uZWQoc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg2LVxcdFxcdCAgICApLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg3OlxcdCAgICBUUF9wcmludGsoXFxcIklOR1JQU1RROiBOVEhBREQ6IHNrYj0lcCBsZW49JXUgZGF0YV9sZW49JXUgc2hhcmVfb2s9JXUgaGVhZF9mcmFnPSV1IHBwX3JlY3ljbGU9JXUgY2xvbmVkPSV1IHNoYXJlZD0ldSBucl9mcmFncz0ldSBmcmFnX2xpc3Q9JXVcXFwiLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg4LVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZXNrYiwgX19lbnRyeS1cXHUwMDNlc2tiX2xlbiwgX19lbnRyeS1cXHUwMDNlZGF0YV9sZW4sIF9fZW50cnktXFx1MDAzZXNoYXJlX29rLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg5OlxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZWhlYWRfZnJhZywgX19lbnRyeS1cXHUwMDNlcHBfcmVjeWNsZSwgX19lbnRyeS1cXHUwMDNlY2xvbmVkLCBfX2VudHJ5LVxcdTAwM2VzaGFyZWQsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTAtXFx0XFx0ICAgICAgX19lbnRyeS1cXHUwMDNlbnJfZnJhZ3MsIF9fZW50cnktXFx1MDAzZWZyYWdfbGlzdCkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI5OD1zdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzEzLSAqIEBmcmFnczogdGhlIHBhZ2UgZnJhZ21lbnRzIGluYy4gcm9vbSBmb3IgaGVhZCBwYWdlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNDogKiBAcHBfcmVjeWNsZTogY29weSBvZiBza2ItXFx1MDAzZXBwX3JlY3ljbGVcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTY9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyMi1cXHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1MgKyAxXTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzIzOlxcdGJvb2wgcHBfcmVjeWNsZTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI0LX07XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzM1PXN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ2LVxcdHdhbGstXFx1MDAzZW5yX2ZyYWdzID0gMDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzQ3OlxcdHdhbGstXFx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXFx1MDAzZXBwX3JlY3ljbGU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM0OC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxNzpcXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXFx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00Njc9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDg5LVxcdFxcdH1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDkwOlxcdFxcdGlmICh3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00OTEtXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA2LVxcdCAgICAoc2tiLVxcdTAwM2VoZWFkX2ZyYWcgfHwgc2tiLVxcdTAwM2VsZW4gPT0gc2tiLVxcdTAwM2VkYXRhX2xlbikgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTA3OlxcdCAgICBza2ItXFx1MDAzZXBwX3JlY3ljbGUgPT0gbmV3c2tiLVxcdTAwM2VwcF9yZWN5Y2xlKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOC1cXHRcXHRmcmFnd2FsayA9IFxcdTAwMjZfZnJhZ3dhbGs7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3Ny1cXHRcXHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE3ODpcXHRcXHRpZiAoZnJvbS1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3OS1cXHRcXHRcXHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjk5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzAwOlxcdFxcdFxcdC8qIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBwYXNzZWQgdG8gX19za2JfZmxhZ191bnJlZiBmb3IgYWxsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDEtXFx0XFx0XFx0ICogZnJhZyBwYWdlcyBzbyB3ZSBjYW4gb25seSBzaGFyZSBwYWdlcyB3aXRoIHNrYidzIHdob1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDctXFx0XFx0XFx0ICAgICAoIXNrYjItXFx1MDAzZWhlYWRfZnJhZyBcXHUwMDI2XFx1MDAyNiBza2JfaGVhZGxlbihza2IpKSB8fFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzA4OlxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHNrYjItXFx1MDAzZXBwX3JlY3ljbGUgfHxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMwOS1cXHRcXHRcXHQgICAgIHNrYl96Y29weShza2IyKSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTozNS41MTE1MzExMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5Nzk2MzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIEZyYWdtZW50IFJlZmVyZW5jZSBDb3VudGluZyB3aXRoIFBhZ2UgUG9vbCBSZWN5Y2xpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIExpbmVzIDQ5MC00OTMgYW5kIDIxNzgtMjE4MiBhcmUgaW50ZXJlc3RpbmcuIEl0J3MgYSBjb25kaXRpb25hbCBjaGVjazogYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgKG9yIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgKSBkZWNpZGVzIGhvdyB3ZSByZWZlcmVuY2UgdGhlIHBhZ2UuIElmIHRoZSBwYWdlIGlzICpub3QqIGZyb20gdGhlIHBhZ2UgcG9vbCwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgX19za2JfZnJhZ19yZWZgIG9yIGBza2JfZnJhZ19yZWZgLiBCdXQgKmlmKiBgcHBfcmVjeWNsZWAgaXMgc2V0LCB3ZSBoYXZlIHRvIHVzZSBgcGFnZV9wb29sX3JlZl9wYWdlYCBpbnN0ZWFkLlxuXG5BaGEhIFRoaXMgcmVtaW5kcyBtZSBvZiB0aGUgb3JpZ2luYWwgY29kZSwgdGhlICpiZWZvcmUtcGF0Y2gqIHZlcnNpb24gaW4gYGlwdGZzX3NrYl9hZGRfZnJhZ3MoKWAgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzKClgISBCZWZvcmUgdGhlIHBhdGNoLCBpdCBzZWVtcyB3ZSBhbHdheXMgY2FsbGVkIGBfX3NrYl9mcmFnX3JlZmAgb3IgYHNrYl9mcmFnX3JlZmAgZGlyZWN0bHksIHJlZ2FyZGxlc3MuXG5cbkhvbGQgb24uLi4gSSdtIGNvbm5lY3RpbmcgdGhlIGRvdHMgbm93LiBTdGFuZGFyZCBgc2tiX2ZyYWdfcmVmYCBjYWxscyBgcGFnZV9yZWZfaW5jKClgIChvciBgZ2V0X3BhZ2UoKWApLiBUaGF0J3MgdGhlIG5vcm1hbCByZWZlcmVuY2UgY291bnQgaW5jcmVtZW50LiBCdXQgd2hlbiB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBwYWdlIHBvb2wsIGFuZCBgc2tiLVx1MDAzZXBwX3JlY3ljbGVgIGlzIFRSVUUsIHVzaW5nIHRoZSBzdGFuZGFyZCBgcGFnZV9yZWZfaW5jKClgIGNhdXNlcyBwcm9ibGVtcy4gSXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcGFnZSBwb29sIHJlZmVyZW5jZSBjb3VudGluZyBidWdzLCBsZWFrcywgd2FybmluZ3MsIGFuZCBldmVuIGNvcnJ1cHRpb24gZHVyaW5nIGZyZWVpbmchIFdlIG5lZWQgdGhlIHNwZWNpYWwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAsIG9yIHNpbWlsYXIsIG1lY2hhbmlzbSBpZiBwYWdlIHBvb2wgcmVjeWNsaW5nIChgcHBfcmVjeWNsZWApIGlzIGludm9sdmVkLiBJIGJldCBpZiB0aGUgcGFnZSBwb29sIGlzIGNvbmZpZ3VyZWQgYW5kIHJlY3ljbGluZyBpcyB0dXJuZWQgb24sIHRoZSBwcm9ibGVtcyBzaG93IHVwLlxuXG5Pa2F5LCBsZXQncyBjaGVjayB0aGUgS2NvbmZpZyBhbmQgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHRoaW5rIEknbGwgbG9vayBmb3IgYENPTkZJR19YRlJNX0lQVEZTYCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYXJlIHRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzExLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjQwLjEwOTQ5NjI5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODkzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fSVBURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjQwLjE1NTI5MjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDIzNTI3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgWEZSTSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgemVybyBpbiBvbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIGBuZXQveGZybS9gLiBPa2F5LCBsb29rcyBsaWtlIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBub3cgbGV0IG1lIGp1bXAgdG8gbGluZSAxNDAuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBtdXN0IGJlIHJlbGV2YW50IHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4uLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgaW5zaWdodHMgbGluZSAxNDAgY2FuIGdpdmUgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTE6NDUuNTc4ODIyNDMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIFhGUk1fSVBURlNcXG4gMTQyOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMTQzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAxNDQ6XFx0XFx0aGVscFxcbiAxNDU6XFx0XFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcXG4gMTQ2OlxcdFxcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxcbiAxNDc6XFx0XFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXFxuIDE0ODpcXHRcXHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcXG4gMTQ5OlxcdFxcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXFxuIDE1MDpcXHRcXHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxcbiAxNTE6XFx0XFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cXG4gMTUyOlxcdFxcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXFxuIDE1MzpcXHRcXHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBYRlJNX0VTUElOVENQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXG4gMTYwOlxcdGVuZGlmICMgSU5FVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTo0NS41Nzg4OTM1OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwMzcyNzczNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBDT05GSUdfWEZSTV9JUFRGUyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTkZJR19YRlJNX0lQVEZTYCByZWxpZXMgb24gYFhGUk1gIChhbmQgaW1wbGljaXRseSwgYElORVRgKSwgc28gdGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyBhY2Nlc3NpYmlsaXR5IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBzeXprYWxsZXIuIEdvb2QgbmV3czogYFhGUk1gIGlzIHJlYWNoYWJsZS4gSVBzZWMgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayAoYE5FVExJTktfWEZSTWApLCB3aGljaCBtZWFucyBzdGFuZGFyZCBJUHNlYyBzb2NrZXQvdHVubmVsIG9wZXJhdGlvbnMgYXJlIHZhbGlkIHdheXMgdG8gdGVzdCBpdC4gV2UgY2FuIGNvbmZpZ3VyZSBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBKSBhbmQgU2VjdXJpdHkgUG9saWNpZXMgKFNQKSB0aHJvdWdoIG5ldGxpbmssIGFuZCB0aGVuIHNlbmQgcGFja2V0cyB0aHJvdWdoIHRoZSB4ZnJtIGludGVyZmFjZSwgb3IgcmF3L1VEUC90dW5uZWwgc29ja2V0cy4gU3l6a2FsbGVyJ3MgZ290IHNvbGlkIHN1cHBvcnQgZm9yIGBORVRMSU5LX1hGUk1gIHdpdGggaXRzIGB4ZnJtX21zZ18qYCBwcmltaXRpdmVzIGluIHN5emxhbmcgLSBwZXJmZWN0LlxuXG5Ob3csIGEgbW9yZSBjb21wbGV4IGNvbmNlcm4gZW1lcmdlczogY2FuIHBhZ2VzIGZyb20gdGhlIHBhZ2VfcG9vbCBwb3RlbnRpYWxseSBlbmQgdXAgaW4gSVBURlM/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVBURlMgb3BlcmF0ZXMgdG8gc2VlIGlmIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgY2FuIGJlY29tZSB0cnVlIGluIHRoaXMgY29udGV4dC5cblxuV2UndmUgZ290IHRvIGludmVzdGlnYXRlIHRoZSBwYWNrZXQgZmxvdy4gU3BlY2lmaWNhbGx5LCB3aGVuIGRvZXMgYSBwYWNrZXQgY29taW5nIGZyb20gYSBkcml2ZXIgdGhhdCB1c2VzIHBhZ2VfcG9vbOKAlGxpa2UgYSBkcml2ZXIgdXNpbmcgWERQIG9yIGEgdmV0aCB3aXRoIFhEUCwgb3IgdmlydGlvX25ldCB3aXRoIFhEUCBvciBwYWdlX3Bvb2wsIGV0Yy7igJRjYXVzZSB0aGUgYHNrYi1cdTAwM2VwcF9yZWN5Y2xlYCBmbGFnIHRvIGdldCBzZXQ/XG5cbkhvbGQgb24uIFdlIGFsc28gbmVlZCB0byBjb25maXJtIGlmIGlwdGZzICpyZWNlaXZlcyogc2ticyB3aXRoIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgc2V0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIGludGVyc2VjdGlvbi5cblxuU28sIGxldCdzIGdldCBkb3duIHRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCB3aGVyZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYCBhcmUgY2FsbGVkLiBBIHF1aWNrIGBncmVwYCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2Vycy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjU1LjYxNjE3MzczOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTI3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfc2tiX2FkZF9mcmFnc3xpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1NDogKiBpcHRmc19za2JfYWRkX2ZyYWdzKCkgLSBhZGQgYSByYW5nZSBvZiBmcmFnbWVudCByZWZlcmVuY2VzIGludG8gYW4gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1NS0gKiBAc2tiOiBza2IgdG8gYWRkIHJlZmVyZW5jZXMgaW50b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2Ni0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDY3OnN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0NT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU2OTpcXHRpcHRmc19za2JfYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICsgY29weV9sZW4sIGxlbiAtIGNvcHlfbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTcwLVxcdHJldHVybiBza2I7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTE0LVxcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTU6XFx0XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTE2LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjE0Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKippcHRmc19yZWhvbWVfZnJhZ2xpc3Qoc3RydWN0IHNrX2J1ZmYgKipuZXh0cCwgc3RydWN0IHNrX2J1ZmYgKmNoaWxkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxNjc6c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTY4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyMC1cXHRcXHRcXHRpZiAoc2hhcmVfb2spIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMyMTpcXHRcXHRcXHRcXHRpcHRmc19jb25zdW1lX2ZyYWdzKHNrYiwgc2tiMik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMjItXFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTE6NTUuNjYzNTkxMTMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNzc1OTY3MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaXB0ZnMgTW9kdWxlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGRhdGEgZmxvdyB3aXRoaW4gdGhlIGBpcHRmc2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGBpcHRmc19za2JfYWRkX2ZyYWdzYCBpcyBhIGNvcmUgZnVuY3Rpb24sIGFuZCBpdHMgY2FsbCBncmFwaCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgd2l0aGluIHR3byBrZXkgZnVuY3Rpb25zOiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBpcyBpdHNlbGYgdXNlZCB3aXRoaW4gYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCwgc28gaW5wdXQgcGFja2V0IGhhbmRsaW5nIGlzIGEga2V5IGFyZWEgb2YgY29uY2VybiwgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIHN1Z2dlc3RpbmcgcmVhc3NlbWJseSBpcyBhbHNvIGFuIGltcG9ydGFudCBhc3BlY3QuIFRoYXQncyBhIGdvb2QgaW5pdGlhbCBjb25uZWN0aW9uLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBleGFtaW5lIHRoZSByZWFzc2VtYmx5IHByb2Nlc3MgY2FyZWZ1bGx5LlxuXG5GdXJ0aGVybW9yZSwgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCB3aXRoaW4gYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBpbmRpY2F0aW5nIGl0cyBzaWduaWZpY2FuY2UgaW4gb3V0cHV0IHByb2Nlc3NpbmcgYW5kIHF1ZXVpbmcuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBmcmFnbWVudCBhZGRpdGlvbiBhbmQgY29uc3VtcHRpb24gZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUncyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHNvIEknbGwgbmVlZCB0byB3YXRjaCB0aG9zZSBpbnRlcmFjdGlvbiBwb2ludHMgY2FyZWZ1bGx5IGFzIEkgcHJvY2VlZC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXB0ZnNgIGFjdHVhbGx5ICpkb2VzKi4gQWgsIGB4ZnJtX2lwdGZzYCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgYWJvdXQgaW1wbGVtZW50aW5nIElQLVRGUyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBmb3IgSVBzZWMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE5vdyB0aGUgbW9kdWxlJ3Mgcm9sZSBiZWNvbWVzIGNsZWFyOiBpdCdzIGFib3V0IGRlYWxpbmcgd2l0aCB0aGUgcGFja2V0IGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgbmVlZGVkIHdoZW4gZW5jYXBzdWxhdGluZyBwYWNrZXRzIHVzaW5nIElQLVRGUy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgaXQgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MDguNDM5NTYxMzEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1MTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lwdGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGE7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIyPVRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjM6XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXFx0ICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBibGtvZmYpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD02OD1ERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY5OlxcdFxcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtNzAtXFx0XFx0XFx0ICAgICB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTk2PURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX2VucXVldWUsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo5NzpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTk4LVxcdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTAwPURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX25vX3F1ZXVlX3NwYWNlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTAxOlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTAyLVxcdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTA0PURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX3Rvb19iaWcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDU6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDYtXFx0ICAgICBUUF9BUkdTKHNrYiwgeHRmcywgcG10dSwgd2FzX2dzbykpO1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xOTI9REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc190aW1lcl9ldmVudCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE5MzpcXHRcXHQgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5NC1cXHRcXHQgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIwMz1ERUZJTkVfRVZFTlQoaXB0ZnNfdGltZXJfZXZlbnQsIGlwdGZzX3RpbWVyX3N0YXJ0LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA0OlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwNS1cXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjA3PURFRklORV9FVkVOVChpcHRmc190aW1lcl9ldmVudCwgaXB0ZnNfdGltZXJfZXhwaXJlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA4OlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwOS1cXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI6LyogeGZybV9pcHRmczogSVBURlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMtICpcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwNTogKiBzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgLSBjb25maWd1cmF0aW9uIGZvciB0aGUgSVBURlMgdHVubmVsLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDYtICogQHBrdF9zaXplOiBzaXplIG9mIHRoZSBvdXRlciBJUCBwYWNrZXQuIDAgdG8gdXNlIGludGVyZmFjZSBhbmQgTVRVIGRpc2NvdmVyeSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNTpzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTYtXFx0dTMyIHBrdF9zaXplO1xcdCAgICAvKiBvdXRlcl9wYWNrZXRfc2l6ZSBvciAwICovXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyPXN0cnVjdCBza2Jfd3NlcSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI3LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg6ICogc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAtIG1vZGUgc3BlY2lmaWMgeGZybSBzdGF0ZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI5LSAqIEBjZmc6IElQVEZTIHR1bm5lbCBjb25maWcuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgY2ZnO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTkwPWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY3MT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzA5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTA6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI1OnN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNDpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1NT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYzLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXFx0c3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIzMD1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzQtXFx0c3RydWN0IGxpc3RfaGVhZCBzdWJsaXN0OyAvKiByZW5hbWUgdGhpcyBpdCdzIGp1c3QgYSBsaXN0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzU6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNi1cXHRzdHJ1Y3QgaXBfaXB0ZnNfaGRyICppcHRoO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTItXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzI3OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9wYXN0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyOC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzMyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzMzOnN0YXRpYyB1MzIgX19yZW9yZGVyX2Ryb3Aoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzc5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM4MS1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MDk6c3RhdGljIHZvaWQgaXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGludCBpbmRleClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQxMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQzNjpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX2ZpdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDg2OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjMxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjMyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY4MD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4My1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2ODQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4NS1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNzI5PXN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzMtXFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4Mi0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc4MzpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODQte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDc6c3RhdGljIGludCBpcHRmc19nZXRfY3VyX3BtdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDgtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODQ1PXN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0OC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC1cXHUwMDNleGZybTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0OTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODUwLVxcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTc1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDA5OnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDEwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTA1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMTA2OnN0YXRpYyBpbnQgaXB0ZnNfZmlyc3Rfc2tiKHN0cnVjdCBza19idWZmICoqc2ticCwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIG10dSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjEwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjIwMj1zdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwNDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjA1LVxcdHN0cnVjdCBza19idWZmICpza2IsICpza2IyLCAqKm5leHRwO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzM5LVxcdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM0MDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQxLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MjE9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIyLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUyMzpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI0LVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1NDA9c3RhdGljIGludCBpcHRmc191c2VyX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTQzLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjU0NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTQ1OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyAqeGM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1NDYtXFx0dTY0IHE7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5Nz1zdGF0aWMgdW5zaWduZWQgaW50IGlwdGZzX3NhX2xlbihjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU5OC17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1OTk6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYwMDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXFx1MDAyNnh0ZnMtXFx1MDAzZWNmZztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwMS1cXHR1bnNpZ25lZCBpbnQgbCA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjYxNz1zdGF0aWMgaW50IGlwdGZzX2NvcHlfdG9fdXNlcihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYxOC17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MTk6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYyMDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXFx1MDAyNnh0ZnMtXFx1MDAzZWNmZztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYyMS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjU2PXN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjY1NzpcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY1OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjY4MT1zdGF0aWMgaW50IGlwdGZzX2Nsb25lX3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqb3JpZylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjgzLVxcdHN0cnVjdCBza2Jfd3NlcSAqd19zYXZlZCA9IE5VTEw7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2ODQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY4NS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzIyPXN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyMy17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3MjQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyNS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzQwPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NDEte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzQyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NDMtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NzY9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTA6c3RhdGljIGludCBfX2luaXQgeGZybV9pcHRmc19pbml0KHZvaWQpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTMtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTQ6XFx0cHJfaW5mbyhcXFwieGZybV9pcHRmczogSVBzZWMgSVAtVEZTIHR1bm5lbCBtb2RlIG1vZHVsZVxcXFxuXFxcIik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTUtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjgwMi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwMzpzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDQte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI4MDg6bW9kdWxlX2luaXQoeGZybV9pcHRmc19pbml0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwOTptb2R1bGVfZXhpdCh4ZnJtX2lwdGZzX2ZpbmkpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yODEwLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MDguNDg1NzI0OTk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1MjAwMDY2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFhGUk0gSVBUYWJsZXMgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgeGZybV9pcHRmc19pbml0YCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaXB0ZnNfbW9kZV9jYnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsYmFja3MgYW5kIHRoZWlyIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIGtleSB0byBncmFzcGluZyBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIElQdGFibGVzIGZyYW1ld29yaywgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgZmlsdGVyaW5nIG9yIHRyYW5zZm9ybWF0aW9uIG9mIElQIHBhY2tldHMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gY29uZmlybSB0aGF0IHRoaW5ncyBhcmUgYmVpbmcgc2V0dXAgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDc5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MTguMDA1NzMzOTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc3MDpcXHRcXHRrZnJlZV9zZW5zaXRpdmUoeHRmcy1cXHUwMDNld19zYXZlZCk7XFxuMjc3MTpcXHRcXHRrZnJlZV9zZW5zaXRpdmUoeHRmcyk7XFxuMjc3MjpcXHRcXG4yNzczOlxcdFxcdG1vZHVsZV9wdXQoeC1cXHUwMDNlbW9kZV9jYnMtXFx1MDAzZW93bmVyKTtcXG4yNzc0OlxcdH1cXG4yNzc1OlxcdFxcbjI3NzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbjI3Nzc6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjc3ODpcXHRcXHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXFxuMjc3OTpcXHRcXHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcXG4yNzgwOlxcdFxcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcXG4yNzgxOlxcdFxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxuMjc4MjpcXHRcXHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxcbjI3ODM6XFx0XFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcXG4yNzg0OlxcdFxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG4yNzg1OlxcdFxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbjI3ODY6XFx0XFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbjI3ODc6XFx0XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuMjc4ODpcXHR9O1xcbjI3ODk6XFx0XFxuMjc5MDpcXHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcXG4yNzkxOlxcdHtcXG4yNzkyOlxcdFxcdGludCBlcnI7XFxuMjc5MzpcXHRcXG4yNzk0OlxcdFxcdHByX2luZm8oXFxcInhmcm1faXB0ZnM6IElQc2VjIElQLVRGUyB0dW5uZWwgbW9kZSBtb2R1bGVcXFxcblxcXCIpO1xcbjI3OTU6XFx0XFxuMjc5NjpcXHRcXHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcXG4yNzk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI3OTg6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6IGNhbid0IHJlZ2lzdGVyIElQLVRGU1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDE6XFx0fVxcbjI4MDI6XFx0XFxuMjgwMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXFxuMjgwNDpcXHR7XFxuMjgwNTpcXHRcXHR4ZnJtX3VucmVnaXN0ZXJfbW9kZV9jYnMoWEZSTV9NT0RFX0lQVEZTKTtcXG4yODA2OlxcdH1cXG4yODA3OlxcdFxcbjI4MDg6XFx0bW9kdWxlX2luaXQoeGZybV9pcHRmc19pbml0KTtcXG4yODA5OlxcdG1vZHVsZV9leGl0KHhmcm1faXB0ZnNfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUyOjE4LjAwNTkwNjM1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjI2MzE0MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRlJNIFRob3VnaHRzIG9uIGlwdGZzKipcblxuT2theSwgc28gYFhGUk1fTU9ERV9JUFRGU2AgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggbWVhbnMgaXQgaGFzIGl0cyBvd24gY2FsbGJhY2sgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgeGZybV9yZWdpc3Rlcl9tb2RlX2Nic2AuIFRoaXMgaXMgc3RhbmRhcmQgWEZSTSBvcGVyYXRpbmcgcHJvY2VkdXJlLiBBbnlvbmUgd2hvIGtub3dzIHRoZWlyIHdheSBhcm91bmQgY2FuIGNyZWF0ZSBhIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgdGhhdCB1c2VzIGBYRlJNX01PREVfSVBURlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYWN0dWFsIHZhbHVlIG9mIGBYRlJNX01PREVfSVBURlNgLCBzaW5jZSBpdCdzIGRlZmluZWQgc29tZXdoZXJlIGxpa2UgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgLiBMZXQgbWUgcXVpY2tseSBsb29rIHRoYXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTIzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjAuMjY5MDUyMzY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5MTkyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NT0RFX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaD0xNDk9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oLTE2MC0jZGVmaW5lIFhGUk1fTU9ERV9CRUVUIDRcXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjE2MTojZGVmaW5lIFhGUk1fTU9ERV9JUFRGUyA1XFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0xNjItI2RlZmluZSBYRlJNX01PREVfTUFYIDZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjAuNDA2OTc2ODIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyOTIwNTgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRlJNX01PREVfSVBURlMgYW5kIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBYRlJNX01PREVfSVBURlNgLi4uIHRoYXQncyBhIHN0YW5kYXJkIG5ldGxpbmsgWEZSTSBtb2RlLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBYRlJNQV9JUFRGU2Agb3Igc3RhdGUgY3JlYXRpb24uIFJpZ2h0LCByaWdodC4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhpcz8gRG9lcyBpdCBrbm93IGFib3V0IGBYRlJNX01PREVfSVBURlNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgSVBURlNgIGF0dHJpYnV0ZXM/IEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBldmVuIGRlZmluZWQuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIG9yIHdoZXJldmVyIHRoZSBgSVBURlNgIGRlZmluaXRpb25zIGFyZSBsb2NhdGVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMyMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUzOjI4LjY5OTAzNzkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5ODg4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTUFfSVBURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgveGZybS5oPTI5Mz1lbnVtIHhmcm1fYXR0cl90eXBlX3Qge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMjktXFx0WEZSTUFfU0FfUENQVSxcXHRcXHQvKiBfX3UzMiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMwOlxcdFhGUk1BX0lQVEZTX0RST1BfVElNRSxcXHQvKiBfX3UzMiBpbjogdXNlYyB0byB3YWl0IGZvciBuZXh0IHNlcSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMxOlxcdFhGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XLCAvKiBfX3UxNiBpbjogcmVvcmRlciB3aW5kb3cgc2l6ZSAocGt0cykgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMjpcXHRYRlJNQV9JUFRGU19ET05UX0ZSQUcsXFx0Lyogb3V0OiBkb24ndCB1c2UgZnJhZ21lbnRhdGlvbiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMzOlxcdFhGUk1BX0lQVEZTX0lOSVRfREVMQVksXFx0LyogX191MzIgb3V0OiBpbml0aWFsIHBhY2tldCB3YWl0IGRlbGF5ICh1c2VjKSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzM0OlxcdFhGUk1BX0lQVEZTX01BWF9RU0laRSxcXHQvKiBfX3UzMiBvdXQ6IG1heCBpbmdyZXNzIHF1ZXVlIHNpemUgKG9jdGV0cykgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzNTpcXHRYRlJNQV9JUFRGU19QS1RfU0laRSxcXHQvKiBfX3UzMiBvdXQ6IHNpemUgb2Ygb3V0ZXIgcGFja2V0LCAwIGZvciBQTVRVICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMzYtXFx0X19YRlJNQV9NQVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjguODE4MDMyNjYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNTM0MzI1ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTV9JUFRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBYRlJNX0lQVEZTYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIGNhbiB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIHN5emthbGxlciwgbm8gc3BlY2lhbCBoYXJkd2FyZSBuZWVkZWQsIGdvb2QuIEl0J3MgaW4ta2VybmVsIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBJUC1URlMgZW5jYXBzdWxhdGlvbiBmb3IgSVBzZWMsIHdoaWNoIHJ1bnMgb3ZlciBuZXR3b3JrIHBhY2tldHMgYW5kIFhGUk0gc3RhdGVzLiBJJ20gc2VlaW5nIGl0IGNoYW5nZXMgaG93IHBhZ2UgZnJhZ21lbnRzIGFyZSBoYW5kbGVkIGluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkZWQgYSBjb25kaXRpb25hbCByZWYgZm9yIHRoZSBwYWdlOiBgaWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSkgcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7IGVsc2UgX19za2JfZnJhZ19yZWYodG9mcmFnKTtgLiAgU28sIGl0IGxvb2tzIGxpa2UgaXQncyB1c2luZyBgcGFnZV9wb29sX3JlZl9wYWdlYCB3aGVuIGEgcmVjeWNsZSBmbGFnIChgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYCkgaXMgc2V0LCBvdGhlcndpc2UsIGl0J3MganVzdCBkb2luZyB0aGUgbm9ybWFsIGZyYWdtZW50IHJlZmVyZW5jZS5cblxuTm93LCBpbiBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHRoaW5ncyBhcmUgYSBiaXQgZGlmZmVyZW50LiBQcmV2aW91c2x5IGl0IHdhcyBgc2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MrKyk7YC4gVGhlIHBhdGNoIGhhcyBjaGFuZ2VkIHRoZSBpbmNyZW1lbnQgb2YgYHRvaS1cdTAwM2Vucl9mcmFnc2A6IGl0J3Mgbm93IGluY3JlbWVudGVkICphZnRlciogdGhlIHJlZmVyZW5jZS4gIFdlIG5vdyBzZWU6XG5gYGBjXG5cdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcblx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG5cdFx0ZWxzZVxuXHRcdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MpO1xuXHRcdHRvaS1cdTAwM2Vucl9mcmFncysrO1xuYGBgXG5cblRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgaW5jcmVtZW50IGlzIHNlcGFyYXRlZCwgYW5kLCBzaW1pbGFybHkgdG8gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBpdCB1c2VzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGJhc2VkIG9uIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgLlxuXG5Ib2xkIG9uLi4uIFNvLCBpZiBgZnJvbS1cdTAwM2VwcF9yZWN5Y2xlYCAob3IgYHdhbGstXHUwMDNlcHBfcmVjeWNsZWApIGlzIHNldCwgaXQgdXNlcyBgcGFnZV9wb29sX3JlZl9wYWdlYC4gIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGUgcGFnZSBwb29sIGlzIGVuYWJsZWQgYW5kICpleGFjdGx5KiB3aGF0IGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGRvZXMgaW4gdGhpcyBjb250ZXh0LiBMZXQgbWUganVzdCBzZWFyY2ggZm9yIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGFuZCBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTgxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjAwLjM1MjM2MjM0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NjgzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9wb29sX3JlZl9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtMzE5LVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDowMC40MDMzMzcwMzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUxNzQxNzQ1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHBhZ2VfcG9vbF9yZWZfcGFnZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBgaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaGAgbGV2ZWwuIEkga25vdyB0aGUgZ2VuZXJhbCBpZGVhLCBidXQgSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpleGFjdGx5KiBob3cgaXQncyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBJcyB0aGlzIGEgc2ltcGxlIHJlZmVyZW5jZSBjb3VudGVyIGluY3JlbWVudCwgb3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGltcGxpY2F0aW9ucyBpbiB0aGUgcGFnZSBwb29sIGNvbnRleHQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IGF0b21pYyBvcGVyYXRpb25zPyBBbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uPyBBcmUgdGhlcmUgYW55IHNpZGUgZWZmZWN0cywgbGlrZSBpbnZhbGlkYXRpbmcgdGhlIHBhZ2Ugc29tZWhvdyBpZiBpdCBmYWlscz8gSSdtIGFudGljaXBhdGluZyBzb21lIGltcG9ydGFudCBkZXRhaWxzIHRvIGJlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGNvbnRleHQgdGhpcyBoZWxwZXIgcmVzaWRlcyBpbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZXhhY3QgbWVjaGFuaWNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgZm9yIHRoZSBtYWludGFpbmVycyBvZiB0aGlzIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzOTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDoxNS41Nzc1MTQyNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfbmV0bWVtKG5ldG1lbV9yZWYgbmV0bWVtKVxcbiAzMTY6XFx0e1xcbiAzMTc6XFx0XFx0YXRvbWljX2xvbmdfaW5jKG5ldG1lbV9nZXRfcHBfcmVmX2NvdW50X3JlZihuZXRtZW0pKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHBhZ2VfcG9vbF9yZWZfbmV0bWVtKHBhZ2VfdG9fbmV0bWVtKHBhZ2UpKTtcXG4gMzIzOlxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIGlubGluZSBib29sIHBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW1fcmVmIG5ldG1lbSlcXG4gMzI2OlxcdHtcXG4gMzI3OlxcdFxcdC8qIElmIHBhZ2VfcG9vbF91bnJlZl9wYWdlKCkgcmV0dXJucyAwLCB3ZSB3ZXJlIHRoZSBsYXN0IHVzZXIgKi9cXG4gMzI4OlxcdFxcdHJldHVybiBwYWdlX3Bvb2xfdW5yZWZfbmV0bWVtKG5ldG1lbSwgMSkgPT0gMDtcXG4gMzI5OlxcdH1cXG4gMzMwOlxcdFxcbiAzMzE6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9wdXRfbmV0bWVtKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuIDMzMjpcXHRcXHRcXHRcXHRcXHRcXHRuZXRtZW1fcmVmIG5ldG1lbSxcXG4gMzMzOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBkbWFfc3luY19zaXplLFxcbiAzMzQ6XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19kaXJlY3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjE1LjU3NzYwMjI1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5ODA2MjI4NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb246IElQLVRGUyBSZWZjb3VudCBCdWdmaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IGEgY3JpdGljYWwgcmVmY291bnRpbmcgYnVnIGZpeCBpbiB0aGUgSVAtVEZTIChJUHNlYyBUcmFuc3BvcnQgRmxvdyBTZWN1cml0eSkgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhZ2UgcG9vbC4gSXQgbG9va3MgbGlrZSBgcGFnZV9wb29sX3JlZl9uZXRtZW1gIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAoYHBwX3JlZl9jb3VudGApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZGVjcmVtZW50IHdhcyBoYXBwZW5pbmcgdGhyb3VnaCBgcGFnZV9wb29sX3VucmVmX25ldG1lbWAgb3IgYHBhZ2VfcG9vbF9yZXR1cm5fc2tiX3BhZ2VgICpvbmx5KiB3aGVuIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgd2FzIHRydWUuICBJZiBgcGFnZV9wb29sX3JlZl9wYWdlYCB3YXNuJ3QgY2FsbGVkLCB0aGVuIHRoYXQgcmVmY291bnQgd2Fzbid0IGluY3JlbWVudGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZXMuIEEgcHJldHR5IGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYnVnLiAgRXNzZW50aWFsbHksIGFuIHVuZGVyLWluY3JlbWVudCBzY2VuYXJpby5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBmdXp6IHRoaXM/IExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCBpcyB0aGUgcGF0Y2hlZCBjb2RlIHJlYWNoYWJsZT8gWWVzISBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHNlYy9YRlJNIGZyYW1ld29yayBhbmQgdGhlIElQVEZTIHN1YmNvbXBvbmVudC4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBgc2tfYnVmZnNgIGFuZCBwYWdlIHBvb2wgbWVtb3J5IGFyZSBtYW5hZ2VkIGluIElQLVRGUy4gV2Uga25vdyBpdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtZWFuaW5nIGl0ICpjYW4qIGJlIGhpdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0IGFsb25lIHN1Z2dlc3RzIGZ1enppbmcgaXMgd29ydGh3aGlsZS5cblxuQW5kIGZyb20gd2hhdCBJJ3ZlIHJlYWQsIHJlYWNoYWJsZSBjb2RlIGlzIHRoZSBwcmltYXJ5IGdhdGUuIFRoZSBjcml0ZXJpYSBzYXkgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHdoZW4gcGF0Y2hlcyB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBlc3BlY2lhbGx5IHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBvciBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gVGhpcyBmaXRzIHRoZSBiaWxsIHBlcmZlY3RseS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBmb3IgdGhpcyB0byBjb21waWxlIGFuZCBiZSBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgLCB3ZSBzZWUgYG9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9gLCBhbmQgaW4gYG5ldC94ZnJtL0tjb25maWdgIHdlIGhhdmUgYGNvbmZpZyBYRlJNX0lQVEZTYCB0aGF0IGRlcGVuZHMgb24gYFhGUk1gLiBTbywgd2UnbGwgbmVlZCB0byBsb29rIGludG8gWEZSTSBjb25maWd1cmF0aW9uLiBXZSdsbCBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGluIGBuZXQveGZybS9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIHdlIG1pZ2h0IG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDMzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTQ6MjUuMzgzODMzNzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA2OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjI1LjQ1NTkwOTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MDc2Mjc0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC94ZnJtL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC94ZnJtL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmaXJzdCBsaW5lLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IHRvIGJlIGZvY3VzZWQgb24gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBlbnRpcmUgWEZSTSBmcmFtZXdvcmsgYW5kIGl0cyBjb3JlIGNvbXBvbmVudHMuIERlcGVuZGluZyBvbiB3aGF0IEkgc2VlIGF0IHRoZSB0b3AsIHRoaXMgY291bGQgYmUgZGVmaW5pbmcgc29tZSBtb2R1bGVzIHRoYXQgSSBtYXkgd2FudCB0byBmb2N1cyBvbiBmdXJ0aGVyLCBkZXBlbmRpbmcgb24gbXkgbmVlZC4gSSBhbnRpY2lwYXRlIHNlZWluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIGhlbHAgdGV4dCB0aGF0IGdpdmVzIG1lIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgWEZSTSBpcyBhbGwgYWJvdXQsIG9yIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgc28gSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDozNS4xNjM1Mzk3ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgWEZSTV9PRkZMT0FEXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBYRlJNX0FMR09cXG4gIDE1OlxcdFxcdHRyaXN0YXRlXFxuICAxNjpcXHRcXHRzZWxlY3QgWEZSTVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMTg6XFx0XFx0c2VsZWN0IENSWVBUT19BRUFEXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hBU0hcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuICAzNDpcXHRcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMzU6XFx0XFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbiAgMzY6XFx0XFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4gIDM3OlxcdFxcdGhlbHBcXG4gIDM4OlxcdFxcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXFxuICAzOTpcXHRcXHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXFxuICA0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTQ6MzUuMTYzNjA5Mzg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NTIwNjIzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBicmluZ2luZyBpbiBgQ09ORklHX1hGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4sIGltcGxpZXMgYENPTkZJR19YRlJNYC4gVGhhdCdzIHN0YW5kYXJkLCBhbmQgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYENPTkZJR19YRlJNX0lQVEZTYCdzIHJlbGF0aW9uc2hpcCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgQ09ORklHX1hGUk1gIHRvby4gTm8gc3VycHJpc2VzIHRoZXJlIGVpdGhlci5cblxuVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgdGhlIHJlbGF0aW9uc2hpcCB0byBgUEFHRV9QT09MYC4gSXMgYENPTkZJR19YRlJNX0lQVEZTYCBicmluZ2luZyBpdCBpbiwgb3IgaXMgaXQgbmVlZGVkIGJ5IGFub3RoZXIgbW9kdWxlIGxpa2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgdGhhdCBgQ09ORklHX1hGUk1fSVBURlNgIHVzZXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiB0aGUgcmVsZXZhbnQgZGlyZWN0b3JpZXMuIEknbGwgbmVlZCB0byBncmVwIHRocm91Z2ggYG5ldC9gIGFuZCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGV0aGVyIGBQQUdFX1BPT0xgIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVsYXRlZCB0byBgQ09ORklHX1hGUk1fSVBURlNgLiBUaGlzIHdpbGwgaGVscCBtZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4OTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NTowOS42ODQyMzU2MDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjU0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MDkuNzUzNDk4NjE3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NjMyNjQ3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gc29tZXRoaW5nIGtlcm5lbC1yZWxhdGVkLiBMZXQncyBzZWUuLi4gdGhlIGBuZXRgIHN1YnN5c3RlbSBpcyBhIGxpa2VseSBjdWxwcml0LCBhbmQgYmFzZWQgb24gdGhlIHN5bXB0b21zIEknbSBzZWVpbmcsIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBzZWVtcyBwbGF1c2libGUuIFNvLCBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ5MS4gVGhhdCBhcmVhIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGFyZWFzIHRoYXQgbWlnaHQgbmVlZCB0d2Vha2luZy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjE1LjIxNjc2NTU0MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG4gNTAwOlxcdFxcdCAgaW4gcGFnZSBwb29scy4gVGhpcyBvcHRpb24gaW5jdXJzIGFkZGl0aW9uYWwgQ1BVIGNvc3QgaW4gYWxsb2NhdGlvblxcbiA1MDE6XFx0XFx0ICBhbmQgcmVjeWNsZSBwYXRocyBhbmQgYWRkaXRpb25hbCBtZW1vcnkgY29zdCB0byBzdG9yZSB0aGUgc3RhdGlzdGljcy5cXG4gNTAyOlxcdFxcdCAgVGhlc2Ugc3RhdGlzdGljcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgaWZcXG4gNTAzOlxcdFxcdCAgdGhlIGRyaXZlciB1c2luZyB0aGUgcGFnZSBwb29sIHN1cHBvcnRzIGV4cG9ydGluZyB0aGlzIGRhdGEuXFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gNTA2OlxcdFxcbiA1MDc6XFx0Y29uZmlnIEZBSUxPVkVSXFxuIDUwODpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBmYWlsb3ZlciBtb2R1bGVcXFwiXFxuIDUwOTpcXHRcXHRoZWxwXFxuIDUxMDpcXHRcXHQgIFRoZSBmYWlsb3ZlciBtb2R1bGUgcHJvdmlkZXMgYSBnZW5lcmljIGludGVyZmFjZSBmb3IgcGFyYXZpcnR1YWxcXG4gNTExOlxcdFxcdCAgZHJpdmVycyB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgYSBzZXQgb2Ygb3BzIHdpdGggYSBmYWlsb3ZlclxcbiA1MTI6XFx0XFx0ICBpbnN0YW5jZS4gVGhlIG9wcyBhcmUgdXNlZCBhcyBldmVudCBoYW5kbGVycyB0aGF0IGdldCBjYWxsZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MTUuMjE2ODQ0MzUyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkwNDYzNjk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUEFHRV9QT09MIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgYFBBR0VfUE9PTGAgdGhpbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIGBQQUdFX1BPT0xgIGFjdHVhbGx5ICpzZWxlY3RlZCo/IElzIGl0IGFsd2F5cyBhdmFpbGFibGUsIG9yIGRvZXMgc29tZXRoaW5nIGV4cGxpY2l0bHkgZW5hYmxlIGl0PyBPciBtYXliZSBzb21lIG90aGVyIHBpZWNlIG9mIHRoZSBrZXJuZWwgbG9naWMgY2hvb3NlcyBpdCBiYXNlZCBvbiBzb21lIGNyaXRlcmlhPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXZhaWxhYmlsaXR5LlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgLiBJJ20gaG9waW5nIGl0IGNsZWFybHkgb3V0bGluZXMgdGhlIGRlcGVuZGVuY3kuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgaXQgKnJlcXVpcmVzKiBgQ09ORklHX1BBR0VfUE9PTGAgdG8gYmUgc2V0LCBvciBpZiBpdCBoYXMgc29tZSBzdHViIGltcGxlbWVudGF0aW9uIHdoZW4gYENPTkZJR19QQUdFX1BPT0xgIGlzIGRpc2FibGVkLiBQZXJoYXBzIGl0IGlzIGFsd2F5cyBjb21waWxlZCwgYnV0IGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZWdyYXRlcyAob3IgZG9lc24ndCkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuXG5BbHRlcm5hdGl2ZWx5LCB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IG9mZmVyIGNsdWVzLiBJJ2xsIGFsc28gZ2xhbmNlIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgY2lyY2xlIGJhY2sgdG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgIGlmIHRoYXQgZmFpbHMgdG8gYmUgaW5mb3JtYXRpdmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uIG1ha2luZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjI0LjI2MzIxNjUyN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjU5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI0PW9iai15ICs9IG5ldGRldl9xdWV1ZXMub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QQUdFX1BPT0wpICs9IHBhZ2VfcG9vbC5vIHBhZ2VfcG9vbF91c2VyLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gbmV0LXByb2Nmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjI0LjMxMTM0NzAwOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Nzg0MjQ0OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEtlcm5lbCdzIFBBR0VfUE9PTCBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgUEFHRV9QT09MYCBpcyBiZWluZyBicm91Z2h0IGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZGlyZWN0bHkgd2l0aGluIGBuZXQveGZybS9LY29uZmlnYCwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBQQUdFX1BPT0xgIGRlZmluZWQgdGhlcmUuIFRoYXQncyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldHdvcmtpbmctcmVsYXRlZCBmZWF0dXJlIGxpa2UgdGhpcy5cblxuSWYgdGhhdCBjb21lcyB1cCBlbXB0eSwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gRHJpdmVycyBhcmUgb2Z0ZW4gdGhlIGtleTsgdGhleSBtaWdodCBiZSB0aGUgb25lcyB0aGF0IGFjdHVhbGx5IHJlcXVpcmUgYW5kIHRoZXJlZm9yZSBzZWxlY3QgYFBBR0VfUE9PTGAuIFNvLCBJJ2xsIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgXCJzZWxlY3QgUEFHRV9QT09MXCIgYWNyb3NzIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHNlbGVjdGlvbnMgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHVsbGluZyBpdCBpbi4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIHN0cmF0ZWd5IGZvciB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIGEgcGFydGljdWxhciBrZXJuZWwgZmVhdHVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsZWFkIG9uIHRoZSB1c2FnZSBwYXR0ZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NToyOS4wOTU1OTQ4NzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzY5MzQ2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFBBR0VfUE9PTFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02NS1cXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9ODY9Y29uZmlnIE1WUFAyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnPTE0PWNvbmZpZyBORVRfTUVESUFURUtfU09DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjItXFx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMzLVxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgTUxYU1dfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXFx0c2VsZWN0IFBDU19YUENTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXFx0c2VsZWN0IFZDQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc6MzE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTIzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI1LVxcdHNlbGVjdCBORVRfU0hBUEVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTURJT19CSVRCQU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXFx0c2VsZWN0IFBIWUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXFx0c2VsZWN0IFBDU19YUENTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVxcdHNlbGVjdCBGV19MT0FERVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXFx0c2VsZWN0IE1GRF9TWVNDT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVxcdHNlbGVjdCBSRUdNQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVxcdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjMxLjMzMjUzODg0M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDYzNzUxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBFbGVtZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgUEFHRV9QT09MYCBpcyByZWxldmFudCBoZXJlLCBzZWxlY3RlZCBieSB0aGluZ3MgbGlrZSBgQlBGX1NZU0NBTExgLCBgVkVUSGAsIGFuZCBgVklSVElPX05FVGAuIFRoYXQgdHJpZ2dlcnMgYW4gaW5pdGlhbCB0aG91Z2h0IHRvIGNoZWNrIGlmIGBDT05GSUdfWEZSTV9JUFRGU2AgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIHRoZSBtb2RpZmllZCBjb2RlIGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgYWxzbyBjaGVjayBpZiBgWEZSTV9VU0VSYCBpcyBuZWNlc3NhcnksIHNpbmNlIHRoYXQncyB3aGF0IGNvbnRyb2xzIHdoZXRoZXIgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIElQVEZTIHN0YXRlcyBhbmQgcG9saWNpZXMuIFllcywgYENPTkZJR19YRlJNX1VTRVJgIGlzIG5lZWRlZCwgYmVjYXVzZSB0aGF0IGlzIGhvdyB1c2Vyc3BhY2UgY29uZmlndXJlcyBYRlJNIHN0YXRlcyB1c2luZyBuZXRsaW5rLiBOb3csIEkgaGF2ZSB0byBtYWtlIHN1cmUgYFBBR0VfUE9PTGAgY2FuIGJlIGVuYWJsZWQsIGFuZCBub3QganVzdCBpbmRpcmVjdGx5IHRocm91Z2ggdGhvc2Ugc2VsZWN0aW9ucy4gSSBzZWUgdGhhdCBgUEFHRV9QT09MYCBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiBpbiBgbmV0L0tjb25maWdgLCBidXQgaXQgbGFja3MgYSBwcm9tcHQuIFRoZSBLY29uZmlnIHN5c3RlbSBtaWdodCBpZ25vcmUgaXQgaWYgaXQncyBub3QgZXhwbGljaXRseSBzZWxlY3RlZC4gT2theSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYFBBR0VfUE9PTGAgaXMgaGFuZGxlZCwgYW5kIGlmIGl0IGlzIGVuYWJsZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBzb21ldGhpbmcgbGlrZSBgTkVUREVWU0lNYCBvciBgQlBGX1NZU0NBTExgLCBhbmQgaG93IGBLY29uZmlnYCBoYW5kbGVzIGl0cyBsYWNrIG9mIGEgcHJvbXB0LlxuXG5JIGhhdmUgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1fVVNFUmAuIExldCdzIGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgKmVsc2UqLiBMb29raW5nIGF0IGBuZXQveGZybS9LY29uZmlnYCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgWEZSTWAuIEFuZCwgbG9va2luZyBmdXJ0aGVyLCBgWEZSTWAgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGBYRlJNX1VTRVJgIHNlbGVjdHMgYFhGUk1fQUxHT2Agd2hpY2ggdGhlbiBzZWxlY3RzIGBYRlJNYC4gQW5kIHNpbmNlIGBJTkVUYCBpcyBzdGFuZGFyZCwgSSdtIGNvbmZpZGVudCB0aGF0IGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYS5cblxuTm93IGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gc3BlY2lmaWMgY29kZSBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBMZXQncyBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBzZWUgd2hhdCB0aGUgZm9jdXMgc3ltYm9scyBhcmUuIExldCdzIGNoZWNrIGBpcHRmc19za2JfYWRkX2ZyYWdzYDogSXQncyBgc3RhdGljYCwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBmaWxlLiBOb3csIGFsc28gbG9va2luZyBhdCBgaXB0ZnNfY29uc3VtZV9mcmFnc2A6IFRoaXMgaXMgYWxzbyBgc3RhdGljYC4gSSdsbCBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYC4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBjYWxscyBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjM5LjM5NjI5MzIwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMTM0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwMjpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzM3PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MDpcXHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFxcdTAwMjZsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MzkuNDQyNTEyMjA5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MTkzNDE2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXB0ZnNfZGVsYXlfdGltZXJgIGFuZCBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSB0aW1pbmcgYW5kIG91dHB1dCBxdWV1aW5nIGluIHRoZSBgeGZybV9pcHRmc2AgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGF0IHdoZXJlIGBpcHRmc19kZWxheV90aW1lcmAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1dGlsaXplIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGlzIHN0dWZmLCByaWdodD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGNvbnRleHRzIHdoZXJlIHRoaXMgZGVsYXllZCBwcm9jZXNzaW5nIGNvbWVzIGludG8gcGxheS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZW4gd29yayBiYWNrd2FyZCBpZiBuZWNlc3NhcnkuXG5cblRvIGdldCBzdGFydGVkLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIzNjAgdGhyb3VnaCAyNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc3BlY2lmaWMgcG9pbnQgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgYW5kIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBhIHVzZWZ1bCBpbnNpZ2h0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NTo0MS45NjE4NTU5NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzYwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4yMzYxOlxcdFxcbjIzNjI6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIHVubG9jaywgcGFja2V0cyBjYW4gYmVnaW4gcXVldWluZyBhZ2FpbiwgYW5kIHRoZVxcbjIzNjM6XFx0XFx0ICogdGltZXIgY2FuIGJlIHNldCBhZ2FpbiwgZnJvbSBhbm90aGVyIENQVSBlaXRoZXIgaW4gc29mdGlycSBvciB1c2VyXFxuMjM2NDpcXHRcXHQgKiBjb250ZXh0IChub3QgZnJvbSB0aGlzIG9uZSBzaW5jZSB3ZSBhcmUgcnVubmluZyBhdCBzb2Z0aXJxIGxldmVsXFxuMjM2NTpcXHRcXHQgKiBhbHJlYWR5KS5cXG4yMzY2OlxcdFxcdCAqL1xcbjIzNjc6XFx0XFxuMjM2ODpcXHRcXHR0cmFjZV9pcHRmc190aW1lcl9leHBpcmUoeHRmcywgKHVuc2lnbmVkIGxvbmcgbG9uZykoa3RpbWVfZ2V0X3Jhd19mYXN0X25zKCkgLSBzZXR0aW1lKSk7XFxuMjM2OTpcXHRcXG4yMzcwOlxcdFxcdGlwdGZzX291dHB1dF9xdWV1ZWQoeCwgXFx1MDAyNmxpc3QpO1xcbjIzNzE6XFx0XFxuMjM3MjpcXHRcXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XFxuMjM3MzpcXHR9XFxuMjM3NDpcXHRcXG4yMzc1OlxcdC8qKlxcbjIzNzY6XFx0ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcXG4yMzc3OlxcdCAqIEB4OiB4ZnJtIHN0YXRlXFxuMjM3ODpcXHQgKiBAc2tiOiB0aGUgcGFja2V0XFxuMjM3OTpcXHQgKlxcbjIzODA6XFx0ICogVGhpcyB3YXMgb3JpZ2luYWxseSB0YWtlbiBmcm9tIHhmcm00X3R1bm5lbF9lbmNhcF9hZGQuIFRoZSByZWFzb24gZm9yIHRoZVxcbjIzODE6XFx0ICogY29weSBpcyB0aGF0IElQLVRGUy9BR0dGUkFHIGNhbiBoYXZlIGRpZmZlcmVudCBmdW5jdGlvbmFsaXR5IGZvciBob3cgdG8gc2V0XFxuMjM4MjpcXHQgKiB0aGUgVE9TL0RTQ1AgYml0cy4gU2V0cyB0aGUgcHJvdG9jb2wgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYW5kIGRvZXNuJ3QgZG9cXG4yMzgzOlxcdCAqIGFueXRoaW5nIHdpdGggaW5uZXIgaGVhZGVycyBhcyB0aGV5IGFyZW4ndCBwb2ludGluZyBpbnRvIGEgbm9ybWFsIElQXFxuMjM4NDpcXHQgKiBzaW5nbGV0b24gaW5uZXIgcGFja2V0LlxcbjIzODU6XFx0ICpcXG4yMzg2OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuMjM4NzpcXHQgKi9cXG4yMzg4OlxcdHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuMjM4OTpcXHR7XFxuMjM5MDpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7XFxuMjM5MTpcXHRcXHRzdHJ1Y3QgaXBoZHIgKnRvcF9pcGg7XFxuMjM5MjpcXHRcXG4yMzkzOlxcdFxcdHNrYl9yZXNldF9pbm5lcl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjIzOTQ6XFx0XFx0c2tiX3Jlc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4yMzk1OlxcdFxcbjIzOTY6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC0oeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKSk7XFxuMjM5NzpcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuMjM5ODpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4yMzk5OlxcdFxcbjI0MDA6XFx0XFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbjI0MDE6XFx0XFx0dG9wX2lwaC1cXHUwMDNlaWhsID0gNTtcXG4yNDAyOlxcdFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA0O1xcbjI0MDM6XFx0XFx0dG9wX2lwaC1cXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0FHR0ZSQUc7XFxuMjQwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6NDEuOTYyMDAwMDcxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzIzNTU3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlwdGZzX291dHB1dF9xdWV1ZWRgIEZ1bmN0aW9uJ3MgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYGlwdGZzX291dHB1dF9xdWV1ZWRgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBiZWluZyB0cmlnZ2VyZWQgYnkgYGlwdGZzX2RlbGF5X3RpbWVyYCwgdGhhdCBtdWNoIGlzIGNsZWFyIGZyb20gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaG9saXN0aWNhbGx5LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYWxzbyBjYWxsIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gS25vd2luZyB0aGUgKmNvbXBsZXRlKiBsaXN0IG9mIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIG91dHB1dCBxdWV1ZSBtaWdodCBiZSBjb250ZW5kZWQgb3IgaW1wcm9wZXJseSBtYW5hZ2VkLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjQ2LjEzNDM1ODg1NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDI1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwMjpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzM3PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MDpcXHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFxcdTAwMjZsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6NDYuMTgyMjY1OTY4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwMDgwMzk2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIFRyYWNlIFRocm91Z2ggSVBURlMgSW5wdXQvT3V0cHV0KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBwYWNrZXQgZmxvdyBmb3IgSVBzZWMgU0FzIHVzaW5nIGBYRlJNX01PREVfSVBURlNgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxzIGBpcHRmc19pbnB1dGAuIFJpZ2h0LCBpdCdzIHRoZSBgLmlucHV0YCBjYWxsYmFjayBkZWZpbmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBTbywgd2hlbiBhbiBpbmNvbWluZyBwYWNrZXQgdGhhdCBtYXRjaGVzIGFuIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9uIHVzaW5nIHRoZSBJUFRGUyBtb2RlIGhpdHMgdGhlIHN5c3RlbSwgYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQuXG5cbk5vdywgd2l0aGluIGBpcHRmc19pbnB1dGAsIGl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGNvdXBsZSBvZiBpbXBvcnRhbnQgcGF0aHMuIEl0IGV2ZW50dWFsbHkgY2FsbHMgYGlwdGZzX2lucHV0X29yZGVyZWRgLCB3aGljaCBoYW5kbGVzIHJlYXNzZW1ibHkgYW5kIHByb2Nlc3NpbmcuIEluc2lkZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIHdlJ3ZlIGdvdCBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zOiBgaXB0ZnNfcmVhc3NlbV9jb250YCBhbmQgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYC4gVGhleSBib3RoIGVuZCB1cCBjYWxsaW5nIGBpcHRmc19za2JfYWRkX2ZyYWdzYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgY29tbW9uIHBvaW50IGZvciBmcmFnbWVudCBoYW5kbGluZywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBhbHNvIGhhcyBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBhbHNvIGNhbGxzIGBpcHRmc19za2JfYWRkX2ZyYWdzYC5cblxuRm9yIG91dHB1dCwgaXQgbG9va3MgbGlrZSBgLm91dHB1dGAgaXMgc2V0IHRvIGBpcHRmc19vdXRwdXRfY29sbGVjdGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBkZXNjcmlwdGl2ZS4gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgb3V0Z29pbmcgcGFja2V0cyBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggdGhlbS4gUmlnaHQsIGl0IGVucXVldWVzIHRoZSBwYWNrZXRzIG9udG8gYHh0ZnMtXHUwMDNlcXVldWVgLCB3aGljaCBwcm9iYWJseSBpcyBzb21lIGtpbmQgb2YgaW50ZXJuYWwgcXVldWUuIEl0IGFsc28gc2V0cyB1cCBgaXB0ZnNfZGVsYXlfdGltZXJgLCB3aGljaCBoaW50cyBhdCBzb21lIGtpbmQgb2YgZGVsYXllZCBmbHVzaCwgb3IgcG90ZW50aWFsbHkgYSBiYXRjaGluZyBzdHJhdGVneS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBpcHRmc19vdXRwdXRfY29sbGVjdGAgYWdhaW4sIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBpbW1lZGlhdGUgZmx1c2ggbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDEzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjUyLjE5MDMwOTE4NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xODQ2OlxcdHtcXG4xODQ3OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4xODQ4OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LVxcdTAwM2V4ZnJtO1xcbjE4NDk6XFx0XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG4xODUwOlxcdFxcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcXG4xODUxOlxcdFxcdHUzMiBwbXR1ID0gMDtcXG4xODUyOlxcdFxcdGJvb2wgb2sgPSB0cnVlO1xcbjE4NTM6XFx0XFx0Ym9vbCB3YXNfZ3NvO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHQvKiBXZSBoYXZlIGhvb2tlZCBpbnRvIGRzdF9lbnRyeS1cXHUwMDNlb3V0cHV0IHdoaWNoIG1lYW5zIHdlIGhhdmUgc2tpcHBlZCB0aGVcXG4xODU2OlxcdFxcdCAqIHByb3RvY29sIHNwZWNpZmljIG5ldGZpbHRlciAoc2VlIHhmcm00X291dHB1dCwgeGZybTZfb3V0cHV0KS5cXG4xODU3OlxcdFxcdCAqIHdoZW4gb3VyIHRpbWVyIHJ1bnMgd2Ugd2lsbCBlbmQgdXAgY2FsbGluZyB4ZnJtX291dHB1dCBkaXJlY3RseSBvblxcbjE4NTg6XFx0XFx0ICogdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLlxcbjE4NTk6XFx0XFx0ICpcXG4xODYwOlxcdFxcdCAqIEZvciBib3RoIGNhc2VzIHRoaXMgaXMgdGhlIE5GX0lORVRfUE9TVF9ST1VUSU5HIGhvb2sgd2hpY2ggYWxsb3dzXFxuMTg2MTpcXHRcXHQgKiBjaGFuZ2luZyB0aGUgc2tiLVxcdTAwM2Vkc3QgZW50cnkgd2hpY2ggdGhlbiBtYXkgbm90IGJlIHhmcm0gYmFzZWQgYW55bW9yZVxcbjE4NjI6XFx0XFx0ICogaW4gd2hpY2ggY2FzZSBhIFJFUk9VVEVEIGZsYWcgaXMgc2V0LiBhbmQgZHN0X291dHB1dCBpcyBjYWxsZWQuXFxuMTg2MzpcXHRcXHQgKlxcbjE4NjQ6XFx0XFx0ICogRm9yIElQdjYgd2UgYXJlIGFsc28gc2tpcHBpbmcgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyBmb3IgbG9jYWxcXG4xODY1OlxcdFxcdCAqIHNvY2tldHMsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGdvb2QgZGVwZW5kaW5nIG9uIG91ciB0dW5uZWwgREZcXG4xODY2OlxcdFxcdCAqIHNldHRpbmcuIE5vcm1hbGx5IHdpdGggZnJhZ21lbnRhdGlvbiBzdXBwb3J0ZWQgd2Ugd2FudCB0byBza2lwIHRoaXNcXG4xODY3OlxcdFxcdCAqIGZyYWdtZW50YXRpb24uXFxuMTg2ODpcXHRcXHQgKi9cXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0aWYgKHh0ZnMtXFx1MDAzZWNmZy5kb250X2ZyYWcpXFxuMTg3MTpcXHRcXHRcXHRwbXR1ID0gaXB0ZnNfZ2V0X2N1cl9wbXR1KHgsIHh0ZnMsIHNrYik7XFxuMTg3MjpcXHRcXG4xODczOlxcdFxcdC8qIEJyZWFrIGFwYXJ0IEdTTyBza2JzLiBJZiB0aGUgcXVldWUgaXMgbmVhcmluZyBmdWxsIHRoZW4gd2Ugd2FudCB0aGVcXG4xODc0OlxcdFxcdCAqIGFjY291bnRpbmcgYW5kIHF1ZXVpbmcgdG8gYmUgYmFzZWQgb24gdGhlIGluZGl2aWR1YWwgcGFja2V0cyBub3Qgb24gdGhlXFxuMTg3NTpcXHRcXHQgKiBhZ2dyZWdhdGUgR1NPIGJ1ZmZlci5cXG4xODc2OlxcdFxcdCAqL1xcbjE4Nzc6XFx0XFx0d2FzX2dzbyA9IHNrYl9pc19nc28oc2tiKTtcXG4xODc4OlxcdFxcdGlmICghd2FzX2dzbykge1xcbjE4Nzk6XFx0XFx0XFx0c2VncyA9IHNrYjtcXG4xODgwOlxcdFxcdH0gZWxzZSB7XFxuMTg4MTpcXHRcXHRcXHRzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7XFxuMTg4MjpcXHRcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwoc2VncykpIHtcXG4xODgzOlxcdFxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1PVVRFUlJPUik7XFxuMTg4NDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODg1OlxcdFxcdFxcdFxcdGlmIChJU19FUlIoc2VncykpXFxuMTg4NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzZWdzKTtcXG4xODg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4ODg6XFx0XFx0XFx0fVxcbjE4ODk6XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4xODkwOlxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuMTg5MTpcXHRcXHR9XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdC8qIFdlIGNhbiBiZSBydW5uaW5nIG9uIG11bHRpcGxlIGNvcmVzIGFuZCBmcm9tIHRoZSBuZXR3b3JrIHNvZnRpcnEgb3JcXG4xODk0OlxcdFxcdCAqIGZyb20gdXNlciBjb250ZXh0IGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgcGFja2V0IGlzIGNvbWluZyBmcm9tLlxcbjE4OTU6XFx0XFx0ICovXFxuMTg5NjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbjE4OTc6XFx0XFxuMTg5ODpcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuc2tiKSB7XFxuMTg5OTpcXHRcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbjE5MDA6XFx0XFxuMTkwMTpcXHRcXHRcXHQvKiBPbmNlIHdlIGRyb3AgZHVlIHRvIG5vIHF1ZXVlIHNwYWNlIHdlIGNvbnRpbnVlIHRvIGRyb3AgdGhlXFxuMTkwMjpcXHRcXHRcXHQgKiByZXN0IG9mIHRoZSBwYWNrZXRzIGZyb20gdGhhdCBHUk8uXFxuMTkwMzpcXHRcXHRcXHQgKi9cXG4xOTA0OlxcdFxcdFxcdGlmICghb2spIHtcXG4xOTA1OlxcdG5vc3BhY2U6XFxuMTkwNjpcXHRcXHRcXHRcXHR0cmFjZV9pcHRmc19ub19xdWV1ZV9zcGFjZShza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pO1xcbjE5MDc6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTU9VVE5PUVNQQUNFKTtcXG4xOTA4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HKTtcXG4xOTA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MTA6XFx0XFx0XFx0fVxcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHRcXHQvKiBJZiB0aGUgdXNlciBpbmRpY2F0ZWQgbm8gaXB0ZnMgZnJhZ21lbnRpbmcgY2hlY2sgYmVmb3JlXFxuMTkxMzpcXHRcXHRcXHQgKiBlbnF1ZXVlLlxcbjE5MTQ6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjUyLjE5MDUyMDA2NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjA0NjMwMTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBURlMgUGFja2V0IEhhbmRsaW5nIGZvciBDb21wcmVoZW5zaXZlIENvdmVyYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIElQVEZTIHBhY2tldCBwcm9jZXNzaW5nIHRvIGVuc3VyZSB0aG9yb3VnaCBjb2RlIGNvdmVyYWdlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19jb25zdW1lX2ZyYWdzYCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiAgYGlwdGZzX291dHB1dF9xdWV1ZWRgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb25zdW1pbmcgcGFja2V0IGZyYWdtZW50cyB3aGVuIGFzc2VtYmxpbmcgdGhlIG91dHB1dCwgY2FsbGluZyBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHdoaWxlIHRoZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaGFuZGxlcyByZWFzc2VtYmx5IGZvciB0aGUgaW5jb21pbmcgcGF5bG9hZHMgKGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gYXJpc2VzOiBhcmUgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AgaW5saW5lZCBieSB0aGUgY29tcGlsZXI/ICBUaGF0IGNvdWxkIGltcGFjdCBteSBjb3ZlcmFnZSBhbmFseXNpcy4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIHN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLiAgSXQncyBhIGZ1bmN0aW9uIG9mIGEgcmVhc29uYWJsZSBzaXplLCBhYm91dCA1MCBsaW5lcywgc28gSSB3b3VsZCBoYXZlIHRvIGd1ZXNzIGl0J3Mgbm90IGlubGluZWQsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUuIGBpcHRmc19jb25zdW1lX2ZyYWdzYCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgY2FsbGVkIGZyb20gYGlwdGZzX291dHB1dF9xdWV1ZWRgLiAgSXQgbWlnaHQgYmUgaW5saW5lZC4gIFNvLCBpbmNsdWRpbmcgdGhvc2UgZnVuY3Rpb25zIChgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYCkgYW5kIHRoZWlyIGRpcmVjdCBjYWxsZXJzIChgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfcmVhc3NlbV9jb250YCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRgLCBhbmQgYGlwdGZzX291dHB1dF9jb2xsZWN0YCkgd2lsbCBwcm92aWRlIHNvbGlkIGNvdmVyYWdlLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgWEZSTV9JUFRGU2AsIGBYRlJNX1VTRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFdhaXQsIGBQQUdFX1BPT0xgIGlzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQuIEl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgaXQgZGlyZWN0bHkgbWlnaHQgcmVxdWlyZSBlbmFibGluZyBhIHBhcmVudCBzdWJzeXN0ZW0gbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYEJQRl9TWVNDQUxMYCwgc2luY2UgdGhleSBzZWxlY3QgaXQuIE9yIHBlcmhhcHMgdGhlIHN5emthbGxlciBLY29uZmlnIGdlbmVyYXRvciBlbmFibGVzIGJvb2xzIHdpdGhvdXQgcHJvbXB0cy4gVGhlIGluc3RydWN0aW9ucyBoZXJlIGFsc28gcG9pbnQgb3V0IHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIGBLY29uZmlnYCBmb3IgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuXG5cbmBYRlJNX0lQVEZTYCBkZXBlbmRzIG9uIGBYRlJNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBJTkVUYC4gIGBYRlJNX1VTRVJgIGFsbG93cyBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gb2YgeGZybSBzdGF0ZXMgYW5kIG1vZGVzLiBCdXQgYFBBR0VfUE9PTGAsIHRoYXQncyB1c2VkIGJ5IGRyaXZlcnMgYW5kIEJQRi4gIFdhaXQsIHRoZSBgeGZybV9pcHRmcy5jYCBmaWxlICpzaG91bGQqIGNvbXBpbGUgZXZlbiB3aXRob3V0IGBQQUdFX1BPT0xgIGVuYWJsZWQsIHJpZ2h0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW5jbHVkZSBwYXRoIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGhlYWRlciBmaWxlIHdvcmtzIGNvcnJlY3RseSB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQgZm9yIG15IHRlc3Rpbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTY6MjguMjM2ODI1OTc4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3BhZ2VfcG9vbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTYwLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6NjE6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTYyLS8qIERlcHJlY2F0ZWQgZHJpdmVyLWZhY2luZyBBUEksIHVzZSBuZXRsaW5rIGluc3RlYWQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzMxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zMzgtXFx0ICovXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaDozMzk6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTM0MC1cXHRpZiAoIXBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW0pKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg9ODc9c3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTA3LVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjEwODojaWZkZWYgQ09ORklHX1BBR0VfUE9PTF9TVEFUU1xcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTEwOS0vKipcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oPTE3Nj1zdHJ1Y3QgcGFnZV9wb29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTE4NS1cXHRib29sIGRtYV9zeW5jX2Zvcl9jcHU6MTtcXHQvKiBQZXJmb3JtIERNQSBzeW5jIGZvciBjcHUgKi9cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoxODY6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0xODctXFx0Ym9vbCBzeXN0ZW06MTtcXHRcXHRcXHQvKiBUaGlzIGlzIGEgZ2xvYmFsIHBlcmNwdSBwb29sICovXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yMDAtXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjAxOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjAyLVxcdC8qIHRoZXNlIHN0YXRzIGFyZSBpbmNyZW1lbnRlZCB3aGlsZSBpbiBzb2Z0aXJxIGNvbnRleHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTIzOS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoyNDA6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNDEtXFx0LyogcmVjeWNsZSBzdGF0cyBhcmUgcGVyLWNwdSB0byBhdm9pZCBsb2NraW5nICovXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0yNzU9c3RydWN0IHhkcF9tZW1faW5mbztcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNzYtXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6Mjc3OiNpZmRlZiBDT05GSUdfUEFHRV9QT09MXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjc4LXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0zMDg9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfcG9vbF9jb21waWxlZF9pbih2b2lkKVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMwOS17XFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MzEwOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMzExLVxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjoyOC4yODU2MTExNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODU1MzE3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcGFnZV9wb29sX3JlZl9wYWdlYCBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlgLiBJdCdzIGNhbGxpbmcgYHBhZ2VfcG9vbF9yZWZfbmV0bWVtKHBhZ2VfdG9fbmV0bWVtKHBhZ2UpKWAuIFNvLCB0aGF0J3MgdGhlIGNvcmUuIFRoZW4sIEkgc2VlIGBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW0pYCBzaW1wbHkgaW5jcmVtZW50cyBhbiBhdG9taWMgY291bnRlcjogYGF0b21pY19sb25nX2luYyhuZXRtZW1fZ2V0X3BwX3JlZl9jb3VudF9yZWYobmV0bWVtKSlgLiBUaGF0IGZ1bmN0aW9uLCBgbmV0bWVtX2dldF9wcF9yZWZfY291bnRfcmVmYCwgaXMgYWx3YXlzIHRoZXJlLCBubyBwcm9ibGVtLlxuXG5UaGUga2V5IGlzIHRoYXQgZm9yIGFuIGBza2JgIHRvIGhhdmUgYHNrYi1cdTAwM2VwcF9yZWN5Y2xlID0gdHJ1ZWAsIGl0IG11c3Qgb3JpZ2luYXRlIGZyb20gYSBuZXR3b3JrIGRldmljZSAqdXNpbmcqIHBhZ2VfcG9vbCwgb3IgcGFnZSBwb29sIG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHBhZ2UgcG9vbCBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uLCBgUEFHRV9QT09MYCBnZXRzIGVuYWJsZWQgaWYgd2UgaGF2ZSBwYWdlLXBvb2wtc3VwcG9ydGluZyBuZXRkZXZzIGxpa2UgYFZFVEhgLCBgVklSVElPX05FVGAsIG9yIGBORVRERVZTSU1gLCBvciBpZiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBhbmQgYFhGUk1fSVBURlNgIGlzIHdoYXQgZW5hYmxlcyBgeGZybV9pcHRmcy5jYCwgd2hpY2ggaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gc2V0IHRoaXMgdXAuXG5cblNvLCBsZXQncyBsaXN0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uczpcbiogICBgWEZSTV9JUFRGU2AgKG5lY2Vzc2FyeSBmb3IgYHhmcm1faXB0ZnMuY2AgZnVuY3Rpb25hbGl0eSlcbiogICBgWEZSTV9VU0VSYCAobGlrZWx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBYRlJNLCBwZXJoYXBzIHVzZWZ1bClcbiogICBgUEFHRV9QT09MYCAoZW5zdXJlcyBwYWdlIHBvb2wgaXMgZW5hYmxlZClcblxuTm93LCBJJ20gcmVhZHkgdG8gcG9wdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBrbm93IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHN0YWNrIGNvZGUgaW4gWEZSTSBJUC1URlMgZW5jYXBzdWxhdGlvbiBoYW5kbGluZy4gTW9yZSBzcGVjaWZpY2FsbHksIGl0J3MgZml4aW5nIGBza2JgIGZyYWdtZW50IHJlZmNvdW50aW5nIGZvciBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIHdpdGhpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGxpZmVjeWNsZSBvZiBuZXR3b3JrIGJ1ZmZlcnMsIHNvIGl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cbiogICBgRm9jdXNTeW1ib2xzYDogYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19wc2tiX2FkZF9mcmFnc2Ag4oCTIHRob3NlIGZ1bmN0aW9ucyBsb29rIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBYRlJNX0lQVEZTYCwgYFhGUk1fVVNFUmAsIGBQQUdFX1BPT0xgIOKAkyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLlxuXG5Mb29rcyBnb29kISBFdmVyeXRoaW5nIGlzIHdlbGwtc3VwcG9ydGVkIGFuZCB2ZXJpZmllZC4gSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBwYXJhbWV0ZXJzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDI4LCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4xNDA5MzE2NjZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkwOTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19za2JfYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19vdXRwdXRfcXVldWVkXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcImlwdGZzX3Bza2JfYWRkX2ZyYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdGZzX3NrYl9hZGRfZnJhZ3NcIixcbiAgICBcImlwdGZzX2NvbnN1bWVfZnJhZ3NcIixcbiAgICBcImlwdGZzX291dHB1dF9xdWV1ZWRcIixcbiAgICBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICAgIFwiaXB0ZnNfcHNrYl9hZGRfZnJhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIGZyYWdtZW50IHBhZ2UgcmVmY291bnRpbmcgbG9naWMgaW4gbmV0L3hmcm0veGZybV9pcHRmcy5jIHRvIGNvcnJlY3RseSBoYW5kbGUgcGFnZV9wb29sLWJhY2tlZCBwYWdlcyAoY2hlY2tpbmcgcHBfcmVjeWNsZSBhbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIHBvb2wgcmVmY291bnQgdmlhIHBhZ2VfcG9vbF9yZWZfcGFnZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhZ2UgcmVmY291bnRpbmcpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBhbmQgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyIGxpZmVjeWNsZSwgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4yMTQ4NDk1NzRaIiwiU2VxIjo1MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTAzODAzNjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU2OjM3LjIxNTMwMDY0NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3OTAzNzU4MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNjkyMDk0MGEzNWI0OS4uZDNiY2E5MGUyYzM4NCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9lY24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbkBAIC00ODYsNyArNDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gLT0gb2Zmc2V0O1xuIFx0XHRcdG9mZnNldCA9IDA7XG4gXHRcdH1cbi1cdFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcbitcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbitcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4gXHRcdHNoaW5mby1cdTAwM2Vucl9mcmFncysrO1xuIFx0XHRzaGluZm8tXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4gXG5AQCAtMjE3MSw3ICsyMTc1LDExIEBAIHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbiBcdFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pO1xuLVx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncysrKTtcbitcdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcbitcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSkpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MpO1xuK1x0XHR0b2ktXHUwMDNlbnJfZnJhZ3MrKztcbiBcdFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4yMTUzMDE3NjRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNjU4ODY3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFNlY3VyaXR5IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBzbyB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIEZpcnN0LCBJJ2xsIHJldmlldyB0aGUgZGlmZiBpdHNlbGYg4oCTIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlbiwgSSdsbCBuZWVkIHRvIHpvb20gb3V0IGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5JJ2xsIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHNlY3Rpb25zOiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNDgwLTUxMCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggW2luc2VydCBwbGF1c2libGUgY29kZSBmdW5jdGlvbiBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhpcyBmaWxlLiBFeGFtcGxlOiBcInBhY2tldCBjbGFzc2lmaWNhdGlvblwiIG9yIFwicG9saWN5IG1hbmFnZW1lbnRcIl0sIGFuZCB0aGVuIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAyMTYwLTIyMDAuIFRoaXMgc2Vjb25kIGFyZWEgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCBwbGF1c2libGUgY29kZSBmdW5jdGlvbiBiYXNlZCBvbiB5b3VyIGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFuZCB0aGlzIGZpbGUuIEV4YW1wbGU6IFwiaGFuZGxpbmcgc3BlY2lmaWMgc2VjdXJpdHkgcHJvdG9jb2xzXCIgb3IgXCJrZXkgbWFuYWdlbWVudFwiXS4gQnkgZXhhbWluaW5nIHRoZXNlIHJhbmdlcyBzcGVjaWZpY2FsbHksIEkgY2FuIHJhcGlkbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2ggYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowMi4yODExOTE3NDVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0e1xcbiA0NzE6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbiA0NzI6XFx0XFx0dTMyIGZyYWdsZW47XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdGlmICghd2Fsay1cXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFxcdTAwM2U9IHdhbGstXFx1MDAzZXRvdGFsICsgd2Fsay1cXHUwMDNlaW5pdGlhbF9vZmZzZXQpXFxuIDQ3NTpcXHRcXHRcXHRyZXR1cm4gbGVuO1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXFxuIDQ3ODpcXHRcXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcdHdoaWxlIChsZW4gXFx1MDAyNlxcdTAwMjYgd2Fsay1cXHUwMDNlZnJhZ2kgXFx1MDAzYyB3YWxrLVxcdTAwM2Vucl9mcmFncykge1xcbiA0ODE6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZ3YWxrLVxcdTAwM2VmcmFnc1t3YWxrLVxcdTAwM2VmcmFnaV07XFxuIDQ4MjpcXHRcXHRcXHRza2JfZnJhZ190ICp0b2ZyYWcgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2VmcmFnc1tzaGluZm8tXFx1MDAzZW5yX2ZyYWdzXTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0XFx0KnRvZnJhZyA9ICpmcmFnO1xcbiA0ODU6XFx0XFx0XFx0aWYgKG9mZnNldCkge1xcbiA0ODY6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VvZmZzZXQgKz0gb2Zmc2V0O1xcbiA0ODc6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VsZW4gLT0gb2Zmc2V0O1xcbiA0ODg6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gNDg5OlxcdFxcdFxcdH1cXG4gNDkwOlxcdFxcdFxcdGlmICh3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbiA0OTE6XFx0XFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuIDQ5MjpcXHRcXHRcXHRlbHNlXFxuIDQ5MzpcXHRcXHRcXHRcXHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xcbiA0OTQ6XFx0XFx0XFx0c2hpbmZvLVxcdTAwM2Vucl9mcmFncysrO1xcbiA0OTU6XFx0XFx0XFx0c2hpbmZvLVxcdTAwM2VmbGFncyB8PSBTS0JGTF9TSEFSRURfRlJBRztcXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0XFx0Lyogc2VlIGlmIHdlIGFyZSBkb25lICovXFxuIDQ5ODpcXHRcXHRcXHRmcmFnbGVuID0gdG9mcmFnLVxcdTAwM2VsZW47XFxuIDQ5OTpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgZnJhZ2xlbikge1xcbiA1MDA6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VsZW4gPSBsZW47XFxuIDUwMTpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBsZW47XFxuIDUwMjpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4gNTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDQ6XFx0XFx0XFx0fVxcbiA1MDU6XFx0XFx0XFx0LyogYWR2YW5jZSB0byBuZXh0IHNvdXJjZSBmcmFnbWVudCAqL1xcbiA1MDY6XFx0XFx0XFx0bGVuIC09IGZyYWdsZW47XFx0XFx0XFx0LyogY2FyZWZ1bCwgdXNlIGRzdCBidl9sZW4gKi9cXG4gNTA3OlxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGZyYWdsZW47XFx0XFx0LyogY2FyZWZ1bCwgXFxcIiAgIFxcXCIgICAgXFxcIiAgICAgKi9cXG4gNTA4OlxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gKz0gZnJhZ2xlbjtcXHQvKiBjYXJlZnVsLCBcXFwiICAgXFxcIiAgICBcXFwiICAgICAqL1xcbiA1MDk6XFx0XFx0XFx0d2Fsay1cXHUwMDNlcGFzdCArPSBmcmFnLVxcdTAwM2VsZW47XFx0LyogY2FyZWZ1bCwgdXNlIHNyYyBidl9sZW4gKi9cXG4gNTEwOlxcdFxcdFxcdHdhbGstXFx1MDAzZWZyYWdpKys7XFxuIDUxMTpcXHRcXHR9XFxuIDUxMjpcXHRcXHRyZXR1cm4gbGVuO1xcbiA1MTM6XFx0fVxcbiA1MTQ6XFx0XFxuIDUxNTpcXHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuIDUxNjpcXHQvKiBJUFRGUyBUcmFjZSBFdmVudCBEZWZpbml0aW9ucyAgICAgICovXFxuIDUxNzpcXHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuIDUxODpcXHRcXG4gNTE5OlxcdCNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowMi4yODE0MDIxMzVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTYwOlxcdFxcdHNrYl9mcmFnX2xpc3RfaW5pdChjaGlsZCk7XFxuMjE2MTpcXHRcXHRjaGlsZC1cXHUwMDNlbGVuIC09IGZsbGVuO1xcbjIxNjI6XFx0XFx0Y2hpbGQtXFx1MDAzZWRhdGFfbGVuIC09IGZsbGVuO1xcbjIxNjM6XFx0XFxuMjE2NDpcXHRcXHRyZXR1cm4gbmV4dHA7XFxuMjE2NTpcXHR9XFxuMjE2NjpcXHRcXG4yMTY3OlxcdHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4yMTY4OlxcdHtcXG4yMTY5OlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKmZyb21pID0gc2tiX3NoaW5mbyhmcm9tKTtcXG4yMTcwOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnRvaSA9IHNrYl9zaGluZm8odG8pO1xcbjIxNzE6XFx0XFx0dW5zaWduZWQgaW50IG5ld190cnVlc2l6ZTtcXG4yMTcyOlxcdFxcbjIxNzM6XFx0XFx0LyogSWYgd2UgaGF2ZSBkYXRhIGluIGEgaGVhZCBwYWdlLCBncmFiIGl0ICovXFxuMjE3NDpcXHRcXHRpZiAoIXNrYl9oZWFkbGVuKGZyb20pKSB7XFxuMjE3NTpcXHRcXHRcXHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xcbjIxNzY6XFx0XFx0fSBlbHNlIHtcXG4yMTc3OlxcdFxcdFxcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10pO1xcbjIxNzg6XFx0XFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxuMjE3OTpcXHRcXHRcXHRcXHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjIxODA6XFx0XFx0XFx0ZWxzZVxcbjIxODE6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXFx1MDAzZW5yX2ZyYWdzKTtcXG4yMTgyOlxcdFxcdFxcdHRvaS1cXHUwMDNlbnJfZnJhZ3MrKztcXG4yMTgzOlxcdFxcdFxcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xcbjIxODQ6XFx0XFx0fVxcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHQvKiBNb3ZlIGFueSBvdGhlciBwYWdlIGZyYWdtZW50cyByYXRoZXIgdGhhbiBjb3B5ICovXFxuMjE4NzpcXHRcXHRtZW1jcHkoXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10sIGZyb21pLVxcdTAwM2VmcmFncyxcXG4yMTg4OlxcdFxcdCAgICAgICBzaXplb2YoZnJvbWktXFx1MDAzZWZyYWdzWzBdKSAqIGZyb21pLVxcdTAwM2Vucl9mcmFncyk7XFxuMjE4OTpcXHRcXHR0b2ktXFx1MDAzZW5yX2ZyYWdzICs9IGZyb21pLVxcdTAwM2Vucl9mcmFncztcXG4yMTkwOlxcdFxcdGlmIChmcm9taS1cXHUwMDNlbnJfZnJhZ3MpXFxuMjE5MTpcXHRcXHRcXHR0b2ktXFx1MDAzZWZsYWdzIHw9IGZyb21pLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNLQkZMX1NIQVJFRF9GUkFHO1xcbjIxOTI6XFx0XFx0ZnJvbWktXFx1MDAzZW5yX2ZyYWdzID0gMDtcXG4yMTkzOlxcdFxcdGZyb20tXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4yMTk0OlxcdFxcdGZyb20tXFx1MDAzZWxlbiA9IDA7XFxuMjE5NTpcXHRcXHR0by1cXHUwMDNldHJ1ZXNpemUgKz0gZnJvbS1cXHUwMDNldHJ1ZXNpemUgLSBuZXdfdHJ1ZXNpemU7XFxuMjE5NjpcXHRcXHRmcm9tLVxcdTAwM2V0cnVlc2l6ZSA9IG5ld190cnVlc2l6ZTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0LyogV2UgYXJlIGRvbmUgd2l0aCB0aGlzIFNLQiAqL1xcbjIxOTk6XFx0XFx0Y29uc3VtZV9za2IoZnJvbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU3OjAyLjI4MTU2OTUzNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDYyOTU5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBzcGVjaWZpYyB2YXJpYWJsZSBpcyBkZWZpbmVkIG9yIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgYSBgZ3JlcGAgc2VhcmNoIGZvciBgcHBfcmVjeWNsZWAgdG8gc2VlIHdoZXJlIGl0IHNob3dzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIGJlIGluIGB4ZnJtX2lwdGZzLmNgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgaXQuIEFmdGVyIHRoYXQsIEknbSBnb2luZyB0byBleHBhbmQgbXkgc2NvcGUgYW5kIGRvIGEgbW9yZSBjb21wcmVoZW5zaXZlIHJldmlldyBvZiB0aGUgZW50aXJlIGB4ZnJtX2lwdGZzLmNgIGZpbGUgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGB3YWxrLVx1MDAzZXBwX3JlY3ljbGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBvcGVyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSB3aG9sZSBmaWxlIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzMwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowOC43NDQ1MzExMDlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjE1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwX3JlY3ljbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTYzPVRSQUNFX0VWRU5UKGlwdGZzX2luZ3Jlc3NfbnRoX2FkZCwgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc2hhcmVfb2spLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjktXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBoZWFkX2ZyYWcpXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNzA6XFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBwcF9yZWN5Y2xlKVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTcxLVxcdFxcdFxcdCAgICAgX19maWVsZCh1OCwgY2xvbmVkKVxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODAtXFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlaGVhZF9mcmFnID0gc2tiLVxcdTAwM2VoZWFkX2ZyYWc7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxODE6XFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlcHBfcmVjeWNsZSA9IHNrYi1cXHUwMDNlcHBfcmVjeWNsZTtcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4Mi1cXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VjbG9uZWQgPSBza2JfY2xvbmVkKHNrYik7XFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4Ni1cXHRcXHQgICAgKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4NzpcXHQgICAgVFBfcHJpbnRrKFxcXCJJTkdSUFNUUTogTlRIQUREOiBza2I9JXAgbGVuPSV1IGRhdGFfbGVuPSV1IHNoYXJlX29rPSV1IGhlYWRfZnJhZz0ldSBwcF9yZWN5Y2xlPSV1IGNsb25lZD0ldSBzaGFyZWQ9JXUgbnJfZnJhZ3M9JXUgZnJhZ19saXN0PSV1XFxcIixcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4OC1cXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2Vza2IsIF9fZW50cnktXFx1MDAzZXNrYl9sZW4sIF9fZW50cnktXFx1MDAzZWRhdGFfbGVuLCBfX2VudHJ5LVxcdTAwM2VzaGFyZV9vayxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4OTpcXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2VoZWFkX2ZyYWcsIF9fZW50cnktXFx1MDAzZXBwX3JlY3ljbGUsIF9fZW50cnktXFx1MDAzZWNsb25lZCwgX19lbnRyeS1cXHUwMDNlc2hhcmVkLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTkwLVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZW5yX2ZyYWdzLCBfX2VudHJ5LVxcdTAwM2VmcmFnX2xpc3QpKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yOTg9c3RhdGljIHZvaWQgaXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBza2JfZnJhZ190ICpmcmFnKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxMy0gKiBAZnJhZ3M6IHRoZSBwYWdlIGZyYWdtZW50cyBpbmMuIHJvb20gZm9yIGhlYWQgcGFnZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMTQ6ICogQHBwX3JlY3ljbGU6IGNvcHkgb2Ygc2tiLVxcdTAwM2VwcF9yZWN5Y2xlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzE2PXN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjItXFx0c2tiX2ZyYWdfdCBmcmFnc1tNQVhfU0tCX0ZSQUdTICsgMV07XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMyMzpcXHRib29sIHBwX3JlY3ljbGU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyNC19O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTMzNT1zdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM0Ni1cXHR3YWxrLVxcdTAwM2Vucl9mcmFncyA9IDA7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM0NzpcXHR3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDgtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDEwPXN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MTc6XFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXFx1MDAzZXBwX3JlY3ljbGUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDY3PXN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ4OS1cXHRcXHR9XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ5MDpcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDkxLVxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTc1ND1zdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwNi1cXHQgICAgKHNrYi1cXHUwMDNlaGVhZF9mcmFnIHx8IHNrYi1cXHUwMDNlbGVuID09IHNrYi1cXHUwMDNlZGF0YV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwNzpcXHQgICAgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlID09IG5ld3NrYi1cXHUwMDNlcHBfcmVjeWNsZSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXFx0XFx0ZnJhZ3dhbGsgPSBcXHUwMDI2X2ZyYWd3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzctXFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxNzg6XFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzktXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10pKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjI5OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwMDpcXHRcXHRcXHQvKiBza2ItXFx1MDAzZXBwX3JlY3ljbGUgaXMgcGFzc2VkIHRvIF9fc2tiX2ZsYWdfdW5yZWYgZm9yIGFsbFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzAxLVxcdFxcdFxcdCAqIGZyYWcgcGFnZXMgc28gd2UgY2FuIG9ubHkgc2hhcmUgcGFnZXMgd2l0aCBza2IncyB3aG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzA3LVxcdFxcdFxcdCAgICAgKCFza2IyLVxcdTAwM2VoZWFkX2ZyYWcgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRsZW4oc2tiKSkgfHxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwODpcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSAhPSBza2IyLVxcdTAwM2VwcF9yZWN5Y2xlIHx8XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDktXFx0XFx0XFx0ICAgICBza2JfemNvcHkoc2tiMikgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTc6MDguNzkwMTU4OTExWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzQ2MjcwMDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBSZWZlcmVuY2UgQ291bnRpbmcgaW4gaXB0ZnMgZm9yIFBhZ2UgUG9vbCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBjb3JyZWN0bHkgbWFuYWdpbmcgcGFnZSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBwYWdlX3Bvb2xgIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGBpcHRmc2Agc3Vic3lzdGVtLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YW5kYXJkIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhlIGBwYWdlX3Bvb2xgIGhhbmRsZXMgaXQuXG5cblByZXZpb3VzbHksIGBfX3NrYl9mcmFnX3JlZmAgYW5kIGBza2JfZnJhZ19yZWZgIHdlcmUgdXNlZCwgd2hpY2ggcmVseSBvbiB0aGUgdHlwaWNhbCBgcGFnZV9yZWZfaW5jYCBhbmQgYGdldF9wYWdlYCBtZXRob2RzLiBIb3dldmVyLCBmb3IgcGFnZXMgbWFuYWdlZCBieSB0aGUgYHBhZ2VfcG9vbGAgKGBwcF9yZWN5Y2xlYCBpcyBzZXQpLCB0aGVzZSBzdGFuZGFyZCBtZXRob2RzIGFyZSBpbmNvcnJlY3QuIFVzaW5nIHRoZW0gbGVhZHMgdG8gcG90ZW50aWFsIGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciBldmVuIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMgd2l0aGluIHRoZSBgcGFnZV9wb29sYCBpdHNlbGYuIFdoZW4gYSBwYWdlIGlzIGZyZWVkLCB0aGUgYHBhZ2VfcG9vbGAgY2hlY2tzIGl0cyBvd24gcmVmZXJlbmNlIGNvdW50IG9yIHJlY3ljbGluZyBsb2dpYy4gVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgaWYgYSBwYWdlIGNvbWVzIGZyb20gdGhlIHBvb2wsIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGlzIHVzZWQgaW5zdGVhZC4gVGhpcyB0aGVuIGNhbGxzIGBwYWdlX3Bvb2xfcmVmX25ldG1lbWAgd2hpY2ggaXMgdGhlIGNvcnJlY3QgbWV0aG9kLlxuXG5NeSBhbmFseXNpcyBub3cgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGFwcGx5IG15IGV4cGVydGlzZSBhbmQgc3lzdGVtYXRpY2FsbHkgcmV2aWV3IHRoZSBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUsIG5vdGhpbmcgaGVyZSBpbnZvbHZlcyBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIEJvdGggYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgYW5kIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGZpcnN0IGlzIGluaXRpYWxpemVkIGR1cmluZyBmcmFnIHdhbGsgcHJlcGFyYXRpb24sIGFuZCB0aGUgc2Vjb25kIGlzIHBhcnQgb2YgdGhlIGBza19idWZmYCBzdHJ1Y3QsIHdoaWNoIGlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgY3JlYXRlZC5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIG5ld2x5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXM6KiogQWdhaW4sIG5vdGhpbmcuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vLCB0aGlzIGlzbid0IGEgY29uY2VybiBoZXJlLlxuXG5TbywgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gTm8sIHRoaXMgcGF0Y2gganVzdCBjaGFuZ2VzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtLCBzd2l0Y2hpbmcgdG8gYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2hlbiBhcHByb3ByaWF0ZS4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciByZWZlcmVuY2UgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgcG9vbCBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlIHByb2JsZW1zIHRoYXQgY2FuIGFyaXNlIGZyb20gdGhpcyAqaW5jb3JyZWN0KiByZWYgY291bnRpbmcgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5JIGFtIGNvbmZpZGVudC4gVGhlcmUgaXMgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSBpbnRyb2R1Y2VkIGhlcmUuIFRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SU1wiIHJ1bGUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg0LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTk6MzYuMjUyODYyOTYzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUC1URlMgKElQIFRyYWZmaWMgRmxvdyBTZWN1cml0eSwgbmV0L3hmcm0veGZybV9pcHRmcy5jKSB0byBpbmNyZW1lbnQgcGFnZSByZWZlcmVuY2VzIHVzaW5nIHBhZ2VfcG9vbF9yZWZfcGFnZSgpIGluc3RlYWQgb2Ygc3RhbmRhcmQgc2tiX2ZyYWdfcmVmKCkgLyBfX3NrYl9mcmFnX3JlZigpIHdoZW4gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlIGlzIHNldC4gVGhpcyBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwYWdlIHBvb2wgbWFuYWdlZCBwYWdlcy5cXG5cXG5TdWNoIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgY2FuIGxlYWQgdG8gcGFnZSByZWN5Y2xpbmcgYW5vbWFsaWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnQgdW5kZXJmbG93L292ZXJmbG93IGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgcGFnZS9wYWdlX3Bvb2wgZGVidWdnaW5nIG1lY2hhbmlzbXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXJzcGFjZSBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-15 06:47:01 +0000 UTC FinishedAt: 2026-09-15 06:59:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "96f01b53c2d05e003b040892256de54a586e8529", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM_USER", "PAGE_POOL" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "96f01b53c2d05e003b040892256de54a586e8529", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "XFRM_IPTFS", "XFRM_USER", "PAGE_POOL" ], "series_id": "5eecbacd-57ac-4d56-bee2-5abc521c71ef" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iptfs_skb_add_frags", "iptfs_consume_frags", "iptfs_output_queued", "iptfs_reassem_cont", "iptfs_pskb_add_frags" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "", "base_commit": "96f01b53c2d05e003b040892256de54a586e8529", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+OW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX3NrYl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfY29uc3VtZV9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgICAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICAgJiMzNDtpcHRmc19wc2tiX2FkZF9mcmFncyYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDY5MjA5NDBhMzViNDkuLmQzYmNhOTBlMmMzODQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTE0LDYgJiM0MzsxNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2ljbXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9pbmV0X2Vjbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbkBAIC00ODYsNyAmIzQzOzQ4NywxMCBAQCBzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHR9XG4tXHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4mIzQzO1x0XHRpZiAod2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxuJiM0MztcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcbiBcdFx0c2hpbmZvLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOztcbiBcdFx0c2hpbmZvLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xuIFxuQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuIFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xuIFx0fSBlbHNlIHtcbiBcdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG4tXHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOyk7XG4mIzQzO1x0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxuJiM0MztcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSkpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncyk7XG4mIzQzO1x0XHR0b2ktXHUwMDNlbnJfZnJhZ3MmIzQzOyYjNDM7O1xuIFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTtcbiBcdH1cbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT42bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzJiMzNDssCiAgICAmIzM0O2lwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA2OTIwOTQwYTM1YjQ5Li5kM2JjYTkwZTJjMzg0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0X2Vjbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKQEAgLTQ4Niw3ICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJdG9mcmFnLSZndDtsZW4gLT0gb2Zmc2V0OwogCQkJb2Zmc2V0ID0gMDsKIAkJfQotCQlfX3NrYl9mcmFnX3JlZih0b2ZyYWcpOwomIzQzOwkJaWYgKHdhbGstJmd0O3BwX3JlY3ljbGUpCiYjNDM7CQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJX19za2JfZnJhZ19yZWYodG9mcmFnKTsKIAkJc2hpbmZvLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCXNoaW5mby0mZ3Q7ZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7CiAKQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKQogCQluZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpOwogCX0gZWxzZSB7CiAJCWlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKTsKLQkJc2tiX2ZyYWdfcmVmKHRvLCB0b2ktJmd0O25yX2ZyYWdzJiM0MzsmIzQzOyk7CiYjNDM7CQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKJiM0MzsJCQlwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSgmYW1wO3RvaS0mZ3Q7ZnJhZ3NbdG9pLSZndDtucl9mcmFnc10pKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwomIzQzOwkJdG9pLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCW5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjI1CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMTAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgeGZybV9pcHRmcyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGJlZm9yZSBtZSBpbnZvbHZlcyBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZ2l0IGRpZmYuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCBub3QganVzdCB0aGUgY2hhbmdlZCBsaW5lcywgYnV0IHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LiBJdCYjMzk7cyBjcnVjaWFsIHRvIGdyYXNwIHRoZSBpbnRlbnQgYW5kIHRoZSBwb3RlbnRpYWwgaW1wYWN0LgoKU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCB6ZXJvIGluIG9uIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB0YWtlIGEgbG9vayBhcm91bmQgbGluZSA0ODYgYW5kIGxpbmUgMjE3MSwgZ2V0IGEgZmVlbCBmb3IgdGhlIGFyZWFzIGRpcmVjdGx5IGFmZmVjdGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgY2hhbmdlcyBpbiBvbmUgcGFydCBjYW4gcmlwcGxlIHRocm91Z2ggb3RoZXJzLgoKQW5kIG9mIGNvdXJzZSwgSSBzaG91bGQgYWxzbyBjaGVjayB0aGUgY29ycmVzcG9uZGluZyBLY29uZmlnIGZvciB0aGF0IGZpbGUuIENvbmZpZ3VyYXRpb25zIGFyZSBhIGtleSBwYXJ0IG9mIGhvdyB0aGlzIGFsbCBmaXRzIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdGZzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7XG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NyBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSAmIzQzOz0geGZybV9pbnRlcmZhY2Uub1xubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICYjNDM7PSB4ZnJtX2lwdGZzLm9cbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSAmIzQzOz0gZXNwaW50Y3Aub1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMS0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyOi8qIHhmcm1fdHJhY2VfaXB0ZnMuaFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0zLSAqXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05LSN1bmRlZiBUUkFDRV9TWVNURU1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA6I2RlZmluZSBUUkFDRV9TWVNURU0gaXB0ZnNcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTEtXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjEtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIyOlRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMzpcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MTYgYmxrb2ZmKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXHQgICAgVFBfQVJHUyhza2IsIHh0ZnMsIGJsa29mZiksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC02Ny1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6Njg6REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY5Olx0XHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtNzAtXHRcdFx0ICAgICB1MzIgcG10dSwgdTggd2FzX2dzbyksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05NS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTY6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfZW5xdWV1ZSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTgtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTk5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfbm9fcXVldWVfc3BhY2UsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDItXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwMy1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA0OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX3Rvb19iaWcsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwNTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDYtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNy1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA4OkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTA5LVx0XHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZiwgc3RydWN0IGlwaGRyICppcGgpLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTI5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMzA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2RlcXVldWUsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzMS1cdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZixcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzNC1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTM1OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LCBpcHRmc19maXJzdF9mcmFnbWVudGluZyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTM2LVx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTM5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2ZpbmFsX2ZyYWdtZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDEtXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDQtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE0NTpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfdG9vYmlnLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDYtXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDktXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE1MDpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9wZWVrLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNTEtXHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHJlbWFpbmluZyksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjItXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE2MzpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTY0LVx0ICAgIFRQX0FSR1Moc2tiLCBzaGFyZV9vayksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTEtXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE5MjpERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX3RpbWVyX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXHRcdCAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5Ny1cdFx0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXHUwMDNldGltZV92YWwgPSB0aW1lX3ZhbDtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTk4Olx0XHRcdFx0ICAgX19lbnRyeS1cdTAwM2VzZXRfdGltZSA9IHh0ZnMtXHUwMDNlaXB0ZnNfc2V0dGltZTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTk5LVx0XHRcdCAgICApLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjAyLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDM6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9zdGFydCxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA0Olx0ICAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDUtXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA2LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDc6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9leHBpcmUsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwODpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA5LVx0ICAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTYtI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMTc6I2RlZmluZSBUUkFDRV9JTkNMVURFX0ZJTEUgdHJhY2VfaXB0ZnNcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjE4LSNpbmNsdWRlIFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXHUwMDNlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyOi8qIHhmcm1faXB0ZnM6IElQVEZTIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMtICpcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjItI2luY2x1ZGUgXCYjMzQ7eGZybV9pbm91dC5oXCYjMzQ7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM6I2luY2x1ZGUgXCYjMzQ7dHJhY2VfaXB0ZnMuaFwmIzM0O1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI0LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05Ni1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5NzovKiBNaW4gdG8gdHJ5IHRvIHNoYXJlIG91dGVyIGlwdGZzIHNrYiBkYXRhIHZzIGNvcHlpbmcgaW50byBuZXcgc2tiICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTgtI2RlZmluZSBJUFRGU19QS1RfU0hBUkVfTUlOIDEyOVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTA1OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyAtIGNvbmZpZ3VyYXRpb24gZm9yIHRoZSBJUFRGUyB0dW5uZWwuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA2LSAqIEBwa3Rfc2l6ZTogc2l6ZSBvZiB0aGUgb3V0ZXIgSVAgcGFja2V0LiAwIHRvIHVzZSBpbnRlcmZhY2UgYW5kIE1UVSBkaXNjb3ZlcnksXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTU6c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTYtXHR1MzIgcGt0X3NpemU7XHQgICAgLyogb3V0ZXJfcGFja2V0X3NpemUgb3IgMCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xMjI9c3RydWN0IHNrYl93c2VxIHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI3LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyODogKiBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhIC0gbW9kZSBzcGVjaWZpYyB4ZnJtIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOS0gKiBAY2ZnOiBJUFRGUyB0dW5uZWwgY29uZmlnLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzQtICogQGluaXRfZGVsYXlfbnM6IG5hbm9zZWNvbmRzIHRvIHdhaXQgdG8gc2VuZCBpbml0aWFsIElQVEZTIHBhY2tldC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzU6ICogQGlwdGZzX3RpbWVyOiBvdXRwdXQgdGltZXIuXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTM2OiAqIEBpcHRmc19zZXR0aW1lOiB0aW1lIHRoZSBvdXRwdXQgdGltZXIgd2FzIHNldC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzctICogQHBheWxvYWRfbXR1OiBtYXggcGF5bG9hZCBzaXplLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTUwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcdHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyBjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTUyLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTktXHR1NjQgaW5pdF9kZWxheV9ucztcdCAgICAvKiBuYW5vc2Vjb25kcyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2MDpcdHN0cnVjdCBocnRpbWVyIGlwdGZzX3RpbWVyOyAvKiBvdXRwdXQgdGltZXIgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE6XHR0aW1lNjRfdCBpcHRmc19zZXR0aW1lO1x0ICAgIC8qIHRpbWUgdGltZXIgd2FzIHNldCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2Mi1cdHUzMiBwYXlsb2FkX210dTtcdCAgICAvKiBtYXggcGF5bG9hZCBzaXplICovXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA6c3RhdGljIHUzMiBfX2lwdGZzX2dldF9pbm5lcl9tdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIGludCBvdXRlcl9tdHUpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODI6c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2Ryb3BfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODMtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMz1zdGF0aWMgdTY0IF9fZXNwX3NlcShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM1OiAqIGlwdGZzX2FsbG9jX3NrYigpIC0gQWxsb2NhdGUgYSBuZXcgYHNrYmAuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2LSAqIEB0cGw6IHRoZSBza2IgdG8gY29weSByZXF1aXJlZCBtZXRhLWRhdGEgZnJvbS5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU5LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDpzdGF0aWMgc3RydWN0IHNrX2J1ZmYgKmlwdGZzX2FsbG9jX3NrYihzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCB1MzIgbGVuLCBib29sIGwzcmVzdilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk0OiAqIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoKSAtIGluaXRpYWxpemUgYSBza2JfZnJhZ190IGJhc2VkIG9uIHNrYiBoZWFkIGRhdGFcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTUtICogQHNrYjogc2tiIHdpdGggdGhlIGhlYWQgZGF0YVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTctICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk4OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTkte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMDYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzA3OiAqIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIC0gdXNlIHRvIHRyYWNrIGEgd2FsayB0aHJvdWdoIGZyYWdtZW50c1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTMwOC0gKiBAZnJhZ2k6IGN1cnJlbnQgZnJhZ21lbnQgaW5kZXhcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNjpzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE3LVx0dTMyIGZyYWdpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzI3OiAqIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsaygpIC0gaW5pdGlhbGl6ZSBhIGZyYWcgd2FsayBvdmVyIGFuIHNrYi5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjgtICogQHNrYjogdGhlIHNrYiB0byB3YWxrLlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMzQtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM1OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM2Olx0XHRcdFx0XHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsaylcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMzcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNTMtXHRcdFx0ZnJhZyA9IFx1MDAyNndhbGstXHUwMDNlZnJhZ3Nbd2Fsay1cdTAwM2Vucl9mcmFncyYjNDM7JiM0MztdO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjM1NDpcdFx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKHNrYiwgZnJhZyk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzU1LVx0XHRcdGZyYWctXHUwMDNlb2Zmc2V0ICYjNDM7PSBpbml0aWFsX29mZnNldDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzgwLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MTpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzgyLVx0XHRcdFx0ICAgICB1MzIgb2Zmc2V0KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDEtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDAyOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgLSBjaGVjayBpZiBvayB0byBhZGQgZnJhZ3MgZnJvbSB3YWxrIHRvIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMy0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MDktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDEwOnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDExOlx0XHRcdFx0ICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMi1cdFx0XHRcdCAgICB1MzIgb2Zmc2V0LCB1MzIgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjAtXHQvKiBSZWplY3QgYW4gQG9mZnNldCB0aGF0IGlzIGF0IG9yIGJleW9uZCB0aGUgZW5kIG9mIHRoZSB3YWxrJiMzOTtzIGRhdGFcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MjE6XHQgKiBiZWZvcmUgY2FsbGluZyBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKCksIHdob3NlIGZyYWdtZW50LWFkdmFuY2Vcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXHQgKiBsb29wIGlzIG90aGVyd2lzZSB1bmJvdW5kZWQgYW5kIHdvdWxkIGluZGV4IHBhc3Qgd2Fsay1cdTAwM2VmcmFnc1tdLlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcdCAqIFRoaXMgbWlycm9ycyB0aGUgZ3VhcmQgYWxyZWFkeSBwcmVzZW50IGluIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjQtXHQgKi9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDI4LVx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyOTpcdG9mZnNldCA9IGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsod2Fsaywgb2Zmc2V0KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MzAtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1My0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTQ6ICogaXB0ZnNfc2tiX2FkZF9mcmFncygpIC0gYWRkIGEgcmFuZ2Ugb2YgZnJhZ21lbnQgcmVmZXJlbmNlcyBpbnRvIGFuIHNrYlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1NS0gKiBAc2tiOiBza2IgdG8gYWRkIHJlZmVyZW5jZXMgaW50b1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktICpcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NjA6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSBzaG91bGQgYmUgY2FsbGVkIGJlZm9yZSB0aGlzIGZ1bmN0aW9uIHRvIHZlcmlmeVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2MS0gKiB0aGF0IHRoZSBkZXN0aW5hdGlvbiBAc2tiIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgd2FsayBhbmQgaGFzIHNwYWNlIGluIHRoZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjYtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDY3OnN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2ODpcdFx0XHQgICAgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssIHUzMiBvZmZzZXQsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY5LVx0XHRcdCAgICAgICB1MzIgbGVuKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzctXHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDc4Olx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ3OS1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTE5LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyMDojaW5jbHVkZSBcJiMzNDt0cmFjZV9pcHRmcy5oXCYjMzQ7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTIxLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTI3OiAqIGlwdGZzX3Bza2JfYWRkX2ZyYWdzKCkgLSBDcmVhdGUgYW5kIGFkZCBmcmFncyBpbnRvIGEgbmV3IHNrX2J1ZmYuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTI4LSAqIEB0cGw6IHRlbXBsYXRlIHRvIGNyZWF0ZSBuZXcgc2tiIGZyb20uXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0ND1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU0NTppcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2Fsayxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDYtXHRcdCAgICAgdTMyIG9mZiwgdTMyIGxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgY29weV9sZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU0OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NTA6XHRza2IgPSBpcHRmc19hbGxvY19za2IodHBsLCBjb3B5X2xlbiwgZmFsc2UpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTU1MS1cdGlmICghc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTQtXHQvKiB0aGlzIHNob3VsZCBub3Qgbm9ybWFsbHkgYmUgaGFwcGVuaW5nICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTU1Olx0aWYgKCFpcHRmc19za2JfY2FuX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiAmIzQzOyBjb3B5X2xlbixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTYtXHRcdFx0XHQgICAgIGxlbiAtIGNvcHlfbGVuKSkge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjgtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTY5Olx0aXB0ZnNfc2tiX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiAmIzQzOyBjb3B5X2xlbiwgbGVuIC0gY29weV9sZW4pO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3MC1cdHJldHVybiBza2I7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3My0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1NzQ6ICogaXB0ZnNfcHNrYl9leHRyYWN0X3NlcSgpIC0gQ3JlYXRlIGFuZCBsb2FkIGRhdGEgaW50byBhIG5ldyBza19idWZmLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3NS0gKiBAc2tibGVuOiB0aGUgdG90YWwgZGF0YSBzaXplIGZvciBgc2tiYC5cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTg5PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTkwOmlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5MS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTkyOlx0c3RydWN0IHNrX2J1ZmYgKnNrYiA9IGlwdGZzX2FsbG9jX3NrYihzdC1cdTAwM2Vyb290X3NrYiwgc2tibGVuLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTkzLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDQtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjA1OiAqIGlwdGZzX2lucHV0X3NhdmVfcnVudCgpIC0gc2F2ZSBkYXRhIGluIHh0ZnMgcnVudCBzcGFjZS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDYtICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjEzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxNDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyMy0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MjQ6ICogX19pcHRmc19pcGhsZW4oKSAtIHJldHVybiB0aGUgdjQvdjYgaGVhZGVyIGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MjUtICogQGRhdGE6IHBvaW50ZXIgYXQgb2N0ZXQgd2l0aCB2ZXJzaW9uIG5pYmJsZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MzAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjMxOnN0YXRpYyB1MzIgX19pcHRmc19pcGhsZW4odTggKmRhdGEpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMyLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY0MTogKiBfX2lwdGZzX2lwbGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NDItICogQGRhdGE6IHBvaW50ZXIgdG8gaXAgKHY0L3Y2KSBwYWNrZXQgaGVhZGVyXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1MC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NTE6c3RhdGljIHUzMiBfX2lwdGZzX2lwbGVuKHU4ICpkYXRhKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1Mi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2MS0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2NjI6ICogaXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKCkgLSBmaW5pc2ggcHJlcGFyaW5nIHRoZSBpbm5lciBwYWNrZXQgZm9yIGdybyByZWN2LlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2My0gKiBAeDogeGZybSBzdGF0ZVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NzAtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjcxOnN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NzIte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MDktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzEwOnN0YXRpYyB2b2lkIF9faXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGJvb2wgZnJlZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjEtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzIyOiAqIGlwdGZzX3JlYXNzZW1fYWJvcnQoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBhYm9ydGVkIGZyZWUgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjU6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI3Olx0X19pcHRmc19yZWFzc2VtX2RvbmUoeHRmcywgdHJ1ZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI4LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMwLS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMTogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMi0gKiBAeHRmczogeHRmcyBzdGF0ZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzY6XHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM3LX1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc0MDogKiBpcHRmc19yZWFzc2VtX2NvbnQoKSAtIENvbnRpbnVlIHRoZSByZWFzc2VtYmx5IG9mIGFuIGlubmVyIHBhY2tldHMuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzQxLSAqIEB4dGZzOiB4dGZzIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1My0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTQ6c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXHRcdFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTcte1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1ODpcdHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIF9mcmFnd2Fsaztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NTk6XHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTc2MC1cdHN0cnVjdCBza19idWZmICpuZXdza2IgPSB4dGZzLVx1MDAzZXJhX25ld3NrYjtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODEyLVx0XHQvKiBUaGUgc3RhcnQgb2YgdGhpcyBpbm5lciBwYWNrZXQgd2FzIGF0IHRoZSB2ZXJ5IGVuZCBvZiB0aGUgbGFzdFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjgxMzpcdFx0ICogaXB0ZnMgcGF5bG9hZCB3aGljaCBkaWRuJiMzOTt0IGluY2x1ZGUgZW5vdWdoIGZvciB0aGUgaXAgaGVhZGVyXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODE0LVx0XHQgKiBsZW5ndGggZmllbGQuIFdlIG11c3QgaGF2ZSAqYXQgbGVhc3QqIHRoYXQgbm93LlxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MzMtXHRcdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjgzNDpcdFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKHh0ZnMtXHUwMDNlcmFfcnVudCk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM1Olx0XHRpZiAoaXByZW1haW4gXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXHUwMDNlcmFfcnVudCkpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MzYtXHRcdFx0LyogbGVuZ3RoIGhhcyB0byBiZSBhdCBsZWFzdCB0aGUgSVAgaGVhZGVyIHNpemUgKi9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODQ1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjg0NjpcdFx0bmV3c2tiID0gaXB0ZnNfYWxsb2Nfc2tiKHNrYiwgaXByZW1haW4sIGZhbHNlKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04NDctXHRcdGlmICghbmV3c2tiKSB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg2Mi1cdC8qIENvbnRpbnVlIHJlYXNzZW1ibGluZyB0aGUgcGFja2V0ICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODYzOlx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKG5ld3NrYi1cdTAwM2VkYXRhKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo4NjQ6XHRpcGhsZW4gPSBfX2lwdGZzX2lwaGxlbihuZXdza2ItXHUwMDNlZGF0YSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtODY1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXHRcdGZyYWd3YWxrID0gXHUwMDI2X2ZyYWd3YWxrO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwOTpcdFx0aXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKHNrYiwgZGF0YSwgZnJhZ3dhbGspO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxMC1cdH1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTEzLVx0aWYgKGZyYWd3YWxrIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNDpcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNTpcdFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTYtXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MzUtXHRcdC8qIFdlIGFyZSBkb25lIHdpdGggcGFja2V0IHJlYXNzZW1ibHkhICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTM2Olx0XHRpcHRmc19yZWFzc2VtX2RvbmUoeHRmcyk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTM3Olx0XHRpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoeHRmcy1cdTAwM2V4LCBuZXdza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzOC1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZuZXdza2ItXHUwMDNlbGlzdCwgbGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0NS1cdGlmICh4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NjpcdFx0aXB0ZnNfcmVhc3NlbV9hYm9ydCh4dGZzKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDctXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTU9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NTktXHR1OCBoYnl0ZXNbc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKV07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTYwOlx0c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgX2ZyYWd3YWxrO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MTpcdHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICpmcmFnd2FsayA9IE5VTEw7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYyLVx0c3RydWN0IHNrX2J1ZmYgKmRlZmVyLCAqZmlyc3Rfc2tiLCAqbmV4dCwgKnNrYjtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjMtXHRjb25zdCB1bnNpZ25lZCBjaGFyICpvbGRfbWFjO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTY1LVx0c3RydWN0IGlwaGRyICppcGg7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDUtXHRcdFx0XHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDA2Olx0XHRcdFx0aXB0ZnNfaW5wdXRfc2F2ZV9ydW50KHh0ZnMsIHNlcSwgaGJ5dGVzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDctXHRcdFx0XHRcdFx0ICAgICAgcmVtYWluaW5nKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNC1cdFx0XHRcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwMjU6XHRcdFx0XHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNi1cdFx0XHRcdFx0XHQgICAgICByZW1haW5pbmcpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTE2LVx0XHRcdFx0ZnJhZ3dhbGsgPSBcdTAwMjZfZnJhZ3dhbGs7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTExNzpcdFx0XHRcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTE4LVx0XHRcdFx0ZGVmZXIgPSBza2I7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNDAtXHRcdFx0ICAgIC8qIFRyeSBjcmVhdGluZyBza2IgYW5kIGFkZGluZyBmcmFncyAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNDE6XHRcdFx0ICAgICEoc2tiID0gaXB0ZnNfcHNrYl9hZGRfZnJhZ3MoZmlyc3Rfc2tiLCBmcmFnd2Fsayxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQyLVx0XHRcdFx0XHRcdFx0IGRhdGEsIGNhcHR1cmVsZW4sXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0My1cdFx0XHRcdFx0XHRcdCBza2JzZXEsIGlwaGxlbikpKSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE0NDpcdFx0XHRcdHNrYiA9IGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoaXBsZW4sIHNrYnNlcSwgZGF0YSwgY2FwdHVyZWxlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0NS1cdFx0XHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExODEtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE4MjpcdFx0aXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4My1cdFx0bGlzdF9hZGRfdGFpbChcdTAwMjZza2ItXHUwMDNlbGlzdCwgc3VibGlzdCk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIyNDogKiBpcHRmc19pbnB1dF9vcmRlcmVkKCkgLSBoYW5kbGUgbmV4dCBpbiBvcmRlciBJUFRGUyBwYXlsb2FkLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjUtICogQHg6IHhmcm0gc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyOS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjMwOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X29yZGVyZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzMS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTIzMjpcdHN0cnVjdCBpcF9pcHRmc19jY19oZHIgaXB0Y2NoO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzMtXHRzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSBza2JzZXE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNC1cdHN0cnVjdCBsaXN0X2hlYWQgc3VibGlzdDsgLyogcmVuYW1lIHRoaXMgaXQmIzM5O3MganVzdCBhIGxpc3QgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM1Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM2Olx0c3RydWN0IGlwX2lwdGZzX2hkciAqaXB0aDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM3LVx0c3RydWN0IG5ldCAqbmV0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjQ3LVx0LyogTGFyZ2UgZW5vdWdoIHRvIGhvbGQgYm90aCB0eXBlcyBvZiBoZWFkZXIgKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjQ4Olx0aXB0aCA9IChzdHJ1Y3QgaXBfaXB0ZnNfaGRyICopXHUwMDI2aXB0Y2NoO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNDktXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNTktXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI2MDpcdHRyYWNlX2lwdGZzX2VncmVzc19yZWN2KHNrYiwgeHRmcywgYmUxNl90b19jcHUoaXB0aC1cdTAwM2VibG9ja19vZmZzZXQpKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjYxLVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjkxLVx0XHRpZiAoYmxrb2ZmIHx8IHh0ZnMtXHUwMDNlcmFfcnVudGxlbiB8fCB4dGZzLVx1MDAzZXJhX25ld3NrYikge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyOTI6XHRcdFx0ZGF0YSA9IGlwdGZzX3JlYXNzZW1fY29udCh4dGZzLCBzZXEsIFx1MDAyNnNrYnNlcSwgc2tiLCBkYXRhLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTMtXHRcdFx0XHRcdFx0ICBibGtvZmYsIFx1MDAyNnN1Ymxpc3QpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTQte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMjc6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzgxLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwOTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDM1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDgyLVx0eHRmcy1cdTAwM2V3X3NhdmVkbGVuID0gbWF4KHNhdmVkbGVuLCBpbmRleCAmIzQzOyAxKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDgzOlx0aXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHh0ZnMsIGluZGV4KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg0LX1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0ODY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg3LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYxNi1cdHh0ZnMtXHUwMDNld19zYXZlZFt4dGZzLVx1MDAzZXdfc2F2ZWRsZW4gLSAxXS5za2IgPSBpbnNrYjtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE3Olx0aXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHh0ZnMsIHh0ZnMtXHUwMDNld19zYXZlZGxlbiAtIDEpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MTgtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MzEtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYzMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMy1cdFx0XHRcdHN0cnVjdCBza19idWZmICppbnNrYiwgc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY1OC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjU5OiAqIGlwdGZzX2Ryb3BfdGltZXIoKSAtIEhhbmRsZSBkcm9wIHRpbWVyIGV4cGlyeS5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjYwLSAqIEBtZTogdGhlIHRpbWVyXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NzktICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4MS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODMtXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4NDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4NS1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzExLVx0XHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcxMjpcdFx0XHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMy1cdFx0fVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzE5LS8qKlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MjA6ICogaXB0ZnNfaW5wdXQoKSAtIGhhbmRsZSByZWNlaXB0IG9mIGlwdGZzIHBheWxvYWRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIxLSAqIEB4OiB4ZnJtIHN0YXRlXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MjgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzAte1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzEtXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3MzI6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMy1cdHN0cnVjdCBza19idWZmICpuZXh0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM2LVx0aWYgKHh0ZnMtXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Mzc6XHRcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzM4LVx0XHRnb3RvIGRvbmU7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDctXHRzcGluX2xvY2soXHUwMDI2eHRmcy1cdTAwM2Vkcm9wX2xvY2spO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDg6XHRpcHRmc19pbnB1dF9yZW9yZGVyKHh0ZnMsIHNrYiwgXHUwMDI2bGlzdCwgXHUwMDI2ZnJlZWxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NDktXHRzcGluX3VubG9jayhcdTAwMjZ4dGZzLVx1MDAzZWRyb3BfbG9jayk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTItXHRcdHNrYl9saXN0X2RlbF9pbml0KHNrYik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc1MzpcdFx0aXB0ZnNfaW5wdXRfb3JkZXJlZCh4LCBza2IpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTQtXHR9XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc3NzogKiBpcHRmc19lbnF1ZXVlKCkgLSBlbnF1ZXVlIHBhY2tldCBpZiBvayB0byBzZW5kLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzgtICogQHh0ZnM6IHh0ZnMgc3RhdGVcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4Mi0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzgzOnN0YXRpYyBib29sIGlwdGZzX2VucXVldWUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzg0LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgwNi1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA3OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDgtXHRcdFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cdHUzMiBwYXlsb2FkX210dSA9IHh0ZnMtXHUwMDNlcGF5bG9hZF9tdHU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxMjpcdHUzMiBwbXR1ID0gX19pcHRmc19nZXRfaW5uZXJfbXR1KHgsIHhkc3QtXHUwMDNlY2hpbGRfbXR1X2NhY2hlZCk7XG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTUxNQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYHhmcm1faXB0ZnMuY2AgLSBQb3RlbnRpYWwgSG90c3BvdHMqKgoKT2theSwgSSYjMzk7bSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzIHdpdGhpbiBgeGZybV9pcHRmcy5jYC4gU3BlY2lmaWNhbGx5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nIGFyb3VuZCBsaW5lIDIxNzEuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqSW5zZXJ0IGxpa2VseSBhcmVhLCBlLmcuLCAmIzM0O2ZyYWdtZW50YXRpb24gaGFuZGxpbmcsJiMzNDsgb3IgJiMzNDtzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLCYjMzQ7IGJhc2VkIG9uIHRoZSB1c2VyJiMzOTtzIGZpZWxkKl0uIFdlIHNob3VsZCBleGFtaW5lIHRoZSBjb2RlIGFyb3VuZCB0aGF0IGxpbmUgd2l0aCBhIGZpbmUtdG9vdGggY29tYiwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgaW50ZXJhY3Rpb24gd2l0aCB0aGUgWyAqSW5zZXJ0IHJlbGV2YW50IGRhdGEgc3RydWN0dXJlIG9yIGZ1bmN0aW9uIG5hbWUqIF0uIFRoZXJlJiMzOTtzIGFsd2F5cyBhIHBvc3NpYmlsaXR5IHRoYXQgdGhlIGlzc3VlIHdlJiMzOTtyZSBzZWVpbmcgc3RlbXMgZnJvbSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbiBlZGdlIGNhc2Ugb3Zlcmxvb2tlZCBpbiB0aGF0IGNvbnRleHQuCgpBbmQgd2hpbGUgd2UmIzM5O3JlIGF0IGl0LCBsZXQmIzM5O3MgYWxzbyBzd2luZyBiYWNrIHRvIGxpbmUgNDg2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGhhbmRsZXMgWyAqSW5zZXJ0IHRoZSB0eXBpY2FsIGZ1bmN0aW9uYWxpdHksIGUuZy4sICYjMzQ7SVBzZWMgcG9saWN5IG1hdGNoaW5nLCYjMzQ7IG9yICYjMzQ7dHVubmVsIHNldHVwLCYjMzQ7IGV0Yy4qXSBhbmQgbWlnaHQgYmUgaW52b2x2ZWQgdG9vLiBUaGVzZSBsaW5lcyBtaWdodCBjb250YWluIHNvbWUgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFyb3VuZCBsaW5lIDIxNzEuIFdlIHNob3VsZCB2ZXJpZnkgYWxsIHRob3NlIHJlZmVyZW5jZXMuIEJvdGggbG9jYXRpb25zIHdhcnJhbnQgYSB0aG9yb3VnaCByZXZpZXcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIGJhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NzA6XHR7XG4gNDcxOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpzaGluZm8gPSBza2Jfc2hpbmZvKHNrYik7XG4gNDcyOlx0XHR1MzIgZnJhZ2xlbjtcbiA0NzM6XHRcbiA0NzQ6XHRcdGlmICghd2Fsay1cdTAwM2Vucl9mcmFncyB8fCBvZmZzZXQgXHUwMDNlPSB3YWxrLVx1MDAzZXRvdGFsICYjNDM7IHdhbGstXHUwMDNlaW5pdGlhbF9vZmZzZXQpXG4gNDc1Olx0XHRcdHJldHVybiBsZW47XG4gNDc2Olx0XG4gNDc3Olx0XHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXG4gNDc4Olx0XHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XG4gNDc5Olx0XG4gNDgwOlx0XHR3aGlsZSAobGVuIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWZyYWdpIFx1MDAzYyB3YWxrLVx1MDAzZW5yX2ZyYWdzKSB7XG4gNDgxOlx0XHRcdHNrYl9mcmFnX3QgKmZyYWcgPSBcdTAwMjZ3YWxrLVx1MDAzZWZyYWdzW3dhbGstXHUwMDNlZnJhZ2ldO1xuIDQ4MjpcdFx0XHRza2JfZnJhZ190ICp0b2ZyYWcgPSBcdTAwMjZzaGluZm8tXHUwMDNlZnJhZ3Nbc2hpbmZvLVx1MDAzZW5yX2ZyYWdzXTtcbiA0ODM6XHRcbiA0ODQ6XHRcdFx0KnRvZnJhZyA9ICpmcmFnO1xuIDQ4NTpcdFx0XHRpZiAob2Zmc2V0KSB7XG4gNDg2Olx0XHRcdFx0dG9mcmFnLVx1MDAzZW9mZnNldCAmIzQzOz0gb2Zmc2V0O1xuIDQ4NzpcdFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gLT0gb2Zmc2V0O1xuIDQ4ODpcdFx0XHRcdG9mZnNldCA9IDA7XG4gNDg5Olx0XHRcdH1cbiA0OTA6XHRcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbiA0OTE6XHRcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbiA0OTI6XHRcdFx0ZWxzZVxuIDQ5MzpcdFx0XHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4gNDk0Olx0XHRcdHNoaW5mby1cdTAwM2Vucl9mcmFncyYjNDM7JiM0Mzs7XG4gNDk1Olx0XHRcdHNoaW5mby1cdTAwM2VmbGFncyB8PSBTS0JGTF9TSEFSRURfRlJBRztcbiA0OTY6XHRcbiA0OTc6XHRcdFx0Lyogc2VlIGlmIHdlIGFyZSBkb25lICovXG4gNDk4Olx0XHRcdGZyYWdsZW4gPSB0b2ZyYWctXHUwMDNlbGVuO1xuIDQ5OTpcdFx0XHRpZiAobGVuIFx1MDAzYyBmcmFnbGVuKSB7XG4gNTAwOlx0XHRcdFx0dG9mcmFnLVx1MDAzZWxlbiA9IGxlbjtcbiA1MDE6XHRcdFx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBsZW47XG4gNTAyOlx0XHRcdFx0c2tiLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBsZW47XG4gNTAzOlx0XHRcdFx0cmV0dXJuIDA7XG4gNTA0Olx0XHRcdH1cbiA1MDU6XHRcdFx0LyogYWR2YW5jZSB0byBuZXh0IHNvdXJjZSBmcmFnbWVudCAqL1xuIDUwNjpcdFx0XHRsZW4gLT0gZnJhZ2xlbjtcdFx0XHQvKiBjYXJlZnVsLCB1c2UgZHN0IGJ2X2xlbiAqL1xuIDUwNzpcdFx0XHRza2ItXHUwMDNlbGVuICYjNDM7PSBmcmFnbGVuO1x0XHQvKiBjYXJlZnVsLCBcJiMzNDsgICBcJiMzNDsgICAgXCYjMzQ7ICAgICAqL1xuIDUwODpcdFx0XHRza2ItXHUwMDNlZGF0YV9sZW4gJiM0Mzs9IGZyYWdsZW47XHQvKiBjYXJlZnVsLCBcJiMzNDsgICBcJiMzNDsgICAgXCYjMzQ7ICAgICAqL1xuIDUwOTpcdFx0XHR3YWxrLVx1MDAzZXBhc3QgJiM0Mzs9IGZyYWctXHUwMDNlbGVuO1x0LyogY2FyZWZ1bCwgdXNlIHNyYyBidl9sZW4gKi9cbiA1MTA6XHRcdFx0d2Fsay1cdTAwM2VmcmFnaSYjNDM7JiM0Mzs7XG4gNTExOlx0XHR9XG4gNTEyOlx0XHRyZXR1cm4gbGVuO1xuIDUxMzpcdH1cbiA1MTQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjU4NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDoKCioqTmF2aWdhdGluZyB0aGUgVGV4dDogRm9jdXNpbmcgSW4qKgoKUmlnaHQsIGxldCYjMzk7cyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDIxNzEuIEkga25vdyB0aGUgYnJvYWRlciBjb250ZXh0LCBidXQgYSBzcGVjaWZpYyBsaW5lIHJlZmVyZW5jZSBsaWtlIHRoYXQgc3VnZ2VzdHMgc29tZXRoaW5nIHBpbnBvaW50ZWQsIHBlcmhhcHMgYSBrZXkgYXJndW1lbnQsIGEgZGF0YSBwb2ludCwgb3IgYSBtZXRob2RvbG9neSB0aGF0JiMzOTtzIGJlaW5nIGRlYmF0ZWQgb3IgZGV2ZWxvcGVkLiBJJiMzOTtsbCBuZWVkIHRvIGFic29yYiB3aGF0JiMzOTtzIGJlaW5nIGRpc2N1c3NlZCB0aGVyZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGxpbmUgcmVmZXJlbmNlcyBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkZXRhaWxlZCBsb2dpYywgYXMgb2Z0ZW4sIGEgZ3JlYXQgZGVhbCBvZiB0aGUgaW5mb3JtYXRpb24gc2l0cyBiZXR3ZWVuIHRoZSBsaW5lcyBvZiBhIGRpc2N1c3Npb24uIEkmIzM5O20gcHJlcGFyaW5nIG15c2VsZiB0byBmaWx0ZXIgb3V0IHRoZSBpcnJlbGV2YW50IGluZm9ybWF0aW9uIHRvIGlkZW50aWZ5IHRoZSBjb3JlIGNvbmNlcHQuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBiZWluZyByZXZlYWxlZCBhdCB0aGF0IHBvaW50IGluIHRoZSB0ZXh0IGFuZCBob3cgaXQgZGV2ZWxvcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxNjA6XHRcdHNrYl9mcmFnX2xpc3RfaW5pdChjaGlsZCk7XG4yMTYxOlx0XHRjaGlsZC1cdTAwM2VsZW4gLT0gZmxsZW47XG4yMTYyOlx0XHRjaGlsZC1cdTAwM2VkYXRhX2xlbiAtPSBmbGxlbjtcbjIxNjM6XHRcbjIxNjQ6XHRcdHJldHVybiBuZXh0cDtcbjIxNjU6XHR9XG4yMTY2Olx0XG4yMTY3Olx0c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuMjE2ODpcdHtcbjIxNjk6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKmZyb21pID0gc2tiX3NoaW5mbyhmcm9tKTtcbjIxNzA6XHRcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnRvaSA9IHNrYl9zaGluZm8odG8pO1xuMjE3MTpcdFx0dW5zaWduZWQgaW50IG5ld190cnVlc2l6ZTtcbjIxNzI6XHRcbjIxNzM6XHRcdC8qIElmIHdlIGhhdmUgZGF0YSBpbiBhIGhlYWQgcGFnZSwgZ3JhYiBpdCAqL1xuMjE3NDpcdFx0aWYgKCFza2JfaGVhZGxlbihmcm9tKSkge1xuMjE3NTpcdFx0XHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xuMjE3NjpcdFx0fSBlbHNlIHtcbjIxNzc6XHRcdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG4yMTc4Olx0XHRcdGlmIChmcm9tLVx1MDAzZXBwX3JlY3ljbGUpXG4yMTc5Olx0XHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbjIxODA6XHRcdFx0ZWxzZVxuMjE4MTpcdFx0XHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzKTtcbjIxODI6XHRcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzJiM0MzsmIzQzOztcbjIxODM6XHRcdFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XG4yMTg0Olx0XHR9XG4yMTg1Olx0XG4yMTg2Olx0XHQvKiBNb3ZlIGFueSBvdGhlciBwYWdlIGZyYWdtZW50cyByYXRoZXIgdGhhbiBjb3B5ICovXG4yMTg3Olx0XHRtZW1jcHkoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10sIGZyb21pLVx1MDAzZWZyYWdzLFxuMjE4ODpcdFx0ICAgICAgIHNpemVvZihmcm9taS1cdTAwM2VmcmFnc1swXSkgKiBmcm9taS1cdTAwM2Vucl9mcmFncyk7XG4yMTg5Olx0XHR0b2ktXHUwMDNlbnJfZnJhZ3MgJiM0Mzs9IGZyb21pLVx1MDAzZW5yX2ZyYWdzO1xuMjE5MDpcdFx0aWYgKGZyb21pLVx1MDAzZW5yX2ZyYWdzKVxuMjE5MTpcdFx0XHR0b2ktXHUwMDNlZmxhZ3MgfD0gZnJvbWktXHUwMDNlZmxhZ3MgXHUwMDI2IFNLQkZMX1NIQVJFRF9GUkFHO1xuMjE5MjpcdFx0ZnJvbWktXHUwMDNlbnJfZnJhZ3MgPSAwO1xuMjE5MzpcdFx0ZnJvbS1cdTAwM2VkYXRhX2xlbiA9IDA7XG4yMTk0Olx0XHRmcm9tLVx1MDAzZWxlbiA9IDA7XG4yMTk1Olx0XHR0by1cdTAwM2V0cnVlc2l6ZSAmIzQzOz0gZnJvbS1cdTAwM2V0cnVlc2l6ZSAtIG5ld190cnVlc2l6ZTtcbjIxOTY6XHRcdGZyb20tXHUwMDNldHJ1ZXNpemUgPSBuZXdfdHJ1ZXNpemU7XG4yMTk3Olx0XG4yMTk4Olx0XHQvKiBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgU0tCICovXG4yMTk5Olx0XHRjb25zdW1lX3NrYihmcm9tKTtcbjIyMDA6XHR9XG4yMjAxOlx0XG4yMjAyOlx0c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbjIyMDM6XHR7XG4yMjA0Olx0XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2MTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBBcHBsaWNhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzICYjMzQ7c3l6LWNsdXN0ZXImIzM0OyBwYXRjaCB0aGF0JiMzOTtzIGJlZW4gYXBwbGllZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyBhbHdheXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBjb21taXQgaGlzdG9yeS4gSSYjMzk7ZCB0eXBpY2FsbHkgcHVsbCB1cCB0aGUgY29tbWl0IGxvZyB3aXRoIGBnaXQgbG9nIC0xIC1wYCBvciBzb21ldGhpbmcgc2ltaWxhciB0byBzZWUgdGhlIHNwZWNpZmljIGNoYW5nZXMgbWFkZSwgdGhlIGNvbnRleHQsIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLiBIb3dldmVyLCBpdCBzZWVtcyBJIGRvbiYjMzk7dCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBlbnZpcm9ubWVudCBpbiB0aGlzIGNvbnRleHQuIE5vIHByb2JsZW0sIGxldCYjMzk7cyB3b3JrIHdpdGggd2hhdCB3ZSBoYXZlLiBJIHJlbWVtYmVyIHNlZWluZyBhIHJlZmVyZW5jZSB0byB0aGUgY29tbWl0IGRlc2NyaXB0aW9uIGluIHRoZSBwcm9tcHQ6ICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDsuIEdvb2QsIHRoYXQgZ2l2ZXMgbWUgYSBzdGFydGluZyBwb2ludC4KCk5vdywgbXkgZm9jdXMgc2hpZnRzIHRvIHVuZGVyc3RhbmRpbmcgdGhlIHNwZWNpZmljIGNvZGUgY2hhbmdlcy4gR2l2ZW4gdGhhdCBwaHJhc2UsICYjMzQ7c3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3JiMzNDssIGl0IGlzIGxpa2VseSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUgaXMgaW4gYSBmdW5jdGlvbiBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBpcyBjb21pbmcgZnJvbSwgaXRzIGRlZmluaXRpb24uIEkgYW0gZ29pbmcgdG8gY2hlY2sgdG8gc2VlIHdoZXJlIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBjb21lcyBmcm9tLCB0aGF0IHNob3VsZCBnZXQgbWUgc3RhcnRlZCBvbiB0aGUgcGF0aCB0byB1bmRlcnN0YW5kaW5nIHRoZSBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwcF9yZWN5Y2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xNjM9VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfYWRkLCBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzaGFyZV9vayksXG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjktXHRcdFx0ICAgICBfX2ZpZWxkKHU4LCBoZWFkX2ZyYWcpXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE3MDpcdFx0XHQgICAgIF9fZmllbGQodTgsIHBwX3JlY3ljbGUpXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE3MS1cdFx0XHQgICAgIF9fZmllbGQodTgsIGNsb25lZClcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4MC1cdFx0XHQgICBfX2VudHJ5LVx1MDAzZWhlYWRfZnJhZyA9IHNrYi1cdTAwM2VoZWFkX2ZyYWc7XG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4MTpcdFx0XHQgICBfX2VudHJ5LVx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXHUwMDNlcHBfcmVjeWNsZTtcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgyLVx0XHRcdCAgIF9fZW50cnktXHUwMDNlY2xvbmVkID0gc2tiX2Nsb25lZChza2IpO1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg2LVx0XHQgICAgKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg3Olx0ICAgIFRQX3ByaW50ayhcJiMzNDtJTkdSUFNUUTogTlRIQUREOiBza2I9JXAgbGVuPSV1IGRhdGFfbGVuPSV1IHNoYXJlX29rPSV1IGhlYWRfZnJhZz0ldSBwcF9yZWN5Y2xlPSV1IGNsb25lZD0ldSBzaGFyZWQ9JXUgbnJfZnJhZ3M9JXUgZnJhZ19saXN0PSV1XCYjMzQ7LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODgtXHRcdCAgICAgIF9fZW50cnktXHUwMDNlc2tiLCBfX2VudHJ5LVx1MDAzZXNrYl9sZW4sIF9fZW50cnktXHUwMDNlZGF0YV9sZW4sIF9fZW50cnktXHUwMDNlc2hhcmVfb2ssXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4OTpcdFx0ICAgICAgX19lbnRyeS1cdTAwM2VoZWFkX2ZyYWcsIF9fZW50cnktXHUwMDNlcHBfcmVjeWNsZSwgX19lbnRyeS1cdTAwM2VjbG9uZWQsIF9fZW50cnktXHUwMDNlc2hhcmVkLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTAtXHRcdCAgICAgIF9fZW50cnktXHUwMDNlbnJfZnJhZ3MsIF9fZW50cnktXHUwMDNlZnJhZ19saXN0KSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI5OD1zdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxMy0gKiBAZnJhZ3M6IHRoZSBwYWdlIGZyYWdtZW50cyBpbmMuIHJvb20gZm9yIGhlYWQgcGFnZVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNDogKiBAcHBfcmVjeWNsZTogY29weSBvZiBza2ItXHUwMDNlcHBfcmVjeWNsZVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTY9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjItXHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1MgJiM0MzsgMV07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzIzOlx0Ym9vbCBwcF9yZWN5Y2xlO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyNC19O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMzU9c3RhdGljIHZvaWQgaXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBpbml0aWFsX29mZnNldCxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ2LVx0d2Fsay1cdTAwM2Vucl9mcmFncyA9IDA7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzQ3Olx0d2Fsay1cdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVx1MDAzZXBwX3JlY3ljbGU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ4LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxNzpcdGlmIChza2JfaGFzX2ZyYWdfbGlzdChza2IpIHx8IHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDY3PXN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00ODktXHRcdH1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0OTA6XHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDkxLVx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz03NTQ9c3RhdGljIHUzMiBpcHRmc19yZWFzc2VtX2NvbnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA2LVx0ICAgIChza2ItXHUwMDNlaGVhZF9mcmFnIHx8IHNrYi1cdTAwM2VsZW4gPT0gc2tiLVx1MDAzZWRhdGFfbGVuKSBcdTAwMjZcdTAwMjZcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MDc6XHQgICAgc2tiLVx1MDAzZXBwX3JlY3ljbGUgPT0gbmV3c2tiLVx1MDAzZXBwX3JlY3ljbGUpIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXHRcdGZyYWd3YWxrID0gXHUwMDI2X2ZyYWd3YWxrO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTY3PXN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3Ny1cdFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSk7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE3ODpcdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTc5LVx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjI5OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzAwOlx0XHRcdC8qIHNrYi1cdTAwM2VwcF9yZWN5Y2xlIGlzIHBhc3NlZCB0byBfX3NrYl9mbGFnX3VucmVmIGZvciBhbGxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzAxLVx0XHRcdCAqIGZyYWcgcGFnZXMgc28gd2UgY2FuIG9ubHkgc2hhcmUgcGFnZXMgd2l0aCBza2ImIzM5O3Mgd2hvXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDctXHRcdFx0ICAgICAoIXNrYjItXHUwMDNlaGVhZF9mcmFnIFx1MDAyNlx1MDAyNiBza2JfaGVhZGxlbihza2IpKSB8fFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMDg6XHRcdFx0ICAgICBza2ItXHUwMDNlcHBfcmVjeWNsZSAhPSBza2IyLVx1MDAzZXBwX3JlY3ljbGUgfHxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzA5LVx0XHRcdCAgICAgc2tiX3pjb3B5KHNrYjIpIHx8XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTS0IgRnJhZ21lbnQgUmVmZXJlbmNlIENvdW50aW5nIHdpdGggUGFnZSBQb29sIFJlY3ljbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBMaW5lcyA0OTAtNDkzIGFuZCAyMTc4LTIxODIgYXJlIGludGVyZXN0aW5nLiBJdCYjMzk7cyBhIGNvbmRpdGlvbmFsIGNoZWNrOiBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAgKG9yIGBmcm9tLSZndDtwcF9yZWN5Y2xlYCkgZGVjaWRlcyBob3cgd2UgcmVmZXJlbmNlIHRoZSBwYWdlLiBJZiB0aGUgcGFnZSBpcyAqbm90KiBmcm9tIHRoZSBwYWdlIHBvb2wsIHdlIHVzZSB0aGUgc3RhbmRhcmQgYF9fc2tiX2ZyYWdfcmVmYCBvciBgc2tiX2ZyYWdfcmVmYC4gQnV0ICppZiogYHBwX3JlY3ljbGVgIGlzIHNldCwgd2UgaGF2ZSB0byB1c2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgaW5zdGVhZC4KCkFoYSEgVGhpcyByZW1pbmRzIG1lIG9mIHRoZSBvcmlnaW5hbCBjb2RlLCB0aGUgKmJlZm9yZS1wYXRjaCogdmVyc2lvbiBpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAhIEJlZm9yZSB0aGUgcGF0Y2gsIGl0IHNlZW1zIHdlIGFsd2F5cyBjYWxsZWQgYF9fc2tiX2ZyYWdfcmVmYCBvciBgc2tiX2ZyYWdfcmVmYCBkaXJlY3RseSwgcmVnYXJkbGVzcy4KCkhvbGQgb24uLi4gSSYjMzk7bSBjb25uZWN0aW5nIHRoZSBkb3RzIG5vdy4gU3RhbmRhcmQgYHNrYl9mcmFnX3JlZmAgY2FsbHMgYHBhZ2VfcmVmX2luYygpYCAob3IgYGdldF9wYWdlKClgKS4gVGhhdCYjMzk7cyB0aGUgbm9ybWFsIHJlZmVyZW5jZSBjb3VudCBpbmNyZW1lbnQuIEJ1dCB3aGVuIHRoZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGZyb20gdGhlIHBhZ2UgcG9vbCwgYW5kIGBza2ItJmd0O3BwX3JlY3ljbGVgIGlzIFRSVUUsIHVzaW5nIHRoZSBzdGFuZGFyZCBgcGFnZV9yZWZfaW5jKClgIGNhdXNlcyBwcm9ibGVtcy4gSXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcGFnZSBwb29sIHJlZmVyZW5jZSBjb3VudGluZyBidWdzLCBsZWFrcywgd2FybmluZ3MsIGFuZCBldmVuIGNvcnJ1cHRpb24gZHVyaW5nIGZyZWVpbmchIFdlIG5lZWQgdGhlIHNwZWNpYWwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAsIG9yIHNpbWlsYXIsIG1lY2hhbmlzbSBpZiBwYWdlIHBvb2wgcmVjeWNsaW5nIChgcHBfcmVjeWNsZWApIGlzIGludm9sdmVkLiBJIGJldCBpZiB0aGUgcGFnZSBwb29sIGlzIGNvbmZpZ3VyZWQgYW5kIHJlY3ljbGluZyBpcyB0dXJuZWQgb24sIHRoZSBwcm9ibGVtcyBzaG93IHVwLgoKT2theSwgbGV0JiMzOTtzIGNoZWNrIHRoZSBLY29uZmlnIGFuZCBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgdGhpbmsgSSYjMzk7bGwgbG9vayBmb3IgYENPTkZJR19YRlJNX0lQVEZTYCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYXJlIHRydWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBYRlJNX0lQVEZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxuLS1cbm5ldC94ZnJtL0tjb25maWctMTQwLVxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcbm5ldC94ZnJtL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7SVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2NTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgdGhlc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgWEZSTSBLY29uZmlnKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBYRlJNIHN1YnN5c3RlbS4gU3BlY2lmaWNhbGx5LCBJIHNob3VsZCBwcm9iYWJseSB6ZXJvIGluIG9uIHRoZSBgS2NvbmZpZ2AgZmlsZSB3aXRoaW4gYG5ldC94ZnJtL2AuIE9rYXksIGxvb2tzIGxpa2UgaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBub3cgbGV0IG1lIGp1bXAgdG8gbGluZSAxNDAuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBtdXN0IGJlIHJlbGV2YW50IHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW50ZXJlc3RpbmcgY29uZmlndXJhdGlvbnMgYXJlIGRlZmluZWQgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgYmVpbmcgZW5hYmxlZCBvciBkaXNhYmxlZCBpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgaW5zaWdodHMgbGluZSAxNDAgY2FuIGdpdmUgbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTQwOlx0XG4gMTQxOlx0Y29uZmlnIFhGUk1fSVBURlNcbiAxNDI6XHRcdHRyaXN0YXRlIFwmIzM0O0lQc2VjIElQLVRGUy9BR0dGUkFHIChSRkMgOTM0NykgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XCYjMzQ7XG4gMTQzOlx0XHRkZXBlbmRzIG9uIFhGUk1cbiAxNDQ6XHRcdGhlbHBcbiAxNDU6XHRcdCAgSW5mb3JtYXRpb24gb24gdGhlIElQLVRGUy9BR0dGUkFHIGVuY2Fwc3VsYXRpb24gY2FuIGJlIGZvdW5kXG4gMTQ2Olx0XHQgIGluIFJGQyA5MzQ3LiBUaGlzIGZlYXR1cmUgc3VwcG9ydHMgZGVtYW5kIGRyaXZlbiAoaS5lLixcbiAxNDc6XHRcdCAgbm9uLWNvbnN0YW50IHNlbmQgcmF0ZSkgSVAtVEZTIHRvIHRha2UgYWR2YW50YWdlIG9mIHRoZVxuIDE0ODpcdFx0ICBBR0dGUkFHIEVTUCBwYXlsb2FkIGVuY2Fwc3VsYXRpb24uIFRoaXMgcGF5bG9hZCB0eXBlXG4gMTQ5Olx0XHQgIHN1cHBvcnRzIGFnZ3JlZ2F0aW9uIGFuZCBmcmFnbWVudGF0aW9uIG9mIHRoZSBpbm5lciBJUFxuIDE1MDpcdFx0ICBwYWNrZXQgc3RyZWFtIHdoaWNoIGluIHR1cm4geWllbGRzIGhpZ2hlciBzbWFsbC1wYWNrZXRcbiAxNTE6XHRcdCAgYmFuZHdpZHRoIGFzIHdlbGwgYXMgcmVkdWNpbmcgTVRVL1BNVFUgaXNzdWVzLiBDb25nZXN0aW9uXG4gMTUyOlx0XHQgIGNvbnRyb2wgaXMgdW5pbXBsZW1lbnRhdGVkIGFzIHRoZSBzZW5kIHJhdGUgaXMgZGVtYW5kIGRyaXZlblxuIDE1MzpcdFx0ICByYXRoZXIgdGhhbiBjb25zdGFudC5cbiAxNTQ6XHRcbiAxNTU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAxNTY6XHRcbiAxNTc6XHRjb25maWcgWEZSTV9FU1BJTlRDUFxuIDE1ODpcdFx0Ym9vbFxuIDE1OTpcdFxuIDE2MDpcdGVuZGlmICMgSU5FVFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIwMQoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI5NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIFRob3VnaHRzIG9uIENPTkZJR19YRlJNX0lQVEZTKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIGBDT05GSUdfWEZSTV9JUFRGU2AgcmVsaWVzIG9uIGBYRlJNYCAoYW5kIGltcGxpY2l0bHksIGBJTkVUYCksIHNvIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXMgYWNjZXNzaWJpbGl0eSBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLCBsaWtlIFFFTVUgb3Igc3l6a2FsbGVyLiBHb29kIG5ld3M6IGBYRlJNYCBpcyByZWFjaGFibGUuIElQc2VjIGlzIGFjY2Vzc2libGUgdmlhIG5ldGxpbmsgKGBORVRMSU5LX1hGUk1gKSwgd2hpY2ggbWVhbnMgc3RhbmRhcmQgSVBzZWMgc29ja2V0L3R1bm5lbCBvcGVyYXRpb25zIGFyZSB2YWxpZCB3YXlzIHRvIHRlc3QgaXQuIFdlIGNhbiBjb25maWd1cmUgU2VjdXJpdHkgQXNzb2NpYXRpb25zIChTQSkgYW5kIFNlY3VyaXR5IFBvbGljaWVzIChTUCkgdGhyb3VnaCBuZXRsaW5rLCBhbmQgdGhlbiBzZW5kIHBhY2tldHMgdGhyb3VnaCB0aGUgeGZybSBpbnRlcmZhY2UsIG9yIHJhdy9VRFAvdHVubmVsIHNvY2tldHMuIFN5emthbGxlciYjMzk7cyBnb3Qgc29saWQgc3VwcG9ydCBmb3IgYE5FVExJTktfWEZSTWAgd2l0aCBpdHMgYHhmcm1fbXNnXypgIHByaW1pdGl2ZXMgaW4gc3l6bGFuZyAtIHBlcmZlY3QuCgpOb3csIGEgbW9yZSBjb21wbGV4IGNvbmNlcm4gZW1lcmdlczogY2FuIHBhZ2VzIGZyb20gdGhlIHBhZ2VfcG9vbCBwb3RlbnRpYWxseSBlbmQgdXAgaW4gSVBURlM/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVBURlMgb3BlcmF0ZXMgdG8gc2VlIGlmIGBza2ItJmd0O3BwX3JlY3ljbGVgIGNhbiBiZWNvbWUgdHJ1ZSBpbiB0aGlzIGNvbnRleHQuCgpXZSYjMzk7dmUgZ290IHRvIGludmVzdGlnYXRlIHRoZSBwYWNrZXQgZmxvdy4gU3BlY2lmaWNhbGx5LCB3aGVuIGRvZXMgYSBwYWNrZXQgY29taW5nIGZyb20gYSBkcml2ZXIgdGhhdCB1c2VzIHBhZ2VfcG9vbOKAlGxpa2UgYSBkcml2ZXIgdXNpbmcgWERQIG9yIGEgdmV0aCB3aXRoIFhEUCwgb3IgdmlydGlvX25ldCB3aXRoIFhEUCBvciBwYWdlX3Bvb2wsIGV0Yy7igJRjYXVzZSB0aGUgYHNrYi0mZ3Q7cHBfcmVjeWNsZWAgZmxhZyB0byBnZXQgc2V0PwoKSG9sZCBvbi4gV2UgYWxzbyBuZWVkIHRvIGNvbmZpcm0gaWYgaXB0ZnMgKnJlY2VpdmVzKiBza2JzIHdpdGggYHNrYi0mZ3Q7cHBfcmVjeWNsZWAgc2V0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIGludGVyc2VjdGlvbi4KClNvLCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gdGhlIGNvZGUuIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGFyZSBjYWxsZWQuIEEgcXVpY2sgYGdyZXBgIHNob3VsZCBwcm92aWRlIHRoZSBhbnN3ZXJzLiBUaGF0JiMzOTtzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzfGlwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQveGZybSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmM9NDEwPXN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyMi1cdCAqIGxvb3AgaXMgb3RoZXJ3aXNlIHVuYm91bmRlZCBhbmQgd291bGQgaW5kZXggcGFzdCB3YWxrLVx1MDAzZWZyYWdzW10uXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDIzOlx0ICogVGhpcyBtaXJyb3JzIHRoZSBndWFyZCBhbHJlYWR5IHByZXNlbnQgaW4gaXB0ZnNfc2tiX2FkZF9mcmFncygpLlxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cdCAqL1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTMtLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDU0OiAqIGlwdGZzX3NrYl9hZGRfZnJhZ3MoKSAtIGFkZCBhIHJhbmdlIG9mIGZyYWdtZW50IHJlZmVyZW5jZXMgaW50byBhbiBza2Jcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTUtICogQHNrYjogc2tiIHRvIGFkZCByZWZlcmVuY2VzIGludG9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY2LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2NzpzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjgtXHRcdFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDU9aXB0ZnNfcHNrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRwbCwgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU2OC1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Njk6XHRpcHRmc19za2JfYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICYjNDM7IGNvcHlfbGVuLCBsZW4gLSBjb3B5X2xlbik7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTcwLVx0cmV0dXJuIHNrYjtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxNC1cdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNTpcdFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTYtXHR9IGVsc2Uge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTQ2PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqKmlwdGZzX3JlaG9tZV9mcmFnbGlzdChzdHJ1Y3Qgc2tfYnVmZiAqKm5leHRwLCBzdHJ1Y3Qgc2tfYnVmZiAqY2hpbGQpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE2NzpzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE2OC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyMC1cdFx0XHRpZiAoc2hhcmVfb2spIHtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzIxOlx0XHRcdFx0aXB0ZnNfY29uc3VtZV9mcmFncyhza2IsIHNrYjIpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMjItXHRcdFx0fSBlbHNlIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NDcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBpcHRmcyBNb2R1bGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIHRoZSBkYXRhIGZsb3cgd2l0aGluIHRoZSBgaXB0ZnNgIG1vZHVsZSwgc3BlY2lmaWNhbGx5IHRoZSBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgbmV0d29yayBzdGFjay4gSSBzZWUgdGhhdCBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaXMgYSBjb3JlIGZ1bmN0aW9uLCBhbmQgaXRzIGNhbGwgZ3JhcGggZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJdCBhcHBlYXJzIHdpdGhpbiB0d28ga2V5IGZ1bmN0aW9uczogYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgd2hpY2ggaXMgaXRzZWxmIHVzZWQgd2l0aGluIGBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZGAsIHNvIGlucHV0IHBhY2tldCBoYW5kbGluZyBpcyBhIGtleSBhcmVhIG9mIGNvbmNlcm4sIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YCwgd2hpY2ggaXMgY2FsbGVkIGZyb20gYGlwdGZzX2lucHV0X29yZGVyZWRgLCBzdWdnZXN0aW5nIHJlYXNzZW1ibHkgaXMgYWxzbyBhbiBpbXBvcnRhbnQgYXNwZWN0LiBUaGF0JiMzOTtzIGEgZ29vZCBpbml0aWFsIGNvbm5lY3Rpb24uIEkgc2hvdWxkIG1ha2UgYSBub3RlIHRvIGV4YW1pbmUgdGhlIHJlYXNzZW1ibHkgcHJvY2VzcyBjYXJlZnVsbHkuCgpGdXJ0aGVybW9yZSwgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCB3aXRoaW4gYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBpbmRpY2F0aW5nIGl0cyBzaWduaWZpY2FuY2UgaW4gb3V0cHV0IHByb2Nlc3NpbmcgYW5kIHF1ZXVpbmcuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBmcmFnbWVudCBhZGRpdGlvbiBhbmQgY29uc3VtcHRpb24gZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUmIzM5O3MgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzLCBzbyBJJiMzOTtsbCBuZWVkIHRvIHdhdGNoIHRob3NlIGludGVyYWN0aW9uIHBvaW50cyBjYXJlZnVsbHkgYXMgSSBwcm9jZWVkLgoKQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0JiMzOTtzIHN0ZXAgYmFjayBhbmQgbG9vayBhdCB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgYGlwdGZzYCBhY3R1YWxseSAqZG9lcyouIEFoLCBgeGZybV9pcHRmc2AgdGVsbHMgbWUgdGhhdCB0aGlzIGlzIGFib3V0IGltcGxlbWVudGluZyBJUC1URlMgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnQgZm9yIElQc2VjIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBOb3cgdGhlIG1vZHVsZSYjMzk7cyByb2xlIGJlY29tZXMgY2xlYXI6IGl0JiMzOTtzIGFib3V0IGRlYWxpbmcgd2l0aCB0aGUgcGFja2V0IGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgbmVlZGVkIHdoZW4gZW5jYXBzdWxhdGluZyBwYWNrZXRzIHVzaW5nIElQLVRGUy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgaXQgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gWEZSTS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7eGZybV9pcHRmcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgJiM0Mzs9IHhmcm1faW50ZXJmYWNlLm9cbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSAmIzQzOz0geGZybV9pcHRmcy5vXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgJiM0Mzs9IGVzcGludGNwLm9cbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5LVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDpzdHJ1Y3QgeGZybV9pcHRmc19kYXRhO1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjI9VFJBQ0VfRVZFTlQoaXB0ZnNfZWdyZXNzX3JlY3YsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIzOlx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yNC1cdCAgICBUUF9BUkdTKHNrYiwgeHRmcywgYmxrb2ZmKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTY4PURFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo2OTpcdFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTcwLVx0XHRcdCAgICAgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9OTY9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfZW5xdWV1ZSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTgtXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xMDA9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfbm9fcXVldWVfc3BhY2UsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDItXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xMDQ9REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfdG9vX2JpZyxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA1Olx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNi1cdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTE5Mj1ERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX3RpbWVyX2V2ZW50LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XHRcdCAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXHRcdCAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIwMz1ERUZJTkVfRVZFTlQoaXB0ZnNfdGltZXJfZXZlbnQsIGlwdGZzX3RpbWVyX3N0YXJ0LFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDQ6XHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwNS1cdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjA3PURFRklORV9FVkVOVChpcHRmc190aW1lcl9ldmVudCwgaXB0ZnNfdGltZXJfZXhwaXJlLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDg6XHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwOS1cdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjovKiB4ZnJtX2lwdGZzOiBJUFRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zLSAqXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwNC0vKipcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDU6ICogc3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIC0gY29uZmlndXJhdGlvbiBmb3IgdGhlIElQVEZTIHR1bm5lbC5cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDYtICogQHBrdF9zaXplOiBzaXplIG9mIHRoZSBvdXRlciBJUCBwYWNrZXQuIDAgdG8gdXNlIGludGVyZmFjZSBhbmQgTVRVIGRpc2NvdmVyeSxcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNTpzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTExNi1cdHUzMiBwa3Rfc2l6ZTtcdCAgICAvKiBvdXRlcl9wYWNrZXRfc2l6ZSBvciAwICovXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMj1zdHJ1Y3Qgc2tiX3dzZXEge1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjctLyoqXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgLSBtb2RlIHNwZWNpZmljIHhmcm0gc3RhdGUuXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI5LSAqIEBjZmc6IElQVEZTIHR1bm5lbCBjb25maWcuXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0OS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTUxOlx0c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIGNmZztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU5MD1pcHRmc19wc2tiX2V4dHJhY3Rfc2VxKHUzMiBza2JsZW4sIHN0cnVjdCBza2Jfc2VxX3N0YXRlICpzdCwgdTMyIG9mZiwgaW50IGxlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjEzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjYxNDpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9zYXZlX3J1bnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHNlcSxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXHRcdFx0XHQgIHU4ICpidWYsIGludCBsZW4pXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY3MT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcwOS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTA6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxMS17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjU6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9hYm9ydChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczMy0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzUzLSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1NS1cdFx0XHQgICAgICBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1NT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk2My1cdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTY0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXHRzdHJ1Y3QgaXBoZHIgKmlwaDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIzMD1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM0LVx0c3RydWN0IGxpc3RfaGVhZCBzdWJsaXN0OyAvKiByZW5hbWUgdGhpcyBpdCYjMzk7cyBqdXN0IGEgbGlzdCAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzU6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzYtXHRzdHJ1Y3QgaXBfaXB0ZnNfaGRyICppcHRoO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTQte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMjc6c3RhdGljIHZvaWQgX19yZW9yZGVyX3Bhc3Qoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXHRcdFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzgxLVx0XHRcdCAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQwOTpzdGF0aWMgdm9pZCBpcHRmc19zZXRfd2luZG93X2Ryb3BfdGltZXMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgaW50IGluZGV4KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDM1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKmluc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0ODY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9zaGlmdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg3LVx0XHRcdFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMS0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjMyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjMzLVx0XHRcdFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNjgwPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4My1cdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjg0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjg1LVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE3Mjk9c3RhdGljIGludCBpcHRmc19pbnB1dChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cdHN0cnVjdCBsaXN0X2hlYWQgZnJlZWxpc3QsIGxpc3Q7XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTczMjpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMzLVx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODItICovXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc4MzpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4NC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgwNzpzdGF0aWMgaW50IGlwdGZzX2dldF9jdXJfcG10dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA4LVx0XHRcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTE4NDU9c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0OC1cdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LVx1MDAzZXhmcm07XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0OTpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODUwLVx0c3RydWN0IHNrX2J1ZmYgKnNlZ3MsICpuc2tiO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTc1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjAwOC0gKi9cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDA5OnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIwMTAte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTA1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxMDY6c3RhdGljIGludCBpcHRmc19maXJzdF9za2Ioc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxMDcte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMy17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwNDpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjA1LVx0c3RydWN0IHNrX2J1ZmYgKnNrYiwgKnNrYjIsICoqbmV4dHA7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMzOS1cdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzQwOlx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQxLVx0c3RydWN0IHhmcm1fc3RhdGUgKng7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MjE9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1MjIte1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1MjM6XHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cdTAwM2Vtb2RlX2RhdGE7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjUyNC1cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU0MD1zdGF0aWMgaW50IGlwdGZzX3VzZXJfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB4ZnJtX3N0YXRlICp4LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTQzLXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTQ0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1NDU6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1NDYtXHR1NjQgcTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5Nz1zdGF0aWMgdW5zaWduZWQgaW50IGlwdGZzX3NhX2xlbihjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTk4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTk5Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MDA6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXHUwMDI2eHRmcy1cdTAwM2VjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwMS1cdHVuc2lnbmVkIGludCBsID0gMDtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjYxNz1zdGF0aWMgaW50IGlwdGZzX2NvcHlfdG9fdXNlcihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjE4LXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjE5Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXHUwMDNlbW9kZV9kYXRhO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MjA6XHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXHUwMDI2eHRmcy1cdTAwM2VjZmc7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYyMS1cdGludCByZXQgPSAwO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjU2PXN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjU3Olx0XHRcdCAgICAgICBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI2NTgte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjgxPXN0YXRpYyBpbnQgaXB0ZnNfY2xvbmVfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX3N0YXRlICpvcmlnKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjgzLVx0c3RydWN0IHNrYl93c2VxICp3X3NhdmVkID0gTlVMTDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNjg0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjg1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzIyPXN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzIzLXtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzI0Olx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzI1LVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzQwPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc0MS17XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjc0MjpcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzQzLVx0c3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0O1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzc2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgeGZybV9tb2RlX2NicyBpcHRmc19tb2RlX2NicyA9IHtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjc4OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzkwOnN0YXRpYyBpbnQgX19pbml0IHhmcm1faXB0ZnNfaW5pdCh2b2lkKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTEte1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNzkzLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTQ6XHRwcl9pbmZvKFwmIzM0O3hmcm1faXB0ZnM6IElQc2VjIElQLVRGUyB0dW5uZWwgbW9kZSBtb2R1bGVcXG5cJiMzNDspO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTUtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDItXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwMzpzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjgwNC17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDctXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwODptb2R1bGVfaW5pdCh4ZnJtX2lwdGZzX2luaXQpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jOjI4MDk6bW9kdWxlX2V4aXQoeGZybV9pcHRmc19maW5pKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yODEwLU1PRFVMRV9MSUNFTlNFKFwmIzM0O0dQTFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDc5CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqRGlzc2VjdGluZyB0aGUgWEZSTSBJUFRhYmxlcyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHhmcm1faXB0ZnNfaW5pdGAgZnVuY3Rpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGlwdGZzX21vZGVfY2JzYCBzdHJ1Y3R1cmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCwgY3J1Y2lhbGx5LCBob3cgaXQgZ2V0cyBpbnRlZ3JhdGVkIGludG8gdGhlIHN5c3RlbS4gS25vd2luZyB0aGUgY2FsbGJhY2tzIGFuZCB0aGVpciByZWdpc3RyYXRpb24gcHJvY2VzcyBpcyBrZXkgdG8gZ3Jhc3BpbmcgaG93IHRoaXMgbW9kdWxlIGludGVyYWN0cyB3aXRoIHRoZSBJUHRhYmxlcyBmcmFtZXdvcmssIGVzcGVjaWFsbHkgaG93IGl0IGhhbmRsZXMgdGhlIGZpbHRlcmluZyBvciB0cmFuc2Zvcm1hdGlvbiBvZiBJUCBwYWNrZXRzLiBJJiMzOTtsbCBuZWVkIHRvIHRyYWNlIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB0byBjb25maXJtIHRoYXQgdGhpbmdzIGFyZSBiZWluZyBzZXR1cCBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQveGZybS94ZnJtX2lwdGZzLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNzcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI3NzA6XHRcdGtmcmVlX3NlbnNpdGl2ZSh4dGZzLVx1MDAzZXdfc2F2ZWQpO1xuMjc3MTpcdFx0a2ZyZWVfc2Vuc2l0aXZlKHh0ZnMpO1xuMjc3MjpcdFxuMjc3MzpcdFx0bW9kdWxlX3B1dCh4LVx1MDAzZW1vZGVfY2JzLVx1MDAzZW93bmVyKTtcbjI3NzQ6XHR9XG4yNzc1Olx0XG4yNzc2Olx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xuMjc3NzpcdFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXG4yNzc4Olx0XHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXG4yNzc5Olx0XHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcbjI3ODA6XHRcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcbjI3ODE6XHRcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXG4yNzgyOlx0XHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxuMjc4MzpcdFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcbjI3ODQ6XHRcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcbjI3ODU6XHRcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxuMjc4NjpcdFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxuMjc4NzpcdFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXG4yNzg4Olx0fTtcbjI3ODk6XHRcbjI3OTA6XHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcbjI3OTE6XHR7XG4yNzkyOlx0XHRpbnQgZXJyO1xuMjc5MzpcdFxuMjc5NDpcdFx0cHJfaW5mbyhcJiMzNDt4ZnJtX2lwdGZzOiBJUHNlYyBJUC1URlMgdHVubmVsIG1vZGUgbW9kdWxlXFxuXCYjMzQ7KTtcbjI3OTU6XHRcbjI3OTY6XHRcdGVyciA9IHhmcm1fcmVnaXN0ZXJfbW9kZV9jYnMoWEZSTV9NT0RFX0lQVEZTLCBcdTAwMjZpcHRmc19tb2RlX2Nicyk7XG4yNzk3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuMjc5ODpcdFx0XHRwcl9pbmZvKFwmIzM0OyVzOiBjYW4mIzM5O3QgcmVnaXN0ZXIgSVAtVEZTXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4yNzk5Olx0XG4yODAwOlx0XHRyZXR1cm4gZXJyO1xuMjgwMTpcdH1cbjI4MDI6XHRcbjI4MDM6XHRzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXG4yODA0Olx0e1xuMjgwNTpcdFx0eGZybV91bnJlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUyk7XG4yODA2Olx0fVxuMjgwNzpcdFxuMjgwODpcdG1vZHVsZV9pbml0KHhmcm1faXB0ZnNfaW5pdCk7XG4yODA5Olx0bW9kdWxlX2V4aXQoeGZybV9pcHRmc19maW5pKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk5MjMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgWEZSTSBUaG91Z2h0cyBvbiBpcHRmcyoqCgpPa2F5LCBzbyBgWEZSTV9NT0RFX0lQVEZTYCBpcyByZWdpc3RlcmVkLCB3aGljaCBtZWFucyBpdCBoYXMgaXRzIG93biBjYWxsYmFjayBmdW5jdGlvbnMsIHNwZWNpZmljYWxseSB0aHJvdWdoIGB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzYC4gVGhpcyBpcyBzdGFuZGFyZCBYRlJNIG9wZXJhdGluZyBwcm9jZWR1cmUuIEFueW9uZSB3aG8ga25vd3MgdGhlaXIgd2F5IGFyb3VuZCBjYW4gY3JlYXRlIGEgU2VjdXJpdHkgQXNzb2NpYXRpb24gKFNBKSB0aGF0IHVzZXMgYFhGUk1fTU9ERV9JUFRGU2AuIEkgbmVlZCB0byBjb25maXJtIHRoZSBhY3R1YWwgdmFsdWUgb2YgYFhGUk1fTU9ERV9JUFRGU2AsIHNpbmNlIGl0JiMzOTtzIGRlZmluZWQgc29tZXdoZXJlIGxpa2UgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgLiBMZXQgbWUgcXVpY2tseSBsb29rIHRoYXQgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hGUk1fTU9ERV9JUFRGUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaD0xNDk9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0xNjAtI2RlZmluZSBYRlJNX01PREVfQkVFVCA0XG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjE2MTojZGVmaW5lIFhGUk1fTU9ERV9JUFRGUyA1XG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oLTE2Mi0jZGVmaW5lIFhGUk1fTU9ERV9NQVggNlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDMyMAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gWEZSTV9NT0RFX0lQVEZTIGFuZCBTeXprYWxsZXIqKgoKT2theSwgc28gYFhGUk1fTU9ERV9JUFRGU2AuLi4gdGhhdCYjMzk7cyBhIHN0YW5kYXJkIG5ldGxpbmsgWEZSTSBtb2RlLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBYRlJNQV9JUFRGU2Agb3Igc3RhdGUgY3JlYXRpb24uIFJpZ2h0LCByaWdodC4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhpcz8gRG9lcyBpdCBrbm93IGFib3V0IGBYRlJNX01PREVfSVBURlNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgSVBURlNgIGF0dHJpYnV0ZXM/IEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBldmVuIGRlZmluZWQuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIG9yIHdoZXJldmVyIHRoZSBgSVBURlNgIGRlZmluaXRpb25zIGFyZSBsb2NhdGVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0JiMzOTtzIGFsd2F5cyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgdG8gY29uZmlybSB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7WEZSTUFfSVBURlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg9MjkzPWVudW0geGZybV9hdHRyX3R5cGVfdCB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMjktXHRYRlJNQV9TQV9QQ1BVLFx0XHQvKiBfX3UzMiAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzA6XHRYRlJNQV9JUFRGU19EUk9QX1RJTUUsXHQvKiBfX3UzMiBpbjogdXNlYyB0byB3YWl0IGZvciBuZXh0IHNlcSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzE6XHRYRlJNQV9JUFRGU19SRU9SREVSX1dJTkRPVywgLyogX191MTYgaW46IHJlb3JkZXIgd2luZG93IHNpemUgKHBrdHMpICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMjpcdFhGUk1BX0lQVEZTX0RPTlRfRlJBRyxcdC8qIG91dDogZG9uJiMzOTt0IHVzZSBmcmFnbWVudGF0aW9uICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMzpcdFhGUk1BX0lQVEZTX0lOSVRfREVMQVksXHQvKiBfX3UzMiBvdXQ6IGluaXRpYWwgcGFja2V0IHdhaXQgZGVsYXkgKHVzZWMpICovXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzNDpcdFhGUk1BX0lQVEZTX01BWF9RU0laRSxcdC8qIF9fdTMyIG91dDogbWF4IGluZ3Jlc3MgcXVldWUgc2l6ZSAob2N0ZXRzKSAqL1xuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaDozMzU6XHRYRlJNQV9JUFRGU19QS1RfU0laRSxcdC8qIF9fdTMyIG91dDogc2l6ZSBvZiBvdXRlciBwYWNrZXQsIDAgZm9yIFBNVFUgKi9cbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmgtMzM2LVx0X19YRlJNQV9NQVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA5ODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3MjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBYRlJNX0lQVEZTIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgWEZSTV9JUFRGU2AuIFRoaXMgaXMgZGVmaW5pdGVseSBzb21ldGhpbmcgSSBjYW4gdGVzdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGxpa2UgUUVNVSBvciBzeXprYWxsZXIsIG5vIHNwZWNpYWwgaGFyZHdhcmUgbmVlZGVkLCBnb29kLiBJdCYjMzk7cyBpbi1rZXJuZWwgbmV0d29ya2luZywgZGVhbGluZyB3aXRoIElQLVRGUyBlbmNhcHN1bGF0aW9uIGZvciBJUHNlYywgd2hpY2ggcnVucyBvdmVyIG5ldHdvcmsgcGFja2V0cyBhbmQgWEZSTSBzdGF0ZXMuIEkmIzM5O20gc2VlaW5nIGl0IGNoYW5nZXMgaG93IHBhZ2UgZnJhZ21lbnRzIGFyZSBoYW5kbGVkIGluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSW4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCB0aGUgcGF0Y2ggc2VlbXMgdG8gaGF2ZSBhZGRlZCBhIGNvbmRpdGlvbmFsIHJlZiBmb3IgdGhlIHBhZ2U6IGBpZiAod2Fsay0mZ3Q7cHBfcmVjeWNsZSkgcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7IGVsc2UgX19za2JfZnJhZ19yZWYodG9mcmFnKTtgLiAgU28sIGl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdXNpbmcgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2hlbiBhIHJlY3ljbGUgZmxhZyAoYHdhbGstJmd0O3BwX3JlY3ljbGVgKSBpcyBzZXQsIG90aGVyd2lzZSwgaXQmIzM5O3MganVzdCBkb2luZyB0aGUgbm9ybWFsIGZyYWdtZW50IHJlZmVyZW5jZS4KCk5vdywgaW4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLCB0aGluZ3MgYXJlIGEgYml0IGRpZmZlcmVudC4gUHJldmlvdXNseSBpdCB3YXMgYHNrYl9mcmFnX3JlZih0bywgdG9pLSZndDtucl9mcmFncyYjNDM7JiM0MzspO2AuIFRoZSBwYXRjaCBoYXMgY2hhbmdlZCB0aGUgaW5jcmVtZW50IG9mIGB0b2ktJmd0O25yX2ZyYWdzYDogaXQmIzM5O3Mgbm93IGluY3JlbWVudGVkICphZnRlciogdGhlIHJlZmVyZW5jZS4gIFdlIG5vdyBzZWU6CmBgYGMKCQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKCQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKSk7CgkJZWxzZQoJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwoJCXRvaS0mZ3Q7bnJfZnJhZ3MmIzQzOyYjNDM7OwpgYGAKClRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgaW5jcmVtZW50IGlzIHNlcGFyYXRlZCwgYW5kLCBzaW1pbGFybHkgdG8gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBpdCB1c2VzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGJhc2VkIG9uIGBmcm9tLSZndDtwcF9yZWN5Y2xlYC4KCkhvbGQgb24uLi4gU28sIGlmIGBmcm9tLSZndDtwcF9yZWN5Y2xlYCAob3IgYHdhbGstJmd0O3BwX3JlY3ljbGVgKSBpcyBzZXQsIGl0IHVzZXMgYHBhZ2VfcG9vbF9yZWZfcGFnZWAuICBUaGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVuIHRoZSBwYWdlIHBvb2wgaXMgZW5hYmxlZCBhbmQgKmV4YWN0bHkqIHdoYXQgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgZG9lcyBpbiB0aGlzIGNvbnRleHQuIExldCBtZSBqdXN0IHNlYXJjaCBmb3IgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgYW5kIHNlZSB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhZ2VfcG9vbF9yZWZfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW1fcmVmIG5ldG1lbSlcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTMxOS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTMyMS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyMzk3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgcGFnZV9wb29sX3JlZl9wYWdlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBgcGFnZV9wb29sX3JlZl9wYWdlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgYXQgdGhlIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYCBsZXZlbC4gSSBrbm93IHRoZSBnZW5lcmFsIGlkZWEsIGJ1dCBJIHdhbnQgdG8gZ2V0IGEgc29saWQgZ3Jhc3Agb2YgKmV4YWN0bHkqIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbWVtb3J5IG1hbmFnZW1lbnQsIG9mIGNvdXJzZS4gSXMgdGhpcyBhIHNpbXBsZSByZWZlcmVuY2UgY291bnRlciBpbmNyZW1lbnQsIG9yIGFyZSB0aGVyZSBtb3JlIHN1YnRsZSBpbXBsaWNhdGlvbnMgaW4gdGhlIHBhZ2UgcG9vbCBjb250ZXh0PyBBcmUgd2UgZGVhbGluZyB3aXRoIGFueSBhdG9taWMgb3BlcmF0aW9ucz8gQW55IHBvdGVudGlhbCBmb3IgY29udGVudGlvbj8gQXJlIHRoZXJlIGFueSBzaWRlIGVmZmVjdHMsIGxpa2UgaW52YWxpZGF0aW5nIHRoZSBwYWdlIHNvbWVob3cgaWYgaXQgZmFpbHM/IEkmIzM5O20gYW50aWNpcGF0aW5nIHNvbWUgaW1wb3J0YW50IGRldGFpbHMgdG8gYmUgaW4gdGhlIGltcGxlbWVudGF0aW9uLCBlc3BlY2lhbGx5IHJlZ2FyZGluZyB0aGUgY29udGV4dCB0aGlzIGhlbHBlciByZXNpZGVzIGluLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHRoZSBleGFjdCBtZWNoYW5pY3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgZm9yIHRoZSBtYWludGFpbmVycyBvZiB0aGlzIGNvZGUgYmFzZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzMTU6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9wb29sX3JlZl9uZXRtZW0obmV0bWVtX3JlZiBuZXRtZW0pXG4gMzE2Olx0e1xuIDMxNzpcdFx0YXRvbWljX2xvbmdfaW5jKG5ldG1lbV9nZXRfcHBfcmVmX2NvdW50X3JlZihuZXRtZW0pKTtcbiAzMTg6XHR9XG4gMzE5Olx0XG4gMzIwOlx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcbiAzMjE6XHR7XG4gMzIyOlx0XHRwYWdlX3Bvb2xfcmVmX25ldG1lbShwYWdlX3RvX25ldG1lbShwYWdlKSk7XG4gMzIzOlx0fVxuIDMyNDpcdFxuIDMyNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBwYWdlX3Bvb2xfdW5yZWZfYW5kX3Rlc3QobmV0bWVtX3JlZiBuZXRtZW0pXG4gMzI2Olx0e1xuIDMyNzpcdFx0LyogSWYgcGFnZV9wb29sX3VucmVmX3BhZ2UoKSByZXR1cm5zIDAsIHdlIHdlcmUgdGhlIGxhc3QgdXNlciAqL1xuIDMyODpcdFx0cmV0dXJuIHBhZ2VfcG9vbF91bnJlZl9uZXRtZW0obmV0bWVtLCAxKSA9PSAwO1xuIDMyOTpcdH1cbiAzMzA6XHRcbiAzMzE6XHRzdGF0aWMgaW5saW5lIHZvaWQgcGFnZV9wb29sX3B1dF9uZXRtZW0oc3RydWN0IHBhZ2VfcG9vbCAqcG9vbCxcbiAzMzI6XHRcdFx0XHRcdFx0bmV0bWVtX3JlZiBuZXRtZW0sXG4gMzMzOlx0XHRcdFx0XHRcdHVuc2lnbmVkIGludCBkbWFfc3luY19zaXplLFxuIDMzNDpcdFx0XHRcdFx0XHRib29sIGFsbG93X2RpcmVjdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzMwMzMKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiA2MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBEZWNpc2lvbjogSVAtVEZTIFJlZmNvdW50IEJ1Z2ZpeCoqCgpPa2F5LCBzbyB0aGlzIGlzIGFib3V0IGEgY3JpdGljYWwgcmVmY291bnRpbmcgYnVnIGZpeCBpbiB0aGUgSVAtVEZTIChJUHNlYyBUcmFuc3BvcnQgRmxvdyBTZWN1cml0eSkgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhZ2UgcG9vbC4gSXQgbG9va3MgbGlrZSBgcGFnZV9wb29sX3JlZl9uZXRtZW1gIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAoYHBwX3JlZl9jb3VudGApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZGVjcmVtZW50IHdhcyBoYXBwZW5pbmcgdGhyb3VnaCBgcGFnZV9wb29sX3VucmVmX25ldG1lbWAgb3IgYHBhZ2VfcG9vbF9yZXR1cm5fc2tiX3BhZ2VgICpvbmx5KiB3aGVuIGBza2ItJmd0O3BwX3JlY3ljbGVgIHdhcyB0cnVlLiAgSWYgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2FzbiYjMzk7dCBjYWxsZWQsIHRoZW4gdGhhdCByZWZjb3VudCB3YXNuJiMzOTt0IGluY3JlbWVudGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZXMuIEEgcHJldHR5IGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYnVnLiAgRXNzZW50aWFsbHksIGFuIHVuZGVyLWluY3JlbWVudCBzY2VuYXJpby4KCk5vdywgdGhlIHF1ZXN0aW9uIGlzOiBjYW4gd2UgZnV6eiB0aGlzPyBMZXQmIzM5O3MgYnJlYWsgaXQgZG93bi4KCkZpcnN0LCBpcyB0aGUgcGF0Y2hlZCBjb2RlIHJlYWNoYWJsZT8gWWVzISBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHNlYy9YRlJNIGZyYW1ld29yayBhbmQgdGhlIElQVEZTIHN1YmNvbXBvbmVudC4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBgc2tfYnVmZnNgIGFuZCBwYWdlIHBvb2wgbWVtb3J5IGFyZSBtYW5hZ2VkIGluIElQLVRGUy4gV2Uga25vdyBpdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtZWFuaW5nIGl0ICpjYW4qIGJlIGhpdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0IGFsb25lIHN1Z2dlc3RzIGZ1enppbmcgaXMgd29ydGh3aGlsZS4KCkFuZCBmcm9tIHdoYXQgSSYjMzk7dmUgcmVhZCwgcmVhY2hhYmxlIGNvZGUgaXMgdGhlIHByaW1hcnkgZ2F0ZS4gVGhlIGNyaXRlcmlhIHNheSAmIzM0O1dvcnRoRnV6emluZz10cnVlJiMzNDsgd2hlbiBwYXRjaGVzIHRvdWNoIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGVzcGVjaWFsbHkgd2l0aGluIG1lbW9yeSBtYW5hZ2VtZW50IG9yIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW1zLiBUaGlzIGZpdHMgdGhlIGJpbGwgcGVyZmVjdGx5LgoKTm93LCB3aGF0IGFib3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgcmVxdWlyZWQgZm9yIHRoaXMgdG8gY29tcGlsZSBhbmQgYmUgZW5hYmxlZC4gTG9va2luZyBhdCB0aGUgYG5ldC94ZnJtL01ha2VmaWxlYCwgd2Ugc2VlIGBvYmotJChDT05GSUdfWEZSTV9JUFRGUykgJiM0Mzs9IHhmcm1faXB0ZnMub2AsIGFuZCBpbiBgbmV0L3hmcm0vS2NvbmZpZ2Agd2UgaGF2ZSBgY29uZmlnIFhGUk1fSVBURlNgIHRoYXQgZGVwZW5kcyBvbiBgWEZSTWAuIFNvLCB3ZSYjMzk7bGwgbmVlZCB0byBsb29rIGludG8gWEZSTSBjb25maWd1cmF0aW9uLiBXZSYjMzk7bGwgY2hlY2sgaXRzIGRlcGVuZGVuY2llcyBpbiBgbmV0L3hmcm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgZWxzZSB3ZSBtaWdodCBuZWVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgWEZSTVxcYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS9LY29uZmlnLTQtI1xubmV0L3hmcm0vS2NvbmZpZzo1OmNvbmZpZyBYRlJNXG5uZXQveGZybS9LY29uZmlnLTYtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0MTg1CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBgbmV0L3hmcm0vS2NvbmZpZ2AqKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBuZXQveGZybS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgZmlyc3QgbGluZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGxpa2VseSB0byBiZSBmb2N1c2VkIG9uIHRoZSBicm9hZGVyIGNvbmZpZ3VyYXRpb24gcG9zc2liaWxpdGllcyBmb3IgdGhlIFhGUk0gc3Vic3lzdGVtIHdpdGhpbiB0aGUgTGludXgga2VybmVsLiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgdGhlIHRvcC1sZXZlbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBlaXRoZXIgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGVudGlyZSBYRlJNIGZyYW1ld29yayBhbmQgaXRzIGNvcmUgY29tcG9uZW50cy4gRGVwZW5kaW5nIG9uIHdoYXQgSSBzZWUgYXQgdGhlIHRvcCwgdGhpcyBjb3VsZCBiZSBkZWZpbmluZyBzb21lIG1vZHVsZXMgdGhhdCBJIG1heSB3YW50IHRvIGZvY3VzIG9uIGZ1cnRoZXIsIGRlcGVuZGluZyBvbiBteSBuZWVkLiBJIGFudGljaXBhdGUgc2VlaW5nIGRlcGVuZGVuY2llcywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBtYXliZSBldmVuIHNvbWUgYmFzaWMgaGVscCB0ZXh0IHRoYXQgZ2l2ZXMgbWUgYSBoaWdoLWxldmVsIHVuZGVyc3RhbmRpbmcgb2Ygd2hhdCBYRlJNIGlzIGFsbCBhYm91dCwgb3IgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBuZXR3b3JrIHN0YWNrLCBzbyBJIGNhbiBiZXR0ZXIgdW5kZXJzdGFuZCBpdHMgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cbiAgIDQ6XHQjXG4gICA1Olx0Y29uZmlnIFhGUk1cbiAgIDY6XHRcdGJvb2xcbiAgIDc6XHRcdGRlcGVuZHMgb24gSU5FVFxuICAgODpcdFx0c2VsZWN0IEdST19DRUxMU1xuICAgOTpcdFx0c2VsZWN0IFNLQl9FWFRFTlNJT05TXG4gIDEwOlx0XG4gIDExOlx0Y29uZmlnIFhGUk1fT0ZGTE9BRFxuICAxMjpcdFx0Ym9vbFxuICAxMzpcdFxuICAxNDpcdGNvbmZpZyBYRlJNX0FMR09cbiAgMTU6XHRcdHRyaXN0YXRlXG4gIDE2Olx0XHRzZWxlY3QgWEZSTVxuICAxNzpcdFx0c2VsZWN0IENSWVBUT1xuICAxODpcdFx0c2VsZWN0IENSWVBUT19BRUFEXG4gIDE5Olx0XHRzZWxlY3QgQ1JZUFRPX0hBU0hcbiAgMjA6XHRcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcbiAgMjE6XHRcbiAgMjI6XHRpZiBJTkVUXG4gIDIzOlx0Y29uZmlnIFhGUk1fVVNFUlxuICAyNDpcdFx0dHJpc3RhdGUgXCYjMzQ7VHJhbnNmb3JtYXRpb24gdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZVwmIzM0O1xuICAyNTpcdFx0c2VsZWN0IFhGUk1fQUxHT1xuICAyNjpcdFx0aGVscFxuICAyNzpcdFx0ICBTdXBwb3J0IGZvciBUcmFuc2Zvcm1hdGlvbihYRlJNKSB1c2VyIGNvbmZpZ3VyYXRpb24gaW50ZXJmYWNlXG4gIDI4Olx0XHQgIGxpa2UgSVBzZWMgdXNlZCBieSBuYXRpdmUgTGludXggdG9vbHMuXG4gIDI5Olx0XG4gIDMwOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gIDMxOlx0XG4gIDMyOlx0Y29uZmlnIFhGUk1fVVNFUl9DT01QQVRcbiAgMzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NvbXBhdGlibGUgQUJJIHN1cHBvcnRcJiMzNDtcbiAgMzQ6XHRcdGRlcGVuZHMgb24gWEZSTV9VU0VSIFx1MDAyNlx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXHUwMDI2XHUwMDI2IFxcXG4gIDM1Olx0XHRcdEhBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1NcbiAgMzY6XHRcdHNlbGVjdCBXQU5UX0NPTVBBVF9ORVRMSU5LX01FU1NBR0VTXG4gIDM3Olx0XHRoZWxwXG4gIDM4Olx0XHQgIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2UgbGlrZSBJUHNlY1xuICAzOTpcdFx0ICB1c2VkIGJ5IGNvbXBhdGlibGUgTGludXggYXBwbGljYXRpb25zLlxuICA0MDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNDg5NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDExMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLZXJuZWwgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBicmluZ2luZyBpbiBgQ09ORklHX1hGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4sIGltcGxpZXMgYENPTkZJR19YRlJNYC4gVGhhdCYjMzk7cyBzdGFuZGFyZCwgYW5kIGV4cGVjdGVkLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGBDT05GSUdfWEZSTV9JUFRGU2AmIzM5O3MgcmVsYXRpb25zaGlwLCBhbmQgaXQgbG9va3MgbGlrZSBpdCBkZXBlbmRzIG9uIGBDT05GSUdfWEZSTWAgdG9vLiBObyBzdXJwcmlzZXMgdGhlcmUgZWl0aGVyLgoKVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgdGhlIHJlbGF0aW9uc2hpcCB0byBgUEFHRV9QT09MYC4gSXMgYENPTkZJR19YRlJNX0lQVEZTYCBicmluZ2luZyBpdCBpbiwgb3IgaXMgaXQgbmVlZGVkIGJ5IGFub3RoZXIgbW9kdWxlIGxpa2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgdGhhdCBgQ09ORklHX1hGUk1fSVBURlNgIHVzZXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSYjMzk7bSBnb2luZyB0byBxdWlja2x5IHNlYXJjaCB3aXRoaW4gdGhlIHJlbGV2YW50IGRpcmVjdG9yaWVzLiBJJiMzOTtsbCBuZWVkIHRvIGdyZXAgdGhyb3VnaCBgbmV0L2AgYW5kIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlIG9mIHdoZXRoZXIgYFBBR0VfUE9PTGAgaXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSByZWxhdGVkIHRvIGBDT05GSUdfWEZSTV9JUFRGU2AuIFRoaXMgd2lsbCBoZWxwIG1lIHdpdGggdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEFHRV9QT09MXFxiJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTQ4Nz1jb25maWcgTkVUX0RFVkxJTktcbi0tXG5uZXQvS2NvbmZpZy00OTAtXG5uZXQvS2NvbmZpZzo0OTE6Y29uZmlnIFBBR0VfUE9PTFxubmV0L0tjb25maWctNDkyLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTM2MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2U6CgoqKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBJc3N1ZSoqCgpPa2F5LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHNvbWV0aGluZyBrZXJuZWwtcmVsYXRlZC4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgYG5ldGAgc3Vic3lzdGVtIGlzIGEgbGlrZWx5IGN1bHByaXQsIGFuZCBiYXNlZCBvbiB0aGUgc3ltcHRvbXMgSSYjMzk7bSBzZWVpbmcsIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBzZWVtcyBwbGF1c2libGUuIFNvLCBJJiMzOTtsbCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBuZXQvS2NvbmZpZ2AsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSA0OTEuIFRoYXQgYXJlYSBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBleHBsb3JlIHBvdGVudGlhbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgdGhhdCBtaWdodCBiZSByZWxldmFudCB0byB0aGUgcHJvYmxlbSBJJiMzOTttIHRyeWluZyB0byBzb2x2ZS4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGFyZWFzIHRoYXQgbWlnaHQgbmVlZCB0d2Vha2luZy4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHRoZXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0ODgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ4ODpcdFx0Ym9vbFxuIDQ4OTpcdFx0ZGVmYXVsdCBuXG4gNDkwOlx0XG4gNDkxOlx0Y29uZmlnIFBBR0VfUE9PTFxuIDQ5MjpcdFx0Ym9vbFxuIDQ5MzpcdFxuIDQ5NDpcdGNvbmZpZyBQQUdFX1BPT0xfU1RBVFNcbiA0OTU6XHRcdGRlZmF1bHQgblxuIDQ5NjpcdFx0Ym9vbCBcJiMzNDtQYWdlIHBvb2wgc3RhdHNcJiMzNDtcbiA0OTc6XHRcdGRlcGVuZHMgb24gUEFHRV9QT09MXG4gNDk4Olx0XHRoZWxwXG4gNDk5Olx0XHQgIEVuYWJsZSBwYWdlIHBvb2wgc3RhdGlzdGljcyB0byB0cmFjayBwYWdlIGFsbG9jYXRpb24gYW5kIHJlY3ljbGluZ1xuIDUwMDpcdFx0ICBpbiBwYWdlIHBvb2xzLiBUaGlzIG9wdGlvbiBpbmN1cnMgYWRkaXRpb25hbCBDUFUgY29zdCBpbiBhbGxvY2F0aW9uXG4gNTAxOlx0XHQgIGFuZCByZWN5Y2xlIHBhdGhzIGFuZCBhZGRpdGlvbmFsIG1lbW9yeSBjb3N0IHRvIHN0b3JlIHRoZSBzdGF0aXN0aWNzLlxuIDUwMjpcdFx0ICBUaGVzZSBzdGF0aXN0aWNzIGFyZSBvbmx5IGF2YWlsYWJsZSBpZiB0aGlzIG9wdGlvbiBpcyBlbmFibGVkIGFuZCBpZlxuIDUwMzpcdFx0ICB0aGUgZHJpdmVyIHVzaW5nIHRoZSBwYWdlIHBvb2wgc3VwcG9ydHMgZXhwb3J0aW5nIHRoaXMgZGF0YS5cbiA1MDQ6XHRcbiA1MDU6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiA1MDY6XHRcbiA1MDc6XHRjb25maWcgRkFJTE9WRVJcbiA1MDg6XHRcdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgZmFpbG92ZXIgbW9kdWxlXCYjMzQ7XG4gNTA5Olx0XHRoZWxwXG4gNTEwOlx0XHQgIFRoZSBmYWlsb3ZlciBtb2R1bGUgcHJvdmlkZXMgYSBnZW5lcmljIGludGVyZmFjZSBmb3IgcGFyYXZpcnR1YWxcbiA1MTE6XHRcdCAgZHJpdmVycyB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgYSBzZXQgb2Ygb3BzIHdpdGggYSBmYWlsb3ZlclxuIDUxMjpcdFx0ICBpbnN0YW5jZS4gVGhlIG9wcyBhcmUgdXNlZCBhcyBldmVudCBoYW5kbGVycyB0aGF0IGdldCBjYWxsZWQgdG9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzU4OTgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgUEFHRV9QT09MIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBtZWNoYW5pY3Mgb2YgdGhpcyBgUEFHRV9QT09MYCB0aGluZy4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiBob3cgaXMgYFBBR0VfUE9PTGAgYWN0dWFsbHkgKnNlbGVjdGVkKj8gSXMgaXQgYWx3YXlzIGF2YWlsYWJsZSwgb3IgZG9lcyBzb21ldGhpbmcgZXhwbGljaXRseSBlbmFibGUgaXQ/IE9yIG1heWJlIHNvbWUgb3RoZXIgcGllY2Ugb2YgdGhlIGtlcm5lbCBsb2dpYyBjaG9vc2VzIGl0IGJhc2VkIG9uIHNvbWUgY3JpdGVyaWE/IEkgbmVlZCB0byBnZXQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIGl0cyBhdmFpbGFiaWxpdHkuCgpNeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgLiBJJiMzOTttIGhvcGluZyBpdCBjbGVhcmx5IG91dGxpbmVzIHRoZSBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGl0ICpyZXF1aXJlcyogYENPTkZJR19QQUdFX1BPT0xgIHRvIGJlIHNldCwgb3IgaWYgaXQgaGFzIHNvbWUgc3R1YiBpbXBsZW1lbnRhdGlvbiB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBkaXNhYmxlZC4gUGVyaGFwcyBpdCBpcyBhbHdheXMgY29tcGlsZWQsIGJ1dCBjb25kaXRpb25hbGx5IGRlZmluZWQuIFRoaXMgaXMga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IGl0IGludGVncmF0ZXMgKG9yIGRvZXNuJiMzOTt0KSB3aXRoIHZhcmlvdXMgY29uZmlndXJhdGlvbnMuCgpBbHRlcm5hdGl2ZWx5LCB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IG9mZmVyIGNsdWVzLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBgbmV0L2NvcmUvTWFrZWZpbGVgIG9yIGNpcmNsZSBiYWNrIHRvIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYCBpZiB0aGF0IGZhaWxzIHRvIGJlIGluZm9ybWF0aXZlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBkZXBlbmRlbmN5IGFuZCB1bmRlcnN0YW5kIHRoZSBkZWNpc2lvbiBtYWtpbmcgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UEFHRV9QT09MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvTWFrZWZpbGU9MjQ9b2JqLXkgJiM0Mzs9IG5ldGRldl9xdWV1ZXMub1xubmV0L2NvcmUvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX1BBR0VfUE9PTCkgJiM0Mzs9IHBhZ2VfcG9vbC5vIHBhZ2VfcG9vbF91c2VyLm9cbm5ldC9jb3JlL01ha2VmaWxlLTI2LW9iai0kKENPTkZJR19QUk9DX0ZTKSAmIzQzOz0gbmV0LXByb2Nmcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2MzY0CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgS2VybmVsJiMzOTtzIFBBR0VfUE9PTCBVc2FnZSoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IGBQQUdFX1BPT0xgIGlzIGJlaW5nIGJyb3VnaHQgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjaGVjayBkaXJlY3RseSB3aXRoaW4gYG5ldC94ZnJtL0tjb25maWdgLCBzZWUgaWYgdGhlcmUgYXJlIGFueSBkaXJlY3QgZGVwZW5kZW5jaWVzIG9yIHNlbGVjdGlvbnMgb2YgYFBBR0VfUE9PTGAgZGVmaW5lZCB0aGVyZS4gVGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldHdvcmtpbmctcmVsYXRlZCBmZWF0dXJlIGxpa2UgdGhpcy4KCklmIHRoYXQgY29tZXMgdXAgZW1wdHksIEkmIzM5O2xsIG5lZWQgdG8gYnJvYWRlbiB0aGUgc2VhcmNoLiBEcml2ZXJzIGFyZSBvZnRlbiB0aGUga2V5OyB0aGV5IG1pZ2h0IGJlIHRoZSBvbmVzIHRoYXQgYWN0dWFsbHkgcmVxdWlyZSBhbmQgdGhlcmVmb3JlIHNlbGVjdCBgUEFHRV9QT09MYC4gU28sIEkmIzM5O2xsIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgJiMzNDtzZWxlY3QgUEFHRV9QT09MJiMzNDsgYWNyb3NzIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHNlbGVjdGlvbnMgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHVsbGluZyBpdCBpbi4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIHN0cmF0ZWd5IGZvciB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIGEgcGFydGljdWxhciBrZXJuZWwgZmVhdHVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsZWFkIG9uIHRoZSB1c2FnZSBwYXR0ZXJucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFBBR0VfUE9PTFxcYiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9LY29uZmlnPTQzNT1jb25maWcgVkVUSFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXHR0cmlzdGF0ZSBcJiMzNDtWaXJ0dWFsIGV0aGVybmV0IHBhaXIgZGV2aWNlXCYjMzQ7XG5kcml2ZXJzL25ldC9LY29uZmlnOjQzNzpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy00NDctXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9LY29uZmlnOjQ0ODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01NDctXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxuZHJpdmVycy9uZXQvS2NvbmZpZzo1NDg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cdGRlZmF1bHQgeVxuLS1cbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy01ODctXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxuZHJpdmVycy9uZXQvS2NvbmZpZzo1ODg6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTAtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L0tjb25maWc6NjExOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjEtXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gNjRCSVRcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZzoyMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctODAtXHRzZWxlY3QgRElNTElCXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjgxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cdHNlbGVjdCBCUk9BRENPTV9QSFkgaWYgQVJDSF9CQ00yODM1XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxMy1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cdHNlbGVjdCBESU1MSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYxLVx0c2VsZWN0IE5FVF9ERVZMSU5LXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI2MjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNzUtXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnOjI3NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnLTgtXHRkZXBlbmRzIG9uIFBDSVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2lzY28vZW5pYy9LY29uZmlnOjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9lbmdsZWRlci9LY29uZmlnLTIzLVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZzoyNDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnLTMxLVx0c2VsZWN0IEZJWEVEX1BIWVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc6MzI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cdGltcGx5IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZy0yMS1cdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05NC1cdHNlbGVjdCBORVRfREVWTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc6OTU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0Vcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy0xNTMtXHRzZWxlY3QgUkVBTFRFS19QSFlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjE1NDpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cdGhlbHBcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE0LVx0c2VsZWN0IERJTUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnOjE1Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWctNS1cdHRyaXN0YXRlIFwmIzM0O0NvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXCYjMzQ7IGlmIENPTVBJTEVfVEVTVFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvbGliZXRoL0tjb25maWc6NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTctXHRoZWxwXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnPTU5PWNvbmZpZyBNVk5FVEFcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjY0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTY1LVx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz04Nj1jb25maWcgTVZQUDJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnOjkxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9LY29uZmlnLTkyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc9MzE9Y29uZmlnIE9DVEVPTlRYMl9QRlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWc6MzU6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnLTM2LVx0c2VsZWN0IENSWVBUT19MSUJfQUVTIGlmIE1BQ1NFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc9MTQ9Y29uZmlnIE5FVF9NRURJQVRFS19TT0Ncbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnOjIxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvS2NvbmZpZy0yMi1cdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc9Nj1jb25maWcgTUxYNF9FTlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnOjEwOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnLTExLVx0c2VsZWN0IE1MWDRfQ09SRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnPTI5PWNvbmZpZyBNTFg1X0NPUkVfRU5cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cdGRlcGVuZHMgb24gTkVUREVWSUNFUyBcdTAwMjZcdTAwMjYgRVRIRVJORVQgXHUwMDI2XHUwMDI2IElORVQgXHUwMDI2XHUwMDI2IFBDSSBcdTAwMjZcdTAwMjYgTUxYNV9DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZzozMjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMzLVx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzUtXHRkZXBlbmRzIG9uIFBDSSBcdTAwMjZcdTAwMjYgSEFTX0lPTUVNIFx1MDAyNlx1MDAyNiBNTFhTV19DT1JFXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9LY29uZmlnOjM2Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNy1cdGRlZmF1bHQgbVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZz0yMD1jb25maWcgRkJOSUNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXHRzZWxlY3QgTkVUX0RFVkxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZzoyODpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0yOS1cdHNlbGVjdCBQQ1NfWFBDU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWc9MT1jb25maWcgTEFOOTY2WF9TV0lUQ0hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXHRzZWxlY3QgUEhZTElOS1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZzo5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL2xhbjk2NngvS2NvbmZpZy0xMC1cdHNlbGVjdCBWQ0FQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnPTI4PWNvbmZpZyBMQU45NjlYX1NXSVRDSFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cdGRlcGVuZHMgb24gU1BBUlg1X1NXSVRDSFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnOjMxOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9jaGlwL3NwYXJ4NS9LY29uZmlnLTMyLVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE4PWNvbmZpZyBNSUNST1NPRlRfTUFOQVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTIzLVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjI0Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMjUtXHRzZWxlY3QgTkVUX1NIQVBFUlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc9MjA9Y29uZmlnIElPTklDXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cdHNlbGVjdCBESU1MSUJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3BlbnNhbmRvL0tjb25maWc6MjY6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnLTI3LVx0c2VsZWN0IEFVWElMSUFSWV9CVVNcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9MTEwPWNvbmZpZyBSVEFTRVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXHRzZWxlY3QgQ1JDMzJcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzoxMTQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTE1LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZz0yOT1jb25maWcgUkFWQlxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cdHNlbGVjdCBNRElPX0JJVEJBTkdcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZzozNjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNy1cdHNlbGVjdCBQSFlMSUJcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZz0yNT1jb25maWcgU05JX05FVFNFQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVx0c2VsZWN0IFBIWUxJQlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc6Mjk6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZy0zMC1cdHNlbGVjdCBNSUlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnPTI9Y29uZmlnIFNUTU1BQ19FVEhcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXHRzZWxlY3QgUENTX1hQQ1NcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWc6OTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3N0bWljcm8vc3RtbWFjL0tjb25maWctMTAtXHRzZWxlY3QgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnPTI2PWNvbmZpZyBURUhVVElfVE40MFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVx0ZGVwZW5kcyBvbiBQQ0lcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnOjI5Olx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWctMzAtXHRzZWxlY3QgRldfTE9BREVSXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz01MD1jb25maWcgVElfQ1BTV1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXHRzZWxlY3QgTUZEX1NZU0NPTlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzo1NjpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTctXHRzZWxlY3QgUkVHTUFQXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz02NT1jb25maWcgVElfQ1BTV19TV0lUQ0hERVZcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVx0ZGVwZW5kcyBvbiBUSV9DUFRTIHx8ICFUSV9DUFRTXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjcwOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy03MS1cdHNlbGVjdCBUSV9EQVZJTkNJX01ESU9cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTk2PWNvbmZpZyBUSV9LM19BTTY1X0NQU1dfTlVTU1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVx0c2VsZWN0IFBIWUxJTktcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MTAyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZy0xMDMtXHRzZWxlY3QgVElfSzNfQ1BQSV9ERVNDX1BPT0xcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnPTIwND1jb25maWcgVElfSUNTU0dfUFJVRVRIX1NSMVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVx0c2VsZWN0IFRJX0szX0NQUElfREVTQ19QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjIwOTpcdHNlbGVjdCBQQUdFX1BPT0xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjEwLVx0ZGVwZW5kcyBvbiBQUlVfUkVNT1RFUFJPQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZz0xOT1jb25maWcgTElCV1hcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc6MjI6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjMtXHRzZWxlY3QgRElNTElCXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnPTI9Y29uZmlnIE1UNzZfQ09SRVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnLTMtXHR0cmlzdGF0ZVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWVkaWF0ZWsvbXQ3Ni9LY29uZmlnOjQ6XHRzZWxlY3QgUEFHRV9QT09MXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9Mjc9Y29uZmlnIEJQRl9TWVNDQUxMXG4tLVxua2VybmVsL2JwZi9LY29uZmlnLTM1LVx0c2VsZWN0IE5FVF9YR1JFU1MgaWYgTkVUXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XHRzZWxlY3QgUEFHRV9QT09MIGlmIE5FVFxua2VybmVsL2JwZi9LY29uZmlnLTM3LVx0ZGVmYXVsdCBuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNzk2CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXkgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBFbGVtZW50cyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIHNlZSB0aGF0IGBQQUdFX1BPT0xgIGlzIHJlbGV2YW50IGhlcmUsIHNlbGVjdGVkIGJ5IHRoaW5ncyBsaWtlIGBCUEZfU1lTQ0FMTGAsIGBWRVRIYCwgYW5kIGBWSVJUSU9fTkVUYC4gVGhhdCB0cmlnZ2VycyBhbiBpbml0aWFsIHRob3VnaHQgdG8gY2hlY2sgaWYgYENPTkZJR19YRlJNX0lQVEZTYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIG5lZWRlZCBmb3IgdGhlIG1vZGlmaWVkIGNvZGUgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcuIEkmIzM5O2xsIGFsc28gY2hlY2sgaWYgYFhGUk1fVVNFUmAgaXMgbmVjZXNzYXJ5LCBzaW5jZSB0aGF0JiMzOTtzIHdoYXQgY29udHJvbHMgd2hldGhlciB1c2Vyc3BhY2UgY2FuIGludGVyYWN0IHdpdGggSVBURlMgc3RhdGVzIGFuZCBwb2xpY2llcy4gWWVzLCBgQ09ORklHX1hGUk1fVVNFUmAgaXMgbmVlZGVkLCBiZWNhdXNlIHRoYXQgaXMgaG93IHVzZXJzcGFjZSBjb25maWd1cmVzIFhGUk0gc3RhdGVzIHVzaW5nIG5ldGxpbmsuIE5vdywgSSBoYXZlIHRvIG1ha2Ugc3VyZSBgUEFHRV9QT09MYCBjYW4gYmUgZW5hYmxlZCwgYW5kIG5vdCBqdXN0IGluZGlyZWN0bHkgdGhyb3VnaCB0aG9zZSBzZWxlY3Rpb25zLiBJIHNlZSB0aGF0IGBQQUdFX1BPT0xgIGlzIGEgYm9vbGVhbiBjb25maWcgb3B0aW9uIGluIGBuZXQvS2NvbmZpZ2AsIGJ1dCBpdCBsYWNrcyBhIHByb21wdC4gVGhlIEtjb25maWcgc3lzdGVtIG1pZ2h0IGlnbm9yZSBpdCBpZiBpdCYjMzk7cyBub3QgZXhwbGljaXRseSBzZWxlY3RlZC4gT2theSwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IGBQQUdFX1BPT0xgIGlzIGhhbmRsZWQsIGFuZCBpZiBpdCBpcyBlbmFibGVkIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgYnkgc29tZXRoaW5nIGxpa2UgYE5FVERFVlNJTWAgb3IgYEJQRl9TWVNDQUxMYCwgYW5kIGhvdyBgS2NvbmZpZ2AgaGFuZGxlcyBpdHMgbGFjayBvZiBhIHByb21wdC4KCkkgaGF2ZSB0byB2ZXJpZnkgdGhlIGRlcGVuZGVuY2llcyBmb3IgYFhGUk1fSVBURlNgIGFuZCBgWEZSTV9VU0VSYC4gTGV0JiMzOTtzIGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24mIzM5O3QgZGVwZW5kIG9uIGFueXRoaW5nICplbHNlKi4gTG9va2luZyBhdCBgbmV0L3hmcm0vS2NvbmZpZ2AsIEkgc2VlIGl0IGRlcGVuZHMgb24gYFhGUk1gLiBBbmQsIGxvb2tpbmcgZnVydGhlciwgYFhGUk1gIGRlcGVuZHMgb24gYElORVRgLiBUaGVuLCBgWEZSTV9VU0VSYCBzZWxlY3RzIGBYRlJNX0FMR09gIHdoaWNoIHRoZW4gc2VsZWN0cyBgWEZSTWAuIEFuZCBzaW5jZSBgSU5FVGAgaXMgc3RhbmRhcmQsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYFhGUk1fSVBURlNgIGFuZCBgWEZSTV9VU0VSYCBhcmUgdGhlIGVzc2VudGlhbCBjb25maWd1cmF0aW9ucyBmb3IgdGhpcyBhcmVhLgoKTm93IGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYW5kIGZvY3VzIG9uIHNwZWNpZmljIGNvZGUgc3ltYm9scy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gTGV0JiMzOTtzIGxvb2sgYXQgdGhlIG1vZGlmaWVkIGZ1bmN0aW9ucywgYW5kIHNlZSB3aGF0IHRoZSBmb2N1cyBzeW1ib2xzIGFyZS4gTGV0JiMzOTtzIGNoZWNrIGBpcHRmc19za2JfYWRkX2ZyYWdzYDogSXQmIzM5O3MgYHN0YXRpY2AsIG1lYW5pbmcgaXQmIzM5O3Mgb25seSB2aXNpYmxlIHdpdGhpbiB0aGlzIGZpbGUuIE5vdywgYWxzbyBsb29raW5nIGF0IGBpcHRmc19jb25zdW1lX2ZyYWdzYDogVGhpcyBpcyBhbHNvIGBzdGF0aWNgLiBJJiMzOTtsbCBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYC4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIEkmIzM5O20gZ29pbmcgdG8gZGV0ZXJtaW5lIHdoYXQgY2FsbHMgYGlwdGZzX291dHB1dF9xdWV1ZWRgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3hmcm0mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAxLVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIyMDI6c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjMzNz1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzY5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNzA6XHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFx1MDAyNmxpc3QpO1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzNzEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNDIwCgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBpcHRmc19kZWxheV90aW1lcmAgYW5kIGBpcHRmc19vdXRwdXRfcXVldWVkYCBDYWxsZXJzKioKCk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGUgdGltaW5nIGFuZCBvdXRwdXQgcXVldWluZyBpbiB0aGUgYHhmcm1faXB0ZnNgIGZyYW1ld29yay4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gbG9vayBhdCB3aGVyZSBgaXB0ZnNfZGVsYXlfdGltZXJgIGlzIGFjdHVhbGx5IGJlaW5nIGNhbGxlZCwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgZnVuY3Rpb25zIHRoYXQgdXRpbGl6ZSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIFRoYXQmIzM5O3MgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBmbG93IG9mIHRoaXMgc3R1ZmYsIHJpZ2h0PyBJIG5lZWQgdG8gdHJhY2UgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBpZGVudGlmeSB0aGUgY29udGV4dHMgd2hlcmUgdGhpcyBkZWxheWVkIHByb2Nlc3NpbmcgY29tZXMgaW50byBwbGF5LiBJJiMzOTttIHRoaW5raW5nIEkmIzM5O2xsIHN0YXJ0IHdpdGggdGhvc2UgZnVuY3Rpb25zIGFuZCB0aGVuIHdvcmsgYmFja3dhcmQgaWYgbmVjZXNzYXJ5LgoKVG8gZ2V0IHN0YXJ0ZWQsIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIzNjAgdGhyb3VnaCAyNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc3BlY2lmaWMgcG9pbnQgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgYW5kIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBhIHVzZWZ1bCBpbnNpZ2h0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjM2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMzYwOlx0XHRzcGluX3VubG9jayhcdTAwMjZ4LVx1MDAzZWxvY2spO1xuMjM2MTpcdFxuMjM2MjpcdFx0LyogQWZ0ZXIgdGhlIGFib3ZlIHVubG9jaywgcGFja2V0cyBjYW4gYmVnaW4gcXVldWluZyBhZ2FpbiwgYW5kIHRoZVxuMjM2MzpcdFx0ICogdGltZXIgY2FuIGJlIHNldCBhZ2FpbiwgZnJvbSBhbm90aGVyIENQVSBlaXRoZXIgaW4gc29mdGlycSBvciB1c2VyXG4yMzY0Olx0XHQgKiBjb250ZXh0IChub3QgZnJvbSB0aGlzIG9uZSBzaW5jZSB3ZSBhcmUgcnVubmluZyBhdCBzb2Z0aXJxIGxldmVsXG4yMzY1Olx0XHQgKiBhbHJlYWR5KS5cbjIzNjY6XHRcdCAqL1xuMjM2NzpcdFxuMjM2ODpcdFx0dHJhY2VfaXB0ZnNfdGltZXJfZXhwaXJlKHh0ZnMsICh1bnNpZ25lZCBsb25nIGxvbmcpKGt0aW1lX2dldF9yYXdfZmFzdF9ucygpIC0gc2V0dGltZSkpO1xuMjM2OTpcdFxuMjM3MDpcdFx0aXB0ZnNfb3V0cHV0X3F1ZXVlZCh4LCBcdTAwMjZsaXN0KTtcbjIzNzE6XHRcbjIzNzI6XHRcdHJldHVybiBIUlRJTUVSX05PUkVTVEFSVDtcbjIzNzM6XHR9XG4yMzc0Olx0XG4yMzc1Olx0LyoqXG4yMzc2Olx0ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcbjIzNzc6XHQgKiBAeDogeGZybSBzdGF0ZVxuMjM3ODpcdCAqIEBza2I6IHRoZSBwYWNrZXRcbjIzNzk6XHQgKlxuMjM4MDpcdCAqIFRoaXMgd2FzIG9yaWdpbmFsbHkgdGFrZW4gZnJvbSB4ZnJtNF90dW5uZWxfZW5jYXBfYWRkLiBUaGUgcmVhc29uIGZvciB0aGVcbjIzODE6XHQgKiBjb3B5IGlzIHRoYXQgSVAtVEZTL0FHR0ZSQUcgY2FuIGhhdmUgZGlmZmVyZW50IGZ1bmN0aW9uYWxpdHkgZm9yIGhvdyB0byBzZXRcbjIzODI6XHQgKiB0aGUgVE9TL0RTQ1AgYml0cy4gU2V0cyB0aGUgcHJvdG9jb2wgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYW5kIGRvZXNuJiMzOTt0IGRvXG4yMzgzOlx0ICogYW55dGhpbmcgd2l0aCBpbm5lciBoZWFkZXJzIGFzIHRoZXkgYXJlbiYjMzk7dCBwb2ludGluZyBpbnRvIGEgbm9ybWFsIElQXG4yMzg0Olx0ICogc2luZ2xldG9uIGlubmVyIHBhY2tldC5cbjIzODU6XHQgKlxuMjM4NjpcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXG4yMzg3Olx0ICovXG4yMzg4Olx0c3RhdGljIGludCBpcHRmc19lbmNhcF9hZGRfaXB2NChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbjIzODk6XHR7XG4yMzkwOlx0XHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7XG4yMzkxOlx0XHRzdHJ1Y3QgaXBoZHIgKnRvcF9pcGg7XG4yMzkyOlx0XG4yMzkzOlx0XHRza2JfcmVzZXRfaW5uZXJfbmV0d29ya19oZWFkZXIoc2tiKTtcbjIzOTQ6XHRcdHNrYl9yZXNldF9pbm5lcl90cmFuc3BvcnRfaGVhZGVyKHNrYik7XG4yMzk1Olx0XG4yMzk2Olx0XHRza2Jfc2V0X25ldHdvcmtfaGVhZGVyKHNrYiwgLSh4LVx1MDAzZXByb3BzLmhlYWRlcl9sZW4gLSB4LVx1MDAzZXByb3BzLmVuY19oZHJfbGVuKSk7XG4yMzk3Olx0XHRza2ItXHUwMDNlbWFjX2hlYWRlciA9IHNrYi1cdTAwM2VuZXR3b3JrX2hlYWRlciAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaXBoZHIsIHByb3RvY29sKTtcbjIzOTg6XHRcdHNrYi1cdTAwM2V0cmFuc3BvcnRfaGVhZGVyID0gc2tiLVx1MDAzZW5ldHdvcmtfaGVhZGVyICYjNDM7IHNpemVvZigqdG9wX2lwaCk7XG4yMzk5Olx0XG4yNDAwOlx0XHR0b3BfaXBoID0gaXBfaGRyKHNrYik7XG4yNDAxOlx0XHR0b3BfaXBoLVx1MDAzZWlobCA9IDU7XG4yNDAyOlx0XHR0b3BfaXBoLVx1MDAzZXZlcnNpb24gPSA0O1xuMjQwMzpcdFx0dG9wX2lwaC1cdTAwM2Vwcm90b2NvbCA9IElQUFJPVE9fQUdHRlJBRztcbjI0MDQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDM1MTEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpcHRmc19vdXRwdXRfcXVldWVkYCBGdW5jdGlvbiYjMzk7cyBDYWxsZXJzKioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGBpcHRmc19vdXRwdXRfcXVldWVkYCBmdW5jdGlvbi4gSSBrbm93IGl0JiMzOTtzIGJlaW5nIHRyaWdnZXJlZCBieSBgaXB0ZnNfZGVsYXlfdGltZXJgLCB0aGF0IG11Y2ggaXMgY2xlYXIgZnJvbSB0aGUgZXhpc3Rpbmcgc3RydWN0dXJlLiBCdXQgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGUgY2FsbCBncmFwaCB0byB1bmRlcnN0YW5kIHRoZSBzeXN0ZW0mIzM5O3MgYmVoYXZpb3IgaG9saXN0aWNhbGx5LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYWxzbyBjYWxsIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gS25vd2luZyB0aGUgKmNvbXBsZXRlKiBsaXN0IG9mIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIG91dHB1dCBxdWV1ZSBtaWdodCBiZSBjb250ZW5kZWQgb3IgaW1wcm9wZXJseSBtYW5hZ2VkLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMTY3PXN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMjAyOnN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMy17XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzcwOlx0aXB0ZnNfb3V0cHV0X3F1ZXVlZCh4LCBcdTAwMjZsaXN0KTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzcxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDAxMwoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBNZW50YWwgVHJhY2UgVGhyb3VnaCBJUFRGUyBJbnB1dC9PdXRwdXQqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gd3JhcCBteSBoZWFkIGFyb3VuZCB0aGUgcGFja2V0IGZsb3cgZm9yIElQc2VjIFNBcyB1c2luZyBgWEZSTV9NT0RFX0lQVEZTYC4gTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgY2FsbHMgYGlwdGZzX2lucHV0YC4gUmlnaHQsIGl0JiMzOTtzIHRoZSBgLmlucHV0YCBjYWxsYmFjayBkZWZpbmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBTbywgd2hlbiBhbiBpbmNvbWluZyBwYWNrZXQgdGhhdCBtYXRjaGVzIGFuIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9uIHVzaW5nIHRoZSBJUFRGUyBtb2RlIGhpdHMgdGhlIHN5c3RlbSwgYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQuCgpOb3csIHdpdGhpbiBgaXB0ZnNfaW5wdXRgLCBpdCBsb29rcyBsaWtlIHdlIGhhdmUgYSBjb3VwbGUgb2YgaW1wb3J0YW50IHBhdGhzLiBJdCBldmVudHVhbGx5IGNhbGxzIGBpcHRmc19pbnB1dF9vcmRlcmVkYCwgd2hpY2ggaGFuZGxlcyByZWFzc2VtYmx5IGFuZCBwcm9jZXNzaW5nLiBJbnNpZGUgYGlwdGZzX2lucHV0X29yZGVyZWRgLCB3ZSYjMzk7dmUgZ290IGEgY291cGxlIG9mIGtleSBmdW5jdGlvbnM6IGBpcHRmc19yZWFzc2VtX2NvbnRgIGFuZCBgX19pbnB1dF9wcm9jZXNzX3BheWxvYWRgLiBUaGV5IGJvdGggZW5kIHVwIGNhbGxpbmcgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIOKAkyB0aGF0IHNlZW1zIGxpa2UgYSBjb21tb24gcG9pbnQgZm9yIGZyYWdtZW50IGhhbmRsaW5nLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBzZWUgdGhhdCBgX19pbnB1dF9wcm9jZXNzX3BheWxvYWRgIGFsc28gaGFzIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIHdoaWNoIGFsc28gY2FsbHMgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLgoKRm9yIG91dHB1dCwgaXQgbG9va3MgbGlrZSBgLm91dHB1dGAgaXMgc2V0IHRvIGBpcHRmc19vdXRwdXRfY29sbGVjdGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBkZXNjcmlwdGl2ZS4gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgb3V0Z29pbmcgcGFja2V0cyBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggdGhlbS4gUmlnaHQsIGl0IGVucXVldWVzIHRoZSBwYWNrZXRzIG9udG8gYHh0ZnMtJmd0O3F1ZXVlYCwgd2hpY2ggcHJvYmFibHkgaXMgc29tZSBraW5kIG9mIGludGVybmFsIHF1ZXVlLiBJdCBhbHNvIHNldHMgdXAgYGlwdGZzX2RlbGF5X3RpbWVyYCwgd2hpY2ggaGludHMgYXQgc29tZSBraW5kIG9mIGRlbGF5ZWQgZmx1c2gsIG9yIHBvdGVudGlhbGx5IGEgYmF0Y2hpbmcgc3RyYXRlZ3kuIEkgc2hvdWxkIHJlYWxseSBjaGVjayBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgIGFnYWluLCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnkgaW1tZWRpYXRlIGZsdXNoIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE4NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTg0NTpcdHN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4xODQ2Olx0e1xuMTg0NzpcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gc2tiX2RzdChza2IpO1xuMTg0ODpcdFx0c3RydWN0IHhmcm1fc3RhdGUgKnggPSBkc3QtXHUwMDNleGZybTtcbjE4NDk6XHRcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVx1MDAzZW1vZGVfZGF0YTtcbjE4NTA6XHRcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcbjE4NTE6XHRcdHUzMiBwbXR1ID0gMDtcbjE4NTI6XHRcdGJvb2wgb2sgPSB0cnVlO1xuMTg1MzpcdFx0Ym9vbCB3YXNfZ3NvO1xuMTg1NDpcdFxuMTg1NTpcdFx0LyogV2UgaGF2ZSBob29rZWQgaW50byBkc3RfZW50cnktXHUwMDNlb3V0cHV0IHdoaWNoIG1lYW5zIHdlIGhhdmUgc2tpcHBlZCB0aGVcbjE4NTY6XHRcdCAqIHByb3RvY29sIHNwZWNpZmljIG5ldGZpbHRlciAoc2VlIHhmcm00X291dHB1dCwgeGZybTZfb3V0cHV0KS5cbjE4NTc6XHRcdCAqIHdoZW4gb3VyIHRpbWVyIHJ1bnMgd2Ugd2lsbCBlbmQgdXAgY2FsbGluZyB4ZnJtX291dHB1dCBkaXJlY3RseSBvblxuMTg1ODpcdFx0ICogdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLlxuMTg1OTpcdFx0ICpcbjE4NjA6XHRcdCAqIEZvciBib3RoIGNhc2VzIHRoaXMgaXMgdGhlIE5GX0lORVRfUE9TVF9ST1VUSU5HIGhvb2sgd2hpY2ggYWxsb3dzXG4xODYxOlx0XHQgKiBjaGFuZ2luZyB0aGUgc2tiLVx1MDAzZWRzdCBlbnRyeSB3aGljaCB0aGVuIG1heSBub3QgYmUgeGZybSBiYXNlZCBhbnltb3JlXG4xODYyOlx0XHQgKiBpbiB3aGljaCBjYXNlIGEgUkVST1VURUQgZmxhZyBpcyBzZXQuIGFuZCBkc3Rfb3V0cHV0IGlzIGNhbGxlZC5cbjE4NjM6XHRcdCAqXG4xODY0Olx0XHQgKiBGb3IgSVB2NiB3ZSBhcmUgYWxzbyBza2lwcGluZyBmcmFnbWVudGF0aW9uIGhhbmRsaW5nIGZvciBsb2NhbFxuMTg2NTpcdFx0ICogc29ja2V0cywgd2hpY2ggbWF5IG9yIG1heSBub3QgYmUgZ29vZCBkZXBlbmRpbmcgb24gb3VyIHR1bm5lbCBERlxuMTg2NjpcdFx0ICogc2V0dGluZy4gTm9ybWFsbHkgd2l0aCBmcmFnbWVudGF0aW9uIHN1cHBvcnRlZCB3ZSB3YW50IHRvIHNraXAgdGhpc1xuMTg2NzpcdFx0ICogZnJhZ21lbnRhdGlvbi5cbjE4Njg6XHRcdCAqL1xuMTg2OTpcdFxuMTg3MDpcdFx0aWYgKHh0ZnMtXHUwMDNlY2ZnLmRvbnRfZnJhZylcbjE4NzE6XHRcdFx0cG10dSA9IGlwdGZzX2dldF9jdXJfcG10dSh4LCB4dGZzLCBza2IpO1xuMTg3MjpcdFxuMTg3MzpcdFx0LyogQnJlYWsgYXBhcnQgR1NPIHNrYnMuIElmIHRoZSBxdWV1ZSBpcyBuZWFyaW5nIGZ1bGwgdGhlbiB3ZSB3YW50IHRoZVxuMTg3NDpcdFx0ICogYWNjb3VudGluZyBhbmQgcXVldWluZyB0byBiZSBiYXNlZCBvbiB0aGUgaW5kaXZpZHVhbCBwYWNrZXRzIG5vdCBvbiB0aGVcbjE4NzU6XHRcdCAqIGFnZ3JlZ2F0ZSBHU08gYnVmZmVyLlxuMTg3NjpcdFx0ICovXG4xODc3Olx0XHR3YXNfZ3NvID0gc2tiX2lzX2dzbyhza2IpO1xuMTg3ODpcdFx0aWYgKCF3YXNfZ3NvKSB7XG4xODc5Olx0XHRcdHNlZ3MgPSBza2I7XG4xODgwOlx0XHR9IGVsc2Uge1xuMTg4MTpcdFx0XHRzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7XG4xODgyOlx0XHRcdGlmIChJU19FUlJfT1JfTlVMTChzZWdzKSkge1xuMTg4MzpcdFx0XHRcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1PVVRFUlJPUik7XG4xODg0Olx0XHRcdFx0a2ZyZWVfc2tiKHNrYik7XG4xODg1Olx0XHRcdFx0aWYgKElTX0VSUihzZWdzKSlcbjE4ODY6XHRcdFx0XHRcdHJldHVybiBQVFJfRVJSKHNlZ3MpO1xuMTg4NzpcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuMTg4ODpcdFx0XHR9XG4xODg5Olx0XHRcdGNvbnN1bWVfc2tiKHNrYik7XG4xODkwOlx0XHRcdHNrYiA9IE5VTEw7XG4xODkxOlx0XHR9XG4xODkyOlx0XG4xODkzOlx0XHQvKiBXZSBjYW4gYmUgcnVubmluZyBvbiBtdWx0aXBsZSBjb3JlcyBhbmQgZnJvbSB0aGUgbmV0d29yayBzb2Z0aXJxIG9yXG4xODk0Olx0XHQgKiBmcm9tIHVzZXIgY29udGV4dCBkZXBlbmRpbmcgb24gd2hlcmUgdGhlIHBhY2tldCBpcyBjb21pbmcgZnJvbS5cbjE4OTU6XHRcdCAqL1xuMTg5NjpcdFx0c3Bpbl9sb2NrX2JoKFx1MDAyNngtXHUwMDNlbG9jayk7XG4xODk3Olx0XG4xODk4Olx0XHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuc2tiKSB7XG4xODk5Olx0XHRcdHNrYl9tYXJrX25vdF9vbl9saXN0KHNrYik7XG4xOTAwOlx0XG4xOTAxOlx0XHRcdC8qIE9uY2Ugd2UgZHJvcCBkdWUgdG8gbm8gcXVldWUgc3BhY2Ugd2UgY29udGludWUgdG8gZHJvcCB0aGVcbjE5MDI6XHRcdFx0ICogcmVzdCBvZiB0aGUgcGFja2V0cyBmcm9tIHRoYXQgR1JPLlxuMTkwMzpcdFx0XHQgKi9cbjE5MDQ6XHRcdFx0aWYgKCFvaykge1xuMTkwNTpcdG5vc3BhY2U6XG4xOTA2Olx0XHRcdFx0dHJhY2VfaXB0ZnNfbm9fcXVldWVfc3BhY2Uoc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKTtcbjE5MDc6XHRcdFx0XHRYRlJNX0lOQ19TVEFUUyhuZXQsIExJTlVYX01JQl9YRlJNT1VUTk9RU1BBQ0UpO1xuMTkwODpcdFx0XHRcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HKTtcbjE5MDk6XHRcdFx0XHRjb250aW51ZTtcbjE5MTA6XHRcdFx0fVxuMTkxMTpcdFxuMTkxMjpcdFx0XHQvKiBJZiB0aGUgdXNlciBpbmRpY2F0ZWQgbm8gaXB0ZnMgZnJhZ21lbnRpbmcgY2hlY2sgYmVmb3JlXG4xOTEzOlx0XHRcdCAqIGVucXVldWUuXG4xOTE0Olx0XHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NTgyOAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDcwMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSVBURlMgUGFja2V0IEhhbmRsaW5nIGZvciBDb21wcmVoZW5zaXZlIENvdmVyYWdlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgaW52b2x2ZWQgaW4gSVBURlMgcGFja2V0IHByb2Nlc3NpbmcgdG8gZW5zdXJlIHRob3JvdWdoIGNvZGUgY292ZXJhZ2UuIFRoZSBrZXkgZnVuY3Rpb25zIEkmIzM5O20gZm9jdXNpbmcgb24gYXJlOiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19jb25zdW1lX2ZyYWdzYCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiAgYGlwdGZzX291dHB1dF9xdWV1ZWRgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb25zdW1pbmcgcGFja2V0IGZyYWdtZW50cyB3aGVuIGFzc2VtYmxpbmcgdGhlIG91dHB1dCwgY2FsbGluZyBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHdoaWxlIHRoZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaGFuZGxlcyByZWFzc2VtYmx5IGZvciB0aGUgaW5jb21pbmcgcGF5bG9hZHMgKGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS4KCk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGFyaXNlczogYXJlIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyPyAgVGhhdCBjb3VsZCBpbXBhY3QgbXkgY292ZXJhZ2UgYW5hbHlzaXMuIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBpcyBzdGF0aWMgYW5kIGRlZmluZWQgd2l0aGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBhbmQgaXQmIzM5O3MgY2FsbGVkIGZyb20gYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX3JlYXNzZW1fY29udGAuICBJdCYjMzk7cyBhIGZ1bmN0aW9uIG9mIGEgcmVhc29uYWJsZSBzaXplLCBhYm91dCA1MCBsaW5lcywgc28gSSB3b3VsZCBoYXZlIHRvIGd1ZXNzIGl0JiMzOTtzIG5vdCBpbmxpbmVkLCBidXQgSSB3aWxsIGludmVzdGlnYXRlLiBgaXB0ZnNfY29uc3VtZV9mcmFnc2AgaXMgYWxzbyBzdGF0aWMgYW5kIGlzIGNhbGxlZCBmcm9tIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gIEl0IG1pZ2h0IGJlIGlubGluZWQuICBTbywgaW5jbHVkaW5nIHRob3NlIGZ1bmN0aW9ucyAoYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfY29uc3VtZV9mcmFnc2ApIGFuZCB0aGVpciBkaXJlY3QgY2FsbGVycyAoYGlwdGZzX3Bza2JfYWRkX2ZyYWdzYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX2lucHV0YCwgYW5kIGBpcHRmc19vdXRwdXRfY29sbGVjdGApIHdpbGwgcHJvdmlkZSBzb2xpZCBjb3ZlcmFnZS4KCk5leHQsIEkgbmVlZCB0byBsb29rIGF0IHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIHNlZWluZyBgWEZSTV9JUFRGU2AsIGBYRlJNX1VTRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFdhaXQsIGBQQUdFX1BPT0xgIGlzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQuIEl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgaXQgZGlyZWN0bHkgbWlnaHQgcmVxdWlyZSBlbmFibGluZyBhIHBhcmVudCBzdWJzeXN0ZW0gbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYEJQRl9TWVNDQUxMYCwgc2luY2UgdGhleSBzZWxlY3QgaXQuIE9yIHBlcmhhcHMgdGhlIHN5emthbGxlciBLY29uZmlnIGdlbmVyYXRvciBlbmFibGVzIGJvb2xzIHdpdGhvdXQgcHJvbXB0cy4gVGhlIGluc3RydWN0aW9ucyBoZXJlIGFsc28gcG9pbnQgb3V0IHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIGBLY29uZmlnYCBmb3IgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuCgpgWEZSTV9JUFRGU2AgZGVwZW5kcyBvbiBgWEZSTWAsIHdoaWNoIGluIHR1cm4gZGVwZW5kcyBvbiBgSU5FVGAuICBgWEZSTV9VU0VSYCBhbGxvd3MgZm9yIHVzZXJzcGFjZSBjb25maWd1cmF0aW9uIG9mIHhmcm0gc3RhdGVzIGFuZCBtb2Rlcy4gQnV0IGBQQUdFX1BPT0xgLCB0aGF0JiMzOTtzIHVzZWQgYnkgZHJpdmVycyBhbmQgQlBGLiAgV2FpdCwgdGhlIGB4ZnJtX2lwdGZzLmNgIGZpbGUgKnNob3VsZCogY29tcGlsZSBldmVuIHdpdGhvdXQgYFBBR0VfUE9PTGAgZW5hYmxlZCwgcmlnaHQ/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdC4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgaW5jbHVkZSBwYXRoIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGhlYWRlciBmaWxlIHdvcmtzIGNvcnJlY3RseSB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQgZm9yIG15IHRlc3Rpbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19QQUdFX1BPT0wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9wYWdlX3Bvb2wmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC02MC1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6NjE6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtNjItLyogRGVwcmVjYXRlZCBkcml2ZXItZmFjaW5nIEFQSSwgdXNlIG5ldGxpbmsgaW5zdGVhZCAqL1xuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzMxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtMzM4LVx0ICovXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oOjMzOTojaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zNDAtXHRpZiAoIXBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW0pKVxuLS1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oPTg3PXN0cnVjdCBwYWdlX3Bvb2xfcGFyYW1zIHtcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0xMDctXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoxMDg6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTEwOS0vKipcbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0xNzY9c3RydWN0IHBhZ2VfcG9vbCB7XG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTg1LVx0Ym9vbCBkbWFfc3luY19mb3JfY3B1OjE7XHQvKiBQZXJmb3JtIERNQSBzeW5jIGZvciBjcHUgKi9cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjE4NjojaWZkZWYgQ09ORklHX1BBR0VfUE9PTF9TVEFUU1xuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTg3LVx0Ym9vbCBzeXN0ZW06MTtcdFx0XHQvKiBUaGlzIGlzIGEgZ2xvYmFsIHBlcmNwdSBwb29sICovXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjAwLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjAxOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yMDItXHQvKiB0aGVzZSBzdGF0cyBhcmUgaW5jcmVtZW50ZWQgd2hpbGUgaW4gc29mdGlycSBjb250ZXh0ICovXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjM5LVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjQwOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNDEtXHQvKiByZWN5Y2xlIHN0YXRzIGFyZSBwZXItY3B1IHRvIGF2b2lkIGxvY2tpbmcgKi9cbi0tXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0yNzU9c3RydWN0IHhkcF9tZW1faW5mbztcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTI3Ni1cbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjI3NzojaWZkZWYgQ09ORklHX1BBR0VfUE9PTFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjc4LXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXG4tLVxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg9MzA4PXN0YXRpYyBpbmxpbmUgYm9vbCBpc19wYWdlX3Bvb2xfY29tcGlsZWRfaW4odm9pZClcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMwOS17XG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDozMTA6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMxMS1cdHJldHVybiB0cnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAyOAoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiA1MDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGFuZCBGdXp6aW5nIENvbnNpZGVyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IHN0YXJ0aW5nIHBvaW50IGlzIGBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpYC4gSXQmIzM5O3MgY2FsbGluZyBgcGFnZV9wb29sX3JlZl9uZXRtZW0ocGFnZV90b19uZXRtZW0ocGFnZSkpYC4gU28sIHRoYXQmIzM5O3MgdGhlIGNvcmUuIFRoZW4sIEkgc2VlIGBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW0pYCBzaW1wbHkgaW5jcmVtZW50cyBhbiBhdG9taWMgY291bnRlcjogYGF0b21pY19sb25nX2luYyhuZXRtZW1fZ2V0X3BwX3JlZl9jb3VudF9yZWYobmV0bWVtKSlgLiBUaGF0IGZ1bmN0aW9uLCBgbmV0bWVtX2dldF9wcF9yZWZfY291bnRfcmVmYCwgaXMgYWx3YXlzIHRoZXJlLCBubyBwcm9ibGVtLgoKVGhlIGtleSBpcyB0aGF0IGZvciBhbiBgc2tiYCB0byBoYXZlIGBza2ItJmd0O3BwX3JlY3ljbGUgPSB0cnVlYCwgaXQgbXVzdCBvcmlnaW5hdGUgZnJvbSBhIG5ldHdvcmsgZGV2aWNlICp1c2luZyogcGFnZV9wb29sLCBvciBwYWdlIHBvb2wgbXVzdCBiZSBleHBsaWNpdGx5IGVuYWJsZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgcGFnZSBwb29sIGlzIGVuYWJsZWQuIExvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24sIGBQQUdFX1BPT0xgIGdldHMgZW5hYmxlZCBpZiB3ZSBoYXZlIHBhZ2UtcG9vbC1zdXBwb3J0aW5nIG5ldGRldnMgbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYE5FVERFVlNJTWAsIG9yIGlmIGBCUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZC4KClJpZ2h0LCBhbmQgYFhGUk1fSVBURlNgIGlzIHdoYXQgZW5hYmxlcyBgeGZybV9pcHRmcy5jYCwgd2hpY2ggaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gc2V0IHRoaXMgdXAuCgpTbywgbGV0JiMzOTtzIGxpc3QgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zOgoqICAgYFhGUk1fSVBURlNgIChuZWNlc3NhcnkgZm9yIGB4ZnJtX2lwdGZzLmNgIGZ1bmN0aW9uYWxpdHkpCiogICBgWEZSTV9VU0VSYCAobGlrZWx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBYRlJNLCBwZXJoYXBzIHVzZWZ1bCkKKiAgIGBQQUdFX1BPT0xgIChlbnN1cmVzIHBhZ2UgcG9vbCBpcyBlbmFibGVkKQoKTm93LCBJJiMzOTttIHJlYWR5IHRvIHBvcHVsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMuIEkga25vdyB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzoKKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWAKKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggbW9kaWZpZXMgcmVhY2hhYmxlIG5ldHdvcmsgc3RhY2sgY29kZSBpbiBYRlJNIElQLVRGUyBlbmNhcHN1bGF0aW9uIGhhbmRsaW5nLiBNb3JlIHNwZWNpZmljYWxseSwgaXQmIzM5O3MgZml4aW5nIGBza2JgIGZyYWdtZW50IHJlZmNvdW50aW5nIGZvciBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIHdpdGhpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGxpZmVjeWNsZSBvZiBuZXR3b3JrIGJ1ZmZlcnMsIHNvIGl0JiMzOTtzIGEgaGlnaC12YWx1ZSB0YXJnZXQuCiogICBgRm9jdXNTeW1ib2xzYDogYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19wc2tiX2FkZF9mcmFnc2Ag4oCTIHRob3NlIGZ1bmN0aW9ucyBsb29rIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy4KKiAgIGBFbmFibGVDb25maWdzYDogYFhGUk1fSVBURlNgLCBgWEZSTV9VU0VSYCwgYFBBR0VfUE9PTGAg4oCTIHRoZXNlIGFyZSB0aGUgY29uZmlndXJhdGlvbnMgbmVlZGVkIHRvIHRyaWdnZXIgdGhlIHJlbGV2YW50IGNvZGUgcGF0aHMuCgpMb29rcyBnb29kISBFdmVyeXRoaW5nIGlzIHdlbGwtc3VwcG9ydGVkIGFuZCB2ZXJpZmllZC4gSSYjMzk7bSBjb25maWRlbnQgaW4gdGhlc2UgcGFyYW1ldGVycy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1hGUk1fSVBURlMmIzM0OywKICAgICYjMzQ7WEZSTV9VU0VSJiMzNDssCiAgICAmIzM0O1BBR0VfUE9PTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2lwdGZzX3NrYl9hZGRfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfY29uc3VtZV9mcmFncyYjMzQ7LAogICAgJiMzNDtpcHRmc19vdXRwdXRfcXVldWVkJiMzNDssCiAgICAmIzM0O2lwdGZzX3JlYXNzZW1fY29udCYjMzQ7LAogICAgJiMzNDtpcHRmc19wc2tiX2FkZF9mcmFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIGZyYWdtZW50IHBhZ2UgcmVmY291bnRpbmcgbG9naWMgaW4gbmV0L3hmcm0veGZybV9pcHRmcy5jIHRvIGNvcnJlY3RseSBoYW5kbGUgcGFnZV9wb29sLWJhY2tlZCBwYWdlcyAoY2hlY2tpbmcgcHBfcmVjeWNsZSBhbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIHBvb2wgcmVmY291bnQgdmlhIHBhZ2VfcG9vbF9yZWZfcGFnZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhZ2UgcmVmY291bnRpbmcpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBhbmQgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyIGxpZmVjeWNsZSwgd2FycmFudGluZyBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtYRlJNX0lQVEZTJiMzNDssCiAgICAmIzM0O1hGUk1fVVNFUiYjMzQ7LAogICAgJiMzNDtQQUdFX1BPT0wmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpcHRmc19za2JfYWRkX2ZyYWdzJiMzNDssCiAgICAmIzM0O2lwdGZzX2NvbnN1bWVfZnJhZ3MmIzM0OywKICAgICYjMzQ7aXB0ZnNfb3V0cHV0X3F1ZXVlZCYjMzQ7LAogICAgJiMzNDtpcHRmc19yZWFzc2VtX2NvbnQmIzM0OywKICAgICYjMzQ7aXB0ZnNfcHNrYl9hZGRfZnJhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuYwppbmRleCA2OTIwOTQwYTM1YjQ5Li5kM2JjYTkwZTJjMzg0IDEwMDY0NAotLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3hmcm0veGZybV9pcHRmcy5jCkBAIC0xNCw2ICYjNDM7MTQsNyBAQAogI2luY2x1ZGUgJmx0O25ldC9pY21wLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pbmV0X2Vjbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcGFnZV9wb29sL2hlbHBlcnMuaCZndDsKICNpbmNsdWRlICZsdDtuZXQveGZybS5oJmd0OwogCiAjaW5jbHVkZSAmbHQ7Y3J5cHRvL2FlYWQuaCZndDsKQEAgLTQ4Niw3ICYjNDM7NDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJdG9mcmFnLSZndDtsZW4gLT0gb2Zmc2V0OwogCQkJb2Zmc2V0ID0gMDsKIAkJfQotCQlfX3NrYl9mcmFnX3JlZih0b2ZyYWcpOwomIzQzOwkJaWYgKHdhbGstJmd0O3BwX3JlY3ljbGUpCiYjNDM7CQkJcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJX19za2JfZnJhZ19yZWYodG9mcmFnKTsKIAkJc2hpbmZvLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCXNoaW5mby0mZ3Q7ZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7CiAKQEAgLTIxNzEsNyAmIzQzOzIxNzUsMTEgQEAgc3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKQogCQluZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpOwogCX0gZWxzZSB7CiAJCWlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgJmFtcDt0b2ktJmd0O2ZyYWdzW3RvaS0mZ3Q7bnJfZnJhZ3NdKTsKLQkJc2tiX2ZyYWdfcmVmKHRvLCB0b2ktJmd0O25yX2ZyYWdzJiM0MzsmIzQzOyk7CiYjNDM7CQlpZiAoZnJvbS0mZ3Q7cHBfcmVjeWNsZSkKJiM0MzsJCQlwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSgmYW1wO3RvaS0mZ3Q7ZnJhZ3NbdG9pLSZndDtucl9mcmFnc10pKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlza2JfZnJhZ19yZWYodG8sIHRvaS0mZ3Q7bnJfZnJhZ3MpOwomIzQzOwkJdG9pLSZndDtucl9mcmFncyYjNDM7JiM0Mzs7CiAJCW5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpOwogCX0KIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQzNwoJCQkJCQkJb3V0cHV0OiA4MQoJCQkJCQkJdGhvdWdodHM6IDk0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0d29yayBTZWN1cml0eSBQYXRjaCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IGZvY3VzIG5lZWRzIHRvIGJlLiBGaXJzdCwgSSYjMzk7bGwgcmV2aWV3IHRoZSBkaWZmIGl0c2VsZiDigJMgcXVpY2tseSBhc3Nlc3MgdGhlIHNjb3BlIG9mIHRoZSBjaGFuZ2VzLiBUaGVuLCBJJiMzOTtsbCBuZWVkIHRvIHpvb20gb3V0IGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgdXNlIGByZWFkLWZpbGVgIHRvIHplcm8gaW4gb24gc3BlY2lmaWMgc2VjdGlvbnM6IHRoZSBhcmVhIGFyb3VuZCBsaW5lcyA0ODAtNTEwLCB3aGljaCBsaWtlbHkgZGVhbHMgd2l0aCBbaW5zZXJ0IHBsYXVzaWJsZSBjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIG15IGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFuZCB0aGlzIGZpbGUuIEV4YW1wbGU6ICYjMzQ7cGFja2V0IGNsYXNzaWZpY2F0aW9uJiMzNDsgb3IgJiMzNDtwb2xpY3kgbWFuYWdlbWVudCYjMzQ7XSwgYW5kIHRoZW4gdGhlIHNlY3Rpb24gYXJvdW5kIGxpbmVzIDIxNjAtMjIwMC4gVGhpcyBzZWNvbmQgYXJlYSBpcyBsaWtlbHkgcmVsYXRlZCB0byBbaW5zZXJ0IHBsYXVzaWJsZSBjb2RlIGZ1bmN0aW9uIGJhc2VkIG9uIHlvdXIga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIHRoaXMgZmlsZS4gRXhhbXBsZTogJiMzNDtoYW5kbGluZyBzcGVjaWZpYyBzZWN1cml0eSBwcm90b2NvbHMmIzM0OyBvciAmIzM0O2tleSBtYW5hZ2VtZW50JiMzNDtdLiBCeSBleGFtaW5pbmcgdGhlc2UgcmFuZ2VzIHNwZWNpZmljYWxseSwgSSBjYW4gcmFwaWRseSBncmFzcCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaCBhbmQgaWRlbnRpZnkgcG90ZW50aWFsIGlzc3VlcyBvciBvcHRpbWl6YXRpb25zLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xNSAwNjo1NzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC94ZnJtL3hmcm1faXB0ZnMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNDcwOlx0e1xuIDQ3MTpcdFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xuIDQ3MjpcdFx0dTMyIGZyYWdsZW47XG4gNDczOlx0XG4gNDc0Olx0XHRpZiAoIXdhbGstXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFx1MDAzZT0gd2Fsay1cdTAwM2V0b3RhbCAmIzQzOyB3YWxrLVx1MDAzZWluaXRpYWxfb2Zmc2V0KVxuIDQ3NTpcdFx0XHRyZXR1cm4gbGVuO1xuIDQ3NjpcdFxuIDQ3NzpcdFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xuIDQ3ODpcdFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xuIDQ3OTpcdFxuIDQ4MDpcdFx0d2hpbGUgKGxlbiBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2VmcmFnaSBcdTAwM2Mgd2Fsay1cdTAwM2Vucl9mcmFncykge1xuIDQ4MTpcdFx0XHRza2JfZnJhZ190ICpmcmFnID0gXHUwMDI2d2Fsay1cdTAwM2VmcmFnc1t3YWxrLVx1MDAzZWZyYWdpXTtcbiA0ODI6XHRcdFx0c2tiX2ZyYWdfdCAqdG9mcmFnID0gXHUwMDI2c2hpbmZvLVx1MDAzZWZyYWdzW3NoaW5mby1cdTAwM2Vucl9mcmFnc107XG4gNDgzOlx0XG4gNDg0Olx0XHRcdCp0b2ZyYWcgPSAqZnJhZztcbiA0ODU6XHRcdFx0aWYgKG9mZnNldCkge1xuIDQ4NjpcdFx0XHRcdHRvZnJhZy1cdTAwM2VvZmZzZXQgJiM0Mzs9IG9mZnNldDtcbiA0ODc6XHRcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiA0ODg6XHRcdFx0XHRvZmZzZXQgPSAwO1xuIDQ4OTpcdFx0XHR9XG4gNDkwOlx0XHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4gNDkxOlx0XHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4gNDkyOlx0XHRcdGVsc2VcbiA0OTM6XHRcdFx0XHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xuIDQ5NDpcdFx0XHRzaGluZm8tXHUwMDNlbnJfZnJhZ3MmIzQzOyYjNDM7O1xuIDQ5NTpcdFx0XHRzaGluZm8tXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4gNDk2Olx0XG4gNDk3Olx0XHRcdC8qIHNlZSBpZiB3ZSBhcmUgZG9uZSAqL1xuIDQ5ODpcdFx0XHRmcmFnbGVuID0gdG9mcmFnLVx1MDAzZWxlbjtcbiA0OTk6XHRcdFx0aWYgKGxlbiBcdTAwM2MgZnJhZ2xlbikge1xuIDUwMDpcdFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gPSBsZW47XG4gNTAxOlx0XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gbGVuO1xuIDUwMjpcdFx0XHRcdHNrYi1cdTAwM2VkYXRhX2xlbiAmIzQzOz0gbGVuO1xuIDUwMzpcdFx0XHRcdHJldHVybiAwO1xuIDUwNDpcdFx0XHR9XG4gNTA1Olx0XHRcdC8qIGFkdmFuY2UgdG8gbmV4dCBzb3VyY2UgZnJhZ21lbnQgKi9cbiA1MDY6XHRcdFx0bGVuIC09IGZyYWdsZW47XHRcdFx0LyogY2FyZWZ1bCwgdXNlIGRzdCBidl9sZW4gKi9cbiA1MDc6XHRcdFx0c2tiLVx1MDAzZWxlbiAmIzQzOz0gZnJhZ2xlbjtcdFx0LyogY2FyZWZ1bCwgXCYjMzQ7ICAgXCYjMzQ7ICAgIFwmIzM0OyAgICAgKi9cbiA1MDg6XHRcdFx0c2tiLVx1MDAzZWRhdGFfbGVuICYjNDM7PSBmcmFnbGVuO1x0LyogY2FyZWZ1bCwgXCYjMzQ7ICAgXCYjMzQ7ICAgIFwmIzM0OyAgICAgKi9cbiA1MDk6XHRcdFx0d2Fsay1cdTAwM2VwYXN0ICYjNDM7PSBmcmFnLVx1MDAzZWxlbjtcdC8qIGNhcmVmdWwsIHVzZSBzcmMgYnZfbGVuICovXG4gNTEwOlx0XHRcdHdhbGstXHUwMDNlZnJhZ2kmIzQzOyYjNDM7O1xuIDUxMTpcdFx0fVxuIDUxMjpcdFx0cmV0dXJuIGxlbjtcbiA1MTM6XHR9XG4gNTE0Olx0XG4gNTE1Olx0LyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqL1xuIDUxNjpcdC8qIElQVEZTIFRyYWNlIEV2ZW50IERlZmluaXRpb25zICAgICAgKi9cbiA1MTc6XHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXG4gNTE4Olx0XG4gNTE5Olx0I2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3hmcm0veGZybV9pcHRmcy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjE2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTYwOlx0XHRza2JfZnJhZ19saXN0X2luaXQoY2hpbGQpO1xuMjE2MTpcdFx0Y2hpbGQtXHUwMDNlbGVuIC09IGZsbGVuO1xuMjE2MjpcdFx0Y2hpbGQtXHUwMDNlZGF0YV9sZW4gLT0gZmxsZW47XG4yMTYzOlx0XG4yMTY0Olx0XHRyZXR1cm4gbmV4dHA7XG4yMTY1Olx0fVxuMjE2NjpcdFxuMjE2NzpcdHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbjIxNjg6XHR7XG4yMTY5Olx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICpmcm9taSA9IHNrYl9zaGluZm8oZnJvbSk7XG4yMTcwOlx0XHRzdHJ1Y3Qgc2tiX3NoYXJlZF9pbmZvICp0b2kgPSBza2Jfc2hpbmZvKHRvKTtcbjIxNzE6XHRcdHVuc2lnbmVkIGludCBuZXdfdHJ1ZXNpemU7XG4yMTcyOlx0XG4yMTczOlx0XHQvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gYSBoZWFkIHBhZ2UsIGdyYWIgaXQgKi9cbjIxNzQ6XHRcdGlmICghc2tiX2hlYWRsZW4oZnJvbSkpIHtcbjIxNzU6XHRcdFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcbjIxNzY6XHRcdH0gZWxzZSB7XG4yMTc3Olx0XHRcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pO1xuMjE3ODpcdFx0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxuMjE3OTpcdFx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG4yMTgwOlx0XHRcdGVsc2VcbjIxODE6XHRcdFx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncyk7XG4yMTgyOlx0XHRcdHRvaS1cdTAwM2Vucl9mcmFncyYjNDM7JiM0Mzs7XG4yMTgzOlx0XHRcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xuMjE4NDpcdFx0fVxuMjE4NTpcdFxuMjE4NjpcdFx0LyogTW92ZSBhbnkgb3RoZXIgcGFnZSBmcmFnbWVudHMgcmF0aGVyIHRoYW4gY29weSAqL1xuMjE4NzpcdFx0bWVtY3B5KFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdLCBmcm9taS1cdTAwM2VmcmFncyxcbjIxODg6XHRcdCAgICAgICBzaXplb2YoZnJvbWktXHUwMDNlZnJhZ3NbMF0pICogZnJvbWktXHUwMDNlbnJfZnJhZ3MpO1xuMjE4OTpcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzICYjNDM7PSBmcm9taS1cdTAwM2Vucl9mcmFncztcbjIxOTA6XHRcdGlmIChmcm9taS1cdTAwM2Vucl9mcmFncylcbjIxOTE6XHRcdFx0dG9pLVx1MDAzZWZsYWdzIHw9IGZyb21pLVx1MDAzZWZsYWdzIFx1MDAyNiBTS0JGTF9TSEFSRURfRlJBRztcbjIxOTI6XHRcdGZyb21pLVx1MDAzZW5yX2ZyYWdzID0gMDtcbjIxOTM6XHRcdGZyb20tXHUwMDNlZGF0YV9sZW4gPSAwO1xuMjE5NDpcdFx0ZnJvbS1cdTAwM2VsZW4gPSAwO1xuMjE5NTpcdFx0dG8tXHUwMDNldHJ1ZXNpemUgJiM0Mzs9IGZyb20tXHUwMDNldHJ1ZXNpemUgLSBuZXdfdHJ1ZXNpemU7XG4yMTk2Olx0XHRmcm9tLVx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xuMjE5NzpcdFxuMjE5ODpcdFx0LyogV2UgYXJlIGRvbmUgd2l0aCB0aGlzIFNLQiAqL1xuMjE5OTpcdFx0Y29uc3VtZV9za2IoZnJvbSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQzMzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipEaXZpbmcgaW50byBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCBgd2Fsay0mZ3Q7cHBfcmVjeWNsZWAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHBpbnBvaW50IHdoZXJlIHRoaXMgc3BlY2lmaWMgdmFyaWFibGUgaXMgZGVmaW5lZCBvciBpbml0aWFsaXplZC4gSSYjMzk7bSBnb2luZyB0byBraWNrIG9mZiBhIGBncmVwYCBzZWFyY2ggZm9yIGBwcF9yZWN5Y2xlYCB0byBzZWUgd2hlcmUgaXQgc2hvd3MgdXAgaW4gdGhlIGNvZGViYXNlLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBzdXNwZWN0IGl0JiMzOTtzIGdvaW5nIHRvIGJlIGluIGB4ZnJtX2lwdGZzLmNgLCBidXQgSSYjMzk7bGwgZG91YmxlLWNoZWNrIGl0LiBBZnRlciB0aGF0LCBJJiMzOTttIGdvaW5nIHRvIGV4cGFuZCBteSBzY29wZSBhbmQgZG8gYSBtb3JlIGNvbXByZWhlbnNpdmUgcmV2aWV3IG9mIHRoZSBlbnRpcmUgYHhmcm1faXB0ZnMuY2AgZmlsZSB0byBnZXQgYSBmZWVsIGZvciBob3cgYHdhbGstJmd0O3BwX3JlY3ljbGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUmIzM5O3Mgb3BlcmF0aW9uLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgd2hvbGUgZmlsZSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHBfcmVjeWNsZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC94ZnJtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQveGZybS90cmFjZV9pcHRmcy5oPTE2Mz1UUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcbi0tXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2OS1cdFx0XHQgICAgIF9fZmllbGQodTgsIGhlYWRfZnJhZylcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTcwOlx0XHRcdCAgICAgX19maWVsZCh1OCwgcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTcxLVx0XHRcdCAgICAgX19maWVsZCh1OCwgY2xvbmVkKVxuLS1cbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgwLVx0XHRcdCAgIF9fZW50cnktXHUwMDNlaGVhZF9mcmFnID0gc2tiLVx1MDAzZWhlYWRfZnJhZztcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTgxOlx0XHRcdCAgIF9fZW50cnktXHUwMDNlcHBfcmVjeWNsZSA9IHNrYi1cdTAwM2VwcF9yZWN5Y2xlO1xubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODItXHRcdFx0ICAgX19lbnRyeS1cdTAwM2VjbG9uZWQgPSBza2JfY2xvbmVkKHNrYik7XG4tLVxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODYtXHRcdCAgICApLFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxODc6XHQgICAgVFBfcHJpbnRrKFwmIzM0O0lOR1JQU1RROiBOVEhBREQ6IHNrYj0lcCBsZW49JXUgZGF0YV9sZW49JXUgc2hhcmVfb2s9JXUgaGVhZF9mcmFnPSV1IHBwX3JlY3ljbGU9JXUgY2xvbmVkPSV1IHNoYXJlZD0ldSBucl9mcmFncz0ldSBmcmFnX2xpc3Q9JXVcJiMzNDssXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4OC1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vza2IsIF9fZW50cnktXHUwMDNlc2tiX2xlbiwgX19lbnRyeS1cdTAwM2VkYXRhX2xlbiwgX19lbnRyeS1cdTAwM2VzaGFyZV9vayxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg5Olx0XHQgICAgICBfX2VudHJ5LVx1MDAzZWhlYWRfZnJhZywgX19lbnRyeS1cdTAwM2VwcF9yZWN5Y2xlLCBfX2VudHJ5LVx1MDAzZWNsb25lZCwgX19lbnRyeS1cdTAwM2VzaGFyZWQsXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5MC1cdFx0ICAgICAgX19lbnRyeS1cdTAwM2Vucl9mcmFncywgX19lbnRyeS1cdTAwM2VmcmFnX2xpc3QpKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9Mjk4PXN0YXRpYyB2b2lkIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgc2tiX2ZyYWdfdCAqZnJhZylcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzEzLSAqIEBmcmFnczogdGhlIHBhZ2UgZnJhZ21lbnRzIGluYy4gcm9vbSBmb3IgaGVhZCBwYWdlXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzE0OiAqIEBwcF9yZWN5Y2xlOiBjb3B5IG9mIHNrYi1cdTAwM2VwcF9yZWN5Y2xlXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xubmV0L3hmcm0veGZybV9pcHRmcy5jPTMxNj1zdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyMi1cdHNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHUyAmIzQzOyAxXTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMjM6XHRib29sIHBwX3JlY3ljbGU7XG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI0LX07XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTMzNT1zdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDYtXHR3YWxrLVx1MDAzZW5yX2ZyYWdzID0gMDtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozNDc6XHR3YWxrLVx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXHUwMDNlcHBfcmVjeWNsZTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDgtXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTQxMD1zdGF0aWMgYm9vbCBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTYtXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDE3Olx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cdTAwM2VwcF9yZWN5Y2xlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxOC1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00Njc9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ4OS1cdFx0fVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ5MDpcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00OTEtXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTc1ND1zdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDYtXHQgICAgKHNrYi1cdTAwM2VoZWFkX2ZyYWcgfHwgc2tiLVx1MDAzZWxlbiA9PSBza2ItXHUwMDNlZGF0YV9sZW4pIFx1MDAyNlx1MDAyNlxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwNzpcdCAgICBza2ItXHUwMDNlcHBfcmVjeWNsZSA9PSBuZXdza2ItXHUwMDNlcHBfcmVjeWNsZSkge1xubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOC1cdFx0ZnJhZ3dhbGsgPSBcdTAwMjZfZnJhZ3dhbGs7XG4tLVxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTc3LVx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKTtcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMTc4Olx0XHRpZiAoZnJvbS1cdTAwM2VwcF9yZWN5Y2xlKVxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzktXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjIwMj1zdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxuLS1cbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjk5LVxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzMDA6XHRcdFx0Lyogc2tiLVx1MDAzZXBwX3JlY3ljbGUgaXMgcGFzc2VkIHRvIF9fc2tiX2ZsYWdfdW5yZWYgZm9yIGFsbFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDEtXHRcdFx0ICogZnJhZyBwYWdlcyBzbyB3ZSBjYW4gb25seSBzaGFyZSBwYWdlcyB3aXRoIHNrYiYjMzk7cyB3aG9cbi0tXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMwNy1cdFx0XHQgICAgICghc2tiMi1cdTAwM2VoZWFkX2ZyYWcgXHUwMDI2XHUwMDI2IHNrYl9oZWFkbGVuKHNrYikpIHx8XG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwODpcdFx0XHQgICAgIHNrYi1cdTAwM2VwcF9yZWN5Y2xlICE9IHNrYjItXHUwMDNlcHBfcmVjeWNsZSB8fFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDktXHRcdFx0ICAgICBza2JfemNvcHkoc2tiMikgfHxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTUgMDY6NTc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjI4NAoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiAxMDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQYWdlIFJlZmVyZW5jZSBDb3VudGluZyBpbiBpcHRmcyBmb3IgUGFnZSBQb29sIEludGVncmF0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhpcyBwYXRjaCBpcyBhbGwgYWJvdXQgY29ycmVjdGx5IG1hbmFnaW5nIHBhZ2UgcmVmZXJlbmNlcywgc3BlY2lmaWNhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHRoZSBgcGFnZV9wb29sYCBtZWNoYW5pc20gd2l0aGluIHRoZSBgaXB0ZnNgIHN1YnN5c3RlbS4gVGhlIGNvcmUgaXNzdWUgaXMgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBzdGFuZGFyZCBwYWdlIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgaG93IHRoZSBgcGFnZV9wb29sYCBoYW5kbGVzIGl0LgoKUHJldmlvdXNseSwgYF9fc2tiX2ZyYWdfcmVmYCBhbmQgYHNrYl9mcmFnX3JlZmAgd2VyZSB1c2VkLCB3aGljaCByZWx5IG9uIHRoZSB0eXBpY2FsIGBwYWdlX3JlZl9pbmNgIGFuZCBgZ2V0X3BhZ2VgIG1ldGhvZHMuIEhvd2V2ZXIsIGZvciBwYWdlcyBtYW5hZ2VkIGJ5IHRoZSBgcGFnZV9wb29sYCAoYHBwX3JlY3ljbGVgIGlzIHNldCksIHRoZXNlIHN0YW5kYXJkIG1ldGhvZHMgYXJlIGluY29ycmVjdC4gVXNpbmcgdGhlbSBsZWFkcyB0byBwb3RlbnRpYWwgaXNzdWVzIGxpa2UgdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIGV2ZW4gcmVmZXJlbmNlIGNvdW50IGVycm9ycyB3aXRoaW4gdGhlIGBwYWdlX3Bvb2xgIGl0c2VsZi4gV2hlbiBhIHBhZ2UgaXMgZnJlZWQsIHRoZSBgcGFnZV9wb29sYCBjaGVja3MgaXRzIG93biByZWZlcmVuY2UgY291bnQgb3IgcmVjeWNsaW5nIGxvZ2ljLiBUaGlzIHBhdGNoIGVuc3VyZXMgdGhhdCBpZiBhIHBhZ2UgY29tZXMgZnJvbSB0aGUgcG9vbCwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgaXMgdXNlZCBpbnN0ZWFkLiBUaGlzIHRoZW4gY2FsbHMgYHBhZ2VfcG9vbF9yZWZfbmV0bWVtYCB3aGljaCBpcyB0aGUgY29ycmVjdCBtZXRob2QuCgpNeSBhbmFseXNpcyBub3cgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCYjMzk7cyBhcHBseSBteSBleHBlcnRpc2UgYW5kIHN5c3RlbWF0aWNhbGx5IHJldmlldyB0aGUgY3JpdGVyaWE6CgoxLiAgKipLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2U6KiogTm9wZSwgbm90aGluZyBoZXJlIGludm9sdmVzIHBhc3NpbmcgdW5pbml0aWFsaXplZCBkYXRhIHRvIHVzZXIgc3BhY2UuCjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzOioqIE5vLiBCb3RoIGB3YWxrLSZndDtwcF9yZWN5Y2xlYCBhbmQgYGZyb20tJmd0O3BwX3JlY3ljbGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGZpcnN0IGlzIGluaXRpYWxpemVkIGR1cmluZyBmcmFnIHdhbGsgcHJlcGFyYXRpb24sIGFuZCB0aGUgc2Vjb25kIGlzIHBhcnQgb2YgdGhlIGBza19idWZmYCBzdHJ1Y3QsIHdoaWNoIGlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgY3JlYXRlZC4KMy4gICoqVW5pbml0aWFsaXplZCBmaWVsZHMgaW4gbmV3bHkgYWxsb2NhdGVkIGRhdGEgc3RydWN0dXJlczoqKiBBZ2Fpbiwgbm90aGluZy4gVGhlIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuCjQuICAqKkJvdW5kcyBjaGVja3MgZXhwb3NpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk6KiogTm8sIHRoaXMgaXNuJiMzOTt0IGEgY29uY2VybiBoZXJlLgoKU28sIGFtIEkgbWlzc2luZyBzb21ldGhpbmc/IE5vLCB0aGlzIHBhdGNoIGp1c3QgY2hhbmdlcyB0aGUgcmVmZXJlbmNlIGNvdW50aW5nIG1lY2hhbmlzbSwgc3dpdGNoaW5nIHRvIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIHdoZW4gYXBwcm9wcmlhdGUuIFRoZSBwb3RlbnRpYWwgcmlza3MgaGVyZSBhcmUgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlcywgb3IgcmVmZXJlbmNlIGxlYWtzLCBhbGwgb2Ygd2hpY2ggYXJlIGFscmVhZHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBwYWdlIHBvb2wgZGVidWdnaW5nLCBub3QgS01TQU4uIFRoZSBwcm9ibGVtcyB0aGF0IGNhbiBhcmlzZSBmcm9tIHRoaXMgKmluY29ycmVjdCogcmVmIGNvdW50aW5nIGFyZSBkZXRlY3RlZCBieSBLQVNBTi4KCkkgYW0gY29uZmlkZW50LiBUaGVyZSBpcyBhYnNvbHV0ZWx5IG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgdG8gdXNlcnNwYWNlIGludHJvZHVjZWQgaGVyZS4gVGhlcmVmb3JlLCBhcHBseWluZyB0aGUgJiMzNDtUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLCBMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTJiMzNDsgcnVsZSwgYE5lZWRzS01TQU5gIHNob3VsZCBiZSBgZmFsc2VgLiBJIGNhbiBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzE1IDA2OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIElQLVRGUyAoSVAgVHJhZmZpYyBGbG93IFNlY3VyaXR5LCBuZXQveGZybS94ZnJtX2lwdGZzLmMpIHRvIGluY3JlbWVudCBwYWdlIHJlZmVyZW5jZXMgdXNpbmcgcGFnZV9wb29sX3JlZl9wYWdlKCkgaW5zdGVhZCBvZiBzdGFuZGFyZCBza2JfZnJhZ19yZWYoKSAvIF9fc2tiX2ZyYWdfcmVmKCkgd2hlbiBza2ItXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXG5cblN1Y2ggcmVmZXJlbmNlIGNvdW50aW5nIGlzc3VlcyBjYW4gbGVhZCB0byBwYWdlIHJlY3ljbGluZyBhbm9tYWxpZXMsIHVzZS1hZnRlci1mcmVlLCBvciByZWZjb3VudCB1bmRlcmZsb3cvb3ZlcmZsb3cgYnVncywgd2hpY2ggYXJlIGRldGVjdGVkIGJ5IEtBU0FOIG9yIHN0YW5kYXJkIGtlcm5lbCBwYWdlL3BhZ2VfcG9vbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtcy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSwgbW9kaWZ5LCBvciByZWFkIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSwgbm9yIGRvZXMgaXQgYWZmZWN0IHN0cnVjdHVyZSBjb3BpZXMgdG8gdXNlcnNwYWNlIG9yIGNvbnRyb2wgZmxvdyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhbHVlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTEuODM1Nzg0NDE3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg0NDE3MTExOTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlhGUk1fSVBURlNcIixcbiAgICBcIlhGUk1fVVNFUlwiLFxuICAgIFwiUEFHRV9QT09MXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXB0ZnNfc2tiX2FkZF9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfY29uc3VtZV9mcmFnc1wiLFxuICAgIFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICAgIFwiaXB0ZnNfcmVhc3NlbV9jb250XCIsXG4gICAgXCJpcHRmc19wc2tiX2FkZF9mcmFnc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHNrX2J1ZmYgZnJhZ21lbnQgcGFnZSByZWZjb3VudGluZyBsb2dpYyBpbiBuZXQveGZybS94ZnJtX2lwdGZzLmMgdG8gY29ycmVjdGx5IGhhbmRsZSBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIChjaGVja2luZyBwcF9yZWN5Y2xlIGFuZCBpbmNyZW1lbnRpbmcgdGhlIHBhZ2UgcG9vbCByZWZjb3VudCB2aWEgcGFnZV9wb29sX3JlZl9wYWdlIGluc3RlYWQgb2Ygc3RhbmRhcmQgcGFnZSByZWZjb3VudGluZykuIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBydW5uaW5nIElQc2VjIElQLVRGUyBlbmNhcHN1bGF0aW9uIGFuZCBhZmZlY3RzIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBidWZmZXIgbGlmZWN5Y2xlLCB3YXJyYW50aW5nIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjQ5OjUxLjgzNTc4ODQ4N1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ2OTI3NDEyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDY6NDk6NTAgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L3hmcm0veGZybV9pcHRmcy5jIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXFxuaW5kZXggNjkyMDk0MGEzNWI0OS4uZDNiY2E5MGUyYzM4NCAxMDA2NDRcXG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG4rKysgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcXG5AQCAtMTQsNiArMTQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2ljbXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfcm91dGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pbmV0X2Vjbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQveGZybS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2NyeXB0by9hZWFkLmhcXHUwMDNlXFxuQEAgLTQ4Niw3ICs0ODcsMTAgQEAgc3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuIC09IG9mZnNldDtcXG4gXFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gXFx0XFx0fVxcbi1cXHRcXHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xcbitcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG4rXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcXG4gXFx0XFx0c2hpbmZvLVxcdTAwM2Vucl9mcmFncysrO1xcbiBcXHRcXHRzaGluZm8tXFx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xcbiBcXG5AQCAtMjE3MSw3ICsyMTc1LDExIEBAIHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4gXFx0XFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcXG4gXFx0fSBlbHNlIHtcXG4gXFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxuLVxcdFxcdHNrYl9mcmFnX3JlZih0bywgdG9pLVxcdTAwM2Vucl9mcmFncysrKTtcXG4rXFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxuK1xcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXFx1MDAzZW5yX2ZyYWdzKTtcXG4rXFx0XFx0dG9pLVxcdTAwM2Vucl9mcmFncysrO1xcbiBcXHRcXHRuZXdfdHJ1ZXNpemUgPSBTS0JfREFUQV9BTElHTihzaXplb2Yoc3RydWN0IHNrX2J1ZmYpKTtcXG4gXFx0fVxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTMuMzA1NzMzMTI3WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0MDM5MDkxMTI1MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19za2JfYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19vdXRwdXRfcXVldWVkXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcImlwdGZzX3Bza2JfYWRkX2ZyYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNTE2MDBmMjdmNWFkMzU4MjQ4MDM2ZmU4N2Y5MGJkYzQ5Y2EyOWRkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMTUgMDY6NDk6NTAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQveGZybS94ZnJtX2lwdGZzLmMgYi9uZXQveGZybS94ZnJtX2lwdGZzLmNcbmluZGV4IDY5MjA5NDBhMzViNDkuLmQzYmNhOTBlMmMzODQgMTAwNjQ0XG4tLS0gYS9uZXQveGZybS94ZnJtX2lwdGZzLmNcbisrKyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuQEAgLTE0LDYgKzE0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaWNtcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9yb3V0ZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2luZXRfZWNuLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvcGFnZV9wb29sL2hlbHBlcnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC94ZnJtLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2NjcnlwdG8vYWVhZC5oXHUwMDNlXG5AQCAtNDg2LDcgKzQ4NywxMCBAQCBzdGF0aWMgaW50IGlwdGZzX3NrYl9hZGRfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHR0b2ZyYWctXHUwMDNlbGVuIC09IG9mZnNldDtcbiBcdFx0XHRvZmZzZXQgPSAwO1xuIFx0XHR9XG4tXHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4rXHRcdGlmICh3YWxrLVx1MDAzZXBwX3JlY3ljbGUpXG4rXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XG4rXHRcdGVsc2VcbitcdFx0XHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xuIFx0XHRzaGluZm8tXHUwMDNlbnJfZnJhZ3MrKztcbiBcdFx0c2hpbmZvLVx1MDAzZWZsYWdzIHw9IFNLQkZMX1NIQVJFRF9GUkFHO1xuIFxuQEAgLTIxNzEsNyArMjE3NSwxMSBAQCBzdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXG4gXHRcdG5ld190cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChmcm9tKSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKTtcbi1cdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MrKyk7XG4rXHRcdGlmIChmcm9tLVx1MDAzZXBwX3JlY3ljbGUpXG4rXHRcdFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pKTtcbitcdFx0ZWxzZVxuK1x0XHRcdHNrYl9mcmFnX3JlZih0bywgdG9pLVx1MDAzZW5yX2ZyYWdzKTtcbitcdFx0dG9pLVx1MDAzZW5yX2ZyYWdzKys7XG4gXHRcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xuIFx0fVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NDk6NTMuMzA1NzM1MTA3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDQwMjc4NjcxOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB4ZnJtX2lwdGZzIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSB0YXNrIGJlZm9yZSBtZSBpbnZvbHZlcyBhIHBhdGNoIHRoYXQgdG91Y2hlcyBgbmV0L3hmcm0veGZybV9pcHRmcy5jYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQ7IEkgbmVlZCB0byBzY3J1dGluaXplIHRoYXQgZ2l0IGRpZmYuIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIG5vdCBqdXN0IHRoZSBjaGFuZ2VkIGxpbmVzLCBidXQgdGhlIHN1cnJvdW5kaW5nIGNvbnRleHQuIEl0J3MgY3J1Y2lhbCB0byBncmFzcCB0aGUgaW50ZW50IGFuZCB0aGUgcG90ZW50aWFsIGltcGFjdC5cblxuU3BlY2lmaWNhbGx5LCBJJ2xsIHplcm8gaW4gb24gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AgYW5kIHRha2UgYSBsb29rIGFyb3VuZCBsaW5lIDQ4NiBhbmQgbGluZSAyMTcxLCBnZXQgYSBmZWVsIGZvciB0aGUgYXJlYXMgZGlyZWN0bHkgYWZmZWN0ZWQuIEkga25vdyBmcm9tIGV4cGVyaWVuY2UgdGhhdCBjaGFuZ2VzIGluIG9uZSBwYXJ0IGNhbiByaXBwbGUgdGhyb3VnaCBvdGhlcnMuXG5cbkFuZCBvZiBjb3Vyc2UsIEkgc2hvdWxkIGFsc28gY2hlY2sgdGhlIGNvcnJlc3BvbmRpbmcgS2NvbmZpZyBmb3IgdGhhdCBmaWxlLiBDb25maWd1cmF0aW9ucyBhcmUgYSBrZXkgcGFydCBvZiBob3cgdGhpcyBhbGwgZml0cyB0b2dldGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIyNSwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjM3LjMzMzYwNTA1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MzA4NDIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcHRmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDg2NyBsaW5lcy5cXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXFxuXFxubmV0L3hmcm0vTWFrZWZpbGU9MjM9b2JqLSQoQ09ORklHX1hGUk1fSU5URVJGQUNFKSArPSB4ZnJtX2ludGVyZmFjZS5vXFxubmV0L3hmcm0vTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1hGUk1fSVBURlMpICs9IHhmcm1faXB0ZnMub1xcbm5ldC94ZnJtL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19YRlJNX0VTUElOVENQKSArPSBlc3BpbnRjcC5vXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjI6LyogeGZybV90cmFjZV9pcHRmcy5oXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0zLSAqXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTktI3VuZGVmIFRSQUNFX1NZU1RFTVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTA6I2RlZmluZSBUUkFDRV9TWVNURU0gaXB0ZnNcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTExLVxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGE7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIyOlRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjM6XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXFx0ICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBibGtvZmYpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC02Ny1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY4OkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6Njk6XFx0XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC03MC1cXHRcXHRcXHQgICAgIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtOTUtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo5NjpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LCBpcHRmc19lbnF1ZXVlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6OTc6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05OC1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC05OS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMDpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wcmVxX2V2ZW50LCBpcHRmc19ub19xdWV1ZV9zcGFjZSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwMTpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwMi1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDMtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDQ6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCwgaXB0ZnNfdG9vX2JpZyxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEwNTpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEwNi1cXHQgICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBwbXR1LCB3YXNfZ3NvKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDctXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDg6REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTA5LVxcdFxcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLCBzdHJ1Y3QgaXBoZHIgKmlwaCksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEyOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEzMDpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfZGVxdWV1ZSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzMS1cXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHUzMiBtdHUsIHUxNiBibGtvZmYsXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTEzNC1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjEzNTpERUZJTkVfRVZFTlQoaXB0ZnNfaW5ncmVzc19wb3N0cV9ldmVudCwgaXB0ZnNfZmlyc3RfZnJhZ21lbnRpbmcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMzYtXFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMzktXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNDA6REVGSU5FX0VWRU5UKGlwdGZzX2luZ3Jlc3NfcG9zdHFfZXZlbnQsIGlwdGZzX2ZpcnN0X2ZpbmFsX2ZyYWdtZW50LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTQxLVxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG10dSwgdTE2IGJsa29mZixcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTQ0LVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTQ1OkRFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3Bvc3RxX2V2ZW50LCBpcHRmc19maXJzdF90b29iaWcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDYtXFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgbXR1LCB1MTYgYmxrb2ZmLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNDktXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNTA6VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfcGVlayxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE1MS1cXHQgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIHJlbWFpbmluZyksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2Mi1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE2MzpUUkFDRV9FVkVOVChpcHRmc19pbmdyZXNzX250aF9hZGQsIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHU4IHNoYXJlX29rKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2NC1cXHQgICAgVFBfQVJHUyhza2IsIHNoYXJlX29rKSxcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTkxLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTkyOkRFQ0xBUkVfRVZFTlRfQ0xBU1MoaXB0ZnNfdGltZXJfZXZlbnQsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTM6XFx0XFx0ICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTQtXFx0XFx0ICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTctXFx0XFx0ICAgIFRQX2Zhc3RfYXNzaWduKF9fZW50cnktXFx1MDAzZXRpbWVfdmFsID0gdGltZV92YWw7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxOTg6XFx0XFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlc2V0X3RpbWUgPSB4dGZzLVxcdTAwM2VpcHRmc19zZXR0aW1lO1xcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTk5LVxcdFxcdFxcdCAgICApLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDItXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDM6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9zdGFydCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwNDpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCB0aW1lX3ZhbCksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDUtXFx0ICAgICBUUF9BUkdTKHh0ZnMsIHRpbWVfdmFsKSk7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMDYtXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDc6REVGSU5FX0VWRU5UKGlwdGZzX3RpbWVyX2V2ZW50LCBpcHRmc190aW1lcl9leHBpcmUsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoyMDg6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgdGltZV92YWwpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjA5LVxcdCAgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCkpO1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTYtI3VuZGVmIFRSQUNFX0lOQ0xVREVfRklMRVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjE3OiNkZWZpbmUgVFJBQ0VfSU5DTFVERV9GSUxFIHRyYWNlX2lwdGZzXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMTgtI2luY2x1ZGUgXFx1MDAzY3RyYWNlL2RlZmluZV90cmFjZS5oXFx1MDAzZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjovKiB4ZnJtX2lwdGZzOiBJUFRGUyBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMy0gKlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIyLSNpbmNsdWRlIFxcXCJ4ZnJtX2lub3V0LmhcXFwiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzOiNpbmNsdWRlIFxcXCJ0cmFjZV9pcHRmcy5oXFxcIlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05Ni1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTc6LyogTWluIHRvIHRyeSB0byBzaGFyZSBvdXRlciBpcHRmcyBza2IgZGF0YSB2cyBjb3B5aW5nIGludG8gbmV3IHNrYiAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05OC0jZGVmaW5lIElQVEZTX1BLVF9TSEFSRV9NSU4gMTI5XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA0LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDU6ICogc3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIC0gY29uZmlndXJhdGlvbiBmb3IgdGhlIElQVEZTIHR1bm5lbC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTA2LSAqIEBwa3Rfc2l6ZTogc2l6ZSBvZiB0aGUgb3V0ZXIgSVAgcGFja2V0LiAwIHRvIHVzZSBpbnRlcmZhY2UgYW5kIE1UVSBkaXNjb3ZlcnksXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTU6c3RydWN0IHhmcm1faXB0ZnNfY29uZmlnIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE2LVxcdHUzMiBwa3Rfc2l6ZTtcXHQgICAgLyogb3V0ZXJfcGFja2V0X3NpemUgb3IgMCAqL1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTEyMj1zdHJ1Y3Qgc2tiX3dzZXEge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNy0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI4OiAqIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgLSBtb2RlIHNwZWNpZmljIHhmcm0gc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOS0gKiBAY2ZnOiBJUFRGUyB0dW5uZWwgY29uZmlnLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzNC0gKiBAaW5pdF9kZWxheV9uczogbmFub3NlY29uZHMgdG8gd2FpdCB0byBzZW5kIGluaXRpYWwgSVBURlMgcGFja2V0Llxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzU6ICogQGlwdGZzX3RpbWVyOiBvdXRwdXQgdGltZXIuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzNjogKiBAaXB0ZnNfc2V0dGltZTogdGltZSB0aGUgb3V0cHV0IHRpbWVyIHdhcyBzZXQuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzNy0gKiBAcGF5bG9hZF9tdHU6IG1heCBwYXlsb2FkIHNpemUuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgY2ZnO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTU5LVxcdHU2NCBpbml0X2RlbGF5X25zO1xcdCAgICAvKiBuYW5vc2Vjb25kcyAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjA6XFx0c3RydWN0IGhydGltZXIgaXB0ZnNfdGltZXI7IC8qIG91dHB1dCB0aW1lciAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE6XFx0dGltZTY0X3QgaXB0ZnNfc2V0dGltZTtcXHQgICAgLyogdGltZSB0aW1lciB3YXMgc2V0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2Mi1cXHR1MzIgcGF5bG9hZF9tdHU7XFx0ICAgIC8qIG1heCBwYXlsb2FkIHNpemUgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDpzdGF0aWMgdTMyIF9faXB0ZnNfZ2V0X2lubmVyX210dShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgaW50IG91dGVyX210dSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZGVsYXlfdGltZXIoc3RydWN0IGhydGltZXIgKm1lKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgyOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kcm9wX3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjM9c3RhdGljIHU2NCBfX2VzcF9zZXEoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIzNTogKiBpcHRmc19hbGxvY19za2IoKSAtIEFsbG9jYXRlIGEgbmV3IGBza2JgLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzYtICogQHRwbDogdGhlIHNrYiB0byBjb3B5IHJlcXVpcmVkIG1ldGEtZGF0YSBmcm9tLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYwOnN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfYWxsb2Nfc2tiKHN0cnVjdCBza19idWZmICp0cGwsIHUzMiBsZW4sIGJvb2wgbDNyZXN2KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5My0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6Mjk0OiAqIGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoKSAtIGluaXRpYWxpemUgYSBza2JfZnJhZ190IGJhc2VkIG9uIHNrYiBoZWFkIGRhdGFcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjk1LSAqIEBza2I6IHNrYiB3aXRoIHRoZSBoZWFkIGRhdGFcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yOTctICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI5ODpzdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI5OS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzA2LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMDc6ICogc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgLSB1c2UgdG8gdHJhY2sgYSB3YWxrIHRocm91Z2ggZnJhZ21lbnRzXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMwOC0gKiBAZnJhZ2k6IGN1cnJlbnQgZnJhZ21lbnQgaW5kZXhcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMTUtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNjpzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNy1cXHR1MzIgZnJhZ2k7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI2LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMjc6ICogaXB0ZnNfc2tiX3ByZXBhcmVfZnJhZ193YWxrKCkgLSBpbml0aWFsaXplIGEgZnJhZyB3YWxrIG92ZXIgYW4gc2tiLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjgtICogQHNrYjogdGhlIHNrYiB0byB3YWxrLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMzNC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzM1OnN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMzNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsaylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzM3LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNTMtXFx0XFx0XFx0ZnJhZyA9IFxcdTAwMjZ3YWxrLVxcdTAwM2VmcmFnc1t3YWxrLVxcdTAwM2Vucl9mcmFncysrXTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzU0OlxcdFxcdFxcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoc2tiLCBmcmFnKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzU1LVxcdFxcdFxcdGZyYWctXFx1MDAzZW9mZnNldCArPSBpbml0aWFsX29mZnNldDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zODAtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM4MTpzdGF0aWMgdTMyIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM4Mi1cXHRcXHRcXHRcXHQgICAgIHUzMiBvZmZzZXQpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDAxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MDI6ICogaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoKSAtIGNoZWNrIGlmIG9rIHRvIGFkZCBmcmFncyBmcm9tIHdhbGsgdG8gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwMy0gKiBAc2tiOiBza2IgdG8gY2hlY2sgZm9yIGFkZGluZyBmcmFncyB0b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQwOS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDEwOnN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxMTpcXHRcXHRcXHRcXHQgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxMi1cXHRcXHRcXHRcXHQgICAgdTMyIG9mZnNldCwgdTMyIGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjAtXFx0LyogUmVqZWN0IGFuIEBvZmZzZXQgdGhhdCBpcyBhdCBvciBiZXlvbmQgdGhlIGVuZCBvZiB0aGUgd2FsaydzIGRhdGFcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDIxOlxcdCAqIGJlZm9yZSBjYWxsaW5nIGlwdGZzX3NrYl9yZXNldF9mcmFnX3dhbGsoKSwgd2hvc2UgZnJhZ21lbnQtYWR2YW5jZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjgtXFx0LyogTWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Mjk6XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MzAtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDUzLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0NTQ6ICogaXB0ZnNfc2tiX2FkZF9mcmFncygpIC0gYWRkIGEgcmFuZ2Ugb2YgZnJhZ21lbnQgcmVmZXJlbmNlcyBpbnRvIGFuIHNrYlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTUtICogQHNrYjogc2tiIHRvIGFkZCByZWZlcmVuY2VzIGludG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTktICpcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDYwOiAqIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKCkgc2hvdWxkIGJlIGNhbGxlZCBiZWZvcmUgdGhpcyBmdW5jdGlvbiB0byB2ZXJpZnlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDYxLSAqIHRoYXQgdGhlIGRlc3RpbmF0aW9uIEBza2IgaXMgY29tcGF0aWJsZSB3aXRoIHRoZSB3YWxrIGFuZCBoYXMgc3BhY2UgaW4gdGhlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDY2LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Njc6c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ2ODpcXHRcXHRcXHQgICAgICAgc3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsgKndhbGssIHUzMiBvZmZzZXQsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2OS1cXHRcXHRcXHQgICAgICAgdTMyIGxlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzctXFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0Nzg6XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NzktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTE5LSNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1MjA6I2luY2x1ZGUgXFxcInRyYWNlX2lwdGZzLmhcXFwiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTUyMS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjYtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjUyNzogKiBpcHRmc19wc2tiX2FkZF9mcmFncygpIC0gQ3JlYXRlIGFuZCBhZGQgZnJhZ3MgaW50byBhIG5ldyBza19idWZmLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01MjgtICogQHRwbDogdGVtcGxhdGUgdG8gY3JlYXRlIG5ldyBza2IgZnJvbS5cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz01NDQ9c3RhdGljIHN0cnVjdCBza19idWZmICpcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTQ1OmlwdGZzX3Bza2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICp0cGwsIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDYtXFx0XFx0ICAgICB1MzIgb2ZmLCB1MzIgbGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBjb3B5X2xlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NDktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU1MDpcXHRza2IgPSBpcHRmc19hbGxvY19za2IodHBsLCBjb3B5X2xlbiwgZmFsc2UpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NTEtXFx0aWYgKCFza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTU0LVxcdC8qIHRoaXMgc2hvdWxkIG5vdCBub3JtYWxseSBiZSBoYXBwZW5pbmcgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTU1OlxcdGlmICghaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3Moc2tiLCB3YWxrLCBvZmYgKyBjb3B5X2xlbixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTU2LVxcdFxcdFxcdFxcdCAgICAgbGVuIC0gY29weV9sZW4pKSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTY4LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1Njk6XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhza2IsIHdhbGssIG9mZiArIGNvcHlfbGVuLCBsZW4gLSBjb3B5X2xlbik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3MC1cXHRyZXR1cm4gc2tiO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU3My0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NTc0OiAqIGlwdGZzX3Bza2JfZXh0cmFjdF9zZXEoKSAtIENyZWF0ZSBhbmQgbG9hZCBkYXRhIGludG8gYSBuZXcgc2tfYnVmZi5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTc1LSAqIEBza2JsZW46IHRoZSB0b3RhbCBkYXRhIHNpemUgZm9yIGBza2JgLlxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU4OT1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo1OTA6aXB0ZnNfcHNrYl9leHRyYWN0X3NlcSh1MzIgc2tibGVuLCBzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmYsIGludCBsZW4pXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5MS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU5MjpcXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiID0gaXB0ZnNfYWxsb2Nfc2tiKHN0LVxcdTAwM2Vyb290X3NrYiwgc2tibGVuLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTU5My1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MDQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjYwNTogKiBpcHRmc19pbnB1dF9zYXZlX3J1bnQoKSAtIHNhdmUgZGF0YSBpbiB4dGZzIHJ1bnQgc3BhY2UuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYwNi0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyMy0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjI0OiAqIF9faXB0ZnNfaXBobGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGhlYWRlciBsZW5ndGggdXNpbmcgcGFja2V0IGRhdGEuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYyNS0gKiBAZGF0YTogcG9pbnRlciBhdCBvY3RldCB3aXRoIHZlcnNpb24gbmliYmxlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMwLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo2MzE6c3RhdGljIHUzMiBfX2lwdGZzX2lwaGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjMyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NDAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY0MTogKiBfX2lwdGZzX2lwbGVuKCkgLSByZXR1cm4gdGhlIHY0L3Y2IGxlbmd0aCB1c2luZyBwYWNrZXQgZGF0YS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjQyLSAqIEBkYXRhOiBwb2ludGVyIHRvIGlwICh2NC92NikgcGFja2V0IGhlYWRlclxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY1MC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjUxOnN0YXRpYyB1MzIgX19pcHRmc19pcGxlbih1OCAqZGF0YSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjUyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02NjEtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjY2MjogKiBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoKSAtIGZpbmlzaCBwcmVwYXJpbmcgdGhlIGlubmVyIHBhY2tldCBmb3IgZ3JvIHJlY3YuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY2My0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTY3MC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjcxOnN0YXRpYyB2b2lkIGlwdGZzX2NvbXBsZXRlX2lubmVyX3NrYihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNjcyLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MDktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcxMDpzdGF0aWMgdm9pZCBfX2lwdGZzX3JlYXNzZW1fZG9uZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBib29sIGZyZWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcxMS17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzIxLS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MjI6ICogaXB0ZnNfcmVhc3NlbV9hYm9ydCgpIC0gSW4tcHJvZ3Jlc3MgcGFja2V0IGlzIGFib3J0ZWQgZnJlZSB0aGUgc3RhdGUuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyMy0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MjQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNTpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2Fib3J0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNi17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjcyNzpcXHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCB0cnVlKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI4LX1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzAtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczMTogKiBpcHRmc19yZWFzc2VtX2RvbmUoKSAtIEluLXByb2dyZXNzIHBhY2tldCBpcyBjb21wbGV0ZSwgY2xlYXIgdGhlIHN0YXRlLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzItICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzMzLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MzQ6c3RhdGljIHZvaWQgaXB0ZnNfcmVhc3NlbV9kb25lKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNjpcXHRfX2lwdGZzX3JlYXNzZW1fZG9uZSh4dGZzLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTczNy19XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM5LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3NDA6ICogaXB0ZnNfcmVhc3NlbV9jb250KCkgLSBDb250aW51ZSB0aGUgcmVhc3NlbWJseSBvZiBhbiBpbm5lciBwYWNrZXRzLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NDEtICogQHh0ZnM6IHh0ZnMgc3RhdGVcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTc1Ny17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1ODpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayBfZnJhZ3dhbGs7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1OTpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NjAtXFx0c3RydWN0IHNrX2J1ZmYgKm5ld3NrYiA9IHh0ZnMtXFx1MDAzZXJhX25ld3NrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04MTItXFx0XFx0LyogVGhlIHN0YXJ0IG9mIHRoaXMgaW5uZXIgcGFja2V0IHdhcyBhdCB0aGUgdmVyeSBlbmQgb2YgdGhlIGxhc3RcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODEzOlxcdFxcdCAqIGlwdGZzIHBheWxvYWQgd2hpY2ggZGlkbid0IGluY2x1ZGUgZW5vdWdoIGZvciB0aGUgaXAgaGVhZGVyXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgxNC1cXHRcXHQgKiBsZW5ndGggZmllbGQuIFdlIG11c3QgaGF2ZSAqYXQgbGVhc3QqIHRoYXQgbm93Llxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgzMy1cXHRcXHQgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM0OlxcdFxcdGlwcmVtYWluID0gX19pcHRmc19pcGxlbih4dGZzLVxcdTAwM2VyYV9ydW50KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODM1OlxcdFxcdGlmIChpcHJlbWFpbiBcXHUwMDNjIF9faXB0ZnNfaXBobGVuKHh0ZnMtXFx1MDAzZXJhX3J1bnQpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTgzNi1cXHRcXHRcXHQvKiBsZW5ndGggaGFzIHRvIGJlIGF0IGxlYXN0IHRoZSBJUCBoZWFkZXIgc2l6ZSAqL1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg0NS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6ODQ2OlxcdFxcdG5ld3NrYiA9IGlwdGZzX2FsbG9jX3NrYihza2IsIGlwcmVtYWluLCBmYWxzZSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg0Ny1cXHRcXHRpZiAoIW5ld3NrYikge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTg2Mi1cXHQvKiBDb250aW51ZSByZWFzc2VtYmxpbmcgdGhlIHBhY2tldCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo4NjM6XFx0aXByZW1haW4gPSBfX2lwdGZzX2lwbGVuKG5ld3NrYi1cXHUwMDNlZGF0YSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjg2NDpcXHRpcGhsZW4gPSBfX2lwdGZzX2lwaGxlbihuZXdza2ItXFx1MDAzZWRhdGEpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy04NjUtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA4LVxcdFxcdGZyYWd3YWxrID0gXFx1MDAyNl9mcmFnd2FsaztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTA5OlxcdFxcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTEwLVxcdH1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MTMtXFx0aWYgKGZyYWd3YWxrIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkxNDpcXHQgICAgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbikpIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTE1OlxcdFxcdGlwdGZzX3NrYl9hZGRfZnJhZ3MobmV3c2tiLCBmcmFnd2FsaywgZGF0YSwgY29weWxlbik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkxNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzNS1cXHRcXHQvKiBXZSBhcmUgZG9uZSB3aXRoIHBhY2tldCByZWFzc2VtYmx5ISAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MzY6XFx0XFx0aXB0ZnNfcmVhc3NlbV9kb25lKHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5Mzc6XFx0XFx0aXB0ZnNfY29tcGxldGVfaW5uZXJfc2tiKHh0ZnMtXFx1MDAzZXgsIG5ld3NrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkzOC1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZuZXdza2ItXFx1MDAzZWxpc3QsIGxpc3QpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk0NS1cXHRpZiAoeHRmcy1cXHUwMDNlcmFfbmV3c2tiKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk0NjpcXHRcXHRpcHRmc19yZWFzc2VtX2Fib3J0KHh0ZnMpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NDctXFx0fSBlbHNlIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz05NTU9c3RhdGljIGJvb2wgX19pbnB1dF9wcm9jZXNzX3BheWxvYWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHUzMiBkYXRhLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTk1OS1cXHR1OCBoYnl0ZXNbc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKV07XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MDpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayBfZnJhZ3dhbGs7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2MTpcXHRzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqZnJhZ3dhbGsgPSBOVUxMO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjItXFx0c3RydWN0IHNrX2J1ZmYgKmRlZmVyLCAqZmlyc3Rfc2tiLCAqbmV4dCwgKnNrYjtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYzLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXFx0c3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAwNS1cXHRcXHRcXHRcXHQvKiBzYXZlIHRoZSBieXRlcyB3ZSBoYXZlLCBhZHZhbmNlIGRhdGEgYW5kIGV4aXQgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTAwNjpcXHRcXHRcXHRcXHRpcHRmc19pbnB1dF9zYXZlX3J1bnQoeHRmcywgc2VxLCBoYnl0ZXMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcmVtYWluaW5nKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDI0LVxcdFxcdFxcdFxcdC8qIHNhdmUgdGhlIGJ5dGVzIHdlIGhhdmUsIGFkdmFuY2UgZGF0YSBhbmQgZXhpdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMDI1OlxcdFxcdFxcdFxcdGlwdGZzX2lucHV0X3NhdmVfcnVudCh4dGZzLCBzZXEsIGhieXRlcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTAyNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICByZW1haW5pbmcpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTExMTYtXFx0XFx0XFx0XFx0ZnJhZ3dhbGsgPSBcXHUwMDI2X2ZyYWd3YWxrO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMTE3OlxcdFxcdFxcdFxcdGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2Fsayhza2IsIGRhdGEsIGZyYWd3YWxrKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTExOC1cXHRcXHRcXHRcXHRkZWZlciA9IHNrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQwLVxcdFxcdFxcdCAgICAvKiBUcnkgY3JlYXRpbmcgc2tiIGFuZCBhZGRpbmcgZnJhZ3MgKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE0MTpcXHRcXHRcXHQgICAgIShza2IgPSBpcHRmc19wc2tiX2FkZF9mcmFncyhmaXJzdF9za2IsIGZyYWd3YWxrLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQyLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBkYXRhLCBjYXB0dXJlbGVuLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQzLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCBza2JzZXEsIGlwaGxlbikpKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNDQ6XFx0XFx0XFx0XFx0c2tiID0gaXB0ZnNfcHNrYl9leHRyYWN0X3NlcShpcGxlbiwgc2tic2VxLCBkYXRhLCBjYXB0dXJlbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE0NS1cXHRcXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4MS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTE4MjpcXHRcXHRpcHRmc19jb21wbGV0ZV9pbm5lcl9za2IoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTE4My1cXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZza2ItXFx1MDAzZWxpc3QsIHN1Ymxpc3QpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMjQ6ICogaXB0ZnNfaW5wdXRfb3JkZXJlZCgpIC0gaGFuZGxlIG5leHQgaW4gb3JkZXIgSVBURlMgcGF5bG9hZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIyNS0gKiBAeDogeGZybSBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMjktICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzA6c3RhdGljIHZvaWQgaXB0ZnNfaW5wdXRfb3JkZXJlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzMS17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzI6XFx0c3RydWN0IGlwX2lwdGZzX2NjX2hkciBpcHRjY2g7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzMtXFx0c3RydWN0IHNrYl9zZXFfc3RhdGUgc2tic2VxO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjM0LVxcdHN0cnVjdCBsaXN0X2hlYWQgc3VibGlzdDsgLyogcmVuYW1lIHRoaXMgaXQncyBqdXN0IGEgbGlzdCAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjM1OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzY6XFx0c3RydWN0IGlwX2lwdGZzX2hkciAqaXB0aDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNy1cXHRzdHJ1Y3QgbmV0ICpuZXQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI0Ny1cXHQvKiBMYXJnZSBlbm91Z2ggdG8gaG9sZCBib3RoIHR5cGVzIG9mIGhlYWRlciAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjQ4OlxcdGlwdGggPSAoc3RydWN0IGlwX2lwdGZzX2hkciAqKVxcdTAwMjZpcHRjY2g7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyNDktXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI1OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTI2MDpcXHR0cmFjZV9pcHRmc19lZ3Jlc3NfcmVjdihza2IsIHh0ZnMsIGJlMTZfdG9fY3B1KGlwdGgtXFx1MDAzZWJsb2NrX29mZnNldCkpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMjYxLVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTEtXFx0XFx0aWYgKGJsa29mZiB8fCB4dGZzLVxcdTAwM2VyYV9ydW50bGVuIHx8IHh0ZnMtXFx1MDAzZXJhX25ld3NrYikge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjkyOlxcdFxcdFxcdGRhdGEgPSBpcHRmc19yZWFzc2VtX2NvbnQoeHRmcywgc2VxLCBcXHUwMDI2c2tic2VxLCBza2IsIGRhdGEsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyOTMtXFx0XFx0XFx0XFx0XFx0XFx0ICBibGtvZmYsIFxcdTAwMjZzdWJsaXN0KTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzEyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzEzOnN0YXRpYyB2b2lkIF9fdmVjX3NoaWZ0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBzaGlmdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMxNC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyNi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMyNzpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfcGFzdChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMjgtXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqZnJlZWxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzMi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTMzMzpzdGF0aWMgdTMyIF9fcmVvcmRlcl9kcm9wKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMzQtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM3OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTM4MDpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfdGhpcyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzODEtXFx0XFx0XFx0ICAgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDA5OnN0YXRpYyB2b2lkIGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyhzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBpbnQgaW5kZXgpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MTAte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MzUtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MzY6c3RhdGljIHZvaWQgX19yZW9yZGVyX2Z1dHVyZV9maXRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MzctXFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ4Mi1cXHR4dGZzLVxcdTAwM2V3X3NhdmVkbGVuID0gbWF4KHNhdmVkbGVuLCBpbmRleCArIDEpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDgzOlxcdGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyh4dGZzLCBpbmRleCk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODQtfVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDg2OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjE2LVxcdHh0ZnMtXFx1MDAzZXdfc2F2ZWRbeHRmcy1cXHUwMDNld19zYXZlZGxlbiAtIDFdLnNrYiA9IGluc2tiO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjE3OlxcdGlwdGZzX3NldF93aW5kb3dfZHJvcF90aW1lcyh4dGZzLCB4dGZzLVxcdTAwM2V3X3NhdmVkbGVuIC0gMSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MTgtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTYzMjpzdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9yZW9yZGVyKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2MzMtXFx0XFx0XFx0XFx0c3RydWN0IHNrX2J1ZmYgKmluc2tiLCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2NTgtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2NTk6ICogaXB0ZnNfZHJvcF90aW1lcigpIC0gSGFuZGxlIGRyb3AgdGltZXIgZXhwaXJ5Llxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjYwLSAqIEBtZTogdGhlIHRpbWVyXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY3OS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTY4MDpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODMtXFx0c3RydWN0IGxpc3RfaGVhZCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjg0OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE2ODUtXFx0c3RydWN0IHhmcm1fc3RhdGUgKng7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMS1cXHRcXHRcXHRza2JfbGlzdF9kZWxfaW5pdChza2IpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzEyOlxcdFxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxMy1cXHRcXHR9XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcxOS0vKipcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyMDogKiBpcHRmc19pbnB1dCgpIC0gaGFuZGxlIHJlY2VpcHQgb2YgaXB0ZnMgcGF5bG9hZFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzIxLSAqIEB4OiB4ZnJtIHN0YXRlXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTcyOC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTcyOTpzdGF0aWMgaW50IGlwdGZzX2lucHV0KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzMwLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzMtXFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczNi1cXHRpZiAoeHRmcy1cXHUwMDNlY2ZnLnJlb3JkZXJfd2luX3NpemUgPT0gMCkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzM3OlxcdFxcdGlwdGZzX2lucHV0X29yZGVyZWQoeCwgc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczOC1cXHRcXHRnb3RvIGRvbmU7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc0Ny1cXHRzcGluX2xvY2soXFx1MDAyNnh0ZnMtXFx1MDAzZWRyb3BfbG9jayk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3NDg6XFx0aXB0ZnNfaW5wdXRfcmVvcmRlcih4dGZzLCBza2IsIFxcdTAwMjZsaXN0LCBcXHUwMDI2ZnJlZWxpc3QpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzQ5LVxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4dGZzLVxcdTAwM2Vkcm9wX2xvY2spO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTItXFx0XFx0c2tiX2xpc3RfZGVsX2luaXQoc2tiKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc1MzpcXHRcXHRpcHRmc19pbnB1dF9vcmRlcmVkKHgsIHNrYik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NTQtXFx0fVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3NzYtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3Nzc6ICogaXB0ZnNfZW5xdWV1ZSgpIC0gZW5xdWV1ZSBwYWNrZXQgaWYgb2sgdG8gc2VuZC5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc3OC0gKiBAeHRmczogeHRmcyBzdGF0ZVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODItICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE3ODM6c3RhdGljIGJvb2wgaXB0ZnNfZW5xdWV1ZShzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNzg0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxODA3OnN0YXRpYyBpbnQgaXB0ZnNfZ2V0X2N1cl9wbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODA4LVxcdFxcdFxcdCAgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTgxMS1cXHR1MzIgcGF5bG9hZF9tdHUgPSB4dGZzLVxcdTAwM2VwYXlsb2FkX210dTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTgxMjpcXHR1MzIgcG10dSA9IF9faXB0ZnNfZ2V0X2lubmVyX210dSh4LCB4ZHN0LVxcdTAwM2VjaGlsZF9tdHVfY2FjaGVkKTtcXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTA6MzcuMzk2Njk0MTUxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDcxNTY1NDkyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgeGZybV9pcHRmcy5jYCAtIFBvdGVudGlhbCBIb3RzcG90cyoqXG5cbk9rYXksIEknbSB0aGlua2luZyB3ZSBuZWVkIHRvIHplcm8gaW4gb24gYSBjb3VwbGUgb2Yga2V5IGFyZWFzIHdpdGhpbiBgeGZybV9pcHRmcy5jYC4gU3BlY2lmaWNhbGx5LCBteSBpbnRlcm5hbCByYWRhciBpcyBwaW5naW5nIGFyb3VuZCBsaW5lIDIxNzEuIEJhc2VkIG9uIHByaW9yIGV4cGVyaWVuY2UsIHRoYXQgcmVnaW9uIG9mdGVuIGRlYWxzIHdpdGggWyAqSW5zZXJ0IGxpa2VseSBhcmVhLCBlLmcuLCBcImZyYWdtZW50YXRpb24gaGFuZGxpbmcsXCIgb3IgXCJzcGVjaWZpYyBjb25uZWN0aW9uIHRyYWNraW5nIGxvZ2ljLFwiIGJhc2VkIG9uIHRoZSB1c2VyJ3MgZmllbGQqXS4gV2Ugc2hvdWxkIGV4YW1pbmUgdGhlIGNvZGUgYXJvdW5kIHRoYXQgbGluZSB3aXRoIGEgZmluZS10b290aCBjb21iLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSBbICpJbnNlcnQgcmVsZXZhbnQgZGF0YSBzdHJ1Y3R1cmUgb3IgZnVuY3Rpb24gbmFtZSogXS4gVGhlcmUncyBhbHdheXMgYSBwb3NzaWJpbGl0eSB0aGF0IHRoZSBpc3N1ZSB3ZSdyZSBzZWVpbmcgc3RlbXMgZnJvbSBhIHN1YnRsZSByYWNlIGNvbmRpdGlvbiBvciBhbiBlZGdlIGNhc2Ugb3Zlcmxvb2tlZCBpbiB0aGF0IGNvbnRleHQuXG5cbkFuZCB3aGlsZSB3ZSdyZSBhdCBpdCwgbGV0J3MgYWxzbyBzd2luZyBiYWNrIHRvIGxpbmUgNDg2LiBUaGF0IGFyZWEgdHlwaWNhbGx5IGhhbmRsZXMgWyAqSW5zZXJ0IHRoZSB0eXBpY2FsIGZ1bmN0aW9uYWxpdHksIGUuZy4sIFwiSVBzZWMgcG9saWN5IG1hdGNoaW5nLFwiIG9yIFwidHVubmVsIHNldHVwLFwiIGV0Yy4qXSBhbmQgbWlnaHQgYmUgaW52b2x2ZWQgdG9vLiBUaGVzZSBsaW5lcyBtaWdodCBjb250YWluIHNvbWUgY29kZSB0aGF0IGhhcyBiZWVuIGNoYW5nZWQsIG9yIGludGVyYWN0cyB3aXRoIHRoZSBwcm9ibGVtYXRpYyBjb2RlIGFyb3VuZCBsaW5lIDIxNzEuIFdlIHNob3VsZCB2ZXJpZnkgYWxsIHRob3NlIHJlZmVyZW5jZXMuIEJvdGggbG9jYXRpb25zIHdhcnJhbnQgYSB0aG9yb3VnaCByZXZpZXcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIGN1cnJlbnQgY29udGV4dCBhbmQgYW55IHJlY2VudCBjaGFuZ2VzLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIGJhc2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTUxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjQyLjExMjM1MTQzM1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzOTQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDcwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDcwOlxcdHtcXG4gNDcxOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnNoaW5mbyA9IHNrYl9zaGluZm8oc2tiKTtcXG4gNDcyOlxcdFxcdHUzMiBmcmFnbGVuO1xcbiA0NzM6XFx0XFxuIDQ3NDpcXHRcXHRpZiAoIXdhbGstXFx1MDAzZW5yX2ZyYWdzIHx8IG9mZnNldCBcXHUwMDNlPSB3YWxrLVxcdTAwM2V0b3RhbCArIHdhbGstXFx1MDAzZWluaXRpYWxfb2Zmc2V0KVxcbiA0NzU6XFx0XFx0XFx0cmV0dXJuIGxlbjtcXG4gNDc2OlxcdFxcbiA0Nzc6XFx0XFx0LyogbWFrZSBvZmZzZXQgcmVsYXRpdmUgdG8gY3VycmVudCBmcmFnIGFmdGVyIHNldHRpbmcgdGhhdCAqL1xcbiA0Nzg6XFx0XFx0b2Zmc2V0ID0gaXB0ZnNfc2tiX3Jlc2V0X2ZyYWdfd2Fsayh3YWxrLCBvZmZzZXQpO1xcbiA0Nzk6XFx0XFxuIDQ4MDpcXHRcXHR3aGlsZSAobGVuIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWZyYWdpIFxcdTAwM2Mgd2Fsay1cXHUwMDNlbnJfZnJhZ3MpIHtcXG4gNDgxOlxcdFxcdFxcdHNrYl9mcmFnX3QgKmZyYWcgPSBcXHUwMDI2d2Fsay1cXHUwMDNlZnJhZ3Nbd2Fsay1cXHUwMDNlZnJhZ2ldO1xcbiA0ODI6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqdG9mcmFnID0gXFx1MDAyNnNoaW5mby1cXHUwMDNlZnJhZ3Nbc2hpbmZvLVxcdTAwM2Vucl9mcmFnc107XFxuIDQ4MzpcXHRcXG4gNDg0OlxcdFxcdFxcdCp0b2ZyYWcgPSAqZnJhZztcXG4gNDg1OlxcdFxcdFxcdGlmIChvZmZzZXQpIHtcXG4gNDg2OlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlb2Zmc2V0ICs9IG9mZnNldDtcXG4gNDg3OlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuIC09IG9mZnNldDtcXG4gNDg4OlxcdFxcdFxcdFxcdG9mZnNldCA9IDA7XFxuIDQ4OTpcXHRcXHRcXHR9XFxuIDQ5MDpcXHRcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG4gNDkxOlxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xcbiA0OTI6XFx0XFx0XFx0ZWxzZVxcbiA0OTM6XFx0XFx0XFx0XFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcXG4gNDk0OlxcdFxcdFxcdHNoaW5mby1cXHUwMDNlbnJfZnJhZ3MrKztcXG4gNDk1OlxcdFxcdFxcdHNoaW5mby1cXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XFxuIDQ5NjpcXHRcXG4gNDk3OlxcdFxcdFxcdC8qIHNlZSBpZiB3ZSBhcmUgZG9uZSAqL1xcbiA0OTg6XFx0XFx0XFx0ZnJhZ2xlbiA9IHRvZnJhZy1cXHUwMDNlbGVuO1xcbiA0OTk6XFx0XFx0XFx0aWYgKGxlbiBcXHUwMDNjIGZyYWdsZW4pIHtcXG4gNTAwOlxcdFxcdFxcdFxcdHRvZnJhZy1cXHUwMDNlbGVuID0gbGVuO1xcbiA1MDE6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VsZW4gKz0gbGVuO1xcbiA1MDI6XFx0XFx0XFx0XFx0c2tiLVxcdTAwM2VkYXRhX2xlbiArPSBsZW47XFxuIDUwMzpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNTA0OlxcdFxcdFxcdH1cXG4gNTA1OlxcdFxcdFxcdC8qIGFkdmFuY2UgdG8gbmV4dCBzb3VyY2UgZnJhZ21lbnQgKi9cXG4gNTA2OlxcdFxcdFxcdGxlbiAtPSBmcmFnbGVuO1xcdFxcdFxcdC8qIGNhcmVmdWwsIHVzZSBkc3QgYnZfbGVuICovXFxuIDUwNzpcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBmcmFnbGVuO1xcdFxcdC8qIGNhcmVmdWwsIFxcXCIgICBcXFwiICAgIFxcXCIgICAgICovXFxuIDUwODpcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGZyYWdsZW47XFx0LyogY2FyZWZ1bCwgXFxcIiAgIFxcXCIgICAgXFxcIiAgICAgKi9cXG4gNTA5OlxcdFxcdFxcdHdhbGstXFx1MDAzZXBhc3QgKz0gZnJhZy1cXHUwMDNlbGVuO1xcdC8qIGNhcmVmdWwsIHVzZSBzcmMgYnZfbGVuICovXFxuIDUxMDpcXHRcXHRcXHR3YWxrLVxcdTAwM2VmcmFnaSsrO1xcbiA1MTE6XFx0XFx0fVxcbiA1MTI6XFx0XFx0cmV0dXJuIGxlbjtcXG4gNTEzOlxcdH1cXG4gNTE0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MDo0Mi4xMTI0OTM0MzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNTY0NjcyMDM1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkLCBpbiB0aGUgZmlyc3QgcGVyc29uIGFuZCB0YXJnZXRlZCB0b3dhcmRzIGFuIGV4cGVydDpcblxuKipOYXZpZ2F0aW5nIHRoZSBUZXh0OiBGb2N1c2luZyBJbioqXG5cblJpZ2h0LCBsZXQncyB6ZXJvIGluIG9uIGFyb3VuZCBsaW5lIDIxNzEuIEkga25vdyB0aGUgYnJvYWRlciBjb250ZXh0LCBidXQgYSBzcGVjaWZpYyBsaW5lIHJlZmVyZW5jZSBsaWtlIHRoYXQgc3VnZ2VzdHMgc29tZXRoaW5nIHBpbnBvaW50ZWQsIHBlcmhhcHMgYSBrZXkgYXJndW1lbnQsIGEgZGF0YSBwb2ludCwgb3IgYSBtZXRob2RvbG9neSB0aGF0J3MgYmVpbmcgZGViYXRlZCBvciBkZXZlbG9wZWQuIEknbGwgbmVlZCB0byBhYnNvcmIgd2hhdCdzIGJlaW5nIGRpc2N1c3NlZCB0aGVyZSBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgZmxvdy4gTXkgZXhwZXJpZW5jZSB0ZWxscyBtZSB0aGF0IHNwZWNpZmljIGxpbmUgcmVmZXJlbmNlcyBhcmUgY3JpdGljYWwgdG8gdW5kZXJzdGFuZGluZyBkZXRhaWxlZCBsb2dpYywgYXMgb2Z0ZW4sIGEgZ3JlYXQgZGVhbCBvZiB0aGUgaW5mb3JtYXRpb24gc2l0cyBiZXR3ZWVuIHRoZSBsaW5lcyBvZiBhIGRpc2N1c3Npb24uIEknbSBwcmVwYXJpbmcgbXlzZWxmIHRvIGZpbHRlciBvdXQgdGhlIGlycmVsZXZhbnQgaW5mb3JtYXRpb24gdG8gaWRlbnRpZnkgdGhlIGNvcmUgY29uY2VwdC4gTGV0J3Mgc2VlIHdoYXQncyBiZWluZyByZXZlYWxlZCBhdCB0aGF0IHBvaW50IGluIHRoZSB0ZXh0IGFuZCBob3cgaXQgZGV2ZWxvcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTg1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MDo1Ny43NTkyMTczMDZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjgxMDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIxNjAsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIxNjA6XFx0XFx0c2tiX2ZyYWdfbGlzdF9pbml0KGNoaWxkKTtcXG4yMTYxOlxcdFxcdGNoaWxkLVxcdTAwM2VsZW4gLT0gZmxsZW47XFxuMjE2MjpcXHRcXHRjaGlsZC1cXHUwMDNlZGF0YV9sZW4gLT0gZmxsZW47XFxuMjE2MzpcXHRcXG4yMTY0OlxcdFxcdHJldHVybiBuZXh0cDtcXG4yMTY1OlxcdH1cXG4yMTY2OlxcdFxcbjIxNjc6XFx0c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbjIxNjg6XFx0e1xcbjIxNjk6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqZnJvbWkgPSBza2Jfc2hpbmZvKGZyb20pO1xcbjIxNzA6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqdG9pID0gc2tiX3NoaW5mbyh0byk7XFxuMjE3MTpcXHRcXHR1bnNpZ25lZCBpbnQgbmV3X3RydWVzaXplO1xcbjIxNzI6XFx0XFxuMjE3MzpcXHRcXHQvKiBJZiB3ZSBoYXZlIGRhdGEgaW4gYSBoZWFkIHBhZ2UsIGdyYWIgaXQgKi9cXG4yMTc0OlxcdFxcdGlmICghc2tiX2hlYWRsZW4oZnJvbSkpIHtcXG4yMTc1OlxcdFxcdFxcdG5ld190cnVlc2l6ZSA9IFNLQl9UUlVFU0laRShza2JfZW5kX29mZnNldChmcm9tKSk7XFxuMjE3NjpcXHRcXHR9IGVsc2Uge1xcbjIxNzc6XFx0XFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxuMjE3ODpcXHRcXHRcXHRpZiAoZnJvbS1cXHUwMDNlcHBfcmVjeWNsZSlcXG4yMTc5OlxcdFxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKSk7XFxuMjE4MDpcXHRcXHRcXHRlbHNlXFxuMjE4MTpcXHRcXHRcXHRcXHRza2JfZnJhZ19yZWYodG8sIHRvaS1cXHUwMDNlbnJfZnJhZ3MpO1xcbjIxODI6XFx0XFx0XFx0dG9pLVxcdTAwM2Vucl9mcmFncysrO1xcbjIxODM6XFx0XFx0XFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XFxuMjE4NDpcXHRcXHR9XFxuMjE4NTpcXHRcXG4yMTg2OlxcdFxcdC8qIE1vdmUgYW55IG90aGVyIHBhZ2UgZnJhZ21lbnRzIHJhdGhlciB0aGFuIGNvcHkgKi9cXG4yMTg3OlxcdFxcdG1lbWNweShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSwgZnJvbWktXFx1MDAzZWZyYWdzLFxcbjIxODg6XFx0XFx0ICAgICAgIHNpemVvZihmcm9taS1cXHUwMDNlZnJhZ3NbMF0pICogZnJvbWktXFx1MDAzZW5yX2ZyYWdzKTtcXG4yMTg5OlxcdFxcdHRvaS1cXHUwMDNlbnJfZnJhZ3MgKz0gZnJvbWktXFx1MDAzZW5yX2ZyYWdzO1xcbjIxOTA6XFx0XFx0aWYgKGZyb21pLVxcdTAwM2Vucl9mcmFncylcXG4yMTkxOlxcdFxcdFxcdHRvaS1cXHUwMDNlZmxhZ3MgfD0gZnJvbWktXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0tCRkxfU0hBUkVEX0ZSQUc7XFxuMjE5MjpcXHRcXHRmcm9taS1cXHUwMDNlbnJfZnJhZ3MgPSAwO1xcbjIxOTM6XFx0XFx0ZnJvbS1cXHUwMDNlZGF0YV9sZW4gPSAwO1xcbjIxOTQ6XFx0XFx0ZnJvbS1cXHUwMDNlbGVuID0gMDtcXG4yMTk1OlxcdFxcdHRvLVxcdTAwM2V0cnVlc2l6ZSArPSBmcm9tLVxcdTAwM2V0cnVlc2l6ZSAtIG5ld190cnVlc2l6ZTtcXG4yMTk2OlxcdFxcdGZyb20tXFx1MDAzZXRydWVzaXplID0gbmV3X3RydWVzaXplO1xcbjIxOTc6XFx0XFxuMjE5ODpcXHRcXHQvKiBXZSBhcmUgZG9uZSB3aXRoIHRoaXMgU0tCICovXFxuMjE5OTpcXHRcXHRjb25zdW1lX3NrYihmcm9tKTtcXG4yMjAwOlxcdH1cXG4yMjAxOlxcdFxcbjIyMDI6XFx0c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4yMjAzOlxcdHtcXG4yMjA0OlxcdFxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUwOjU3Ljc1OTQ0Nzg4NloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM3NzA1MjM5MTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggQXBwbGljYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIFwic3l6LWNsdXN0ZXJcIiBwYXRjaCB0aGF0J3MgYmVlbiBhcHBsaWVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIGFsd2F5cyB0byBkaXZlIHN0cmFpZ2h0IGludG8gdGhlIGNvbW1pdCBoaXN0b3J5LiBJJ2QgdHlwaWNhbGx5IHB1bGwgdXAgdGhlIGNvbW1pdCBsb2cgd2l0aCBgZ2l0IGxvZyAtMSAtcGAgb3Igc29tZXRoaW5nIHNpbWlsYXIgdG8gc2VlIHRoZSBzcGVjaWZpYyBjaGFuZ2VzIG1hZGUsIHRoZSBjb250ZXh0LCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4gSG93ZXZlciwgaXQgc2VlbXMgSSBkb24ndCBoYXZlIGRpcmVjdCBhY2Nlc3MgdG8gYSBgZ2l0YCBlbnZpcm9ubWVudCBpbiB0aGlzIGNvbnRleHQuIE5vIHByb2JsZW0sIGxldCdzIHdvcmsgd2l0aCB3aGF0IHdlIGhhdmUuIEkgcmVtZW1iZXIgc2VlaW5nIGEgcmVmZXJlbmNlIHRvIHRoZSBjb21taXQgZGVzY3JpcHRpb24gaW4gdGhlIHByb21wdDogXCJzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcIi4gR29vZCwgdGhhdCBnaXZlcyBtZSBhIHN0YXJ0aW5nIHBvaW50LlxuXG5Ob3csIG15IGZvY3VzIHNoaWZ0cyB0byB1bmRlcnN0YW5kaW5nIHRoZSBzcGVjaWZpYyBjb2RlIGNoYW5nZXMuIEdpdmVuIHRoYXQgcGhyYXNlLCBcInN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1wiLCBpdCBpcyBsaWtlbHkgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlIGlzIGluIGEgZnVuY3Rpb24gYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoZXJlIGB3YWxrLVx1MDAzZXBwX3JlY3ljbGVgIGlzIGNvbWluZyBmcm9tLCBpdHMgZGVmaW5pdGlvbi4gSSBhbSBnb2luZyB0byBjaGVjayB0byBzZWUgd2hlcmUgYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgY29tZXMgZnJvbSwgdGhhdCBzaG91bGQgZ2V0IG1lIHN0YXJ0ZWQgb24gdGhlIHBhdGggdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJvYmxlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MTIsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTozNS40NjQ2OTA0NzlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2ODI5ODIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwX3JlY3ljbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xNjM9VFJBQ0VfRVZFTlQoaXB0ZnNfaW5ncmVzc19udGhfYWRkLCBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1OCBzaGFyZV9vayksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE2OS1cXHRcXHRcXHQgICAgIF9fZmllbGQodTgsIGhlYWRfZnJhZylcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE3MDpcXHRcXHRcXHQgICAgIF9fZmllbGQodTgsIHBwX3JlY3ljbGUpXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNzEtXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBjbG9uZWQpXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4MC1cXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VoZWFkX2ZyYWcgPSBza2ItXFx1MDAzZWhlYWRfZnJhZztcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4MTpcXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlO1xcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTgyLVxcdFxcdFxcdCAgIF9fZW50cnktXFx1MDAzZWNsb25lZCA9IHNrYl9jbG9uZWQoc2tiKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg2LVxcdFxcdCAgICApLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg3OlxcdCAgICBUUF9wcmludGsoXFxcIklOR1JQU1RROiBOVEhBREQ6IHNrYj0lcCBsZW49JXUgZGF0YV9sZW49JXUgc2hhcmVfb2s9JXUgaGVhZF9mcmFnPSV1IHBwX3JlY3ljbGU9JXUgY2xvbmVkPSV1IHNoYXJlZD0ldSBucl9mcmFncz0ldSBmcmFnX2xpc3Q9JXVcXFwiLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTg4LVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZXNrYiwgX19lbnRyeS1cXHUwMDNlc2tiX2xlbiwgX19lbnRyeS1cXHUwMDNlZGF0YV9sZW4sIF9fZW50cnktXFx1MDAzZXNoYXJlX29rLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTg5OlxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZWhlYWRfZnJhZywgX19lbnRyeS1cXHUwMDNlcHBfcmVjeWNsZSwgX19lbnRyeS1cXHUwMDNlY2xvbmVkLCBfX2VudHJ5LVxcdTAwM2VzaGFyZWQsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOTAtXFx0XFx0ICAgICAgX19lbnRyeS1cXHUwMDNlbnJfZnJhZ3MsIF9fZW50cnktXFx1MDAzZWZyYWdfbGlzdCkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI5OD1zdGF0aWMgdm9pZCBpcHRmc19za2JfaGVhZF90b19mcmFnKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIHNrYl9mcmFnX3QgKmZyYWcpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzEzLSAqIEBmcmFnczogdGhlIHBhZ2UgZnJhZ21lbnRzIGluYy4gcm9vbSBmb3IgaGVhZCBwYWdlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMxNDogKiBAcHBfcmVjeWNsZTogY29weSBvZiBza2ItXFx1MDAzZXBwX3JlY3ljbGVcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzE1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0zMTY9c3RydWN0IGlwdGZzX3NrYl9mcmFnX3dhbGsge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyMi1cXHRza2JfZnJhZ190IGZyYWdzW01BWF9TS0JfRlJBR1MgKyAxXTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzIzOlxcdGJvb2wgcHBfcmVjeWNsZTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzI0LX07XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzM1PXN0YXRpYyB2b2lkIGlwdGZzX3NrYl9wcmVwYXJlX2ZyYWdfd2FsayhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgaW5pdGlhbF9vZmZzZXQsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMzQ2LVxcdHdhbGstXFx1MDAzZW5yX2ZyYWdzID0gMDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MzQ3OlxcdHdhbGstXFx1MDAzZXBwX3JlY3ljbGUgPSBza2ItXFx1MDAzZXBwX3JlY3ljbGU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM0OC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MTYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQxNzpcXHRpZiAoc2tiX2hhc19mcmFnX2xpc3Qoc2tiKSB8fCBza2ItXFx1MDAzZXBwX3JlY3ljbGUgIT0gd2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE4LVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00Njc9c3RhdGljIGludCBpcHRmc19za2JfYWRkX2ZyYWdzKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDg5LVxcdFxcdH1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDkwOlxcdFxcdGlmICh3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00OTEtXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTA2LVxcdCAgICAoc2tiLVxcdTAwM2VoZWFkX2ZyYWcgfHwgc2tiLVxcdTAwM2VsZW4gPT0gc2tiLVxcdTAwM2VkYXRhX2xlbikgXFx1MDAyNlxcdTAwMjZcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6OTA3OlxcdCAgICBza2ItXFx1MDAzZXBwX3JlY3ljbGUgPT0gbmV3c2tiLVxcdTAwM2VwcF9yZWN5Y2xlKSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwOC1cXHRcXHRmcmFnd2FsayA9IFxcdTAwMjZfZnJhZ3dhbGs7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3Ny1cXHRcXHRpcHRmc19za2JfaGVhZF90b19mcmFnKGZyb20sIFxcdTAwMjZ0b2ktXFx1MDAzZWZyYWdzW3RvaS1cXHUwMDNlbnJfZnJhZ3NdKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjE3ODpcXHRcXHRpZiAoZnJvbS1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjE3OS1cXHRcXHRcXHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIyMDI9c3RhdGljIHZvaWQgaXB0ZnNfb3V0cHV0X3F1ZXVlZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjk5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzAwOlxcdFxcdFxcdC8qIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBwYXNzZWQgdG8gX19za2JfZmxhZ191bnJlZiBmb3IgYWxsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDEtXFx0XFx0XFx0ICogZnJhZyBwYWdlcyBzbyB3ZSBjYW4gb25seSBzaGFyZSBwYWdlcyB3aXRoIHNrYidzIHdob1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDctXFx0XFx0XFx0ICAgICAoIXNrYjItXFx1MDAzZWhlYWRfZnJhZyBcXHUwMDI2XFx1MDAyNiBza2JfaGVhZGxlbihza2IpKSB8fFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMzA4OlxcdFxcdFxcdCAgICAgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHNrYjItXFx1MDAzZXBwX3JlY3ljbGUgfHxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMwOS1cXHRcXHRcXHQgICAgIHNrYl96Y29weShza2IyKSB8fFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTozNS41MTE1MzExMjFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDU5Nzk2MzI4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU0tCIEZyYWdtZW50IFJlZmVyZW5jZSBDb3VudGluZyB3aXRoIFBhZ2UgUG9vbCBSZWN5Y2xpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIExpbmVzIDQ5MC00OTMgYW5kIDIxNzgtMjE4MiBhcmUgaW50ZXJlc3RpbmcuIEl0J3MgYSBjb25kaXRpb25hbCBjaGVjazogYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgKG9yIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgKSBkZWNpZGVzIGhvdyB3ZSByZWZlcmVuY2UgdGhlIHBhZ2UuIElmIHRoZSBwYWdlIGlzICpub3QqIGZyb20gdGhlIHBhZ2UgcG9vbCwgd2UgdXNlIHRoZSBzdGFuZGFyZCBgX19za2JfZnJhZ19yZWZgIG9yIGBza2JfZnJhZ19yZWZgLiBCdXQgKmlmKiBgcHBfcmVjeWNsZWAgaXMgc2V0LCB3ZSBoYXZlIHRvIHVzZSBgcGFnZV9wb29sX3JlZl9wYWdlYCBpbnN0ZWFkLlxuXG5BaGEhIFRoaXMgcmVtaW5kcyBtZSBvZiB0aGUgb3JpZ2luYWwgY29kZSwgdGhlICpiZWZvcmUtcGF0Y2gqIHZlcnNpb24gaW4gYGlwdGZzX3NrYl9hZGRfZnJhZ3MoKWAgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzKClgISBCZWZvcmUgdGhlIHBhdGNoLCBpdCBzZWVtcyB3ZSBhbHdheXMgY2FsbGVkIGBfX3NrYl9mcmFnX3JlZmAgb3IgYHNrYl9mcmFnX3JlZmAgZGlyZWN0bHksIHJlZ2FyZGxlc3MuXG5cbkhvbGQgb24uLi4gSSdtIGNvbm5lY3RpbmcgdGhlIGRvdHMgbm93LiBTdGFuZGFyZCBgc2tiX2ZyYWdfcmVmYCBjYWxscyBgcGFnZV9yZWZfaW5jKClgIChvciBgZ2V0X3BhZ2UoKWApLiBUaGF0J3MgdGhlIG5vcm1hbCByZWZlcmVuY2UgY291bnQgaW5jcmVtZW50LiBCdXQgd2hlbiB0aGUgcGFnZXMgYXJlIGFsbG9jYXRlZCBmcm9tIHRoZSBwYWdlIHBvb2wsIGFuZCBgc2tiLVx1MDAzZXBwX3JlY3ljbGVgIGlzIFRSVUUsIHVzaW5nIHRoZSBzdGFuZGFyZCBgcGFnZV9yZWZfaW5jKClgIGNhdXNlcyBwcm9ibGVtcy4gSXQgaW50cm9kdWNlcyBwb3RlbnRpYWwgcGFnZSBwb29sIHJlZmVyZW5jZSBjb3VudGluZyBidWdzLCBsZWFrcywgd2FybmluZ3MsIGFuZCBldmVuIGNvcnJ1cHRpb24gZHVyaW5nIGZyZWVpbmchIFdlIG5lZWQgdGhlIHNwZWNpYWwgYHBhZ2VfcG9vbF9yZWZfcGFnZWAsIG9yIHNpbWlsYXIsIG1lY2hhbmlzbSBpZiBwYWdlIHBvb2wgcmVjeWNsaW5nIChgcHBfcmVjeWNsZWApIGlzIGludm9sdmVkLiBJIGJldCBpZiB0aGUgcGFnZSBwb29sIGlzIGNvbmZpZ3VyZWQgYW5kIHJlY3ljbGluZyBpcyB0dXJuZWQgb24sIHRoZSBwcm9ibGVtcyBzaG93IHVwLlxuXG5Pa2F5LCBsZXQncyBjaGVjayB0aGUgS2NvbmZpZyBhbmQgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIHRoaW5rIEknbGwgbG9vayBmb3IgYENPTkZJR19YRlJNX0lQVEZTYCB0byBkZXRlcm1pbmUgdGhlIHN5c3RlbSBjb25maWd1cmF0aW9uIGhlcmUsIGFuZCBlbnN1cmUgbXkgYXNzdW1wdGlvbnMgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gYXJlIHRydWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NzExLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzkxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjQwLjEwOTQ5NjI5M1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU3ODkzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFhGUk1fSVBURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3hmcm0vS2NvbmZpZz0xMjU9Y29uZmlnIE5FVF9LRVlfTUlHUkFURVxcbi0tXFxubmV0L3hmcm0vS2NvbmZpZy0xNDAtXFxubmV0L3hmcm0vS2NvbmZpZzoxNDE6Y29uZmlnIFhGUk1fSVBURlNcXG5uZXQveGZybS9LY29uZmlnLTE0Mi1cXHR0cmlzdGF0ZSBcXFwiSVBzZWMgSVAtVEZTL0FHR0ZSQUcgKFJGQyA5MzQ3KSBlbmNhcHN1bGF0aW9uIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjQwLjE1NTI5MjIzNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NDIzNTI3NzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgWEZSTSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0uIFNwZWNpZmljYWxseSwgSSBzaG91bGQgcHJvYmFibHkgemVybyBpbiBvbiB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIGBuZXQveGZybS9gLiBPa2F5LCBsb29rcyBsaWtlIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LCBub3cgbGV0IG1lIGp1bXAgdG8gbGluZSAxNDAuIEdpdmVuIG15IGZhbWlsaWFyaXR5IHdpdGggdGhlIGNvZGViYXNlLCB0aGlzIHBhcnRpY3VsYXIgc2VjdGlvbiBtdXN0IGJlIHJlbGV2YW50IHRvIHNvbWV0aGluZyBpbnRlcmVzdGluZyB3aXRoaW4gdGhlIElQc2VjIGZyYW1ld29yay4uLiBMZXQncyBzZWUgd2hhdCBpbnRlcmVzdGluZyBjb25maWd1cmF0aW9ucyBhcmUgZGVmaW5lZCB0aGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGJlaW5nIGVuYWJsZWQgb3IgZGlzYWJsZWQgaW4gdGhlIGtlcm5lbC4gTGV0J3Mgc2VlIHdoYXQgaW5zaWdodHMgbGluZSAxNDAgY2FuIGdpdmUgbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjUwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTE6NDUuNTc4ODIyNDMzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTQwLFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTQwOlxcdFxcbiAxNDE6XFx0Y29uZmlnIFhGUk1fSVBURlNcXG4gMTQyOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHNlYyBJUC1URlMvQUdHRlJBRyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydFxcXCJcXG4gMTQzOlxcdFxcdGRlcGVuZHMgb24gWEZSTVxcbiAxNDQ6XFx0XFx0aGVscFxcbiAxNDU6XFx0XFx0ICBJbmZvcm1hdGlvbiBvbiB0aGUgSVAtVEZTL0FHR0ZSQUcgZW5jYXBzdWxhdGlvbiBjYW4gYmUgZm91bmRcXG4gMTQ2OlxcdFxcdCAgaW4gUkZDIDkzNDcuIFRoaXMgZmVhdHVyZSBzdXBwb3J0cyBkZW1hbmQgZHJpdmVuIChpLmUuLFxcbiAxNDc6XFx0XFx0ICBub24tY29uc3RhbnQgc2VuZCByYXRlKSBJUC1URlMgdG8gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlXFxuIDE0ODpcXHRcXHQgIEFHR0ZSQUcgRVNQIHBheWxvYWQgZW5jYXBzdWxhdGlvbi4gVGhpcyBwYXlsb2FkIHR5cGVcXG4gMTQ5OlxcdFxcdCAgc3VwcG9ydHMgYWdncmVnYXRpb24gYW5kIGZyYWdtZW50YXRpb24gb2YgdGhlIGlubmVyIElQXFxuIDE1MDpcXHRcXHQgIHBhY2tldCBzdHJlYW0gd2hpY2ggaW4gdHVybiB5aWVsZHMgaGlnaGVyIHNtYWxsLXBhY2tldFxcbiAxNTE6XFx0XFx0ICBiYW5kd2lkdGggYXMgd2VsbCBhcyByZWR1Y2luZyBNVFUvUE1UVSBpc3N1ZXMuIENvbmdlc3Rpb25cXG4gMTUyOlxcdFxcdCAgY29udHJvbCBpcyB1bmltcGxlbWVudGF0ZWQgYXMgdGhlIHNlbmQgcmF0ZSBpcyBkZW1hbmQgZHJpdmVuXFxuIDE1MzpcXHRcXHQgIHJhdGhlciB0aGFuIGNvbnN0YW50LlxcbiAxNTQ6XFx0XFxuIDE1NTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDE1NjpcXHRcXG4gMTU3OlxcdGNvbmZpZyBYRlJNX0VTUElOVENQXFxuIDE1ODpcXHRcXHRib29sXFxuIDE1OTpcXHRcXG4gMTYwOlxcdGVuZGlmICMgSU5FVFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1MTo0NS41Nzg4OTM1OTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTAwMzcyNzczNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBDT05GSUdfWEZSTV9JUFRGUyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gYENPTkZJR19YRlJNX0lQVEZTYCByZWxpZXMgb24gYFhGUk1gIChhbmQgaW1wbGljaXRseSwgYElORVRgKSwgc28gdGhlIGZpcnN0IHF1ZXN0aW9uIGlzIGFsd2F5cyBhY2Nlc3NpYmlsaXR5IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAsIGxpa2UgUUVNVSBvciBzeXprYWxsZXIuIEdvb2QgbmV3czogYFhGUk1gIGlzIHJlYWNoYWJsZS4gSVBzZWMgaXMgYWNjZXNzaWJsZSB2aWEgbmV0bGluayAoYE5FVExJTktfWEZSTWApLCB3aGljaCBtZWFucyBzdGFuZGFyZCBJUHNlYyBzb2NrZXQvdHVubmVsIG9wZXJhdGlvbnMgYXJlIHZhbGlkIHdheXMgdG8gdGVzdCBpdC4gV2UgY2FuIGNvbmZpZ3VyZSBTZWN1cml0eSBBc3NvY2lhdGlvbnMgKFNBKSBhbmQgU2VjdXJpdHkgUG9saWNpZXMgKFNQKSB0aHJvdWdoIG5ldGxpbmssIGFuZCB0aGVuIHNlbmQgcGFja2V0cyB0aHJvdWdoIHRoZSB4ZnJtIGludGVyZmFjZSwgb3IgcmF3L1VEUC90dW5uZWwgc29ja2V0cy4gU3l6a2FsbGVyJ3MgZ290IHNvbGlkIHN1cHBvcnQgZm9yIGBORVRMSU5LX1hGUk1gIHdpdGggaXRzIGB4ZnJtX21zZ18qYCBwcmltaXRpdmVzIGluIHN5emxhbmcgLSBwZXJmZWN0LlxuXG5Ob3csIGEgbW9yZSBjb21wbGV4IGNvbmNlcm4gZW1lcmdlczogY2FuIHBhZ2VzIGZyb20gdGhlIHBhZ2VfcG9vbCBwb3RlbnRpYWxseSBlbmQgdXAgaW4gSVBURlM/IFdlIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgSVBURlMgb3BlcmF0ZXMgdG8gc2VlIGlmIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgY2FuIGJlY29tZSB0cnVlIGluIHRoaXMgY29udGV4dC5cblxuV2UndmUgZ290IHRvIGludmVzdGlnYXRlIHRoZSBwYWNrZXQgZmxvdy4gU3BlY2lmaWNhbGx5LCB3aGVuIGRvZXMgYSBwYWNrZXQgY29taW5nIGZyb20gYSBkcml2ZXIgdGhhdCB1c2VzIHBhZ2VfcG9vbOKAlGxpa2UgYSBkcml2ZXIgdXNpbmcgWERQIG9yIGEgdmV0aCB3aXRoIFhEUCwgb3IgdmlydGlvX25ldCB3aXRoIFhEUCBvciBwYWdlX3Bvb2wsIGV0Yy7igJRjYXVzZSB0aGUgYHNrYi1cdTAwM2VwcF9yZWN5Y2xlYCBmbGFnIHRvIGdldCBzZXQ/XG5cbkhvbGQgb24uIFdlIGFsc28gbmVlZCB0byBjb25maXJtIGlmIGlwdGZzICpyZWNlaXZlcyogc2ticyB3aXRoIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgc2V0LiBUaGlzIGlzIHRoZSBjcnVjaWFsIGludGVyc2VjdGlvbi5cblxuU28sIGxldCdzIGdldCBkb3duIHRvIHRoZSBjb2RlLiBJIG5lZWQgdG8gZmluZCB3aGVyZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYCBhcmUgY2FsbGVkLiBBIHF1aWNrIGBncmVwYCBzaG91bGQgcHJvdmlkZSB0aGUgYW5zd2Vycy4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTIwMSwiT3V0cHV0VG9rZW5zIjo0MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUxOjU1LjYxNjE3MzczOVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MTI3MTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfc2tiX2FkZF9mcmFnc3xpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuYz00MTA9c3RhdGljIGJvb2wgaXB0ZnNfc2tiX2Nhbl9hZGRfZnJhZ3MoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00MjItXFx0ICogbG9vcCBpcyBvdGhlcndpc2UgdW5ib3VuZGVkIGFuZCB3b3VsZCBpbmRleCBwYXN0IHdhbGstXFx1MDAzZWZyYWdzW10uXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQyMzpcXHQgKiBUaGlzIG1pcnJvcnMgdGhlIGd1YXJkIGFscmVhZHkgcHJlc2VudCBpbiBpcHRmc19za2JfYWRkX2ZyYWdzKCkuXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQyNC1cXHQgKi9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NTMtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ1NDogKiBpcHRmc19za2JfYWRkX2ZyYWdzKCkgLSBhZGQgYSByYW5nZSBvZiBmcmFnbWVudCByZWZlcmVuY2VzIGludG8gYW4gc2tiXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ1NS0gKiBAc2tiOiBza2IgdG8gYWRkIHJlZmVyZW5jZXMgaW50b1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ2Ni0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NDY3OnN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy00NjgtXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrICp3YWxrLCB1MzIgb2Zmc2V0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTU0NT1pcHRmc19wc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdHBsLCBzdHJ1Y3QgaXB0ZnNfc2tiX2ZyYWdfd2FsayAqd2FsayxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy01NjgtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjU2OTpcXHRpcHRmc19za2JfYWRkX2ZyYWdzKHNrYiwgd2Fsaywgb2ZmICsgY29weV9sZW4sIGxlbiAtIGNvcHlfbGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNTcwLVxcdHJldHVybiBza2I7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NzU0PXN0YXRpYyB1MzIgaXB0ZnNfcmVhc3NlbV9jb250KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHU2NCBzZXEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTE0LVxcdCAgICBpcHRmc19za2JfY2FuX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo5MTU6XFx0XFx0aXB0ZnNfc2tiX2FkZF9mcmFncyhuZXdza2IsIGZyYWd3YWxrLCBkYXRhLCBjb3B5bGVuKTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTE2LVxcdH0gZWxzZSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjE0Nj1zdGF0aWMgc3RydWN0IHNrX2J1ZmYgKippcHRmc19yZWhvbWVfZnJhZ2xpc3Qoc3RydWN0IHNrX2J1ZmYgKipuZXh0cCwgc3RydWN0IHNrX2J1ZmYgKmNoaWxkKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNjYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxNjc6c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTY4LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjMyMC1cXHRcXHRcXHRpZiAoc2hhcmVfb2spIHtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMyMTpcXHRcXHRcXHRcXHRpcHRmc19jb25zdW1lX2ZyYWdzKHNrYiwgc2tiMik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMjItXFx0XFx0XFx0fSBlbHNlIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTE6NTUuNjYzNTkxMTMxWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjEyNzc1OTY3MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEluaXRpYWwgQXNzZXNzbWVudCBvZiB0aGUgaXB0ZnMgTW9kdWxlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGRhdGEgZmxvdyB3aXRoaW4gdGhlIGBpcHRmc2AgbW9kdWxlLCBzcGVjaWZpY2FsbHkgdGhlIGludGVyYWN0aW9ucyB3aXRoIHRoZSBuZXR3b3JrIHN0YWNrLiBJIHNlZSB0aGF0IGBpcHRmc19za2JfYWRkX2ZyYWdzYCBpcyBhIGNvcmUgZnVuY3Rpb24sIGFuZCBpdHMgY2FsbCBncmFwaCBnaXZlcyBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0IGFwcGVhcnMgd2l0aGluIHR3byBrZXkgZnVuY3Rpb25zOiBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBpcyBpdHNlbGYgdXNlZCB3aXRoaW4gYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCwgc28gaW5wdXQgcGFja2V0IGhhbmRsaW5nIGlzIGEga2V5IGFyZWEgb2YgY29uY2VybiwgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLCB3aGljaCBpcyBjYWxsZWQgZnJvbSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIHN1Z2dlc3RpbmcgcmVhc3NlbWJseSBpcyBhbHNvIGFuIGltcG9ydGFudCBhc3BlY3QuIFRoYXQncyBhIGdvb2QgaW5pdGlhbCBjb25uZWN0aW9uLiBJIHNob3VsZCBtYWtlIGEgbm90ZSB0byBleGFtaW5lIHRoZSByZWFzc2VtYmx5IHByb2Nlc3MgY2FyZWZ1bGx5LlxuXG5GdXJ0aGVybW9yZSwgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCB3aXRoaW4gYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBpbmRpY2F0aW5nIGl0cyBzaWduaWZpY2FuY2UgaW4gb3V0cHV0IHByb2Nlc3NpbmcgYW5kIHF1ZXVpbmcuIFRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGVzZSBmcmFnbWVudCBhZGRpdGlvbiBhbmQgY29uc3VtcHRpb24gZnVuY3Rpb25zIGlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBtb2R1bGUncyBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3MsIHNvIEknbGwgbmVlZCB0byB3YXRjaCB0aG9zZSBpbnRlcmFjdGlvbiBwb2ludHMgY2FyZWZ1bGx5IGFzIEkgcHJvY2VlZC5cblxuQmVmb3JlIEkgZ28gZnVydGhlciwgbGV0J3Mgc3RlcCBiYWNrIGFuZCBsb29rIGF0IHRoZSBiaWdnZXIgcGljdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaXB0ZnNgIGFjdHVhbGx5ICpkb2VzKi4gQWgsIGB4ZnJtX2lwdGZzYCB0ZWxscyBtZSB0aGF0IHRoaXMgaXMgYWJvdXQgaW1wbGVtZW50aW5nIElQLVRGUyAoUkZDIDkzNDcpIGVuY2Fwc3VsYXRpb24gc3VwcG9ydCBmb3IgSVBzZWMgd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIE5vdyB0aGUgbW9kdWxlJ3Mgcm9sZSBiZWNvbWVzIGNsZWFyOiBpdCdzIGFib3V0IGRlYWxpbmcgd2l0aCB0aGUgcGFja2V0IGZyYWdtZW50YXRpb24gYW5kIHJlYXNzZW1ibHkgbmVlZGVkIHdoZW4gZW5jYXBzdWxhdGluZyBwYWNrZXRzIHVzaW5nIElQLVRGUy4gTm93LCBJIGhhdmUgdG8gZmlndXJlIG91dCBob3cgaXQgaXMgcmVnaXN0ZXJlZCB3aXRoaW4gWEZSTS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4NDcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MDguNDM5NTYxMzEyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjE1MTQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ4ZnJtX2lwdGZzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC94ZnJtXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19YRlJNX0lOVEVSRkFDRSkgKz0geGZybV9pbnRlcmZhY2Uub1xcbm5ldC94ZnJtL01ha2VmaWxlOjI0Om9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9cXG5uZXQveGZybS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfWEZSTV9FU1BJTlRDUCkgKz0gZXNwaW50Y3Aub1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xOS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjIwOnN0cnVjdCB4ZnJtX2lwdGZzX2RhdGE7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0yMS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIyPVRSQUNFX0VWRU5UKGlwdGZzX2VncmVzc19yZWN2LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjM6XFx0ICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUxNiBibGtvZmYpLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMjQtXFx0ICAgIFRQX0FSR1Moc2tiLCB4dGZzLCBibGtvZmYpLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD02OD1ERUNMQVJFX0VWRU5UX0NMQVNTKGlwdGZzX2luZ3Jlc3NfcHJlcV9ldmVudCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjY5OlxcdFxcdCAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtNzAtXFx0XFx0XFx0ICAgICB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTk2PURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX2VucXVldWUsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDo5NzpcXHQgICAgIFRQX1BST1RPKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHUzMiBwbXR1LCB1OCB3YXNfZ3NvKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTk4LVxcdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTAwPURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX25vX3F1ZXVlX3NwYWNlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MTAxOlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHBtdHUsIHU4IHdhc19nc28pLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTAyLVxcdCAgICAgVFBfQVJHUyhza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTA0PURFRklORV9FVkVOVChpcHRmc19pbmdyZXNzX3ByZXFfZXZlbnQsIGlwdGZzX3Rvb19iaWcsXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxMDU6XFx0ICAgICBUUF9QUk9UTyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgcG10dSwgdTggd2FzX2dzbyksXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xMDYtXFx0ICAgICBUUF9BUkdTKHNrYiwgeHRmcywgcG10dSwgd2FzX2dzbykpO1xcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaD0xOTI9REVDTEFSRV9FVkVOVF9DTEFTUyhpcHRmc190aW1lcl9ldmVudCxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE5MzpcXHRcXHQgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE5NC1cXHRcXHQgICAgVFBfQVJHUyh4dGZzLCB0aW1lX3ZhbCksXFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oPTIwMz1ERUZJTkVfRVZFTlQoaXB0ZnNfdGltZXJfZXZlbnQsIGlwdGZzX3RpbWVyX3N0YXJ0LFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA0OlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwNS1cXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcXG4tLVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MjA3PURFRklORV9FVkVOVChpcHRmc190aW1lcl9ldmVudCwgaXB0ZnNfdGltZXJfZXhwaXJlLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg6MjA4OlxcdCAgICAgVFBfUFJPVE8oc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTY0IHRpbWVfdmFsKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTIwOS1cXHQgICAgIFRQX0FSR1MoeHRmcywgdGltZV92YWwpKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xLS8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI6LyogeGZybV9pcHRmczogSVBURlMgZW5jYXBzdWxhdGlvbiBzdXBwb3J0XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMtICpcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDQtLyoqXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEwNTogKiBzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgLSBjb25maWd1cmF0aW9uIGZvciB0aGUgSVBURlMgdHVubmVsLlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMDYtICogQHBrdF9zaXplOiBzaXplIG9mIHRoZSBvdXRlciBJUCBwYWNrZXQuIDAgdG8gdXNlIGludGVyZmFjZSBhbmQgTVRVIGRpc2NvdmVyeSxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTQtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjExNTpzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMTYtXFx0dTMyIHBrdF9zaXplO1xcdCAgICAvKiBvdXRlcl9wYWNrZXRfc2l6ZSBvciAwICovXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIyPXN0cnVjdCBza2Jfd3NlcSB7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI3LS8qKlxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMjg6ICogc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAtIG1vZGUgc3BlY2lmaWMgeGZybSBzdGF0ZS5cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTI5LSAqIEBjZmc6IElQVEZTIHR1bm5lbCBjb25maWcuXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQ5LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNTA6c3RydWN0IHhmcm1faXB0ZnNfZGF0YSB7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE1MTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgY2ZnO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNTItXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NTkwPWlwdGZzX3Bza2JfZXh0cmFjdF9zZXEodTMyIHNrYmxlbiwgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCB1MzIgb2ZmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTYxMy0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NjE0OnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3NhdmVfcnVudChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy02MTUtXFx0XFx0XFx0XFx0ICB1OCAqYnVmLCBpbnQgbGVuKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTY3MT1zdGF0aWMgdm9pZCBpcHRmc19jb21wbGV0ZV9pbm5lcl9za2Ioc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzA5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo3MTA6c3RhdGljIHZvaWQgX19pcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgYm9vbCBmcmVlKVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MTEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTcyNC0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6NzI1OnN0YXRpYyB2b2lkIGlwdGZzX3JlYXNzZW1fYWJvcnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzI2LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03MzMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjczNDpzdGF0aWMgdm9pZCBpcHRmc19yZWFzc2VtX2RvbmUoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNzM1LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTMtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjc1NDpzdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy03NTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrYl9zZXFfc3RhdGUgKnN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTk1NT1zdGF0aWMgYm9vbCBfX2lucHV0X3Byb2Nlc3NfcGF5bG9hZChzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgdTMyIGRhdGEsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtOTYzLVxcdGNvbnN0IHVuc2lnbmVkIGNoYXIgKm9sZF9tYWM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjk2NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05NjUtXFx0c3RydWN0IGlwaGRyICppcGg7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTIzMD1zdGF0aWMgdm9pZCBpcHRmc19pbnB1dF9vcmRlcmVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEyMzQtXFx0c3RydWN0IGxpc3RfaGVhZCBzdWJsaXN0OyAvKiByZW5hbWUgdGhpcyBpdCdzIGp1c3QgYSBsaXN0ICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEyMzU6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTIzNi1cXHRzdHJ1Y3QgaXBfaXB0ZnNfaGRyICppcHRoO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTEzMTItXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjEzMTM6c3RhdGljIHZvaWQgX192ZWNfc2hpZnQoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIHNoaWZ0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzE0LXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzI2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzI3OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9wYXN0KHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMyOC1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpmcmVlbGlzdClcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzMyLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzMzOnN0YXRpYyB1MzIgX19yZW9yZGVyX2Ryb3Aoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgc3RydWN0IGxpc3RfaGVhZCAqbGlzdClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTMzNC1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xMzc5LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxMzgwOnN0YXRpYyB2b2lkIF9fcmVvcmRlcl90aGlzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICppbnNrYixcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTM4MS1cXHRcXHRcXHQgICBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0MDgtICovXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE0MDk6c3RhdGljIHZvaWQgaXB0ZnNfc2V0X3dpbmRvd19kcm9wX3RpbWVzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIGludCBpbmRleClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQxMC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTQzNjpzdGF0aWMgdm9pZCBfX3Jlb3JkZXJfZnV0dXJlX2ZpdHMoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTQzNy1cXHRcXHRcXHRcXHQgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNDg1LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNDg2OnN0YXRpYyB2b2lkIF9fcmVvcmRlcl9mdXR1cmVfc2hpZnRzKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE0ODctXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBza19idWZmICppbnNrYixcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xNjMxLSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNjMyOnN0YXRpYyB2b2lkIGlwdGZzX2lucHV0X3Jlb3JkZXIoc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTYzMy1cXHRcXHRcXHRcXHRzdHJ1Y3Qgc2tfYnVmZiAqaW5za2IsIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MTY4MD1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgaXB0ZnNfZHJvcF90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4My1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE2ODQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTY4NS1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xNzI5PXN0YXRpYyBpbnQgaXB0ZnNfaW5wdXQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTczMS1cXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVsaXN0LCBsaXN0O1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoxNzMyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3MzMtXFx0c3RydWN0IHNrX2J1ZmYgKm5leHQ7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTc4Mi0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTc4MzpzdGF0aWMgYm9vbCBpcHRmc19lbnF1ZXVlKHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsIHN0cnVjdCBza19idWZmICpza2IpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE3ODQte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDYtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjE4MDc6c3RhdGljIGludCBpcHRmc19nZXRfY3VyX3BtdHUoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMsXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTE4MDgtXFx0XFx0XFx0ICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xODQ1PXN0YXRpYyBpbnQgaXB0ZnNfb3V0cHV0X2NvbGxlY3Qoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMTg0OC1cXHRzdHJ1Y3QgeGZybV9zdGF0ZSAqeCA9IGRzdC1cXHUwMDNleGZybTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MTg0OTpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0xODUwLVxcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0xOTc1PXN0YXRpYyBzdHJ1Y3Qgc2tfYnVmZiAqaXB0ZnNfY29weV9jcmVhdGVfZnJhZyhzdHJ1Y3Qgc2tiX3NlcV9zdGF0ZSAqc3QsIHUzMiBvZmZzZXQsIHUzMiBjb3B5X2xlbilcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDA4LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMDA5OnN0YXRpYyBpbnQgaXB0ZnNfY29weV9jcmVhdGVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKipza2JwLCBzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1MzIgbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMDEwLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMTA1LSAqL1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyMTA2OnN0YXRpYyBpbnQgaXB0ZnNfZmlyc3Rfc2tiKHN0cnVjdCBza19idWZmICoqc2ticCwgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcywgdTMyIG10dSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjEwNy17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjIwMj1zdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwNDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjA1LVxcdHN0cnVjdCBza19idWZmICpza2IsICpza2IyLCAqKm5leHRwO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIzMzc9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGlwdGZzX2RlbGF5X3RpbWVyKHN0cnVjdCBocnRpbWVyICptZSlcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzM5LVxcdHN0cnVjdCBza19idWZmX2hlYWQgbGlzdDtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM0MDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzQxLVxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1MjE9c3RhdGljIHUzMiBpcHRmc19nZXRfaW5uZXJfbXR1KHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBpbnQgb3V0ZXJfbXR1KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTIyLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjUyMzpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTI0LVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI1NDA9c3RhdGljIGludCBpcHRmc191c2VyX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNTQzLXtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjU0NDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzID0geC1cXHUwMDNlbW9kZV9kYXRhO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNTQ1OlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2NvbmZpZyAqeGM7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI1NDYtXFx0dTY0IHE7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjU5Nz1zdGF0aWMgdW5zaWduZWQgaW50IGlwdGZzX3NhX2xlbihjb25zdCBzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjU5OC17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI1OTk6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYwMDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXFx1MDAyNnh0ZnMtXFx1MDAzZWNmZztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYwMS1cXHR1bnNpZ25lZCBpbnQgbCA9IDA7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjYxNz1zdGF0aWMgaW50IGlwdGZzX2NvcHlfdG9fdXNlcihzdHJ1Y3QgeGZybV9zdGF0ZSAqeCwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYxOC17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2MTk6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjYyMDpcXHRzdHJ1Y3QgeGZybV9pcHRmc19jb25maWcgKnhjID0gXFx1MDAyNnh0ZnMtXFx1MDAzZWNmZztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjYyMS1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNjU2PXN0YXRpYyB2b2lkIF9faXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeCxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjY1NzpcXHRcXHRcXHQgICAgICAgc3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcylcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY1OC17XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MjY4MT1zdGF0aWMgaW50IGlwdGZzX2Nsb25lX3N0YXRlKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3QgeGZybV9zdGF0ZSAqb3JpZylcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yNjgzLVxcdHN0cnVjdCBza2Jfd3NlcSAqd19zYXZlZCA9IE5VTEw7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI2ODQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjY4NS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzIyPXN0YXRpYyBpbnQgaXB0ZnNfaW5pdF9zdGF0ZShzdHJ1Y3QgeGZybV9zdGF0ZSAqeClcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyMy17XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3MjQ6XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcztcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjcyNS1cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yNzQwPXN0YXRpYyB2b2lkIGlwdGZzX2Rlc3Ryb3lfc3RhdGUoc3RydWN0IHhmcm1fc3RhdGUgKngpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NDEte1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzoyNzQyOlxcdHN0cnVjdCB4ZnJtX2lwdGZzX2RhdGEgKnh0ZnMgPSB4LVxcdTAwM2Vtb2RlX2RhdGE7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3NDMtXFx0c3RydWN0IHNrX2J1ZmZfaGVhZCBsaXN0O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTI3NzY9c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3ODktXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTA6c3RhdGljIGludCBfX2luaXQgeGZybV9pcHRmc19pbml0KHZvaWQpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTEte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTMtXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI3OTQ6XFx0cHJfaW5mbyhcXFwieGZybV9pcHRmczogSVBzZWMgSVAtVEZTIHR1bm5lbCBtb2RlIG1vZHVsZVxcXFxuXFxcIik7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI3OTUtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjgwMi1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwMzpzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDQte1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTI4MDctXFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjI4MDg6bW9kdWxlX2luaXQoeGZybV9pcHRmc19pbml0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjgwOTptb2R1bGVfZXhpdCh4ZnJtX2lwdGZzX2ZpbmkpO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yODEwLU1PRFVMRV9MSUNFTlNFKFxcXCJHUExcXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MDguNDg1NzI0OTk0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk1MjAwMDY2NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIFhGUk0gSVBUYWJsZXMgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBgeGZybV9pcHRmc19pbml0YCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBgaXB0ZnNfbW9kZV9jYnNgIHN0cnVjdHVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kLCBjcnVjaWFsbHksIGhvdyBpdCBnZXRzIGludGVncmF0ZWQgaW50byB0aGUgc3lzdGVtLiBLbm93aW5nIHRoZSBjYWxsYmFja3MgYW5kIHRoZWlyIHJlZ2lzdHJhdGlvbiBwcm9jZXNzIGlzIGtleSB0byBncmFzcGluZyBob3cgdGhpcyBtb2R1bGUgaW50ZXJhY3RzIHdpdGggdGhlIElQdGFibGVzIGZyYW1ld29yaywgZXNwZWNpYWxseSBob3cgaXQgaGFuZGxlcyB0aGUgZmlsdGVyaW5nIG9yIHRyYW5zZm9ybWF0aW9uIG9mIElQIHBhY2tldHMuIEknbGwgbmVlZCB0byB0cmFjZSB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3MgdG8gY29uZmlybSB0aGF0IHRoaW5ncyBhcmUgYmVpbmcgc2V0dXAgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MDc5LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTI6MTguMDA1NzMzOTA1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2ODkzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjc3MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjc3MDpcXHRcXHRrZnJlZV9zZW5zaXRpdmUoeHRmcy1cXHUwMDNld19zYXZlZCk7XFxuMjc3MTpcXHRcXHRrZnJlZV9zZW5zaXRpdmUoeHRmcyk7XFxuMjc3MjpcXHRcXG4yNzczOlxcdFxcdG1vZHVsZV9wdXQoeC1cXHUwMDNlbW9kZV9jYnMtXFx1MDAzZW93bmVyKTtcXG4yNzc0OlxcdH1cXG4yNzc1OlxcdFxcbjI3NzY6XFx0c3RhdGljIGNvbnN0IHN0cnVjdCB4ZnJtX21vZGVfY2JzIGlwdGZzX21vZGVfY2JzID0ge1xcbjI3Nzc6XFx0XFx0Lm93bmVyID0gVEhJU19NT0RVTEUsXFxuMjc3ODpcXHRcXHQuaW5pdF9zdGF0ZSA9IGlwdGZzX2luaXRfc3RhdGUsXFxuMjc3OTpcXHRcXHQuY2xvbmVfc3RhdGUgPSBpcHRmc19jbG9uZV9zdGF0ZSxcXG4yNzgwOlxcdFxcdC5kZXN0cm95X3N0YXRlID0gaXB0ZnNfZGVzdHJveV9zdGF0ZSxcXG4yNzgxOlxcdFxcdC51c2VyX2luaXQgPSBpcHRmc191c2VyX2luaXQsXFxuMjc4MjpcXHRcXHQuY29weV90b191c2VyID0gaXB0ZnNfY29weV90b191c2VyLFxcbjI3ODM6XFx0XFx0LnNhX2xlbiA9IGlwdGZzX3NhX2xlbixcXG4yNzg0OlxcdFxcdC5nZXRfaW5uZXJfbXR1ID0gaXB0ZnNfZ2V0X2lubmVyX210dSxcXG4yNzg1OlxcdFxcdC5pbnB1dCA9IGlwdGZzX2lucHV0LFxcbjI3ODY6XFx0XFx0Lm91dHB1dCA9IGlwdGZzX291dHB1dF9jb2xsZWN0LFxcbjI3ODc6XFx0XFx0LnByZXBhcmVfb3V0cHV0ID0gaXB0ZnNfcHJlcGFyZV9vdXRwdXQsXFxuMjc4ODpcXHR9O1xcbjI3ODk6XFx0XFxuMjc5MDpcXHRzdGF0aWMgaW50IF9faW5pdCB4ZnJtX2lwdGZzX2luaXQodm9pZClcXG4yNzkxOlxcdHtcXG4yNzkyOlxcdFxcdGludCBlcnI7XFxuMjc5MzpcXHRcXG4yNzk0OlxcdFxcdHByX2luZm8oXFxcInhmcm1faXB0ZnM6IElQc2VjIElQLVRGUyB0dW5uZWwgbW9kZSBtb2R1bGVcXFxcblxcXCIpO1xcbjI3OTU6XFx0XFxuMjc5NjpcXHRcXHRlcnIgPSB4ZnJtX3JlZ2lzdGVyX21vZGVfY2JzKFhGUk1fTU9ERV9JUFRGUywgXFx1MDAyNmlwdGZzX21vZGVfY2JzKTtcXG4yNzk3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbjI3OTg6XFx0XFx0XFx0cHJfaW5mbyhcXFwiJXM6IGNhbid0IHJlZ2lzdGVyIElQLVRGU1xcXFxuXFxcIiwgX19mdW5jX18pO1xcbjI3OTk6XFx0XFxuMjgwMDpcXHRcXHRyZXR1cm4gZXJyO1xcbjI4MDE6XFx0fVxcbjI4MDI6XFx0XFxuMjgwMzpcXHRzdGF0aWMgdm9pZCBfX2V4aXQgeGZybV9pcHRmc19maW5pKHZvaWQpXFxuMjgwNDpcXHR7XFxuMjgwNTpcXHRcXHR4ZnJtX3VucmVnaXN0ZXJfbW9kZV9jYnMoWEZSTV9NT0RFX0lQVEZTKTtcXG4yODA2OlxcdH1cXG4yODA3OlxcdFxcbjI4MDg6XFx0bW9kdWxlX2luaXQoeGZybV9pcHRmc19pbml0KTtcXG4yODA5OlxcdG1vZHVsZV9leGl0KHhmcm1faXB0ZnNfZmluaSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUyOjE4LjAwNTkwNjM1NVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2MjI2MzE0MjgwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBYRlJNIFRob3VnaHRzIG9uIGlwdGZzKipcblxuT2theSwgc28gYFhGUk1fTU9ERV9JUFRGU2AgaXMgcmVnaXN0ZXJlZCwgd2hpY2ggbWVhbnMgaXQgaGFzIGl0cyBvd24gY2FsbGJhY2sgZnVuY3Rpb25zLCBzcGVjaWZpY2FsbHkgdGhyb3VnaCBgeGZybV9yZWdpc3Rlcl9tb2RlX2Nic2AuIFRoaXMgaXMgc3RhbmRhcmQgWEZSTSBvcGVyYXRpbmcgcHJvY2VkdXJlLiBBbnlvbmUgd2hvIGtub3dzIHRoZWlyIHdheSBhcm91bmQgY2FuIGNyZWF0ZSBhIFNlY3VyaXR5IEFzc29jaWF0aW9uIChTQSkgdGhhdCB1c2VzIGBYRlJNX01PREVfSVBURlNgLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgYWN0dWFsIHZhbHVlIG9mIGBYRlJNX01PREVfSVBURlNgLCBzaW5jZSBpdCdzIGRlZmluZWQgc29tZXdoZXJlIGxpa2UgYGluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmhgLiBMZXQgbWUgcXVpY2tseSBsb29rIHRoYXQgdXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5OTIzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjAuMjY5MDUyMzY1WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5MTkyNDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTV9NT0RFX0lQVEZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaD0xNDk9ZW51bSB7XFxuLS1cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oLTE2MC0jZGVmaW5lIFhGUk1fTU9ERV9CRUVUIDRcXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjE2MTojZGVmaW5lIFhGUk1fTU9ERV9JUFRGUyA1XFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0xNjItI2RlZmluZSBYRlJNX01PREVfTUFYIDZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjAuNDA2OTc2ODIzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjgyOTIwNTgzODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBUaG91Z2h0cyBvbiBYRlJNX01PREVfSVBURlMgYW5kIFN5emthbGxlcioqXG5cbk9rYXksIHNvIGBYRlJNX01PREVfSVBURlNgLi4uIHRoYXQncyBhIHN0YW5kYXJkIG5ldGxpbmsgWEZSTSBtb2RlLCBjb25maWd1cmFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGBYRlJNQV9JUFRGU2Agb3Igc3RhdGUgY3JlYXRpb24uIFJpZ2h0LCByaWdodC4gTm93LCBteSBmaXJzdCB0aG91Z2h0IGlzOiBkb2VzIHN5emthbGxlciBoYW5kbGUgdGhpcz8gRG9lcyBpdCBrbm93IGFib3V0IGBYRlJNX01PREVfSVBURlNgIGFuZCB0aGUgYXNzb2NpYXRlZCBgSVBURlNgIGF0dHJpYnV0ZXM/IEJlZm9yZSBJIGRpdmUgaW4gdG9vIGRlZXAsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB3aGVyZSB0aGVzZSBhdHRyaWJ1dGVzIGFyZSBldmVuIGRlZmluZWQuIExldCBtZSBqdXN0IHRha2UgYSBxdWljayBwZWVrIGF0IGBuZXQveGZybS94ZnJtX3VzZXIuY2AsIG9yIHdoZXJldmVyIHRoZSBgSVBURlNgIGRlZmluaXRpb25zIGFyZSBsb2NhdGVkIGluIHRoZSBrZXJuZWwgc291cmNlLiBUaGF0J3MgYWx3YXlzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBjb25maXJtIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDMyMCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjUzOjI4LjY5OTAzNzkyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTg5ODg4NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEZSTUFfSVBURlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgveGZybS5oPTI5Mz1lbnVtIHhmcm1fYXR0cl90eXBlX3Qge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMjktXFx0WEZSTUFfU0FfUENQVSxcXHRcXHQvKiBfX3UzMiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMwOlxcdFhGUk1BX0lQVEZTX0RST1BfVElNRSxcXHQvKiBfX3UzMiBpbjogdXNlYyB0byB3YWl0IGZvciBuZXh0IHNlcSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMxOlxcdFhGUk1BX0lQVEZTX1JFT1JERVJfV0lORE9XLCAvKiBfX3UxNiBpbjogcmVvcmRlciB3aW5kb3cgc2l6ZSAocGt0cykgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzMjpcXHRYRlJNQV9JUFRGU19ET05UX0ZSQUcsXFx0Lyogb3V0OiBkb24ndCB1c2UgZnJhZ21lbnRhdGlvbiAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzMzOlxcdFhGUk1BX0lQVEZTX0lOSVRfREVMQVksXFx0LyogX191MzIgb3V0OiBpbml0aWFsIHBhY2tldCB3YWl0IGRlbGF5ICh1c2VjKSAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC94ZnJtLmg6MzM0OlxcdFhGUk1BX0lQVEZTX01BWF9RU0laRSxcXHQvKiBfX3UzMiBvdXQ6IG1heCBpbmdyZXNzIHF1ZXVlIHNpemUgKG9jdGV0cykgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgveGZybS5oOjMzNTpcXHRYRlJNQV9JUFRGU19QS1RfU0laRSxcXHQvKiBfX3UzMiBvdXQ6IHNpemUgb2Ygb3V0ZXIgcGFja2V0LCAwIGZvciBQTVRVICovXFxuaW5jbHVkZS91YXBpL2xpbnV4L3hmcm0uaC0zMzYtXFx0X19YRlJNQV9NQVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTM6MjguODE4MDMyNjYxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjMxNTM0MzI1ODk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgWEZSTV9JUFRGUyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBYRlJNX0lQVEZTYC4gVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyBJIGNhbiB0ZXN0IGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VIG9yIHN5emthbGxlciwgbm8gc3BlY2lhbCBoYXJkd2FyZSBuZWVkZWQsIGdvb2QuIEl0J3MgaW4ta2VybmVsIG5ldHdvcmtpbmcsIGRlYWxpbmcgd2l0aCBJUC1URlMgZW5jYXBzdWxhdGlvbiBmb3IgSVBzZWMsIHdoaWNoIHJ1bnMgb3ZlciBuZXR3b3JrIHBhY2tldHMgYW5kIFhGUk0gc3RhdGVzLiBJJ20gc2VlaW5nIGl0IGNoYW5nZXMgaG93IHBhZ2UgZnJhZ21lbnRzIGFyZSBoYW5kbGVkIGluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3NgLlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEluIGBpcHRmc19za2JfYWRkX2ZyYWdzYCwgdGhlIHBhdGNoIHNlZW1zIHRvIGhhdmUgYWRkZWQgYSBjb25kaXRpb25hbCByZWYgZm9yIHRoZSBwYWdlOiBgaWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSkgcGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7IGVsc2UgX19za2JfZnJhZ19yZWYodG9mcmFnKTtgLiAgU28sIGl0IGxvb2tzIGxpa2UgaXQncyB1c2luZyBgcGFnZV9wb29sX3JlZl9wYWdlYCB3aGVuIGEgcmVjeWNsZSBmbGFnIChgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYCkgaXMgc2V0LCBvdGhlcndpc2UsIGl0J3MganVzdCBkb2luZyB0aGUgbm9ybWFsIGZyYWdtZW50IHJlZmVyZW5jZS5cblxuTm93LCBpbiBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHRoaW5ncyBhcmUgYSBiaXQgZGlmZmVyZW50LiBQcmV2aW91c2x5IGl0IHdhcyBgc2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MrKyk7YC4gVGhlIHBhdGNoIGhhcyBjaGFuZ2VkIHRoZSBpbmNyZW1lbnQgb2YgYHRvaS1cdTAwM2Vucl9mcmFnc2A6IGl0J3Mgbm93IGluY3JlbWVudGVkICphZnRlciogdGhlIHJlZmVyZW5jZS4gIFdlIG5vdyBzZWU6XG5gYGBjXG5cdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcblx0XHRcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKFx1MDAyNnRvaS1cdTAwM2VmcmFnc1t0b2ktXHUwMDNlbnJfZnJhZ3NdKSk7XG5cdFx0ZWxzZVxuXHRcdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MpO1xuXHRcdHRvaS1cdTAwM2Vucl9mcmFncysrO1xuYGBgXG5cblRoZSBrZXkgY2hhbmdlIGhlcmUgaXMgdGhhdCB0aGUgaW5jcmVtZW50IGlzIHNlcGFyYXRlZCwgYW5kLCBzaW1pbGFybHkgdG8gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBpdCB1c2VzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGJhc2VkIG9uIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgLlxuXG5Ib2xkIG9uLi4uIFNvLCBpZiBgZnJvbS1cdTAwM2VwcF9yZWN5Y2xlYCAob3IgYHdhbGstXHUwMDNlcHBfcmVjeWNsZWApIGlzIHNldCwgaXQgdXNlcyBgcGFnZV9wb29sX3JlZl9wYWdlYC4gIFRoYXQncyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlbiB0aGUgcGFnZSBwb29sIGlzIGVuYWJsZWQgYW5kICpleGFjdGx5KiB3aGF0IGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGRvZXMgaW4gdGhpcyBjb250ZXh0LiBMZXQgbWUganVzdCBzZWFyY2ggZm9yIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGFuZCBzZWUgd2hlcmUgaXQncyBkZWZpbmVkIGFuZCB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwOTgxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjAwLjM1MjM2MjM0NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTA5NjgzMDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGFnZV9wb29sX3JlZl9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzE1PXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW1fcmVmIG5ldG1lbSlcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmgtMzE5LVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6MzIwOnN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcmVmX3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zMjEte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDowMC40MDMzMzcwMzZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTUxNzQxNzQ1MDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gYHBhZ2VfcG9vbF9yZWZfcGFnZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBgaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaGAgbGV2ZWwuIEkga25vdyB0aGUgZ2VuZXJhbCBpZGVhLCBidXQgSSB3YW50IHRvIGdldCBhIHNvbGlkIGdyYXNwIG9mICpleGFjdGx5KiBob3cgaXQncyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIEknbSB0aGlua2luZyBhYm91dCBtZW1vcnkgbWFuYWdlbWVudCwgb2YgY291cnNlLiBJcyB0aGlzIGEgc2ltcGxlIHJlZmVyZW5jZSBjb3VudGVyIGluY3JlbWVudCwgb3IgYXJlIHRoZXJlIG1vcmUgc3VidGxlIGltcGxpY2F0aW9ucyBpbiB0aGUgcGFnZSBwb29sIGNvbnRleHQ/IEFyZSB3ZSBkZWFsaW5nIHdpdGggYW55IGF0b21pYyBvcGVyYXRpb25zPyBBbnkgcG90ZW50aWFsIGZvciBjb250ZW50aW9uPyBBcmUgdGhlcmUgYW55IHNpZGUgZWZmZWN0cywgbGlrZSBpbnZhbGlkYXRpbmcgdGhlIHBhZ2Ugc29tZWhvdyBpZiBpdCBmYWlscz8gSSdtIGFudGljaXBhdGluZyBzb21lIGltcG9ydGFudCBkZXRhaWxzIHRvIGJlIGluIHRoZSBpbXBsZW1lbnRhdGlvbiwgZXNwZWNpYWxseSByZWdhcmRpbmcgdGhlIGNvbnRleHQgdGhpcyBoZWxwZXIgcmVzaWRlcyBpbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgZXhhY3QgbWVjaGFuaWNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIG51YW5jZXMgdGhhdCBjb3VsZCBhZmZlY3QgcGVyZm9ybWFuY2UsIGFuZCBhbnkgcG90ZW50aWFsIGdvdGNoYXMgZm9yIHRoZSBtYWludGFpbmVycyBvZiB0aGlzIGNvZGUgYmFzZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIzOTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDoxNS41Nzc1MTQyNzlaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaFwiLFxuICBcIkZpcnN0TGluZVwiOiAzMTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzMTU6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfbmV0bWVtKG5ldG1lbV9yZWYgbmV0bWVtKVxcbiAzMTY6XFx0e1xcbiAzMTc6XFx0XFx0YXRvbWljX2xvbmdfaW5jKG5ldG1lbV9nZXRfcHBfcmVmX2NvdW50X3JlZihuZXRtZW0pKTtcXG4gMzE4OlxcdH1cXG4gMzE5OlxcdFxcbiAzMjA6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlcXG4gMzIxOlxcdHtcXG4gMzIyOlxcdFxcdHBhZ2VfcG9vbF9yZWZfbmV0bWVtKHBhZ2VfdG9fbmV0bWVtKHBhZ2UpKTtcXG4gMzIzOlxcdH1cXG4gMzI0OlxcdFxcbiAzMjU6XFx0c3RhdGljIGlubGluZSBib29sIHBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW1fcmVmIG5ldG1lbSlcXG4gMzI2OlxcdHtcXG4gMzI3OlxcdFxcdC8qIElmIHBhZ2VfcG9vbF91bnJlZl9wYWdlKCkgcmV0dXJucyAwLCB3ZSB3ZXJlIHRoZSBsYXN0IHVzZXIgKi9cXG4gMzI4OlxcdFxcdHJldHVybiBwYWdlX3Bvb2xfdW5yZWZfbmV0bWVtKG5ldG1lbSwgMSkgPT0gMDtcXG4gMzI5OlxcdH1cXG4gMzMwOlxcdFxcbiAzMzE6XFx0c3RhdGljIGlubGluZSB2b2lkIHBhZ2VfcG9vbF9wdXRfbmV0bWVtKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuIDMzMjpcXHRcXHRcXHRcXHRcXHRcXHRuZXRtZW1fcmVmIG5ldG1lbSxcXG4gMzMzOlxcdFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBkbWFfc3luY19zaXplLFxcbiAzMzQ6XFx0XFx0XFx0XFx0XFx0XFx0Ym9vbCBhbGxvd19kaXJlY3QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjE1LjU3NzYwMjI1OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo5ODA2MjI4NzIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRGVjaXNpb246IElQLVRGUyBSZWZjb3VudCBCdWdmaXgqKlxuXG5Pa2F5LCBzbyB0aGlzIGlzIGFib3V0IGEgY3JpdGljYWwgcmVmY291bnRpbmcgYnVnIGZpeCBpbiB0aGUgSVAtVEZTIChJUHNlYyBUcmFuc3BvcnQgRmxvdyBTZWN1cml0eSkgY29kZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIHBhZ2UgcG9vbC4gSXQgbG9va3MgbGlrZSBgcGFnZV9wb29sX3JlZl9uZXRtZW1gIHdhcyBpbmNyZW1lbnRpbmcgdGhlIHJlZmVyZW5jZSBjb3VudCAoYHBwX3JlZl9jb3VudGApLCBidXQgdGhlIGNvcnJlc3BvbmRpbmcgZGVjcmVtZW50IHdhcyBoYXBwZW5pbmcgdGhyb3VnaCBgcGFnZV9wb29sX3VucmVmX25ldG1lbWAgb3IgYHBhZ2VfcG9vbF9yZXR1cm5fc2tiX3BhZ2VgICpvbmx5KiB3aGVuIGBza2ItXHUwMDNlcHBfcmVjeWNsZWAgd2FzIHRydWUuICBJZiBgcGFnZV9wb29sX3JlZl9wYWdlYCB3YXNuJ3QgY2FsbGVkLCB0aGVuIHRoYXQgcmVmY291bnQgd2Fzbid0IGluY3JlbWVudGVkLCBsZWFkaW5nIHRvIHBvdGVudGlhbCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdyBpc3N1ZXMuIEEgcHJldHR5IGNsYXNzaWMgbWVtb3J5IG1hbmFnZW1lbnQgYnVnLiAgRXNzZW50aWFsbHksIGFuIHVuZGVyLWluY3JlbWVudCBzY2VuYXJpby5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXM6IGNhbiB3ZSBmdXp6IHRoaXM/IExldCdzIGJyZWFrIGl0IGRvd24uXG5cbkZpcnN0LCBpcyB0aGUgcGF0Y2hlZCBjb2RlIHJlYWNoYWJsZT8gWWVzISBUaGlzIGlzIGNvcmUgbmV0d29ya2luZyBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBJUHNlYy9YRlJNIGZyYW1ld29yayBhbmQgdGhlIElQVEZTIHN1YmNvbXBvbmVudC4gVGhlIGNoYW5nZXMgZGlyZWN0bHkgaW1wYWN0IGhvdyBgc2tfYnVmZnNgIGFuZCBwYWdlIHBvb2wgbWVtb3J5IGFyZSBtYW5hZ2VkIGluIElQLVRGUy4gV2Uga25vdyBpdCBtb2RpZmllcyBleGVjdXRhYmxlIGNvZGUgaW4gdGhlIG5ldHdvcmtpbmcgc3Vic3lzdGVtLCBtZWFuaW5nIGl0ICpjYW4qIGJlIGhpdCBpbiBhIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGF0IGFsb25lIHN1Z2dlc3RzIGZ1enppbmcgaXMgd29ydGh3aGlsZS5cblxuQW5kIGZyb20gd2hhdCBJJ3ZlIHJlYWQsIHJlYWNoYWJsZSBjb2RlIGlzIHRoZSBwcmltYXJ5IGdhdGUuIFRoZSBjcml0ZXJpYSBzYXkgXCJXb3J0aEZ1enppbmc9dHJ1ZVwiIHdoZW4gcGF0Y2hlcyB0b3VjaCByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBlc3BlY2lhbGx5IHdpdGhpbiBtZW1vcnkgbWFuYWdlbWVudCBvciBjb3JlIG5ldHdvcmtpbmcgc3Vic3lzdGVtcy4gVGhpcyBmaXRzIHRoZSBiaWxsIHBlcmZlY3RseS5cblxuTm93LCB3aGF0IGFib3V0IHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucz8gV2UgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQncyByZXF1aXJlZCBmb3IgdGhpcyB0byBjb21waWxlIGFuZCBiZSBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBgbmV0L3hmcm0vTWFrZWZpbGVgLCB3ZSBzZWUgYG9iai0kKENPTkZJR19YRlJNX0lQVEZTKSArPSB4ZnJtX2lwdGZzLm9gLCBhbmQgaW4gYG5ldC94ZnJtL0tjb25maWdgIHdlIGhhdmUgYGNvbmZpZyBYRlJNX0lQVEZTYCB0aGF0IGRlcGVuZHMgb24gYFhGUk1gLiBTbywgd2UnbGwgbmVlZCB0byBsb29rIGludG8gWEZSTSBjb25maWd1cmF0aW9uLiBXZSdsbCBjaGVjayBpdHMgZGVwZW5kZW5jaWVzIGluIGBuZXQveGZybS9LY29uZmlnYCB0byBzZWUgd2hhdCBlbHNlIHdlIG1pZ2h0IG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMzMDMzLCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTQ6MjUuMzgzODMzNzQyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MjA2OTgwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgWEZSTVxcXFxiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS9LY29uZmlnLTQtI1xcbm5ldC94ZnJtL0tjb25maWc6NTpjb25maWcgWEZSTVxcbm5ldC94ZnJtL0tjb25maWctNi1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU0OjI1LjQ1NTkwOTc1WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjk3MDc2Mjc0OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC94ZnJtL0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYG5ldC94ZnJtL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBmaXJzdCBsaW5lLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgbGlrZWx5IHRvIGJlIGZvY3VzZWQgb24gdGhlIGJyb2FkZXIgY29uZmlndXJhdGlvbiBwb3NzaWJpbGl0aWVzIGZvciB0aGUgWEZSTSBzdWJzeXN0ZW0gd2l0aGluIHRoZSBMaW51eCBrZXJuZWwuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSB0b3AtbGV2ZWwgY29uZmlndXJhdGlvbiBvcHRpb25zIHRoYXQgZWl0aGVyIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBlbnRpcmUgWEZSTSBmcmFtZXdvcmsgYW5kIGl0cyBjb3JlIGNvbXBvbmVudHMuIERlcGVuZGluZyBvbiB3aGF0IEkgc2VlIGF0IHRoZSB0b3AsIHRoaXMgY291bGQgYmUgZGVmaW5pbmcgc29tZSBtb2R1bGVzIHRoYXQgSSBtYXkgd2FudCB0byBmb2N1cyBvbiBmdXJ0aGVyLCBkZXBlbmRpbmcgb24gbXkgbmVlZC4gSSBhbnRpY2lwYXRlIHNlZWluZyBkZXBlbmRlbmNpZXMsIGRlZmF1bHQgdmFsdWVzLCBhbmQgbWF5YmUgZXZlbiBzb21lIGJhc2ljIGhlbHAgdGV4dCB0aGF0IGdpdmVzIG1lIGEgaGlnaC1sZXZlbCB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgWEZSTSBpcyBhbGwgYWJvdXQsIG9yIGhvdyBpdCBpbnRlZ3JhdGVzIGludG8gdGhlIGJyb2FkZXIgbmV0d29yayBzdGFjaywgc28gSSBjYW4gYmV0dGVyIHVuZGVyc3RhbmQgaXRzIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQxODUsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NDozNS4xNjM1Mzk3ODhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBYRlJNIGNvbmZpZ3VyYXRpb25cXG4gICA0OlxcdCNcXG4gICA1OlxcdGNvbmZpZyBYRlJNXFxuICAgNjpcXHRcXHRib29sXFxuICAgNzpcXHRcXHRkZXBlbmRzIG9uIElORVRcXG4gICA4OlxcdFxcdHNlbGVjdCBHUk9fQ0VMTFNcXG4gICA5OlxcdFxcdHNlbGVjdCBTS0JfRVhURU5TSU9OU1xcbiAgMTA6XFx0XFxuICAxMTpcXHRjb25maWcgWEZSTV9PRkZMT0FEXFxuICAxMjpcXHRcXHRib29sXFxuICAxMzpcXHRcXG4gIDE0OlxcdGNvbmZpZyBYRlJNX0FMR09cXG4gIDE1OlxcdFxcdHRyaXN0YXRlXFxuICAxNjpcXHRcXHRzZWxlY3QgWEZSTVxcbiAgMTc6XFx0XFx0c2VsZWN0IENSWVBUT1xcbiAgMTg6XFx0XFx0c2VsZWN0IENSWVBUT19BRUFEXFxuICAxOTpcXHRcXHRzZWxlY3QgQ1JZUFRPX0hBU0hcXG4gIDIwOlxcdFxcdHNlbGVjdCBDUllQVE9fU0tDSVBIRVJcXG4gIDIxOlxcdFxcbiAgMjI6XFx0aWYgSU5FVFxcbiAgMjM6XFx0Y29uZmlnIFhGUk1fVVNFUlxcbiAgMjQ6XFx0XFx0dHJpc3RhdGUgXFxcIlRyYW5zZm9ybWF0aW9uIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXFwiXFxuICAyNTpcXHRcXHRzZWxlY3QgWEZSTV9BTEdPXFxuICAyNjpcXHRcXHRoZWxwXFxuICAyNzpcXHRcXHQgIFN1cHBvcnQgZm9yIFRyYW5zZm9ybWF0aW9uKFhGUk0pIHVzZXIgY29uZmlndXJhdGlvbiBpbnRlcmZhY2VcXG4gIDI4OlxcdFxcdCAgbGlrZSBJUHNlYyB1c2VkIGJ5IG5hdGl2ZSBMaW51eCB0b29scy5cXG4gIDI5OlxcdFxcbiAgMzA6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBZLlxcbiAgMzE6XFx0XFxuICAzMjpcXHRjb25maWcgWEZSTV9VU0VSX0NPTVBBVFxcbiAgMzM6XFx0XFx0dHJpc3RhdGUgXFxcIkNvbXBhdGlibGUgQUJJIHN1cHBvcnRcXFwiXFxuICAzNDpcXHRcXHRkZXBlbmRzIG9uIFhGUk1fVVNFUiBcXHUwMDI2XFx1MDAyNiBDT01QQVRfRk9SX1U2NF9BTElHTk1FTlQgXFx1MDAyNlxcdTAwMjYgXFxcXFxcbiAgMzU6XFx0XFx0XFx0SEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTU1xcbiAgMzY6XFx0XFx0c2VsZWN0IFdBTlRfQ09NUEFUX05FVExJTktfTUVTU0FHRVNcXG4gIDM3OlxcdFxcdGhlbHBcXG4gIDM4OlxcdFxcdCAgVHJhbnNmb3JtYXRpb24oWEZSTSkgdXNlciBjb25maWd1cmF0aW9uIGludGVyZmFjZSBsaWtlIElQc2VjXFxuICAzOTpcXHRcXHQgIHVzZWQgYnkgY29tcGF0aWJsZSBMaW51eCBhcHBsaWNhdGlvbnMuXFxuICA0MDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTQ6MzUuMTYzNjA5Mzg4WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjM0NTIwNjIzNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGludGVyYWN0aW9ucyBvZiB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMuIEkgc2VlIGBDT05GSUdfWEZSTV9VU0VSYCBpcyBicmluZ2luZyBpbiBgQ09ORklHX1hGUk1fQUxHT2AsIHdoaWNoIGluIHR1cm4sIGltcGxpZXMgYENPTkZJR19YRlJNYC4gVGhhdCdzIHN0YW5kYXJkLCBhbmQgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgYENPTkZJR19YRlJNX0lQVEZTYCdzIHJlbGF0aW9uc2hpcCwgYW5kIGl0IGxvb2tzIGxpa2UgaXQgZGVwZW5kcyBvbiBgQ09ORklHX1hGUk1gIHRvby4gTm8gc3VycHJpc2VzIHRoZXJlIGVpdGhlci5cblxuVGhlIG5leHQgdGhpbmcgSSB3YW50IHRvIHVuZGVyc3RhbmQgaXMgdGhlIHJlbGF0aW9uc2hpcCB0byBgUEFHRV9QT09MYC4gSXMgYENPTkZJR19YRlJNX0lQVEZTYCBicmluZ2luZyBpdCBpbiwgb3IgaXMgaXQgbmVlZGVkIGJ5IGFub3RoZXIgbW9kdWxlIGxpa2UgYHBhZ2VfcG9vbF9yZWZfcGFnZWAgdGhhdCBgQ09ORklHX1hGUk1fSVBURlNgIHVzZXM/IFRvIGZpZ3VyZSB0aGlzIG91dCwgSSdtIGdvaW5nIHRvIHF1aWNrbHkgc2VhcmNoIHdpdGhpbiB0aGUgcmVsZXZhbnQgZGlyZWN0b3JpZXMuIEknbGwgbmVlZCB0byBncmVwIHRocm91Z2ggYG5ldC9gIGFuZCB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGV0aGVyIGBQQUdFX1BPT0xgIGlzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmVsYXRlZCB0byBgQ09ORklHX1hGUk1fSVBURlNgLiBUaGlzIHdpbGwgaGVscCBtZSB3aXRoIHRoZSBjb25maWd1cmF0aW9uIGFuZCBlbnN1cmUgdGhhdCBJIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzQ4OTcsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NTowOS42ODQyMzU2MDhaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5MjU0NjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQQUdFX1BPT0xcXFxcYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXRcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L0tjb25maWc9NDg3PWNvbmZpZyBORVRfREVWTElOS1xcbi0tXFxubmV0L0tjb25maWctNDkwLVxcbm5ldC9LY29uZmlnOjQ5MTpjb25maWcgUEFHRV9QT09MXFxubmV0L0tjb25maWctNDkyLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MDkuNzUzNDk4NjE3WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU0NjMyNjQ3ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlOlxuXG4qKkludmVzdGlnYXRpbmcgYSBLZXJuZWwgQ29uZmlndXJhdGlvbiBJc3N1ZSoqXG5cbk9rYXksIEkgbmVlZCB0byBkaXZlIGludG8gc29tZXRoaW5nIGtlcm5lbC1yZWxhdGVkLiBMZXQncyBzZWUuLi4gdGhlIGBuZXRgIHN1YnN5c3RlbSBpcyBhIGxpa2VseSBjdWxwcml0LCBhbmQgYmFzZWQgb24gdGhlIHN5bXB0b21zIEknbSBzZWVpbmcsIGEgY29uZmlndXJhdGlvbiBpc3N1ZSBzZWVtcyBwbGF1c2libGUuIFNvLCBJJ2xsIHN0YXJ0IGJ5IHRha2luZyBhIGxvb2sgYXQgYG5ldC9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDQ5MS4gVGhhdCBhcmVhIHNlZW1zIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIGV4cGxvcmUgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IHRvIHRoZSBwcm9ibGVtIEknbSB0cnlpbmcgdG8gc29sdmUuIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgZXhhbWluZSB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCBpZGVudGlmeSBhbnkgcG90ZW50aWFsIG1pc2NvbmZpZ3VyYXRpb25zIG9yIGFyZWFzIHRoYXQgbWlnaHQgbmVlZCB0d2Vha2luZy4gTGV0J3Mgc2VlIHdoYXQncyB0aGVyZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTM2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjE1LjIxNjc2NTU0MloiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA0ODgsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0ODg6XFx0XFx0Ym9vbFxcbiA0ODk6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5MDpcXHRcXG4gNDkxOlxcdGNvbmZpZyBQQUdFX1BPT0xcXG4gNDkyOlxcdFxcdGJvb2xcXG4gNDkzOlxcdFxcbiA0OTQ6XFx0Y29uZmlnIFBBR0VfUE9PTF9TVEFUU1xcbiA0OTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDQ5NjpcXHRcXHRib29sIFxcXCJQYWdlIHBvb2wgc3RhdHNcXFwiXFxuIDQ5NzpcXHRcXHRkZXBlbmRzIG9uIFBBR0VfUE9PTFxcbiA0OTg6XFx0XFx0aGVscFxcbiA0OTk6XFx0XFx0ICBFbmFibGUgcGFnZSBwb29sIHN0YXRpc3RpY3MgdG8gdHJhY2sgcGFnZSBhbGxvY2F0aW9uIGFuZCByZWN5Y2xpbmdcXG4gNTAwOlxcdFxcdCAgaW4gcGFnZSBwb29scy4gVGhpcyBvcHRpb24gaW5jdXJzIGFkZGl0aW9uYWwgQ1BVIGNvc3QgaW4gYWxsb2NhdGlvblxcbiA1MDE6XFx0XFx0ICBhbmQgcmVjeWNsZSBwYXRocyBhbmQgYWRkaXRpb25hbCBtZW1vcnkgY29zdCB0byBzdG9yZSB0aGUgc3RhdGlzdGljcy5cXG4gNTAyOlxcdFxcdCAgVGhlc2Ugc3RhdGlzdGljcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhpcyBvcHRpb24gaXMgZW5hYmxlZCBhbmQgaWZcXG4gNTAzOlxcdFxcdCAgdGhlIGRyaXZlciB1c2luZyB0aGUgcGFnZSBwb29sIHN1cHBvcnRzIGV4cG9ydGluZyB0aGlzIGRhdGEuXFxuIDUwNDpcXHRcXG4gNTA1OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gNTA2OlxcdFxcbiA1MDc6XFx0Y29uZmlnIEZBSUxPVkVSXFxuIDUwODpcXHRcXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBmYWlsb3ZlciBtb2R1bGVcXFwiXFxuIDUwOTpcXHRcXHRoZWxwXFxuIDUxMDpcXHRcXHQgIFRoZSBmYWlsb3ZlciBtb2R1bGUgcHJvdmlkZXMgYSBnZW5lcmljIGludGVyZmFjZSBmb3IgcGFyYXZpcnR1YWxcXG4gNTExOlxcdFxcdCAgZHJpdmVycyB0byByZWdpc3RlciBhIG5ldGRldiBhbmQgYSBzZXQgb2Ygb3BzIHdpdGggYSBmYWlsb3ZlclxcbiA1MTI6XFx0XFx0ICBpbnN0YW5jZS4gVGhlIG9wcyBhcmUgdXNlZCBhcyBldmVudCBoYW5kbGVycyB0aGF0IGdldCBjYWxsZWQgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MTUuMjE2ODQ0MzUyWiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjkwNDYzNjk4MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyB0aGUgUEFHRV9QT09MIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgZXhhY3QgbWVjaGFuaWNzIG9mIHRoaXMgYFBBR0VfUE9PTGAgdGhpbmcuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogaG93IGlzIGBQQUdFX1BPT0xgIGFjdHVhbGx5ICpzZWxlY3RlZCo/IElzIGl0IGFsd2F5cyBhdmFpbGFibGUsIG9yIGRvZXMgc29tZXRoaW5nIGV4cGxpY2l0bHkgZW5hYmxlIGl0PyBPciBtYXliZSBzb21lIG90aGVyIHBpZWNlIG9mIHRoZSBrZXJuZWwgbG9naWMgY2hvb3NlcyBpdCBiYXNlZCBvbiBzb21lIGNyaXRlcmlhPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiBpdHMgYXZhaWxhYmlsaXR5LlxuXG5NeSBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgLiBJJ20gaG9waW5nIGl0IGNsZWFybHkgb3V0bGluZXMgdGhlIGRlcGVuZGVuY3kuIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGtub3cgaWYgaXQgKnJlcXVpcmVzKiBgQ09ORklHX1BBR0VfUE9PTGAgdG8gYmUgc2V0LCBvciBpZiBpdCBoYXMgc29tZSBzdHViIGltcGxlbWVudGF0aW9uIHdoZW4gYENPTkZJR19QQUdFX1BPT0xgIGlzIGRpc2FibGVkLiBQZXJoYXBzIGl0IGlzIGFsd2F5cyBjb21waWxlZCwgYnV0IGNvbmRpdGlvbmFsbHkgZGVmaW5lZC4gVGhpcyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgaW50ZWdyYXRlcyAob3IgZG9lc24ndCkgd2l0aCB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zLlxuXG5BbHRlcm5hdGl2ZWx5LCB0aGUgYnVpbGQgc3lzdGVtIG1pZ2h0IG9mZmVyIGNsdWVzLiBJJ2xsIGFsc28gZ2xhbmNlIGF0IGBuZXQvY29yZS9NYWtlZmlsZWAgb3IgY2lyY2xlIGJhY2sgdG8gYGluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmhgIGlmIHRoYXQgZmFpbHMgdG8gYmUgaW5mb3JtYXRpdmUuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGRlcGVuZGVuY3kgYW5kIHVuZGVyc3RhbmQgdGhlIGRlY2lzaW9uIG1ha2luZyBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg5OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjI0LjI2MzIxNjUyN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgxMjU5MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9jb3JlL01ha2VmaWxlPTI0PW9iai15ICs9IG5ldGRldl9xdWV1ZXMub1xcbm5ldC9jb3JlL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19QQUdFX1BPT0wpICs9IHBhZ2VfcG9vbC5vIHBhZ2VfcG9vbF91c2VyLm9cXG5uZXQvY29yZS9NYWtlZmlsZS0yNi1vYmotJChDT05GSUdfUFJPQ19GUykgKz0gbmV0LXByb2Nmcy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjI0LjMxMTM0NzAwOVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0Nzg0MjQ0OTY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEtlcm5lbCdzIFBBR0VfUE9PTCBVc2FnZSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyBgUEFHRV9QT09MYCBpcyBiZWluZyBicm91Z2h0IGludG8gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgZGlyZWN0bHkgd2l0aGluIGBuZXQveGZybS9LY29uZmlnYCwgc2VlIGlmIHRoZXJlIGFyZSBhbnkgZGlyZWN0IGRlcGVuZGVuY2llcyBvciBzZWxlY3Rpb25zIG9mIGBQQUdFX1BPT0xgIGRlZmluZWQgdGhlcmUuIFRoYXQncyBhbHdheXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBhIG5ldHdvcmtpbmctcmVsYXRlZCBmZWF0dXJlIGxpa2UgdGhpcy5cblxuSWYgdGhhdCBjb21lcyB1cCBlbXB0eSwgSSdsbCBuZWVkIHRvIGJyb2FkZW4gdGhlIHNlYXJjaC4gRHJpdmVycyBhcmUgb2Z0ZW4gdGhlIGtleTsgdGhleSBtaWdodCBiZSB0aGUgb25lcyB0aGF0IGFjdHVhbGx5IHJlcXVpcmUgYW5kIHRoZXJlZm9yZSBzZWxlY3QgYFBBR0VfUE9PTGAuIFNvLCBJJ2xsIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgXCJzZWxlY3QgUEFHRV9QT09MXCIgYWNyb3NzIHRoZSBrZXJuZWwgY29uZmlnIGZpbGVzLiBUaGlzIHNob3VsZCBxdWlja2x5IHJldmVhbCBhbnkgZGlyZWN0IHNlbGVjdGlvbnMgb3IgaW5kaXJlY3QgZGVwZW5kZW5jaWVzIHRoYXQgY291bGQgYmUgcHVsbGluZyBpdCBpbi4gSXTigJlzIGEgcHJldHR5IHN0YW5kYXJkIHN0cmF0ZWd5IGZvciB0cmFja2luZyBkb3duIHRoZSBvcmlnaW5zIG9mIGEgcGFydGljdWxhciBrZXJuZWwgZmVhdHVyZSBpbiB0aGUgY29uZmlndXJhdGlvbiBwcm9jZXNzLiBIb3BlZnVsbHksIHRoaXMgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBsZWFkIG9uIHRoZSB1c2FnZSBwYXR0ZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzYzNjQsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NToyOS4wOTU1OTQ4NzVaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyMzY5MzQ2MDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IFBBR0VfUE9PTFxcXFxiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9NDM1PWNvbmZpZyBWRVRIXFxuZHJpdmVycy9uZXQvS2NvbmZpZy00MzYtXFx0dHJpc3RhdGUgXFxcIlZpcnR1YWwgZXRoZXJuZXQgcGFpciBkZXZpY2VcXFwiXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0Mzc6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDM4LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NDQzPWNvbmZpZyBWSVJUSU9fTkVUXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTQ0Ny1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvS2NvbmZpZzo0NDg6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L0tjb25maWctNDQ5LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTQ0PWNvbmZpZyBYRU5fTkVUREVWX0ZST05URU5EXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0Ny1cXHRzZWxlY3QgWEVOX1hFTkJVU19GUk9OVEVORFxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTQ4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU0OS1cXHRkZWZhdWx0IHlcXG4tLVxcbmRyaXZlcnMvbmV0L0tjb25maWc9NTg0PWNvbmZpZyBWTVhORVQzXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4Ny1cXHRkZXBlbmRzIG9uIFBBR0VfU0laRV9MRVNTX1RIQU5fNjRLQlxcbmRyaXZlcnMvbmV0L0tjb25maWc6NTg4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9LY29uZmlnLTU4OS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnPTYwND1jb25maWcgTkVUREVWU0lNXFxuLS1cXG5kcml2ZXJzL25ldC9LY29uZmlnLTYxMC1cXHRzZWxlY3QgTkVUX0RFVkxJTktcXG5kcml2ZXJzL25ldC9LY29uZmlnOjYxMTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvS2NvbmZpZy02MTItXFx0c2VsZWN0IE5FVF9TSEFQRVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnPTE4PWNvbmZpZyBORVRfQUlST0hBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZy0yMS1cXHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnPTE4PWNvbmZpZyBBTElCQUJBX0VFQVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxpYmFiYS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gNjRCSVRcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9hbGliYWJhL0tjb25maWc6MjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2FsaWJhYmEvS2NvbmZpZy0yMy1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTcyPWNvbmZpZyBCQ01HRU5FVFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04MC1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzo4MTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy04Mi1cXHRzZWxlY3QgQlJPQURDT01fUEhZIGlmIEFSQ0hfQkNNMjgzNVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZz0yMDc9Y29uZmlnIEJOWFRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjEzLVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWc6MjE0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTIxNS1cXHRzZWxlY3QgRElNTElCXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI1OD1jb25maWcgQk5HRVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZy0yNjEtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNjI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjYzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnPTI2OT1jb25maWcgQkNNQVNQXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9icm9hZGNvbS9LY29uZmlnLTI3NS1cXHRzZWxlY3QgTURJT19CQ01fVU5JTUFDXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYnJvYWRjb20vS2NvbmZpZzoyNzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Jyb2FkY29tL0tjb25maWctMjc3LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZz02PWNvbmZpZyBFTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctOC1cXHRkZXBlbmRzIG9uIFBDSVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Npc2NvL2VuaWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jaXNjby9lbmljL0tjb25maWctMTAtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZW5nbGVkZXIvS2NvbmZpZz0xOT1jb25maWcgVFNORVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjMtXFx0c2VsZWN0IFBIWUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2VuZ2xlZGVyL0tjb25maWctMjUtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWc9MjM9Y29uZmlnIEZFQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL0tjb25maWctMzEtXFx0c2VsZWN0IEZJWEVEX1BIWVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9LY29uZmlnOjMyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvS2NvbmZpZy0zMy1cXHRpbXBseSBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnPTE4PWNvbmZpZyBHVkVcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2dvb2dsZS9LY29uZmlnLTIxLVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9nb29nbGUvS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZ29vZ2xlL0tjb25maWctMjMtXFx0aGVscFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaGlzaWxpY29uL0tjb25maWc9OTE9Y29uZmlnIEhOUzNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTk0LVxcdHNlbGVjdCBORVRfREVWTElOS1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnOjk1OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZy05Ni1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZz0xNDc9Y29uZmlnIEhJQk1DR0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1My1cXHRzZWxlY3QgUkVBTFRFS19QSFlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9oaXNpbGljb24vS2NvbmZpZzoxNTQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2hpc2lsaWNvbi9LY29uZmlnLTE1NS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWc9Nj1jb25maWcgSElOSUMzXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9odWF3ZWkvaGluaWMzL0tjb25maWctMTQtXFx0c2VsZWN0IERJTUxJQlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2h1YXdlaS9oaW5pYzMvS2NvbmZpZzoxNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvaHVhd2VpL2hpbmljMy9LY29uZmlnLTE2LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnPTQ9Y29uZmlnIExJQkVUSFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2xpYmV0aC9LY29uZmlnLTUtXFx0dHJpc3RhdGUgXFxcIkNvbW1vbiBFdGhlcm5ldCBsaWJyYXJ5IChsaWJldGgpXFxcIiBpZiBDT01QSUxFX1RFU1RcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9saWJldGgvS2NvbmZpZy03LVxcdGhlbHBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZz01OT1jb25maWcgTVZORVRBXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctNjMtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6NjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy02NS1cXHRzZWxlY3QgUEFHRV9QT09MX1NUQVRTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc9ODY9Y29uZmlnIE1WUFAyXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWctOTAtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL0tjb25maWc6OTE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvS2NvbmZpZy05Mi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tYXJ2ZWxsL29jdGVvbnR4Mi9LY29uZmlnPTMxPWNvbmZpZyBPQ1RFT05UWDJfUEZcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21hcnZlbGwvb2N0ZW9udHgyL0tjb25maWctMzQtXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZzozNTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWFydmVsbC9vY3Rlb250eDIvS2NvbmZpZy0zNi1cXHRzZWxlY3QgQ1JZUFRPX0xJQl9BRVMgaWYgTUFDU0VDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnPTE0PWNvbmZpZyBORVRfTUVESUFURUtfU09DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9LY29uZmlnLTIwLVxcdHNlbGVjdCBHRU5FUklDX0FMTE9DQVRPUlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWc6MjE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL0tjb25maWctMjItXFx0c2VsZWN0IFBBR0VfUE9PTF9TVEFUU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NC9LY29uZmlnPTY9Y29uZmlnIE1MWDRfRU5cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy05LVxcdGRlcGVuZHMgb24gUFRQXzE1ODhfQ0xPQ0tfT1BUSU9OQUxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg0L0tjb25maWc6MTA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDQvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTUxYNF9DT1JFXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZz0yOT1jb25maWcgTUxYNV9DT1JFX0VOXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHg1L2NvcmUvS2NvbmZpZy0zMS1cXHRkZXBlbmRzIG9uIE5FVERFVklDRVMgXFx1MDAyNlxcdTAwMjYgRVRIRVJORVQgXFx1MDAyNlxcdTAwMjYgSU5FVCBcXHUwMDI2XFx1MDAyNiBQQ0kgXFx1MDAyNlxcdTAwMjYgTUxYNV9DT1JFXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4NS9jb3JlL0tjb25maWc6MzI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seDUvY29yZS9LY29uZmlnLTMzLVxcdHNlbGVjdCBQQUdFX1BPT0xfU1RBVFNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc9MzM9Y29uZmlnIE1MWFNXX1BDSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvS2NvbmZpZy0zNS1cXHRkZXBlbmRzIG9uIFBDSSBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU0gXFx1MDAyNlxcdTAwMjYgTUxYU1dfQ09SRVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L0tjb25maWctMzctXFx0ZGVmYXVsdCBtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjctXFx0c2VsZWN0IE5FVF9ERVZMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjI4OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMjktXFx0c2VsZWN0IFBDU19YUENTXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnPTE9Y29uZmlnIExBTjk2NlhfU1dJVENIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnLTgtXFx0c2VsZWN0IFBIWUxJTktcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvbGFuOTY2eC9LY29uZmlnOjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9sYW45NjZ4L0tjb25maWctMTAtXFx0c2VsZWN0IFZDQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZz0yOD1jb25maWcgTEFOOTY5WF9TV0lUQ0hcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMC1cXHRkZXBlbmRzIG9uIFNQQVJYNV9TV0lUQ0hcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb2NoaXAvc3Bhcng1L0tjb25maWc6MzE6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3JvY2hpcC9zcGFyeDUvS2NvbmZpZy0zMi1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xOD1jb25maWcgTUlDUk9TT0ZUX01BTkFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTIzLVxcdHNlbGVjdCBBVVhJTElBUllfQlVTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWc6MjQ6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTI1LVxcdHNlbGVjdCBORVRfU0hBUEVSXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9wZW5zYW5kby9LY29uZmlnPTIwPWNvbmZpZyBJT05JQ1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNS1cXHRzZWxlY3QgRElNTElCXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZzoyNjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcGVuc2FuZG8vS2NvbmZpZy0yNy1cXHRzZWxlY3QgQVVYSUxJQVJZX0JVU1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTExMD1jb25maWcgUlRBU0VcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMTMtXFx0c2VsZWN0IENSQzMyXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjExNDpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTExNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWc9Mjk9Y29uZmlnIFJBVkJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlbmVzYXMvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTURJT19CSVRCQU5HXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVuZXNhcy9LY29uZmlnOjM2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZW5lc2FzL0tjb25maWctMzctXFx0c2VsZWN0IFBIWUxJQlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWc9MjU9Y29uZmlnIFNOSV9ORVRTRUNcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3NvY2lvbmV4dC9LY29uZmlnLTI4LVxcdHNlbGVjdCBQSFlMSUJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zb2Npb25leHQvS2NvbmZpZzoyOTpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc29jaW9uZXh0L0tjb25maWctMzAtXFx0c2VsZWN0IE1JSVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZz0yPWNvbmZpZyBTVE1NQUNfRVRIXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTgtXFx0c2VsZWN0IFBDU19YUENTXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvc3RtaWNyby9zdG1tYWMvS2NvbmZpZzo5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9zdG1pY3JvL3N0bW1hYy9LY29uZmlnLTEwLVxcdHNlbGVjdCBQSFlMSU5LXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90ZWh1dGkvS2NvbmZpZz0yNj1jb25maWcgVEVIVVRJX1RONDBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTI4LVxcdGRlcGVuZHMgb24gUENJXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGVodXRpL0tjb25maWc6Mjk6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RlaHV0aS9LY29uZmlnLTMwLVxcdHNlbGVjdCBGV19MT0FERVJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NTA9Y29uZmlnIFRJX0NQU1dcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNTUtXFx0c2VsZWN0IE1GRF9TWVNDT05cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnOjU2OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTU3LVxcdHNlbGVjdCBSRUdNQVBcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc9NjU9Y29uZmlnIFRJX0NQU1dfU1dJVENIREVWXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTY5LVxcdGRlcGVuZHMgb24gVElfQ1BUUyB8fCAhVElfQ1BUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6NzA6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctNzEtXFx0c2VsZWN0IFRJX0RBVklOQ0lfTURJT1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz05Nj1jb25maWcgVElfSzNfQU02NV9DUFNXX05VU1NcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAxLVxcdHNlbGVjdCBQSFlMSU5LXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZzoxMDI6XFx0c2VsZWN0IFBBR0VfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMTAzLVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvdGkvS2NvbmZpZz0yMDQ9Y29uZmlnIFRJX0lDU1NHX1BSVUVUSF9TUjFcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWctMjA4LVxcdHNlbGVjdCBUSV9LM19DUFBJX0RFU0NfUE9PTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3RpL0tjb25maWc6MjA5OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC90aS9LY29uZmlnLTIxMC1cXHRkZXBlbmRzIG9uIFBSVV9SRU1PVEVQUk9DXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWc9MTk9Y29uZmlnIExJQldYXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC93YW5neHVuL0tjb25maWctMjEtXFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3dhbmd4dW4vS2NvbmZpZzoyMjpcXHRzZWxlY3QgUEFHRV9QT09MXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvd2FuZ3h1bi9LY29uZmlnLTIzLVxcdHNlbGVjdCBESU1MSUJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZz0yPWNvbmZpZyBNVDc2X0NPUkVcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctMy1cXHR0cmlzdGF0ZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21lZGlhdGVrL210NzYvS2NvbmZpZzo0OlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tZWRpYXRlay9tdDc2L0tjb25maWctNS1cXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZz0yNz1jb25maWcgQlBGX1NZU0NBTExcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy0zNS1cXHRzZWxlY3QgTkVUX1hHUkVTUyBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWc6MzY6XFx0c2VsZWN0IFBBR0VfUE9PTCBpZiBORVRcXG5rZXJuZWwvYnBmL0tjb25maWctMzctXFx0ZGVmYXVsdCBuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjMxLjMzMjUzODg0M1oiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4MDYzNzUxNjM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBLZXkgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBFbGVtZW50cyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gSSBzZWUgdGhhdCBgUEFHRV9QT09MYCBpcyByZWxldmFudCBoZXJlLCBzZWxlY3RlZCBieSB0aGluZ3MgbGlrZSBgQlBGX1NZU0NBTExgLCBgVkVUSGAsIGFuZCBgVklSVElPX05FVGAuIFRoYXQgdHJpZ2dlcnMgYW4gaW5pdGlhbCB0aG91Z2h0IHRvIGNoZWNrIGlmIGBDT05GSUdfWEZSTV9JUFRGU2AgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbiBuZWVkZWQgZm9yIHRoZSBtb2RpZmllZCBjb2RlIGluIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEknbGwgYWxzbyBjaGVjayBpZiBgWEZSTV9VU0VSYCBpcyBuZWNlc3NhcnksIHNpbmNlIHRoYXQncyB3aGF0IGNvbnRyb2xzIHdoZXRoZXIgdXNlcnNwYWNlIGNhbiBpbnRlcmFjdCB3aXRoIElQVEZTIHN0YXRlcyBhbmQgcG9saWNpZXMuIFllcywgYENPTkZJR19YRlJNX1VTRVJgIGlzIG5lZWRlZCwgYmVjYXVzZSB0aGF0IGlzIGhvdyB1c2Vyc3BhY2UgY29uZmlndXJlcyBYRlJNIHN0YXRlcyB1c2luZyBuZXRsaW5rLiBOb3csIEkgaGF2ZSB0byBtYWtlIHN1cmUgYFBBR0VfUE9PTGAgY2FuIGJlIGVuYWJsZWQsIGFuZCBub3QganVzdCBpbmRpcmVjdGx5IHRocm91Z2ggdGhvc2Ugc2VsZWN0aW9ucy4gSSBzZWUgdGhhdCBgUEFHRV9QT09MYCBpcyBhIGJvb2xlYW4gY29uZmlnIG9wdGlvbiBpbiBgbmV0L0tjb25maWdgLCBidXQgaXQgbGFja3MgYSBwcm9tcHQuIFRoZSBLY29uZmlnIHN5c3RlbSBtaWdodCBpZ25vcmUgaXQgaWYgaXQncyBub3QgZXhwbGljaXRseSBzZWxlY3RlZC4gT2theSwgSSdsbCBuZWVkIHRvIGRvdWJsZSBjaGVjayBob3cgYFBBR0VfUE9PTGAgaXMgaGFuZGxlZCwgYW5kIGlmIGl0IGlzIGVuYWJsZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBieSBzb21ldGhpbmcgbGlrZSBgTkVUREVWU0lNYCBvciBgQlBGX1NZU0NBTExgLCBhbmQgaG93IGBLY29uZmlnYCBoYW5kbGVzIGl0cyBsYWNrIG9mIGEgcHJvbXB0LlxuXG5JIGhhdmUgdG8gdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1fVVNFUmAuIExldCdzIGNvbmZpcm0gdGhhdCBgWEZSTV9JUFRGU2AgZG9lc24ndCBkZXBlbmQgb24gYW55dGhpbmcgKmVsc2UqLiBMb29raW5nIGF0IGBuZXQveGZybS9LY29uZmlnYCwgSSBzZWUgaXQgZGVwZW5kcyBvbiBgWEZSTWAuIEFuZCwgbG9va2luZyBmdXJ0aGVyLCBgWEZSTWAgZGVwZW5kcyBvbiBgSU5FVGAuIFRoZW4sIGBYRlJNX1VTRVJgIHNlbGVjdHMgYFhGUk1fQUxHT2Agd2hpY2ggdGhlbiBzZWxlY3RzIGBYRlJNYC4gQW5kIHNpbmNlIGBJTkVUYCBpcyBzdGFuZGFyZCwgSSdtIGNvbmZpZGVudCB0aGF0IGBYRlJNX0lQVEZTYCBhbmQgYFhGUk1fVVNFUmAgYXJlIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgZm9yIHRoaXMgYXJlYS5cblxuTm93IGxldCdzIHN3aXRjaCBnZWFycyBhbmQgZm9jdXMgb24gc3BlY2lmaWMgY29kZSBzeW1ib2xzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zLiBMZXQncyBsb29rIGF0IHRoZSBtb2RpZmllZCBmdW5jdGlvbnMsIGFuZCBzZWUgd2hhdCB0aGUgZm9jdXMgc3ltYm9scyBhcmUuIExldCdzIGNoZWNrIGBpcHRmc19za2JfYWRkX2ZyYWdzYDogSXQncyBgc3RhdGljYCwgbWVhbmluZyBpdCdzIG9ubHkgdmlzaWJsZSB3aXRoaW4gdGhpcyBmaWxlLiBOb3csIGFsc28gbG9va2luZyBhdCBgaXB0ZnNfY29uc3VtZV9mcmFnc2A6IFRoaXMgaXMgYWxzbyBgc3RhdGljYC4gSSdsbCBpZGVudGlmeSB0aGUgY2FsbGVycyBvZiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYC4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfcmVhc3NlbV9jb250YC4gYGlwdGZzX2NvbnN1bWVfZnJhZ3NgIGlzIGNhbGxlZCBieSBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuIEknbSBnb2luZyB0byBkZXRlcm1pbmUgd2hhdCBjYWxscyBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzk2LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzA1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjM5LjM5NjI5MzIwN1oiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYyMTM0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwMjpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzM3PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MDpcXHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFxcdTAwMjZsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6MzkuNDQyNTEyMjA5WiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjI1MTkzNDE2NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgaXB0ZnNfZGVsYXlfdGltZXJgIGFuZCBgaXB0ZnNfb3V0cHV0X3F1ZXVlZGAgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBnb2luZyBvbiB3aXRoIHRoZSB0aW1pbmcgYW5kIG91dHB1dCBxdWV1aW5nIGluIHRoZSBgeGZybV9pcHRmc2AgZnJhbWV3b3JrLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBsb29rIGF0IHdoZXJlIGBpcHRmc19kZWxheV90aW1lcmAgaXMgYWN0dWFsbHkgYmVpbmcgY2FsbGVkLCBhbG9uZyB3aXRoIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCB1dGlsaXplIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gVGhhdCdzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgZmxvdyBvZiB0aGlzIHN0dWZmLCByaWdodD8gSSBuZWVkIHRvIHRyYWNlIHRoZSBleGVjdXRpb24gcGF0aCBhbmQgaWRlbnRpZnkgdGhlIGNvbnRleHRzIHdoZXJlIHRoaXMgZGVsYXllZCBwcm9jZXNzaW5nIGNvbWVzIGludG8gcGxheS4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCB0aG9zZSBmdW5jdGlvbnMgYW5kIHRoZW4gd29yayBiYWNrd2FyZCBpZiBuZWNlc3NhcnkuXG5cblRvIGdldCBzdGFydGVkLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgIGFuZCB6ZXJvIGluIG9uIGxpbmVzIDIzNjAgdGhyb3VnaCAyNDAwLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgc3BlY2lmaWMgcG9pbnQgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiwgYW5kIGhvcGVmdWxseSBnaXZlIG1lIHRoZSBpbW1lZGlhdGUgY29udGV4dCBJIG5lZWQgdG8gZ2FpbiBhIHVzZWZ1bCBpbnNpZ2h0LiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDI0MjAsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NTo0MS45NjE4NTU5NjFaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMzYwLFxuICBcIkxpbmVDb3VudFwiOiA0NVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMzYwOlxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZ4LVxcdTAwM2Vsb2NrKTtcXG4yMzYxOlxcdFxcbjIzNjI6XFx0XFx0LyogQWZ0ZXIgdGhlIGFib3ZlIHVubG9jaywgcGFja2V0cyBjYW4gYmVnaW4gcXVldWluZyBhZ2FpbiwgYW5kIHRoZVxcbjIzNjM6XFx0XFx0ICogdGltZXIgY2FuIGJlIHNldCBhZ2FpbiwgZnJvbSBhbm90aGVyIENQVSBlaXRoZXIgaW4gc29mdGlycSBvciB1c2VyXFxuMjM2NDpcXHRcXHQgKiBjb250ZXh0IChub3QgZnJvbSB0aGlzIG9uZSBzaW5jZSB3ZSBhcmUgcnVubmluZyBhdCBzb2Z0aXJxIGxldmVsXFxuMjM2NTpcXHRcXHQgKiBhbHJlYWR5KS5cXG4yMzY2OlxcdFxcdCAqL1xcbjIzNjc6XFx0XFxuMjM2ODpcXHRcXHR0cmFjZV9pcHRmc190aW1lcl9leHBpcmUoeHRmcywgKHVuc2lnbmVkIGxvbmcgbG9uZykoa3RpbWVfZ2V0X3Jhd19mYXN0X25zKCkgLSBzZXR0aW1lKSk7XFxuMjM2OTpcXHRcXG4yMzcwOlxcdFxcdGlwdGZzX291dHB1dF9xdWV1ZWQoeCwgXFx1MDAyNmxpc3QpO1xcbjIzNzE6XFx0XFxuMjM3MjpcXHRcXHRyZXR1cm4gSFJUSU1FUl9OT1JFU1RBUlQ7XFxuMjM3MzpcXHR9XFxuMjM3NDpcXHRcXG4yMzc1OlxcdC8qKlxcbjIzNzY6XFx0ICogaXB0ZnNfZW5jYXBfYWRkX2lwdjQoKSAtIGFkZCBvdXRlciBlbmNhcHNcXG4yMzc3OlxcdCAqIEB4OiB4ZnJtIHN0YXRlXFxuMjM3ODpcXHQgKiBAc2tiOiB0aGUgcGFja2V0XFxuMjM3OTpcXHQgKlxcbjIzODA6XFx0ICogVGhpcyB3YXMgb3JpZ2luYWxseSB0YWtlbiBmcm9tIHhmcm00X3R1bm5lbF9lbmNhcF9hZGQuIFRoZSByZWFzb24gZm9yIHRoZVxcbjIzODE6XFx0ICogY29weSBpcyB0aGF0IElQLVRGUy9BR0dGUkFHIGNhbiBoYXZlIGRpZmZlcmVudCBmdW5jdGlvbmFsaXR5IGZvciBob3cgdG8gc2V0XFxuMjM4MjpcXHQgKiB0aGUgVE9TL0RTQ1AgYml0cy4gU2V0cyB0aGUgcHJvdG9jb2wgdG8gYSBkaWZmZXJlbnQgdmFsdWUgYW5kIGRvZXNuJ3QgZG9cXG4yMzgzOlxcdCAqIGFueXRoaW5nIHdpdGggaW5uZXIgaGVhZGVycyBhcyB0aGV5IGFyZW4ndCBwb2ludGluZyBpbnRvIGEgbm9ybWFsIElQXFxuMjM4NDpcXHQgKiBzaW5nbGV0b24gaW5uZXIgcGFja2V0LlxcbjIzODU6XFx0ICpcXG4yMzg2OlxcdCAqIFJldHVybjogMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlXFxuMjM4NzpcXHQgKi9cXG4yMzg4OlxcdHN0YXRpYyBpbnQgaXB0ZnNfZW5jYXBfYWRkX2lwdjQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmICpza2IpXFxuMjM4OTpcXHR7XFxuMjM5MDpcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSBza2JfZHN0KHNrYik7XFxuMjM5MTpcXHRcXHRzdHJ1Y3QgaXBoZHIgKnRvcF9pcGg7XFxuMjM5MjpcXHRcXG4yMzkzOlxcdFxcdHNrYl9yZXNldF9pbm5lcl9uZXR3b3JrX2hlYWRlcihza2IpO1xcbjIzOTQ6XFx0XFx0c2tiX3Jlc2V0X2lubmVyX3RyYW5zcG9ydF9oZWFkZXIoc2tiKTtcXG4yMzk1OlxcdFxcbjIzOTY6XFx0XFx0c2tiX3NldF9uZXR3b3JrX2hlYWRlcihza2IsIC0oeC1cXHUwMDNlcHJvcHMuaGVhZGVyX2xlbiAtIHgtXFx1MDAzZXByb3BzLmVuY19oZHJfbGVuKSk7XFxuMjM5NzpcXHRcXHRza2ItXFx1MDAzZW1hY19oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgb2Zmc2V0b2Yoc3RydWN0IGlwaGRyLCBwcm90b2NvbCk7XFxuMjM5ODpcXHRcXHRza2ItXFx1MDAzZXRyYW5zcG9ydF9oZWFkZXIgPSBza2ItXFx1MDAzZW5ldHdvcmtfaGVhZGVyICsgc2l6ZW9mKCp0b3BfaXBoKTtcXG4yMzk5OlxcdFxcbjI0MDA6XFx0XFx0dG9wX2lwaCA9IGlwX2hkcihza2IpO1xcbjI0MDE6XFx0XFx0dG9wX2lwaC1cXHUwMDNlaWhsID0gNTtcXG4yNDAyOlxcdFxcdHRvcF9pcGgtXFx1MDAzZXZlcnNpb24gPSA0O1xcbjI0MDM6XFx0XFx0dG9wX2lwaC1cXHUwMDNlcHJvdG9jb2wgPSBJUFBST1RPX0FHR0ZSQUc7XFxuMjQwNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6NDEuOTYyMDAwMDcxWiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjQxNzIzNTU3NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbiBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlwdGZzX291dHB1dF9xdWV1ZWRgIEZ1bmN0aW9uJ3MgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgYGlwdGZzX291dHB1dF9xdWV1ZWRgIGZ1bmN0aW9uLiBJIGtub3cgaXQncyBiZWluZyB0cmlnZ2VyZWQgYnkgYGlwdGZzX2RlbGF5X3RpbWVyYCwgdGhhdCBtdWNoIGlzIGNsZWFyIGZyb20gdGhlIGV4aXN0aW5nIHN0cnVjdHVyZS4gQnV0IEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gb2YgdGhlIGNhbGwgZ3JhcGggdG8gdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3MgYmVoYXZpb3IgaG9saXN0aWNhbGx5LiBNeSBuZXh0IHN0ZXAsIG5hdHVyYWxseSwgaXMgdG8gZGV0ZXJtaW5lIGlmIGFueSBvdGhlciBmdW5jdGlvbnMgYWxzbyBjYWxsIGBpcHRmc19vdXRwdXRfcXVldWVkYC4gS25vd2luZyB0aGUgKmNvbXBsZXRlKiBsaXN0IG9mIGNhbGxlcnMgaXMgY3JpdGljYWwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIHVuZXhwZWN0ZWQgc2lkZSBlZmZlY3RzLCBvciBhbnkgYXJlYXMgd2hlcmUgdGhlIG91dHB1dCBxdWV1ZSBtaWdodCBiZSBjb250ZW5kZWQgb3IgaW1wcm9wZXJseSBtYW5hZ2VkLiBBIHRob3JvdWdoIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNhbGwgZ3JhcGggaXMgYWJzb2x1dGVseSBlc3NlbnRpYWwgYmVmb3JlIHByb2NlZWRpbmcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDM1MTEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjQ2LjEzNDM1ODg1NVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc5MDI1MjMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB0ZnNfb3V0cHV0X3F1ZXVlZFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQveGZybVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQveGZybS94ZnJtX2lwdGZzLmM9MjE2Nz1zdGF0aWMgdm9pZCBpcHRmc19jb25zdW1lX2ZyYWdzKHN0cnVjdCBza19idWZmICp0bywgc3RydWN0IHNrX2J1ZmYgKmZyb20pXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjIwMS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjIwMjpzdGF0aWMgdm9pZCBpcHRmc19vdXRwdXRfcXVldWVkKHN0cnVjdCB4ZnJtX3N0YXRlICp4LCBzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMjAzLXtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMzM3PXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBpcHRmc19kZWxheV90aW1lcihzdHJ1Y3QgaHJ0aW1lciAqbWUpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM2OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjM3MDpcXHRpcHRmc19vdXRwdXRfcXVldWVkKHgsIFxcdTAwMjZsaXN0KTtcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjM3MS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTU6NDYuMTgyMjY1OTY4WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYwMDgwMzk2NjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIFRyYWNlIFRocm91Z2ggSVBURlMgSW5wdXQvT3V0cHV0KipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byB3cmFwIG15IGhlYWQgYXJvdW5kIHRoZSBwYWNrZXQgZmxvdyBmb3IgSVBzZWMgU0FzIHVzaW5nIGBYRlJNX01PREVfSVBURlNgLiBMZXQncyBicmVhayB0aGlzIGRvd24gc3lzdGVtYXRpY2FsbHkuIEZpcnN0LCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNhbGxzIGBpcHRmc19pbnB1dGAuIFJpZ2h0LCBpdCdzIHRoZSBgLmlucHV0YCBjYWxsYmFjayBkZWZpbmVkIHdpdGhpbiBgaXB0ZnNfbW9kZV9jYnNgLiBTbywgd2hlbiBhbiBpbmNvbWluZyBwYWNrZXQgdGhhdCBtYXRjaGVzIGFuIElQc2VjIFNlY3VyaXR5IEFzc29jaWF0aW9uIHVzaW5nIHRoZSBJUFRGUyBtb2RlIGhpdHMgdGhlIHN5c3RlbSwgYGlwdGZzX2lucHV0YCBpcyB0aGUgZW50cnkgcG9pbnQuXG5cbk5vdywgd2l0aGluIGBpcHRmc19pbnB1dGAsIGl0IGxvb2tzIGxpa2Ugd2UgaGF2ZSBhIGNvdXBsZSBvZiBpbXBvcnRhbnQgcGF0aHMuIEl0IGV2ZW50dWFsbHkgY2FsbHMgYGlwdGZzX2lucHV0X29yZGVyZWRgLCB3aGljaCBoYW5kbGVzIHJlYXNzZW1ibHkgYW5kIHByb2Nlc3NpbmcuIEluc2lkZSBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIHdlJ3ZlIGdvdCBhIGNvdXBsZSBvZiBrZXkgZnVuY3Rpb25zOiBgaXB0ZnNfcmVhc3NlbV9jb250YCBhbmQgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYC4gVGhleSBib3RoIGVuZCB1cCBjYWxsaW5nIGBpcHRmc19za2JfYWRkX2ZyYWdzYCDigJMgdGhhdCBzZWVtcyBsaWtlIGEgY29tbW9uIHBvaW50IGZvciBmcmFnbWVudCBoYW5kbGluZywgd2hpY2ggbWFrZXMgc2Vuc2UuIEkgc2VlIHRoYXQgYF9faW5wdXRfcHJvY2Vzc19wYXlsb2FkYCBhbHNvIGhhcyBgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCB3aGljaCBhbHNvIGNhbGxzIGBpcHRmc19za2JfYWRkX2ZyYWdzYC5cblxuRm9yIG91dHB1dCwgaXQgbG9va3MgbGlrZSBgLm91dHB1dGAgaXMgc2V0IHRvIGBpcHRmc19vdXRwdXRfY29sbGVjdGAuIFRoZSBuYW1lIGl0c2VsZiBpcyBkZXNjcmlwdGl2ZS4gYGlwdGZzX291dHB1dF9jb2xsZWN0YCBtdXN0IGJlIHJlc3BvbnNpYmxlIGZvciB0YWtpbmcgb3V0Z29pbmcgcGFja2V0cyBhbmQgZG9pbmcgc29tZXRoaW5nIHdpdGggdGhlbS4gUmlnaHQsIGl0IGVucXVldWVzIHRoZSBwYWNrZXRzIG9udG8gYHh0ZnMtXHUwMDNlcXVldWVgLCB3aGljaCBwcm9iYWJseSBpcyBzb21lIGtpbmQgb2YgaW50ZXJuYWwgcXVldWUuIEl0IGFsc28gc2V0cyB1cCBgaXB0ZnNfZGVsYXlfdGltZXJgLCB3aGljaCBoaW50cyBhdCBzb21lIGtpbmQgb2YgZGVsYXllZCBmbHVzaCwgb3IgcG90ZW50aWFsbHkgYSBiYXRjaGluZyBzdHJhdGVneS4gSSBzaG91bGQgcmVhbGx5IGNoZWNrIGBpcHRmc19vdXRwdXRfY29sbGVjdGAgYWdhaW4sIHRvIG1ha2Ugc3VyZSBJIGFtIG5vdCBtaXNzaW5nIGFueSBpbW1lZGlhdGUgZmx1c2ggbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MDEzLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjUyLjE5MDMwOTE4NVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgyMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3hmcm0veGZybV9pcHRmcy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE4NDUsXG4gIFwiTGluZUNvdW50XCI6IDcwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4NDU6XFx0c3RhdGljIGludCBpcHRmc19vdXRwdXRfY29sbGVjdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4xODQ2OlxcdHtcXG4xODQ3OlxcdFxcdHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHNrYl9kc3Qoc2tiKTtcXG4xODQ4OlxcdFxcdHN0cnVjdCB4ZnJtX3N0YXRlICp4ID0gZHN0LVxcdTAwM2V4ZnJtO1xcbjE4NDk6XFx0XFx0c3RydWN0IHhmcm1faXB0ZnNfZGF0YSAqeHRmcyA9IHgtXFx1MDAzZW1vZGVfZGF0YTtcXG4xODUwOlxcdFxcdHN0cnVjdCBza19idWZmICpzZWdzLCAqbnNrYjtcXG4xODUxOlxcdFxcdHUzMiBwbXR1ID0gMDtcXG4xODUyOlxcdFxcdGJvb2wgb2sgPSB0cnVlO1xcbjE4NTM6XFx0XFx0Ym9vbCB3YXNfZ3NvO1xcbjE4NTQ6XFx0XFxuMTg1NTpcXHRcXHQvKiBXZSBoYXZlIGhvb2tlZCBpbnRvIGRzdF9lbnRyeS1cXHUwMDNlb3V0cHV0IHdoaWNoIG1lYW5zIHdlIGhhdmUgc2tpcHBlZCB0aGVcXG4xODU2OlxcdFxcdCAqIHByb3RvY29sIHNwZWNpZmljIG5ldGZpbHRlciAoc2VlIHhmcm00X291dHB1dCwgeGZybTZfb3V0cHV0KS5cXG4xODU3OlxcdFxcdCAqIHdoZW4gb3VyIHRpbWVyIHJ1bnMgd2Ugd2lsbCBlbmQgdXAgY2FsbGluZyB4ZnJtX291dHB1dCBkaXJlY3RseSBvblxcbjE4NTg6XFx0XFx0ICogdGhlIGVuY2Fwc3VsYXRlZCB0cmFmZmljLlxcbjE4NTk6XFx0XFx0ICpcXG4xODYwOlxcdFxcdCAqIEZvciBib3RoIGNhc2VzIHRoaXMgaXMgdGhlIE5GX0lORVRfUE9TVF9ST1VUSU5HIGhvb2sgd2hpY2ggYWxsb3dzXFxuMTg2MTpcXHRcXHQgKiBjaGFuZ2luZyB0aGUgc2tiLVxcdTAwM2Vkc3QgZW50cnkgd2hpY2ggdGhlbiBtYXkgbm90IGJlIHhmcm0gYmFzZWQgYW55bW9yZVxcbjE4NjI6XFx0XFx0ICogaW4gd2hpY2ggY2FzZSBhIFJFUk9VVEVEIGZsYWcgaXMgc2V0LiBhbmQgZHN0X291dHB1dCBpcyBjYWxsZWQuXFxuMTg2MzpcXHRcXHQgKlxcbjE4NjQ6XFx0XFx0ICogRm9yIElQdjYgd2UgYXJlIGFsc28gc2tpcHBpbmcgZnJhZ21lbnRhdGlvbiBoYW5kbGluZyBmb3IgbG9jYWxcXG4xODY1OlxcdFxcdCAqIHNvY2tldHMsIHdoaWNoIG1heSBvciBtYXkgbm90IGJlIGdvb2QgZGVwZW5kaW5nIG9uIG91ciB0dW5uZWwgREZcXG4xODY2OlxcdFxcdCAqIHNldHRpbmcuIE5vcm1hbGx5IHdpdGggZnJhZ21lbnRhdGlvbiBzdXBwb3J0ZWQgd2Ugd2FudCB0byBza2lwIHRoaXNcXG4xODY3OlxcdFxcdCAqIGZyYWdtZW50YXRpb24uXFxuMTg2ODpcXHRcXHQgKi9cXG4xODY5OlxcdFxcbjE4NzA6XFx0XFx0aWYgKHh0ZnMtXFx1MDAzZWNmZy5kb250X2ZyYWcpXFxuMTg3MTpcXHRcXHRcXHRwbXR1ID0gaXB0ZnNfZ2V0X2N1cl9wbXR1KHgsIHh0ZnMsIHNrYik7XFxuMTg3MjpcXHRcXG4xODczOlxcdFxcdC8qIEJyZWFrIGFwYXJ0IEdTTyBza2JzLiBJZiB0aGUgcXVldWUgaXMgbmVhcmluZyBmdWxsIHRoZW4gd2Ugd2FudCB0aGVcXG4xODc0OlxcdFxcdCAqIGFjY291bnRpbmcgYW5kIHF1ZXVpbmcgdG8gYmUgYmFzZWQgb24gdGhlIGluZGl2aWR1YWwgcGFja2V0cyBub3Qgb24gdGhlXFxuMTg3NTpcXHRcXHQgKiBhZ2dyZWdhdGUgR1NPIGJ1ZmZlci5cXG4xODc2OlxcdFxcdCAqL1xcbjE4Nzc6XFx0XFx0d2FzX2dzbyA9IHNrYl9pc19nc28oc2tiKTtcXG4xODc4OlxcdFxcdGlmICghd2FzX2dzbykge1xcbjE4Nzk6XFx0XFx0XFx0c2VncyA9IHNrYjtcXG4xODgwOlxcdFxcdH0gZWxzZSB7XFxuMTg4MTpcXHRcXHRcXHRzZWdzID0gc2tiX2dzb19zZWdtZW50KHNrYiwgMCk7XFxuMTg4MjpcXHRcXHRcXHRpZiAoSVNfRVJSX09SX05VTEwoc2VncykpIHtcXG4xODgzOlxcdFxcdFxcdFxcdFhGUk1fSU5DX1NUQVRTKG5ldCwgTElOVVhfTUlCX1hGUk1PVVRFUlJPUik7XFxuMTg4NDpcXHRcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4xODg1OlxcdFxcdFxcdFxcdGlmIChJU19FUlIoc2VncykpXFxuMTg4NjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihzZWdzKTtcXG4xODg3OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjE4ODg6XFx0XFx0XFx0fVxcbjE4ODk6XFx0XFx0XFx0Y29uc3VtZV9za2Ioc2tiKTtcXG4xODkwOlxcdFxcdFxcdHNrYiA9IE5VTEw7XFxuMTg5MTpcXHRcXHR9XFxuMTg5MjpcXHRcXG4xODkzOlxcdFxcdC8qIFdlIGNhbiBiZSBydW5uaW5nIG9uIG11bHRpcGxlIGNvcmVzIGFuZCBmcm9tIHRoZSBuZXR3b3JrIHNvZnRpcnEgb3JcXG4xODk0OlxcdFxcdCAqIGZyb20gdXNlciBjb250ZXh0IGRlcGVuZGluZyBvbiB3aGVyZSB0aGUgcGFja2V0IGlzIGNvbWluZyBmcm9tLlxcbjE4OTU6XFx0XFx0ICovXFxuMTg5NjpcXHRcXHRzcGluX2xvY2tfYmgoXFx1MDAyNngtXFx1MDAzZWxvY2spO1xcbjE4OTc6XFx0XFxuMTg5ODpcXHRcXHRza2JfbGlzdF93YWxrX3NhZmUoc2Vncywgc2tiLCBuc2tiKSB7XFxuMTg5OTpcXHRcXHRcXHRza2JfbWFya19ub3Rfb25fbGlzdChza2IpO1xcbjE5MDA6XFx0XFxuMTkwMTpcXHRcXHRcXHQvKiBPbmNlIHdlIGRyb3AgZHVlIHRvIG5vIHF1ZXVlIHNwYWNlIHdlIGNvbnRpbnVlIHRvIGRyb3AgdGhlXFxuMTkwMjpcXHRcXHRcXHQgKiByZXN0IG9mIHRoZSBwYWNrZXRzIGZyb20gdGhhdCBHUk8uXFxuMTkwMzpcXHRcXHRcXHQgKi9cXG4xOTA0OlxcdFxcdFxcdGlmICghb2spIHtcXG4xOTA1OlxcdG5vc3BhY2U6XFxuMTkwNjpcXHRcXHRcXHRcXHR0cmFjZV9pcHRmc19ub19xdWV1ZV9zcGFjZShza2IsIHh0ZnMsIHBtdHUsIHdhc19nc28pO1xcbjE5MDc6XFx0XFx0XFx0XFx0WEZSTV9JTkNfU1RBVFMobmV0LCBMSU5VWF9NSUJfWEZSTU9VVE5PUVNQQUNFKTtcXG4xOTA4OlxcdFxcdFxcdFxcdGtmcmVlX3NrYl9yZWFzb24oc2tiLCBTS0JfRFJPUF9SRUFTT05fRlVMTF9SSU5HKTtcXG4xOTA5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjE5MTA6XFx0XFx0XFx0fVxcbjE5MTE6XFx0XFxuMTkxMjpcXHRcXHRcXHQvKiBJZiB0aGUgdXNlciBpbmRpY2F0ZWQgbm8gaXB0ZnMgZnJhZ21lbnRpbmcgY2hlY2sgYmVmb3JlXFxuMTkxMzpcXHRcXHRcXHQgKiBlbnF1ZXVlLlxcbjE5MTQ6XFx0XFx0XFx0ICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU1OjUyLjE5MDUyMDA2NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjozNjA0NjMwMTgyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSVBURlMgUGFja2V0IEhhbmRsaW5nIGZvciBDb21wcmVoZW5zaXZlIENvdmVyYWdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIGludm9sdmVkIGluIElQVEZTIHBhY2tldCBwcm9jZXNzaW5nIHRvIGVuc3VyZSB0aG9yb3VnaCBjb2RlIGNvdmVyYWdlLiBUaGUga2V5IGZ1bmN0aW9ucyBJJ20gZm9jdXNpbmcgb24gYXJlOiBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19jb25zdW1lX2ZyYWdzYCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRfb3JkZXJlZGAsIGBpcHRmc19pbnB1dGAsIGFuZCBgaXB0ZnNfb3V0cHV0X2NvbGxlY3RgLiAgYGlwdGZzX291dHB1dF9xdWV1ZWRgIHNlZW1zIHRvIGJlIHJlc3BvbnNpYmxlIGZvciBjb25zdW1pbmcgcGFja2V0IGZyYWdtZW50cyB3aGVuIGFzc2VtYmxpbmcgdGhlIG91dHB1dCwgY2FsbGluZyBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIHdoaWxlIHRoZSBgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgaGFuZGxlcyByZWFzc2VtYmx5IGZvciB0aGUgaW5jb21pbmcgcGF5bG9hZHMgKGBpcHRmc19wc2tiX2FkZF9mcmFnc2AsIGBpcHRmc19yZWFzc2VtX2NvbnRgKS5cblxuTm93LCBhIGNydWNpYWwgcXVlc3Rpb24gYXJpc2VzOiBhcmUgYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGFuZCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AgaW5saW5lZCBieSB0aGUgY29tcGlsZXI/ICBUaGF0IGNvdWxkIGltcGFjdCBteSBjb3ZlcmFnZSBhbmFseXNpcy4gYGlwdGZzX3NrYl9hZGRfZnJhZ3NgIGlzIHN0YXRpYyBhbmQgZGVmaW5lZCB3aXRoaW4gYG5ldC94ZnJtL3hmcm1faXB0ZnMuY2AsIGFuZCBpdCdzIGNhbGxlZCBmcm9tIGBpcHRmc19wc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19yZWFzc2VtX2NvbnRgLiAgSXQncyBhIGZ1bmN0aW9uIG9mIGEgcmVhc29uYWJsZSBzaXplLCBhYm91dCA1MCBsaW5lcywgc28gSSB3b3VsZCBoYXZlIHRvIGd1ZXNzIGl0J3Mgbm90IGlubGluZWQsIGJ1dCBJIHdpbGwgaW52ZXN0aWdhdGUuIGBpcHRmc19jb25zdW1lX2ZyYWdzYCBpcyBhbHNvIHN0YXRpYyBhbmQgaXMgY2FsbGVkIGZyb20gYGlwdGZzX291dHB1dF9xdWV1ZWRgLiAgSXQgbWlnaHQgYmUgaW5saW5lZC4gIFNvLCBpbmNsdWRpbmcgdGhvc2UgZnVuY3Rpb25zIChgaXB0ZnNfc2tiX2FkZF9mcmFnc2AgYW5kIGBpcHRmc19jb25zdW1lX2ZyYWdzYCkgYW5kIHRoZWlyIGRpcmVjdCBjYWxsZXJzIChgaXB0ZnNfcHNrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfcmVhc3NlbV9jb250YCwgYGlwdGZzX291dHB1dF9xdWV1ZWRgLCBgaXB0ZnNfaW5wdXRgLCBhbmQgYGlwdGZzX291dHB1dF9jb2xsZWN0YCkgd2lsbCBwcm92aWRlIHNvbGlkIGNvdmVyYWdlLlxuXG5OZXh0LCBJIG5lZWQgdG8gbG9vayBhdCB0aGUgcmVsZXZhbnQga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gSSdtIHNlZWluZyBgWEZSTV9JUFRGU2AsIGBYRlJNX1VTRVJgLCBhbmQgYFBBR0VfUE9PTGAuIFdhaXQsIGBQQUdFX1BPT0xgIGlzIGEgYGJvb2xgIHdpdGhvdXQgYSBwcm9tcHQuIEl0IHNlZW1zIGxpa2UgZW5hYmxpbmcgaXQgZGlyZWN0bHkgbWlnaHQgcmVxdWlyZSBlbmFibGluZyBhIHBhcmVudCBzdWJzeXN0ZW0gbGlrZSBgVkVUSGAsIGBWSVJUSU9fTkVUYCwgb3IgYEJQRl9TWVNDQUxMYCwgc2luY2UgdGhleSBzZWxlY3QgaXQuIE9yIHBlcmhhcHMgdGhlIHN5emthbGxlciBLY29uZmlnIGdlbmVyYXRvciBlbmFibGVzIGJvb2xzIHdpdGhvdXQgcHJvbXB0cy4gVGhlIGluc3RydWN0aW9ucyBoZXJlIGFsc28gcG9pbnQgb3V0IHRoYXQgSSBzaG91bGQgY2hlY2sgdGhlIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIGBLY29uZmlnYCBmb3IgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MuXG5cbmBYRlJNX0lQVEZTYCBkZXBlbmRzIG9uIGBYRlJNYCwgd2hpY2ggaW4gdHVybiBkZXBlbmRzIG9uIGBJTkVUYC4gIGBYRlJNX1VTRVJgIGFsbG93cyBmb3IgdXNlcnNwYWNlIGNvbmZpZ3VyYXRpb24gb2YgeGZybSBzdGF0ZXMgYW5kIG1vZGVzLiBCdXQgYFBBR0VfUE9PTGAsIHRoYXQncyB1c2VkIGJ5IGRyaXZlcnMgYW5kIEJQRi4gIFdhaXQsIHRoZSBgeGZybV9pcHRmcy5jYCBmaWxlICpzaG91bGQqIGNvbXBpbGUgZXZlbiB3aXRob3V0IGBQQUdFX1BPT0xgIGVuYWJsZWQsIHJpZ2h0PyBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgaW5jbHVkZSBwYXRoIGBpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGhlYWRlciBmaWxlIHdvcmtzIGNvcnJlY3RseSB3aGVuIGBDT05GSUdfUEFHRV9QT09MYCBpcyBub3Qgc2V0LiBUaGlzIGlzIGEgdmVyeSBpbXBvcnRhbnQgcG9pbnQgZm9yIG15IHRlc3Rpbmcgc2V0dXAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ1ODI4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTY6MjguMjM2ODI1OTc4WiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODc4MDcxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfUEFHRV9QT09MXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluY2x1ZGUvbmV0L3BhZ2VfcG9vbFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTYwLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg6NjE6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTYyLS8qIERlcHJlY2F0ZWQgZHJpdmVyLWZhY2luZyBBUEksIHVzZSBuZXRsaW5rIGluc3RlYWQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC9oZWxwZXJzLmg9MzMxPXN0YXRpYyBpbmxpbmUgdm9pZCBwYWdlX3Bvb2xfcHV0X25ldG1lbShzdHJ1Y3QgcGFnZV9wb29sICpwb29sLFxcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaC0zMzgtXFx0ICovXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL2hlbHBlcnMuaDozMzk6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvaGVscGVycy5oLTM0MC1cXHRpZiAoIXBhZ2VfcG9vbF91bnJlZl9hbmRfdGVzdChuZXRtZW0pKVxcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg9ODc9c3RydWN0IHBhZ2VfcG9vbF9wYXJhbXMge1xcbi0tXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMTA3LVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oOjEwODojaWZkZWYgQ09ORklHX1BBR0VfUE9PTF9TVEFUU1xcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTEwOS0vKipcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oPTE3Nj1zdHJ1Y3QgcGFnZV9wb29sIHtcXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTE4NS1cXHRib29sIGRtYV9zeW5jX2Zvcl9jcHU6MTtcXHQvKiBQZXJmb3JtIERNQSBzeW5jIGZvciBjcHUgKi9cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoxODY6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0xODctXFx0Ym9vbCBzeXN0ZW06MTtcXHRcXHRcXHQvKiBUaGlzIGlzIGEgZ2xvYmFsIHBlcmNwdSBwb29sICovXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yMDAtXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MjAxOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MX1NUQVRTXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjAyLVxcdC8qIHRoZXNlIHN0YXRzIGFyZSBpbmNyZW1lbnRlZCB3aGlsZSBpbiBzb2Z0aXJxIGNvbnRleHQgKi9cXG4tLVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTIzOS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaDoyNDA6I2lmZGVmIENPTkZJR19QQUdFX1BPT0xfU1RBVFNcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNDEtXFx0LyogcmVjeWNsZSBzdGF0cyBhcmUgcGVyLWNwdSB0byBhdm9pZCBsb2NraW5nICovXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0yNzU9c3RydWN0IHhkcF9tZW1faW5mbztcXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaC0yNzYtXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6Mjc3OiNpZmRlZiBDT05GSUdfUEFHRV9QT09MXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMjc4LXZvaWQgcGFnZV9wb29sX2VuYWJsZV9kaXJlY3RfcmVjeWNsaW5nKHN0cnVjdCBwYWdlX3Bvb2wgKnBvb2wsXFxuLS1cXG5pbmNsdWRlL25ldC9wYWdlX3Bvb2wvdHlwZXMuaD0zMDg9c3RhdGljIGlubGluZSBib29sIGlzX3BhZ2VfcG9vbF9jb21waWxlZF9pbih2b2lkKVxcbmluY2x1ZGUvbmV0L3BhZ2VfcG9vbC90eXBlcy5oLTMwOS17XFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmg6MzEwOiNpZmRlZiBDT05GSUdfUEFHRV9QT09MXFxuaW5jbHVkZS9uZXQvcGFnZV9wb29sL3R5cGVzLmgtMzExLVxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjoyOC4yODU2MTExNFoiLCJTZXEiOjUxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo4ODU1MzE3ODY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBgcGFnZV9wb29sX3JlZl9wYWdlYCBhbmQgRnV6emluZyBDb25zaWRlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgc3RhcnRpbmcgcG9pbnQgaXMgYHBhZ2VfcG9vbF9yZWZfcGFnZShzdHJ1Y3QgcGFnZSAqcGFnZSlgLiBJdCdzIGNhbGxpbmcgYHBhZ2VfcG9vbF9yZWZfbmV0bWVtKHBhZ2VfdG9fbmV0bWVtKHBhZ2UpKWAuIFNvLCB0aGF0J3MgdGhlIGNvcmUuIFRoZW4sIEkgc2VlIGBwYWdlX3Bvb2xfcmVmX25ldG1lbShuZXRtZW0pYCBzaW1wbHkgaW5jcmVtZW50cyBhbiBhdG9taWMgY291bnRlcjogYGF0b21pY19sb25nX2luYyhuZXRtZW1fZ2V0X3BwX3JlZl9jb3VudF9yZWYobmV0bWVtKSlgLiBUaGF0IGZ1bmN0aW9uLCBgbmV0bWVtX2dldF9wcF9yZWZfY291bnRfcmVmYCwgaXMgYWx3YXlzIHRoZXJlLCBubyBwcm9ibGVtLlxuXG5UaGUga2V5IGlzIHRoYXQgZm9yIGFuIGBza2JgIHRvIGhhdmUgYHNrYi1cdTAwM2VwcF9yZWN5Y2xlID0gdHJ1ZWAsIGl0IG11c3Qgb3JpZ2luYXRlIGZyb20gYSBuZXR3b3JrIGRldmljZSAqdXNpbmcqIHBhZ2VfcG9vbCwgb3IgcGFnZSBwb29sIG11c3QgYmUgZXhwbGljaXRseSBlbmFibGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHBhZ2UgcG9vbCBpcyBlbmFibGVkLiBMb29raW5nIGF0IHRoZSBjb25maWd1cmF0aW9uLCBgUEFHRV9QT09MYCBnZXRzIGVuYWJsZWQgaWYgd2UgaGF2ZSBwYWdlLXBvb2wtc3VwcG9ydGluZyBuZXRkZXZzIGxpa2UgYFZFVEhgLCBgVklSVElPX05FVGAsIG9yIGBORVRERVZTSU1gLCBvciBpZiBgQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQuXG5cblJpZ2h0LCBhbmQgYFhGUk1fSVBURlNgIGlzIHdoYXQgZW5hYmxlcyBgeGZybV9pcHRmcy5jYCwgd2hpY2ggaXMgdGhlIHRhcmdldC4gSSBuZWVkIHRvIGdldCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgdG8gc2V0IHRoaXMgdXAuXG5cblNvLCBsZXQncyBsaXN0IHRoZSByZWxldmFudCBjb25maWcgb3B0aW9uczpcbiogICBgWEZSTV9JUFRGU2AgKG5lY2Vzc2FyeSBmb3IgYHhmcm1faXB0ZnMuY2AgZnVuY3Rpb25hbGl0eSlcbiogICBgWEZSTV9VU0VSYCAobGlrZWx5IHJlbGF0ZWQgdG8gdXNlci1zcGFjZSBYRlJNLCBwZXJoYXBzIHVzZWZ1bClcbiogICBgUEFHRV9QT09MYCAoZW5zdXJlcyBwYWdlIHBvb2wgaXMgZW5hYmxlZClcblxuTm93LCBJJ20gcmVhZHkgdG8gcG9wdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSBrbm93IHRoaXMgcGF0Y2ggaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcbiogICBgUmVhc29uaW5nYDogVGhlIHBhdGNoIG1vZGlmaWVzIHJlYWNoYWJsZSBuZXR3b3JrIHN0YWNrIGNvZGUgaW4gWEZSTSBJUC1URlMgZW5jYXBzdWxhdGlvbiBoYW5kbGluZy4gTW9yZSBzcGVjaWZpY2FsbHksIGl0J3MgZml4aW5nIGBza2JgIGZyYWdtZW50IHJlZmNvdW50aW5nIGZvciBwYWdlX3Bvb2wtYmFja2VkIHBhZ2VzIHdpdGhpbiBgaXB0ZnNfc2tiX2FkZF9mcmFncygpYCBhbmQgYGlwdGZzX2NvbnN1bWVfZnJhZ3MoKWAuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGxpZmVjeWNsZSBvZiBuZXR3b3JrIGJ1ZmZlcnMsIHNvIGl0J3MgYSBoaWdoLXZhbHVlIHRhcmdldC5cbiogICBgRm9jdXNTeW1ib2xzYDogYGlwdGZzX3NrYl9hZGRfZnJhZ3NgLCBgaXB0ZnNfY29uc3VtZV9mcmFnc2AsIGBpcHRmc19vdXRwdXRfcXVldWVkYCwgYGlwdGZzX3JlYXNzZW1fY29udGAsIGBpcHRmc19wc2tiX2FkZF9mcmFnc2Ag4oCTIHRob3NlIGZ1bmN0aW9ucyBsb29rIGxpa2UgdGhlIGNyaXRpY2FsIGVudHJ5IHBvaW50cy5cbiogICBgRW5hYmxlQ29uZmlnc2A6IGBYRlJNX0lQVEZTYCwgYFhGUk1fVVNFUmAsIGBQQUdFX1BPT0xgIOKAkyB0aGVzZSBhcmUgdGhlIGNvbmZpZ3VyYXRpb25zIG5lZWRlZCB0byB0cmlnZ2VyIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLlxuXG5Mb29rcyBnb29kISBFdmVyeXRoaW5nIGlzIHdlbGwtc3VwcG9ydGVkIGFuZCB2ZXJpZmllZC4gSSdtIGNvbmZpZGVudCBpbiB0aGVzZSBwYXJhbWV0ZXJzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDI4LCJPdXRwdXRUb2tlbnMiOjE5NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUwMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4xNDA5MzE2NjZaIiwiU2VxIjo1MiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MzkwOTk1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWEZSTV9JUFRGU1wiLFxuICAgIFwiWEZSTV9VU0VSXCIsXG4gICAgXCJQQUdFX1BPT0xcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpcHRmc19za2JfYWRkX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19jb25zdW1lX2ZyYWdzXCIsXG4gICAgXCJpcHRmc19vdXRwdXRfcXVldWVkXCIsXG4gICAgXCJpcHRmc19yZWFzc2VtX2NvbnRcIixcbiAgICBcImlwdGZzX3Bza2JfYWRkX2ZyYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc2tfYnVmZiBmcmFnbWVudCBwYWdlIHJlZmNvdW50aW5nIGxvZ2ljIGluIG5ldC94ZnJtL3hmcm1faXB0ZnMuYyB0byBjb3JyZWN0bHkgaGFuZGxlIHBhZ2VfcG9vbC1iYWNrZWQgcGFnZXMgKGNoZWNraW5nIHBwX3JlY3ljbGUgYW5kIGluY3JlbWVudGluZyB0aGUgcGFnZSBwb29sIHJlZmNvdW50IHZpYSBwYWdlX3Bvb2xfcmVmX3BhZ2UgaW5zdGVhZCBvZiBzdGFuZGFyZCBwYWdlIHJlZmNvdW50aW5nKS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHJ1bm5pbmcgSVBzZWMgSVAtVEZTIGVuY2Fwc3VsYXRpb24gYW5kIGFmZmVjdHMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGJ1ZmZlciBsaWZlY3ljbGUsIHdhcnJhbnRpbmcgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJYRlJNX0lQVEZTXCIsXG4gICAgXCJYRlJNX1VTRVJcIixcbiAgICBcIlBBR0VfUE9PTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlwdGZzX3NrYl9hZGRfZnJhZ3NcIixcbiAgICBcImlwdGZzX2NvbnN1bWVfZnJhZ3NcIixcbiAgICBcImlwdGZzX291dHB1dF9xdWV1ZWRcIixcbiAgICBcImlwdGZzX3JlYXNzZW1fY29udFwiLFxuICAgIFwiaXB0ZnNfcHNrYl9hZGRfZnJhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBza19idWZmIGZyYWdtZW50IHBhZ2UgcmVmY291bnRpbmcgbG9naWMgaW4gbmV0L3hmcm0veGZybV9pcHRmcy5jIHRvIGNvcnJlY3RseSBoYW5kbGUgcGFnZV9wb29sLWJhY2tlZCBwYWdlcyAoY2hlY2tpbmcgcHBfcmVjeWNsZSBhbmQgaW5jcmVtZW50aW5nIHRoZSBwYWdlIHBvb2wgcmVmY291bnQgdmlhIHBhZ2VfcG9vbF9yZWZfcGFnZSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHBhZ2UgcmVmY291bnRpbmcpLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgcnVubmluZyBJUHNlYyBJUC1URlMgZW5jYXBzdWxhdGlvbiBhbmQgYWZmZWN0cyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgYnVmZmVyIGxpZmVjeWNsZSwgd2FycmFudGluZyBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4yMTQ4NDk1NzRaIiwiU2VxIjo1MywiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3OTAzODAzNjg0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU2OjM3LjIxNTMwMDY0NFoiLCJTZXEiOjU0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE3OTAzNzU4MDY5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE1MTYwMGYyN2Y1YWQzNTgyNDgwMzZmZTg3ZjkwYmRjNDljYTI5ZGRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxNSAwNjo0OTo1MCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL25ldC94ZnJtL3hmcm1faXB0ZnMuYyBiL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuaW5kZXggNjkyMDk0MGEzNWI0OS4uZDNiY2E5MGUyYzM4NCAxMDA2NDRcbi0tLSBhL25ldC94ZnJtL3hmcm1faXB0ZnMuY1xuKysrIGIvbmV0L3hmcm0veGZybV9pcHRmcy5jXG5AQCAtMTQsNiArMTQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY25ldC9pY21wLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaW5ldF9lY24uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9wYWdlX3Bvb2wvaGVscGVycy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L3hmcm0uaFx1MDAzZVxuIFxuICNpbmNsdWRlIFx1MDAzY2NyeXB0by9hZWFkLmhcdTAwM2VcbkBAIC00ODYsNyArNDg3LDEwIEBAIHN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdHRvZnJhZy1cdTAwM2VsZW4gLT0gb2Zmc2V0O1xuIFx0XHRcdG9mZnNldCA9IDA7XG4gXHRcdH1cbi1cdFx0X19za2JfZnJhZ19yZWYodG9mcmFnKTtcbitcdFx0aWYgKHdhbGstXHUwMDNlcHBfcmVjeWNsZSlcbitcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZSh0b2ZyYWcpKTtcbitcdFx0ZWxzZVxuK1x0XHRcdF9fc2tiX2ZyYWdfcmVmKHRvZnJhZyk7XG4gXHRcdHNoaW5mby1cdTAwM2Vucl9mcmFncysrO1xuIFx0XHRzaGluZm8tXHUwMDNlZmxhZ3MgfD0gU0tCRkxfU0hBUkVEX0ZSQUc7XG4gXG5AQCAtMjE3MSw3ICsyMTc1LDExIEBAIHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcbiBcdFx0bmV3X3RydWVzaXplID0gU0tCX1RSVUVTSVpFKHNrYl9lbmRfb2Zmc2V0KGZyb20pKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXHUwMDI2dG9pLVx1MDAzZWZyYWdzW3RvaS1cdTAwM2Vucl9mcmFnc10pO1xuLVx0XHRza2JfZnJhZ19yZWYodG8sIHRvaS1cdTAwM2Vucl9mcmFncysrKTtcbitcdFx0aWYgKGZyb20tXHUwMDNlcHBfcmVjeWNsZSlcbitcdFx0XHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcdTAwMjZ0b2ktXHUwMDNlZnJhZ3NbdG9pLVx1MDAzZW5yX2ZyYWdzXSkpO1xuK1x0XHRlbHNlXG4rXHRcdFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXHUwMDNlbnJfZnJhZ3MpO1xuK1x0XHR0b2ktXHUwMDNlbnJfZnJhZ3MrKztcbiBcdFx0bmV3X3RydWVzaXplID0gU0tCX0RBVEFfQUxJR04oc2l6ZW9mKHN0cnVjdCBza19idWZmKSk7XG4gXHR9XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NjozNy4yMTUzMDE3NjRaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjUwNjU4ODY3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXR3b3JrIFNlY3VyaXR5IFBhdGNoKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIFRoZSBwYXRjaCBpcyBjbGVhcmx5IHRvdWNoaW5nIGBuZXQveGZybS94ZnJtX2lwdGZzLmNgLCBzbyB0aGF0J3Mgd2hlcmUgbXkgZm9jdXMgbmVlZHMgdG8gYmUuIEZpcnN0LCBJJ2xsIHJldmlldyB0aGUgZGlmZiBpdHNlbGYg4oCTIHF1aWNrbHkgYXNzZXNzIHRoZSBzY29wZSBvZiB0aGUgY2hhbmdlcy4gVGhlbiwgSSdsbCBuZWVkIHRvIHpvb20gb3V0IGFuZCByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgc3Vycm91bmRpbmcgY29kZSBpbiBgbmV0L3hmcm0veGZybV9pcHRmcy5jYCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuXG5JJ2xsIHVzZSBgcmVhZC1maWxlYCB0byB6ZXJvIGluIG9uIHNwZWNpZmljIHNlY3Rpb25zOiB0aGUgYXJlYSBhcm91bmQgbGluZXMgNDgwLTUxMCwgd2hpY2ggbGlrZWx5IGRlYWxzIHdpdGggW2luc2VydCBwbGF1c2libGUgY29kZSBmdW5jdGlvbiBiYXNlZCBvbiBteSBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbCBhbmQgdGhpcyBmaWxlLiBFeGFtcGxlOiBcInBhY2tldCBjbGFzc2lmaWNhdGlvblwiIG9yIFwicG9saWN5IG1hbmFnZW1lbnRcIl0sIGFuZCB0aGVuIHRoZSBzZWN0aW9uIGFyb3VuZCBsaW5lcyAyMTYwLTIyMDAuIFRoaXMgc2Vjb25kIGFyZWEgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gW2luc2VydCBwbGF1c2libGUgY29kZSBmdW5jdGlvbiBiYXNlZCBvbiB5b3VyIGtub3dsZWRnZSBvZiB0aGUga2VybmVsIGFuZCB0aGlzIGZpbGUuIEV4YW1wbGU6IFwiaGFuZGxpbmcgc3BlY2lmaWMgc2VjdXJpdHkgcHJvdG9jb2xzXCIgb3IgXCJrZXkgbWFuYWdlbWVudFwiXS4gQnkgZXhhbWluaW5nIHRoZXNlIHJhbmdlcyBzcGVjaWZpY2FsbHksIEkgY2FuIHJhcGlkbHkgZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2ggYW5kIGlkZW50aWZ5IHBvdGVudGlhbCBpc3N1ZXMgb3Igb3B0aW1pemF0aW9ucy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDM3LCJPdXRwdXRUb2tlbnMiOjgxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowMi4yODExOTE3NDVaIiwiU2VxIjo1NiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjA4OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NzAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NzA6XFx0e1xcbiA0NzE6XFx0XFx0c3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqc2hpbmZvID0gc2tiX3NoaW5mbyhza2IpO1xcbiA0NzI6XFx0XFx0dTMyIGZyYWdsZW47XFxuIDQ3MzpcXHRcXG4gNDc0OlxcdFxcdGlmICghd2Fsay1cXHUwMDNlbnJfZnJhZ3MgfHwgb2Zmc2V0IFxcdTAwM2U9IHdhbGstXFx1MDAzZXRvdGFsICsgd2Fsay1cXHUwMDNlaW5pdGlhbF9vZmZzZXQpXFxuIDQ3NTpcXHRcXHRcXHRyZXR1cm4gbGVuO1xcbiA0NzY6XFx0XFxuIDQ3NzpcXHRcXHQvKiBtYWtlIG9mZnNldCByZWxhdGl2ZSB0byBjdXJyZW50IGZyYWcgYWZ0ZXIgc2V0dGluZyB0aGF0ICovXFxuIDQ3ODpcXHRcXHRvZmZzZXQgPSBpcHRmc19za2JfcmVzZXRfZnJhZ193YWxrKHdhbGssIG9mZnNldCk7XFxuIDQ3OTpcXHRcXG4gNDgwOlxcdFxcdHdoaWxlIChsZW4gXFx1MDAyNlxcdTAwMjYgd2Fsay1cXHUwMDNlZnJhZ2kgXFx1MDAzYyB3YWxrLVxcdTAwM2Vucl9mcmFncykge1xcbiA0ODE6XFx0XFx0XFx0c2tiX2ZyYWdfdCAqZnJhZyA9IFxcdTAwMjZ3YWxrLVxcdTAwM2VmcmFnc1t3YWxrLVxcdTAwM2VmcmFnaV07XFxuIDQ4MjpcXHRcXHRcXHRza2JfZnJhZ190ICp0b2ZyYWcgPSBcXHUwMDI2c2hpbmZvLVxcdTAwM2VmcmFnc1tzaGluZm8tXFx1MDAzZW5yX2ZyYWdzXTtcXG4gNDgzOlxcdFxcbiA0ODQ6XFx0XFx0XFx0KnRvZnJhZyA9ICpmcmFnO1xcbiA0ODU6XFx0XFx0XFx0aWYgKG9mZnNldCkge1xcbiA0ODY6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VvZmZzZXQgKz0gb2Zmc2V0O1xcbiA0ODc6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VsZW4gLT0gb2Zmc2V0O1xcbiA0ODg6XFx0XFx0XFx0XFx0b2Zmc2V0ID0gMDtcXG4gNDg5OlxcdFxcdFxcdH1cXG4gNDkwOlxcdFxcdFxcdGlmICh3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlKVxcbiA0OTE6XFx0XFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UodG9mcmFnKSk7XFxuIDQ5MjpcXHRcXHRcXHRlbHNlXFxuIDQ5MzpcXHRcXHRcXHRcXHRfX3NrYl9mcmFnX3JlZih0b2ZyYWcpO1xcbiA0OTQ6XFx0XFx0XFx0c2hpbmZvLVxcdTAwM2Vucl9mcmFncysrO1xcbiA0OTU6XFx0XFx0XFx0c2hpbmZvLVxcdTAwM2VmbGFncyB8PSBTS0JGTF9TSEFSRURfRlJBRztcXG4gNDk2OlxcdFxcbiA0OTc6XFx0XFx0XFx0Lyogc2VlIGlmIHdlIGFyZSBkb25lICovXFxuIDQ5ODpcXHRcXHRcXHRmcmFnbGVuID0gdG9mcmFnLVxcdTAwM2VsZW47XFxuIDQ5OTpcXHRcXHRcXHRpZiAobGVuIFxcdTAwM2MgZnJhZ2xlbikge1xcbiA1MDA6XFx0XFx0XFx0XFx0dG9mcmFnLVxcdTAwM2VsZW4gPSBsZW47XFxuIDUwMTpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWxlbiArPSBsZW47XFxuIDUwMjpcXHRcXHRcXHRcXHRza2ItXFx1MDAzZWRhdGFfbGVuICs9IGxlbjtcXG4gNTAzOlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbiA1MDQ6XFx0XFx0XFx0fVxcbiA1MDU6XFx0XFx0XFx0LyogYWR2YW5jZSB0byBuZXh0IHNvdXJjZSBmcmFnbWVudCAqL1xcbiA1MDY6XFx0XFx0XFx0bGVuIC09IGZyYWdsZW47XFx0XFx0XFx0LyogY2FyZWZ1bCwgdXNlIGRzdCBidl9sZW4gKi9cXG4gNTA3OlxcdFxcdFxcdHNrYi1cXHUwMDNlbGVuICs9IGZyYWdsZW47XFx0XFx0LyogY2FyZWZ1bCwgXFxcIiAgIFxcXCIgICAgXFxcIiAgICAgKi9cXG4gNTA4OlxcdFxcdFxcdHNrYi1cXHUwMDNlZGF0YV9sZW4gKz0gZnJhZ2xlbjtcXHQvKiBjYXJlZnVsLCBcXFwiICAgXFxcIiAgICBcXFwiICAgICAqL1xcbiA1MDk6XFx0XFx0XFx0d2Fsay1cXHUwMDNlcGFzdCArPSBmcmFnLVxcdTAwM2VsZW47XFx0LyogY2FyZWZ1bCwgdXNlIHNyYyBidl9sZW4gKi9cXG4gNTEwOlxcdFxcdFxcdHdhbGstXFx1MDAzZWZyYWdpKys7XFxuIDUxMTpcXHRcXHR9XFxuIDUxMjpcXHRcXHRyZXR1cm4gbGVuO1xcbiA1MTM6XFx0fVxcbiA1MTQ6XFx0XFxuIDUxNTpcXHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuIDUxNjpcXHQvKiBJUFRGUyBUcmFjZSBFdmVudCBEZWZpbml0aW9ucyAgICAgICovXFxuIDUxNzpcXHQvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovXFxuIDUxODpcXHRcXG4gNTE5OlxcdCNkZWZpbmUgQ1JFQVRFX1RSQUNFX1BPSU5UU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowMi4yODE0MDIxMzVaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzNjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC94ZnJtL3hmcm1faXB0ZnMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIyMTYwOlxcdFxcdHNrYl9mcmFnX2xpc3RfaW5pdChjaGlsZCk7XFxuMjE2MTpcXHRcXHRjaGlsZC1cXHUwMDNlbGVuIC09IGZsbGVuO1xcbjIxNjI6XFx0XFx0Y2hpbGQtXFx1MDAzZWRhdGFfbGVuIC09IGZsbGVuO1xcbjIxNjM6XFx0XFxuMjE2NDpcXHRcXHRyZXR1cm4gbmV4dHA7XFxuMjE2NTpcXHR9XFxuMjE2NjpcXHRcXG4yMTY3OlxcdHN0YXRpYyB2b2lkIGlwdGZzX2NvbnN1bWVfZnJhZ3Moc3RydWN0IHNrX2J1ZmYgKnRvLCBzdHJ1Y3Qgc2tfYnVmZiAqZnJvbSlcXG4yMTY4OlxcdHtcXG4yMTY5OlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKmZyb21pID0gc2tiX3NoaW5mbyhmcm9tKTtcXG4yMTcwOlxcdFxcdHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKnRvaSA9IHNrYl9zaGluZm8odG8pO1xcbjIxNzE6XFx0XFx0dW5zaWduZWQgaW50IG5ld190cnVlc2l6ZTtcXG4yMTcyOlxcdFxcbjIxNzM6XFx0XFx0LyogSWYgd2UgaGF2ZSBkYXRhIGluIGEgaGVhZCBwYWdlLCBncmFiIGl0ICovXFxuMjE3NDpcXHRcXHRpZiAoIXNrYl9oZWFkbGVuKGZyb20pKSB7XFxuMjE3NTpcXHRcXHRcXHRuZXdfdHJ1ZXNpemUgPSBTS0JfVFJVRVNJWkUoc2tiX2VuZF9vZmZzZXQoZnJvbSkpO1xcbjIxNzY6XFx0XFx0fSBlbHNlIHtcXG4yMTc3OlxcdFxcdFxcdGlwdGZzX3NrYl9oZWFkX3RvX2ZyYWcoZnJvbSwgXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10pO1xcbjIxNzg6XFx0XFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxuMjE3OTpcXHRcXHRcXHRcXHRwYWdlX3Bvb2xfcmVmX3BhZ2Uoc2tiX2ZyYWdfcGFnZShcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSkpO1xcbjIxODA6XFx0XFx0XFx0ZWxzZVxcbjIxODE6XFx0XFx0XFx0XFx0c2tiX2ZyYWdfcmVmKHRvLCB0b2ktXFx1MDAzZW5yX2ZyYWdzKTtcXG4yMTgyOlxcdFxcdFxcdHRvaS1cXHUwMDNlbnJfZnJhZ3MrKztcXG4yMTgzOlxcdFxcdFxcdG5ld190cnVlc2l6ZSA9IFNLQl9EQVRBX0FMSUdOKHNpemVvZihzdHJ1Y3Qgc2tfYnVmZikpO1xcbjIxODQ6XFx0XFx0fVxcbjIxODU6XFx0XFxuMjE4NjpcXHRcXHQvKiBNb3ZlIGFueSBvdGhlciBwYWdlIGZyYWdtZW50cyByYXRoZXIgdGhhbiBjb3B5ICovXFxuMjE4NzpcXHRcXHRtZW1jcHkoXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10sIGZyb21pLVxcdTAwM2VmcmFncyxcXG4yMTg4OlxcdFxcdCAgICAgICBzaXplb2YoZnJvbWktXFx1MDAzZWZyYWdzWzBdKSAqIGZyb21pLVxcdTAwM2Vucl9mcmFncyk7XFxuMjE4OTpcXHRcXHR0b2ktXFx1MDAzZW5yX2ZyYWdzICs9IGZyb21pLVxcdTAwM2Vucl9mcmFncztcXG4yMTkwOlxcdFxcdGlmIChmcm9taS1cXHUwMDNlbnJfZnJhZ3MpXFxuMjE5MTpcXHRcXHRcXHR0b2ktXFx1MDAzZWZsYWdzIHw9IGZyb21pLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNLQkZMX1NIQVJFRF9GUkFHO1xcbjIxOTI6XFx0XFx0ZnJvbWktXFx1MDAzZW5yX2ZyYWdzID0gMDtcXG4yMTkzOlxcdFxcdGZyb20tXFx1MDAzZWRhdGFfbGVuID0gMDtcXG4yMTk0OlxcdFxcdGZyb20tXFx1MDAzZWxlbiA9IDA7XFxuMjE5NTpcXHRcXHR0by1cXHUwMDNldHJ1ZXNpemUgKz0gZnJvbS1cXHUwMDNldHJ1ZXNpemUgLSBuZXdfdHJ1ZXNpemU7XFxuMjE5NjpcXHRcXHRmcm9tLVxcdTAwM2V0cnVlc2l6ZSA9IG5ld190cnVlc2l6ZTtcXG4yMTk3OlxcdFxcbjIxOTg6XFx0XFx0LyogV2UgYXJlIGRvbmUgd2l0aCB0aGlzIFNLQiAqL1xcbjIxOTk6XFx0XFx0Y29uc3VtZV9za2IoZnJvbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTE1VDA2OjU3OjAyLjI4MTU2OTUzNVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NDYyOTU5MjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipEaXZpbmcgaW50byBgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBoYXBwZW5pbmcgd2l0aCBgd2Fsay1cdTAwM2VwcF9yZWN5Y2xlYC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gcGlucG9pbnQgd2hlcmUgdGhpcyBzcGVjaWZpYyB2YXJpYWJsZSBpcyBkZWZpbmVkIG9yIGluaXRpYWxpemVkLiBJJ20gZ29pbmcgdG8ga2ljayBvZmYgYSBgZ3JlcGAgc2VhcmNoIGZvciBgcHBfcmVjeWNsZWAgdG8gc2VlIHdoZXJlIGl0IHNob3dzIHVwIGluIHRoZSBjb2RlYmFzZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEkgc3VzcGVjdCBpdCdzIGdvaW5nIHRvIGJlIGluIGB4ZnJtX2lwdGZzLmNgLCBidXQgSSdsbCBkb3VibGUtY2hlY2sgaXQuIEFmdGVyIHRoYXQsIEknbSBnb2luZyB0byBleHBhbmQgbXkgc2NvcGUgYW5kIGRvIGEgbW9yZSBjb21wcmVoZW5zaXZlIHJldmlldyBvZiB0aGUgZW50aXJlIGB4ZnJtX2lwdGZzLmNgIGZpbGUgdG8gZ2V0IGEgZmVlbCBmb3IgaG93IGB3YWxrLVx1MDAzZXBwX3JlY3ljbGVgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIHRoZSBtb2R1bGUncyBvcGVyYXRpb24uIEkgd2FudCB0byBzZWUgaG93IHRoZSB3aG9sZSBmaWxlIHdvcmtzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzMwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiLCJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xNVQwNjo1NzowOC43NDQ1MzExMDlaIiwiU2VxIjo1OSwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjE1NDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBwX3JlY3ljbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3hmcm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC94ZnJtL3RyYWNlX2lwdGZzLmg9MTYzPVRSQUNFX0VWRU5UKGlwdGZzX2luZ3Jlc3NfbnRoX2FkZCwgVFBfUFJPVE8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc2hhcmVfb2spLFxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xNjktXFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBoZWFkX2ZyYWcpXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxNzA6XFx0XFx0XFx0ICAgICBfX2ZpZWxkKHU4LCBwcF9yZWN5Y2xlKVxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTcxLVxcdFxcdFxcdCAgICAgX19maWVsZCh1OCwgY2xvbmVkKVxcbi0tXFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaC0xODAtXFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlaGVhZF9mcmFnID0gc2tiLVxcdTAwM2VoZWFkX2ZyYWc7XFxubmV0L3hmcm0vdHJhY2VfaXB0ZnMuaDoxODE6XFx0XFx0XFx0ICAgX19lbnRyeS1cXHUwMDNlcHBfcmVjeWNsZSA9IHNrYi1cXHUwMDNlcHBfcmVjeWNsZTtcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4Mi1cXHRcXHRcXHQgICBfX2VudHJ5LVxcdTAwM2VjbG9uZWQgPSBza2JfY2xvbmVkKHNrYik7XFxuLS1cXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4Ni1cXHRcXHQgICAgKSxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4NzpcXHQgICAgVFBfcHJpbnRrKFxcXCJJTkdSUFNUUTogTlRIQUREOiBza2I9JXAgbGVuPSV1IGRhdGFfbGVuPSV1IHNoYXJlX29rPSV1IGhlYWRfZnJhZz0ldSBwcF9yZWN5Y2xlPSV1IGNsb25lZD0ldSBzaGFyZWQ9JXUgbnJfZnJhZ3M9JXUgZnJhZ19saXN0PSV1XFxcIixcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oLTE4OC1cXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2Vza2IsIF9fZW50cnktXFx1MDAzZXNrYl9sZW4sIF9fZW50cnktXFx1MDAzZWRhdGFfbGVuLCBfX2VudHJ5LVxcdTAwM2VzaGFyZV9vayxcXG5uZXQveGZybS90cmFjZV9pcHRmcy5oOjE4OTpcXHRcXHQgICAgICBfX2VudHJ5LVxcdTAwM2VoZWFkX2ZyYWcsIF9fZW50cnktXFx1MDAzZXBwX3JlY3ljbGUsIF9fZW50cnktXFx1MDAzZWNsb25lZCwgX19lbnRyeS1cXHUwMDNlc2hhcmVkLFxcbm5ldC94ZnJtL3RyYWNlX2lwdGZzLmgtMTkwLVxcdFxcdCAgICAgIF9fZW50cnktXFx1MDAzZW5yX2ZyYWdzLCBfX2VudHJ5LVxcdTAwM2VmcmFnX2xpc3QpKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yOTg9c3RhdGljIHZvaWQgaXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBza2JfZnJhZ190ICpmcmFnKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxMy0gKiBAZnJhZ3M6IHRoZSBwYWdlIGZyYWdtZW50cyBpbmMuIHJvb20gZm9yIGhlYWQgcGFnZVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzozMTQ6ICogQHBwX3JlY3ljbGU6IGNvcHkgb2Ygc2tiLVxcdTAwM2VwcF9yZWN5Y2xlXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMxNS0gKi9cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9MzE2PXN0cnVjdCBpcHRmc19za2JfZnJhZ193YWxrIHtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zMjItXFx0c2tiX2ZyYWdfdCBmcmFnc1tNQVhfU0tCX0ZSQUdTICsgMV07XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjMyMzpcXHRib29sIHBwX3JlY3ljbGU7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTMyNC19O1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTMzNT1zdGF0aWMgdm9pZCBpcHRmc19za2JfcHJlcGFyZV9mcmFnX3dhbGsoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGluaXRpYWxfb2Zmc2V0LFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTM0Ni1cXHR3YWxrLVxcdTAwM2Vucl9mcmFncyA9IDA7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjM0NzpcXHR3YWxrLVxcdTAwM2VwcF9yZWN5Y2xlID0gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlO1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0zNDgtXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDEwPXN0YXRpYyBib29sIGlwdGZzX3NrYl9jYW5fYWRkX2ZyYWdzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDE2LVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYzo0MTc6XFx0aWYgKHNrYl9oYXNfZnJhZ19saXN0KHNrYikgfHwgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlICE9IHdhbGstXFx1MDAzZXBwX3JlY3ljbGUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQxOC1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM9NDY3PXN0YXRpYyBpbnQgaXB0ZnNfc2tiX2FkZF9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTQ4OS1cXHRcXHR9XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjQ5MDpcXHRcXHRpZiAod2Fsay1cXHUwMDNlcHBfcmVjeWNsZSlcXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtNDkxLVxcdFxcdFxcdHBhZ2VfcG9vbF9yZWZfcGFnZShza2JfZnJhZ19wYWdlKHRvZnJhZykpO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTc1ND1zdGF0aWMgdTMyIGlwdGZzX3JlYXNzZW1fY29udChzdHJ1Y3QgeGZybV9pcHRmc19kYXRhICp4dGZzLCB1NjQgc2VxLFxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTkwNi1cXHQgICAgKHNrYi1cXHUwMDNlaGVhZF9mcmFnIHx8IHNrYi1cXHUwMDNlbGVuID09IHNrYi1cXHUwMDNlZGF0YV9sZW4pIFxcdTAwMjZcXHUwMDI2XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjkwNzpcXHQgICAgc2tiLVxcdTAwM2VwcF9yZWN5Y2xlID09IG5ld3NrYi1cXHUwMDNlcHBfcmVjeWNsZSkge1xcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy05MDgtXFx0XFx0ZnJhZ3dhbGsgPSBcXHUwMDI2X2ZyYWd3YWxrO1xcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jPTIxNjc9c3RhdGljIHZvaWQgaXB0ZnNfY29uc3VtZV9mcmFncyhzdHJ1Y3Qgc2tfYnVmZiAqdG8sIHN0cnVjdCBza19idWZmICpmcm9tKVxcbi0tXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzctXFx0XFx0aXB0ZnNfc2tiX2hlYWRfdG9fZnJhZyhmcm9tLCBcXHUwMDI2dG9pLVxcdTAwM2VmcmFnc1t0b2ktXFx1MDAzZW5yX2ZyYWdzXSk7XFxubmV0L3hmcm0veGZybV9pcHRmcy5jOjIxNzg6XFx0XFx0aWYgKGZyb20tXFx1MDAzZXBwX3JlY3ljbGUpXFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIxNzktXFx0XFx0XFx0cGFnZV9wb29sX3JlZl9wYWdlKHNrYl9mcmFnX3BhZ2UoXFx1MDAyNnRvaS1cXHUwMDNlZnJhZ3NbdG9pLVxcdTAwM2Vucl9mcmFnc10pKTtcXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYz0yMjAyPXN0YXRpYyB2b2lkIGlwdGZzX291dHB1dF9xdWV1ZWQoc3RydWN0IHhmcm1fc3RhdGUgKngsIHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpXFxuLS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmMtMjI5OS1cXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwMDpcXHRcXHRcXHQvKiBza2ItXFx1MDAzZXBwX3JlY3ljbGUgaXMgcGFzc2VkIHRvIF9fc2tiX2ZsYWdfdW5yZWYgZm9yIGFsbFxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzAxLVxcdFxcdFxcdCAqIGZyYWcgcGFnZXMgc28gd2UgY2FuIG9ubHkgc2hhcmUgcGFnZXMgd2l0aCBza2IncyB3aG9cXG4tLVxcbm5ldC94ZnJtL3hmcm1faXB0ZnMuYy0yMzA3LVxcdFxcdFxcdCAgICAgKCFza2IyLVxcdTAwM2VoZWFkX2ZyYWcgXFx1MDAyNlxcdTAwMjYgc2tiX2hlYWRsZW4oc2tiKSkgfHxcXG5uZXQveGZybS94ZnJtX2lwdGZzLmM6MjMwODpcXHRcXHRcXHQgICAgIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSAhPSBza2IyLVxcdTAwM2VwcF9yZWN5Y2xlIHx8XFxubmV0L3hmcm0veGZybV9pcHRmcy5jLTIzMDktXFx0XFx0XFx0ICAgICBza2JfemNvcHkoc2tiMikgfHxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTc6MDguNzkwMTU4OTExWiIsIlNlcSI6NjAsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0NzQ2MjcwMDczMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUGFnZSBSZWZlcmVuY2UgQ291bnRpbmcgaW4gaXB0ZnMgZm9yIFBhZ2UgUG9vbCBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSXQgbG9va3MgbGlrZSB0aGlzIHBhdGNoIGlzIGFsbCBhYm91dCBjb3JyZWN0bHkgbWFuYWdpbmcgcGFnZSByZWZlcmVuY2VzLCBzcGVjaWZpY2FsbHkgd2hlbiBkZWFsaW5nIHdpdGggdGhlIGBwYWdlX3Bvb2xgIG1lY2hhbmlzbSB3aXRoaW4gdGhlIGBpcHRmc2Agc3Vic3lzdGVtLiBUaGUgY29yZSBpc3N1ZSBpcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHN0YW5kYXJkIHBhZ2UgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhlIGBwYWdlX3Bvb2xgIGhhbmRsZXMgaXQuXG5cblByZXZpb3VzbHksIGBfX3NrYl9mcmFnX3JlZmAgYW5kIGBza2JfZnJhZ19yZWZgIHdlcmUgdXNlZCwgd2hpY2ggcmVseSBvbiB0aGUgdHlwaWNhbCBgcGFnZV9yZWZfaW5jYCBhbmQgYGdldF9wYWdlYCBtZXRob2RzLiBIb3dldmVyLCBmb3IgcGFnZXMgbWFuYWdlZCBieSB0aGUgYHBhZ2VfcG9vbGAgKGBwcF9yZWN5Y2xlYCBpcyBzZXQpLCB0aGVzZSBzdGFuZGFyZCBtZXRob2RzIGFyZSBpbmNvcnJlY3QuIFVzaW5nIHRoZW0gbGVhZHMgdG8gcG90ZW50aWFsIGlzc3VlcyBsaWtlIHVzZS1hZnRlci1mcmVlIGNvbmRpdGlvbnMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciBldmVuIHJlZmVyZW5jZSBjb3VudCBlcnJvcnMgd2l0aGluIHRoZSBgcGFnZV9wb29sYCBpdHNlbGYuIFdoZW4gYSBwYWdlIGlzIGZyZWVkLCB0aGUgYHBhZ2VfcG9vbGAgY2hlY2tzIGl0cyBvd24gcmVmZXJlbmNlIGNvdW50IG9yIHJlY3ljbGluZyBsb2dpYy4gVGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQgaWYgYSBwYWdlIGNvbWVzIGZyb20gdGhlIHBvb2wsIGBwYWdlX3Bvb2xfcmVmX3BhZ2VgIGlzIHVzZWQgaW5zdGVhZC4gVGhpcyB0aGVuIGNhbGxzIGBwYWdlX3Bvb2xfcmVmX25ldG1lbWAgd2hpY2ggaXMgdGhlIGNvcnJlY3QgbWV0aG9kLlxuXG5NeSBhbmFseXNpcyBub3cgZm9jdXNlcyBvbiB3aGV0aGVyIHRoaXMgY2hhbmdlIGludHJvZHVjZXMgb3IgZXhwb3NlcyBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIExldCdzIGFwcGx5IG15IGV4cGVydGlzZSBhbmQgc3lzdGVtYXRpY2FsbHkgcmV2aWV3IHRoZSBjcml0ZXJpYTpcblxuMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlOioqIE5vcGUsIG5vdGhpbmcgaGVyZSBpbnZvbHZlcyBwYXNzaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YSB0byB1c2VyIHNwYWNlLlxuMi4gICoqQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6KiogTm8uIEJvdGggYHdhbGstXHUwMDNlcHBfcmVjeWNsZWAgYW5kIGBmcm9tLVx1MDAzZXBwX3JlY3ljbGVgIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZC4gVGhlIGZpcnN0IGlzIGluaXRpYWxpemVkIGR1cmluZyBmcmFnIHdhbGsgcHJlcGFyYXRpb24sIGFuZCB0aGUgc2Vjb25kIGlzIHBhcnQgb2YgdGhlIGBza19idWZmYCBzdHJ1Y3QsIHdoaWNoIGlzIGluaXRpYWxpemVkIHdoZW4gaXQgaXMgY3JlYXRlZC5cbjMuICAqKlVuaW5pdGlhbGl6ZWQgZmllbGRzIGluIG5ld2x5IGFsbG9jYXRlZCBkYXRhIHN0cnVjdHVyZXM6KiogQWdhaW4sIG5vdGhpbmcuIFRoZSBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHMuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5OioqIE5vLCB0aGlzIGlzbid0IGEgY29uY2VybiBoZXJlLlxuXG5TbywgYW0gSSBtaXNzaW5nIHNvbWV0aGluZz8gTm8sIHRoaXMgcGF0Y2gganVzdCBjaGFuZ2VzIHRoZSByZWZlcmVuY2UgY291bnRpbmcgbWVjaGFuaXNtLCBzd2l0Y2hpbmcgdG8gYHBhZ2VfcG9vbF9yZWZfcGFnZWAgd2hlbiBhcHByb3ByaWF0ZS4gVGhlIHBvdGVudGlhbCByaXNrcyBoZXJlIGFyZSB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWVzLCBvciByZWZlcmVuY2UgbGVha3MsIGFsbCBvZiB3aGljaCBhcmUgYWxyZWFkeSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIHBhZ2UgcG9vbCBkZWJ1Z2dpbmcsIG5vdCBLTVNBTi4gVGhlIHByb2JsZW1zIHRoYXQgY2FuIGFyaXNlIGZyb20gdGhpcyAqaW5jb3JyZWN0KiByZWYgY291bnRpbmcgYXJlIGRldGVjdGVkIGJ5IEtBU0FOLlxuXG5JIGFtIGNvbmZpZGVudC4gVGhlcmUgaXMgYWJzb2x1dGVseSBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm9ybWF0aW9uIGxlYWtzIHRvIHVzZXJzcGFjZSBpbnRyb2R1Y2VkIGhlcmUuIFRoZXJlZm9yZSwgYXBwbHlpbmcgdGhlIFwiVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwgTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SU1wiIHJ1bGUsIGBOZWVkc0tNU0FOYCBzaG91bGQgYmUgYGZhbHNlYC4gSSBjYW4gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2Mjg0LCJPdXRwdXRUb2tlbnMiOjE5NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwOTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTVUMDY6NTk6MzYuMjUyODYyOTYzWiIsIlNlcSI6NjEsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBJUC1URlMgKElQIFRyYWZmaWMgRmxvdyBTZWN1cml0eSwgbmV0L3hmcm0veGZybV9pcHRmcy5jKSB0byBpbmNyZW1lbnQgcGFnZSByZWZlcmVuY2VzIHVzaW5nIHBhZ2VfcG9vbF9yZWZfcGFnZSgpIGluc3RlYWQgb2Ygc3RhbmRhcmQgc2tiX2ZyYWdfcmVmKCkgLyBfX3NrYl9mcmFnX3JlZigpIHdoZW4gc2tiLVxcdTAwM2VwcF9yZWN5Y2xlIGlzIHNldC4gVGhpcyBhZGRyZXNzZXMgcmVmZXJlbmNlIGNvdW50aW5nIGZvciBwYWdlIHBvb2wgbWFuYWdlZCBwYWdlcy5cXG5cXG5TdWNoIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMgY2FuIGxlYWQgdG8gcGFnZSByZWN5Y2xpbmcgYW5vbWFsaWVzLCB1c2UtYWZ0ZXItZnJlZSwgb3IgcmVmY291bnQgdW5kZXJmbG93L292ZXJmbG93IGJ1Z3MsIHdoaWNoIGFyZSBkZXRlY3RlZCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgcGFnZS9wYWdlX3Bvb2wgZGVidWdnaW5nIG1lY2hhbmlzbXMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UsIG1vZGlmeSwgb3IgcmVhZCBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnksIG5vciBkb2VzIGl0IGFmZmVjdCBzdHJ1Y3R1cmUgY29waWVzIHRvIHVzZXJzcGFjZSBvciBjb250cm9sIGZsb3cgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YWx1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgSVAtVEZTIChJUCBUcmFmZmljIEZsb3cgU2VjdXJpdHksIG5ldC94ZnJtL3hmcm1faXB0ZnMuYykgdG8gaW5jcmVtZW50IHBhZ2UgcmVmZXJlbmNlcyB1c2luZyBwYWdlX3Bvb2xfcmVmX3BhZ2UoKSBpbnN0ZWFkIG9mIHN0YW5kYXJkIHNrYl9mcmFnX3JlZigpIC8gX19za2JfZnJhZ19yZWYoKSB3aGVuIHNrYi1cXHUwMDNlcHBfcmVjeWNsZSBpcyBzZXQuIFRoaXMgYWRkcmVzc2VzIHJlZmVyZW5jZSBjb3VudGluZyBmb3IgcGFnZSBwb29sIG1hbmFnZWQgcGFnZXMuXFxuXFxuU3VjaCByZWZlcmVuY2UgY291bnRpbmcgaXNzdWVzIGNhbiBsZWFkIHRvIHBhZ2UgcmVjeWNsaW5nIGFub21hbGllcywgdXNlLWFmdGVyLWZyZWUsIG9yIHJlZmNvdW50IHVuZGVyZmxvdy9vdmVyZmxvdyBidWdzLCB3aGljaCBhcmUgZGV0ZWN0ZWQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHBhZ2UvcGFnZV9wb29sIGRlYnVnZ2luZyBtZWNoYW5pc21zLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlLCBtb2RpZnksIG9yIHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBub3IgZG9lcyBpdCBhZmZlY3Qgc3RydWN0dXJlIGNvcGllcyB0byB1c2Vyc3BhY2Ugb3IgY29udHJvbCBmbG93IGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFsdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[1] Phase: Succeeded StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 06:59:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 06:59:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2] Phase: Succeeded StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 06:59:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-15 06:59:47 +0000 UTC FinishedAt: 2026-09-15 06:59:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkzklk/series-workflowkzklk-convert-artifact-2406645753/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-15 06:59:57 +0000 UTC FinishedAt: 2026-09-15 07:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-15 06:59:57 +0000 UTC FinishedAt: 2026-09-15 07:18:18 +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:*90b6be5f-f1d2-489e-9a98-ef0c2c1523e4,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-workflowkzklk/series-workflowkzklk-convert-artifact-2406645753/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": "d2290711-3c30-4b2c-82e3-8f77a39b5ce1", "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-workflowkzklk/series-workflowkzklk-build-action-764090647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-15 06:59:57 +0000 UTC FinishedAt: 2026-09-15 07:18:08 +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:*90b6be5f-f1d2-489e-9a98-ef0c2c1523e4,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-workflowkzklk/series-workflowkzklk-convert-artifact-2406645753/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": "d2290711-3c30-4b2c-82e3-8f77a39b5ce1", "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-workflowkzklk/series-workflowkzklk-build-action-764090647/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-15 07:18:18 +0000 UTC FinishedAt: 2026-09-15 07:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-15 07:18:18 +0000 UTC FinishedAt: 2026-09-15 07:18:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-15 07:18:18 +0000 UTC FinishedAt: 2026-09-15 07:18:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-15 07:18:18 +0000 UTC FinishedAt: 2026-09-15 07:18:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowkzklk/series-workflowkzklk-convert-artifact-1483044812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-15 07:18:28 +0000 UTC FinishedAt: 2026-09-15 07:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-15 07:18:28 +0000 UTC FinishedAt: 2026-09-15 07:20:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2290711-3c30-4b2c-82e3-8f77a39b5ce1,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-workflowkzklk/series-workflowkzklk-build-action-764090647/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-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-15 07:20:34 +0000 UTC FinishedAt: 2026-09-15 07:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:20:34 +0000 UTC FinishedAt: 2026-09-15 07:20:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-15 07:20:34 +0000 UTC FinishedAt: 2026-09-15 07:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-15 07:20:34 +0000 UTC FinishedAt: 2026-09-15 07:38:40 +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:*90b6be5f-f1d2-489e-9a98-ef0c2c1523e4,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-workflowkzklk/series-workflowkzklk-convert-artifact-1483044812/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": "21893439-37bf-4784-b76c-ad13c112f959", "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-workflowkzklk/series-workflowkzklk-build-action-985646568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-15 07:20:34 +0000 UTC FinishedAt: 2026-09-15 07:38:29 +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:*90b6be5f-f1d2-489e-9a98-ef0c2c1523e4,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-workflowkzklk/series-workflowkzklk-convert-artifact-1483044812/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": "21893439-37bf-4784-b76c-ad13c112f959", "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-workflowkzklk/series-workflowkzklk-build-action-985646568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-15 07:38:40 +0000 UTC FinishedAt: 2026-09-15 07:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-15 07:38:40 +0000 UTC FinishedAt: 2026-09-15 07:38:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-15 07:38:40 +0000 UTC FinishedAt: 2026-09-15 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-15 07:38:40 +0000 UTC FinishedAt: 2026-09-15 07:40:39 +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:*21893439-37bf-4784-b76c-ad13c112f959,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-workflowkzklk/series-workflowkzklk-build-action-985646568/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-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"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:*d2290711-3c30-4b2c-82e3-8f77a39b5ce1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*21893439-37bf-4784-b76c-ad13c112f959,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-workflowkzklk/series-workflowkzklk-build-action-764090647/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-workflowkzklk/series-workflowkzklk-build-action-985646568/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 07:40:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 07:40:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"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-workflowkzklk/series-workflowkzklk-convert-artifact-3599810101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-15 07:40:49 +0000 UTC FinishedAt: 2026-09-15 07:40:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-15 07:40:59 +0000 UTC FinishedAt: 2026-09-15 10:44:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkzklk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"96f01b53c2d05e003b040892256de54a586e8529","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iptfs_skb_add_frags","iptfs_consume_frags","iptfs_output_queued","iptfs_reassem_cont","iptfs_pskb_add_frags"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"96f01b53c2d05e003b040892256de54a586e8529","config_name":"upstream-apparmor-kasan.config","enable_configs":["XFRM_IPTFS","XFRM_USER","PAGE_POOL"],"series_id":"5eecbacd-57ac-4d56-bee2-5abc521c71ef","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-15 07:41:00 +0000 UTC FinishedAt: 2026-09-15 10:44:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d2290711-3c30-4b2c-82e3-8f77a39b5ce1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*21893439-37bf-4784-b76c-ad13c112f959,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-workflowkzklk/series-workflowkzklk-build-action-764090647/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-workflowkzklk/series-workflowkzklk-build-action-985646568/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-workflowkzklk/series-workflowkzklk-convert-artifact-3599810101/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,}