Name: series-workflowmcq7q Phase: Succeeded StartedAt: 2026-08-23 04:23:24 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[0] Phase: Succeeded StartedAt: 2026-08-23 04:23:24 +0000 UTC FinishedAt: 2026-08-23 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[0].run-triage Phase: Succeeded StartedAt: 2026-08-23 04:23:24 +0000 UTC FinishedAt: 2026-08-23 04:55:23 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "NET_SCHED", "NET_CLS_ACT", "NET_ACT_GATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "NET_SCHED", "NET_CLS_ACT", "NET_ACT_GATE" ], "series_id": "c3410d62-60c1-4eaa-8f92-6cf7bb7a7931" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_gate_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2dhdGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuQEAgLTUwMSw2ICYjNDM7NTAxLDE0IEBAIHN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbiBcdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuIFx0XHRjeWNsZXRpbWUgPSBjeWNsZTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZ1wmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lO1xuIFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCmluZGV4IGZkYmZjYWEzZTJhYjkuLjMwYmNmMTczMjc0Y2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCkBAIC01MDEsNiAmIzQzOzUwMSwxNCBAQCBzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKIAkJY3ljbGV0aW1lID0gY3ljbGU7CiAJfQomIzQzOwomIzQzOwlpZiAoY3ljbGV0aW1lICZsdDsgMCB8fCBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZyYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2dhY3QtJmd0O3RjZl9sb2NrKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CX0KJiM0MzsKIAlwLSZndDt0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTsKIAlwLSZndDt0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgYGFjdF9nYXRlLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgY2hhbmdlLCB3aGljaCBpcyB0aGF0IG5ldyBjaGVjayBpbiBgdGNmX2dhdGVfaW5pdGAuIExvb2tpbmcgYXQgaXQsIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgY3ljbGV0aW1lYCBub3csIGVuc3VyaW5nIGl0JiMzOTtzIHdpdGhpbiBhIHJlYXNvbmFibGUgcmFuZ2Ug4oCTIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYElOVF9NQVhgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gbWUuCgpUaGUgY29kZSBub3cgZXhwbGljaXRseSBoYW5kbGVzIHRoZSBwb3RlbnRpYWwgZm9yIGBjeWNsZXRpbWVgIGJlaW5nIG91dHNpZGUgb2YgYWNjZXB0YWJsZSBib3VuZHMsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgZG93biB0aGUgbGluZSwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLiBJdCYjMzk7cyBwcm9wZXJseSBzZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHYCBhbmQgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIFRoZXkgYWxzbyBzZWVtIHRvIGJlIHVubG9ja2luZyB0aGUgbG9jayBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIGVycm9yLCB3aGljaCBpcyBjcnVjaWFsLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAsIGl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrIG9yIGFuIEFQSSBhbHRlcmF0aW9uIGJ1dCBhIHN0cmFpZ2h0Zm9yd2FyZCB2YWxpZGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBLY29uZmlnIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBvZiBjb3Vyc2UsIHRvIGVuc3VyZSB0aGUgZ2F0ZSBhY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYCBhbmQgS2NvbmZpZyB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhhdCBubyBuZXcgZGVwZW5kZW5jaWVzIHdlcmUgaW50cm9kdWNlZCBoZXJlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2F0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cdC5kdW1wXHRcdD1cdHRjZl9nYXRlX2R1bXAsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTA6XHQuaW5pdFx0XHQ9XHR0Y2ZfZ2F0ZV9pbml0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzUxLVx0LmNsZWFudXBcdD1cdHRjZl9nYXRlX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBgYWN0X2dhdGVgIENvZGViYXNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y2ZfZ2F0ZV9pbml0YC4uLiBhaCB5ZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgYWN0X2dhdGVfb3BzYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBnYXRlIG1lY2hhbmlzbSBpcyBjb25maWd1cmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYWN0X2dhdGUuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBkZWZpbmVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBwcmVyZXF1aXNpdGVzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1QpXHQmIzQzOz0gYWN0X2N0Lm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTkVUX0FDVF9HQVRFKVx0JiM0Mzs9IGFjdF9nYXRlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX1NDSF9GSUZPKVx0JiM0Mzs9IHNjaF9maWZvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBORVRfQUNUX0dBVEVgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBzZXR0aW5ncywgbW9kdWxlcywgb3IgcHJlY29uZGl0aW9ucyByZWx5IG9uIGBORVRfQUNUX0dBVEVgIGJlaW5nIGRlZmluZWQgb3Igc2V0IHRvIGEgcGFydGljdWxhciB2YWx1ZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzLiBBIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHJvYnVzdCBjb25maWd1cmF0aW9uIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORVRfQUNUX0dBVEUgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgTkVUX0FDVF9HQVRFYCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciB0aGUgb2J2aW91czogaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt0cmlja3kgYml0cyYjMzQ7IOKAkyBhcmUgdGhlcmUgYW55IG9ic2N1cmUgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGltcGFjdCBvbiBvdGhlciBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGl0IGhhcyBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBsaW5rcyBhc3NvY2lhdGVkIHdpdGggdGhlIEtjb25maWcsIHNvIHRoYXQgSSBjYW4gZ28gb3ZlciBpdCBsYXRlciBvbi4gVGhlbiwgSSYjMzk7bGwgYXNzZXNzIGl0cyBvdmVyYWxsIGltcG9ydGFuY2UgYW5kIHNjb3BlLiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBpbmZsdWVuY2Ugc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVW5kZXJzdGFuZGluZyB0aGUgZ2F0aW5nIG9wdGlvbnMgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG5ldHdvcmsgdHJhZmZpYyBmbG93IGJhc2VkIG9uIHZhcmlvdXMgcGFyYW1ldGVycy4gSXMgdGhpcyBhIHNpbXBsZSBiaW5hcnkgY2hvaWNlICh5ZXMvbm8pLCBvciBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBhbGxvdyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbD8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBkZWZhdWx0IHNldHRpbmdzLiBGaW5hbGx5LCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkyNjpcdFxuIDkyNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG4gOTI5Olx0XG4gOTMwOlx0Y29uZmlnIE5FVF9BQ1RfR0FURVxuIDkzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4gOTMyOlx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTMzOlx0XHRoZWxwXG4gOTM0Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdG8gY29udHJvbCB0aGUgaW5ncmVzcyBmbG93IHRvIGJlIHBhc3NlZCBhdFxuIDkzNTpcdFx0ICBzcGVjaWZpYyB0aW1lIHNsb3QgYW5kIGJlIGRyb3BwZWQgYXQgb3RoZXIgc3BlY2lmaWMgdGltZSBzbG90IGJ5XG4gOTM2Olx0XHQgIHRoZSBnYXRlIGVudHJ5IGxpc3QuXG4gOTM3Olx0XG4gOTM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTM5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5NDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9nYXRlLlxuIDk0MTpcdFxuIDk0MjpcdGNvbmZpZyBORVRfSUZFX1NLQk1BUktcbiA5NDM6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgdG8gZW5jb2RpbmcgZGVjb2Rpbmcgc2tiIG1hcmsgb24gSUZFIGFjdGlvblwmIzM0O1xuIDk0NDpcdFx0ZGVwZW5kcyBvbiBORVRfQUNUX0lGRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDA5CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQWN0aW9uIEdhdGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGRlcGVuZGVuY2llcyBoZXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBORVRfQ0xTX0FDVGAuIEkgY2FuIHNlZSBJIG5lZWQgYm90aCBgTkVUX0FDVF9HQVRFYCBhbmQgYE5FVF9DTFNfQUNUYCB0byBnZXQgdGhpcyB0aGluZyBvZmYgdGhlIGdyb3VuZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRjZl9nYXRlX2luaXRgIGZ1bmN0aW9uLCBmaWd1cmluZyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgYGluaXRgIHByb2Nlc3MuCgpBaCwgd2FpdCBhIHNlY29uZC4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLiBTdGF0aWMgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaWRlYWwgYXMgZm9jdXMgc3ltYm9scyBzaW5jZSB0aGV5IGhhdmUgbGltaXRlZCBzY29wZS4gSG1tLCBidXQuLi4gSSBkbyByZW1lbWJlciBpdCBiZWluZyBhbiBBUEkgZW50cnlwb2ludCBmb3IgYGluaXRgIHdpdGhpbiBgdGNfYWN0aW9uX29wc2AsIHNvIGl0IGlzIG9uIHRoZSByYWRhci4KCkxldCBtZSB0YWtlIGEgc3RlcCBiYWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB3aXRoaW4gYGFjdF9nYXRlLmNgLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgbW9yZSBhY2Nlc3NpYmxlIGZ1bmN0aW9uIGluIHRoZXJlIHRoYXQgSSBjYW4gdXNlIGFzIGEgYmV0dGVyIHBvaW50IG9mIGF0dGFjay4gSSYjMzk7bGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzOyBbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMgoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYWN0X2dhdGUuY2AgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBhY3RfZ2F0ZS5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGp1c3QgcmFuZG9tbHkgYnJvd3NpbmcsIEkgd2FudCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzIGdvaW5nIG9uIHdpdGggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcG90ZW50aWFsbHkgaGF2ZSBicm9hZGVyIHNjb3BlIGFuZCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNvLCBsZXQmIzM5O3MgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhvc2UuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCYjMzk7cy1leWUgdmlldywgYXQgbGVhc3QgaW5pdGlhbGx5LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYSBtYW5hZ2VhYmxlIGxpc3QgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRXhwb3J0ZWQgRnVuY3Rpb25zOiBBIFByYWdtYXRpYyBBcHByb2FjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyBjbGVhcjogcGlucG9pbnQgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgb3IgbW9yZSBnZW5lcmFsbHksIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSB0aGUgc2ltcGxlc3Qgcm91dGUgZmlyc3QuIExldCYjMzk7cyBqdXN0IGRpdmUgcmlnaHQgaW50byByZWFkaW5nIHRoZSBmaWxlIGl0c2VsZi4gVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3Mgd2l0aCBpbnRyaWNhdGUgcGFyc2luZyBvciByZWx5aW5nIG9uIGV4dGVybmFsIHRvb2xzIHJpZ2h0IG9mZiB0aGUgYmF0LiBBIGRpcmVjdCBzY2FuLCBwZXJoYXBzIHdpdGggc29tZSBiYXNpYyBwYXR0ZXJuIG1hdGNoaW5nLCBpcyBsaWtlbHkgc3VmZmljaWVudCB0byBpZGVudGlmeSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHRoZSB0ZWxsdGFsZSBzaWduczogZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEl0JiMzOTtzIGEgcHJhZ21hdGljLCAmIzM0O3NlZSB3aGF0IHdlIGNhbiBmaW5kIHF1aWNrbHkmIzM0OyBhcHByb2FjaC4gV2UgY2FuIGFsd2F5cyByZWZpbmUgdGhlIHNlYXJjaCBsYXRlciBpZiB0aGlzIGluaXRpYWwgc3dlZXAgZG9lc24mIzM5O3QgeWllbGQgdGhlIHJlc3VsdHMgd2UmIzM5O3JlIGV4cGVjdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgR2F0ZSBBY3Rpb24gQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlICYjMzQ7Z2F0ZSYjMzQ7IGFjdGlvbiwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29kZSB0aGF0IHJlbGF0ZSB0byB0aGlzICYjMzQ7Z2F0ZSYjMzQ7IGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0YXJnZXRpbmcgbGluZXMgdGhhdCBsaWtlbHkgZGVjbGFyZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIHRoYXQgYXJlIGNlbnRyYWwgdG8gdGhpcyBnYXRlIGJlaGF2aW9yLgoKVG8gZG8gdGhpcyBlZmZpY2llbnRseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBwYXR0ZXJucyB0aGF0IGFyZSBjb21tb25seSB1c2VkIGluIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYF5pbnQgYCwgYF52b2lkIGAsIGFuZCBgXnN0YXRpYyBgLiBUaGVzZSBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIHRvIGlkZW50aWZ5IGludGVnZXItcmV0dXJuaW5nIGZ1bmN0aW9ucyBvciB2b2lkLXJldHVybmluZyBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgc3RhdGljIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHJlbGV2YW50LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3IGFuZCBoZWxwIG5hcnJvdyBteSBmb2N1cyB3aXRoaW4gdGhhdCBjb2RlIGJhc2UuIE9uY2UgSSBoYXZlIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JlcCwgSSBjYW4gcXVpY2tseSBob21lIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0xNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhdGVfcG9saWN5W1RDQV9HQVRFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxODE6c3RhdGljIGludCBmaWxsX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4Mi1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA1LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjA2OnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICpuLCBzdHJ1Y3QgIHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMDctXHRcdFx0ICAgIGludCBpbmRleCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIyMz1zdGF0aWMgdm9pZCByZWxlYXNlX2VudHJ5X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZW50cmllcylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMzM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjM0LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNyYyxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yNjEtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyNjI6c3RhdGljIGludCBwYXJzZV9nYXRlX2xpc3Qoc3RydWN0IG5sYXR0ciAqbGlzdF9hdHRyLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVx0XHRcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMwNz1zdGF0aWMgYm9vbCBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbCh1NjQgYmFzZXRpbWUsIHU2NCBvbGRfYmFzZXRpbWUsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzE2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzE3OnN0YXRpYyBpbnQgZ2F0ZV9jbG9ja19yZXNvbHZlKHMzMiBjbG9ja2lkLCBlbnVtIHRrX29mZnNldHMgKnRrbyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTU3MT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTgyOnN0YXRpYyBpbnQgZHVtcGluZ19lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgzLVx0XHRcdCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2MTM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTQtXHRcdFx0IGludCBiaW5kLCBpbnQgcmVmKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTY5NT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9lbnRyeV9kZXN0cnVjdG9yKHZvaWQgKnByaXYpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXHRcdFx0XHQgICAgICB1MzIgKmluZGV4X2luYywgYm9vbCBiaW5kLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzctXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgZ2F0ZV9pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBmb3IgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoaXMgY29kZSBmb3IgdGhlIHByZXNlbmNlIG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMsIGFuZCB0aGUgc3BlY2lmaWMgbW90aXZhdGlvbnMgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggaXQuIEFyZSB3ZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdGhyZWFkIHNhZmV0eSBpc3N1ZXM/IE9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgd2l0aGluIGEgbGFyZ2VyIGRlc2lnbj8gTWF5YmUgZXZlbiBzZWFyY2hpbmcgZm9yIG9wcG9ydHVuaXRpZXMgdG8gcmVmYWN0b3IgYW5kIG9wdGltaXplIGFyb3VuZCBzaGFyZWQgc3RhdGU/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIG5vbi1zdGF0aWMgbWV0aG9kcyB3aWxsIGRpY3RhdGUgdGhlIG5leHQgc3RlcHMgaW4gbXkgYW5hbHlzaXMsIGFuZCBJ4oCZbGwgYmUgdHVuaW5nIG15IGFwcHJvYWNoIGFjY29yZGluZ2x5LiBUaGlzIHNlZW1zIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXJ0aW5nIHBvaW50LCBhIGJhc2ljIGJ1dCBlc3NlbnRpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIGJlZm9yZSBJIGNhbiBkZXZlbG9wIGFuIGluLWRlcHRoIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFjdF9nYXRlLmNgIE1vZHVsZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIG1vZHVsZS4gSG1tLCBpbml0aWFsbHksIEkgd2FzIGFzc3VtaW5nIGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgd2VyZSBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBldmVuIGBnYXRlX2luaXRfbW9kdWxlYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gQWgsIHllcywgY29uZmlybWVkIGJ5IGBtb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKWAuIFRoaXMgbWVhbnMgd2UgY2FuJiMzOTt0IGRpcmVjdGx5IGV4cG9ydCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSB0aGlzIG1vZHVsZSwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIHVzdWFsbHkgZXhwZWN0IHdoZW4gZGVhbGluZyB3aXRoIG1vZHVsZSBpbml0LiBCdXQgaGFuZyBvbi4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGlzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBhY3RfZ2F0ZS5jYD8gR290dGEgZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGFjdF9nYXRlLmNgIGZvciBQdWJsaWMgSW50ZXJmYWNlIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgZmlsZS4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQsIGFuZCB0aGUgdGhpbmcgSSYjMzk7bGwgdXN1YWxseSBjaGVjayBmaXJzdCwgaXMgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgKmFyZW4mIzM5O3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiAgVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGNvbmZpbmVzIG9mIHRoYXQgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGZvbGxvd2VkIHJlYXNvbmFibHkgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGhlcmUsIHNvIHRoYXQgYW55dGhpbmcgbWVhbnQgdG8gYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UgaXMgZGVjbGFyZWQgd2l0aG91dCBgc3RhdGljYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZGluZyB3aGF0IGhvb2tzIGFyZSBhdmFpbGFibGUuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc3RhcnQgc2Nhbm5pbmcuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16XSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcztcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjE6c3RhdGljIGt0aW1lX3QgZ2F0ZV9nZXRfdGltZShzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMi17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Mzc6c3RhdGljIHZvaWQgZ2F0ZV9nZXRfc3RhcnRfdGltZShzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zOC1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnBhcmFtLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTg6c3RhdGljIHZvaWQgZ2F0ZV9zdGFydF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIGt0aW1lX3Qgc3RhcnQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01OS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0xMjI9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE1My1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE1NDpvdmVybGltaXQ6XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTUtXHR0Y2ZfYWN0aW9uX2luY19vdmVybGltaXRfcXN0YXRzKFx1MDAyNmdhY3QtXHUwMDNlY29tbW9uKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE1Njpkcm9wOlxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTU3LVx0dGNmX2FjdGlvbl9pbmNfZHJvcF9xc3RhdHMoXHUwMDI2Z2FjdC1cdTAwM2Vjb21tb24pO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2MC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE2MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZW50cnlfcG9saWN5W1RDQV9HQVRFX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2Mi1cdFtUQ0FfR0FURV9FTlRSWV9JTkRFWF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2OC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZ2F0ZV9wb2xpY3lbVENBX0dBVEVfTUFYICYjNDM7IDFdID0ge1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTcwLVx0W1RDQV9HQVRFX1BBUk1TXVx0XHQ9XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTgxOnN0YXRpYyBpbnQgZmlsbF9nYXRlX2VudHJ5KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODItXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwNS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIwNjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqbiwgc3RydWN0ICB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA3LVx0XHRcdCAgICBpbnQgaW5kZXgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMjM6c3RhdGljIHZvaWQgcmVsZWFzZV9lbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzMi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIzMzpzdGF0aWMgaW50IHRjZl9nYXRlX2NvcHlfZW50cmllcyhzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpkc3QsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc3JjLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yNjMtXHRcdFx0ICAgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc2NoZWQsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzAwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzAxOnJlbGVhc2VfbGlzdDpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMi1cdHJlbGVhc2VfZW50cnlfbGlzdChcdTAwMjZzY2hlZC1cdTAwM2VlbnRyaWVzKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zMDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDc6c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzA4LVx0XHRcdFx0ICAgIGVudW0gdGtfb2Zmc2V0cyB0a28sXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzE2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzE3OnN0YXRpYyBpbnQgZ2F0ZV9jbG9ja19yZXNvbHZlKHMzMiBjbG9ja2lkLCBlbnVtIHRrX29mZnNldHMgKnRrbyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzM4LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzM5OnN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0MC1cdFx0XHQgICAgIGVudW0gdGtfb2Zmc2V0cyB0a28pXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0OC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1NDY6ZXJyX2ZyZWU6XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDctXHRyZWxlYXNlX2VudHJ5X2xpc3QoXHUwMDI2cC1cdTAwM2VlbnRyaWVzKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU0OC1cdGtmcmVlKHApO1xubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTQ5OmNoYWluX3B1dDpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU1MC1cdGlmIChnb3RvX2NoKVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTUxLVx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU1MjpyZWxlYXNlX2lkcjpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU1My1cdC8qIGFjdGlvbiBpcyBub3QgaW5zZXJ0ZWQgaW4gYW55IGxpc3Q6IGl0JiMzOTtzIHNhZmUgdG8gaW5pdCBoaXRpbWVyXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTYyLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTYzOnN0YXRpYyB2b2lkIHRjZl9nYXRlX3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NjQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3MC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU3MTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzIte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4MjpzdGF0aWMgaW50IGR1bXBpbmdfZW50cnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4My1cdFx0XHQgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NjA4Om5sYV9wdXRfZmFpbHVyZTpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYwOS1cdG5sYV9uZXN0X2NhbmNlbChza2IsIGl0ZW0pO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxMi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYxMzpzdGF0aWMgaW50IHRjZl9nYXRlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxNC1cdFx0XHQgaW50IGJpbmQsIGludCByZWYpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjczLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njc0Om5sYV9wdXRfZmFpbHVyZTpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY3NS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY3OS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MDpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY4MS1cdFx0XHRcdCAgdTY0IGRyb3BzLCB1NjQgbGFzdHVzZSwgYm9vbCBodylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODktXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2OTA6c3RhdGljIHNpemVfdCB0Y2ZfZ2F0ZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5MS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjk0LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njk1OnN0YXRpYyB2b2lkIHRjZl9nYXRlX2VudHJ5X2Rlc3RydWN0b3Iodm9pZCAqcHJpdilcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5Ni17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXHRcdFx0XHQgICAgICB1MzIgKmluZGV4X2luYywgYm9vbCBiaW5kLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0My1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0NDpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ1LVx0LmtpbmRcdFx0PVx0XCYjMzQ7Z2F0ZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NTc9TU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7Z2F0ZVwmIzM0Oyk7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NTgtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTk6c3RhdGljIF9fbmV0X2luaXQgaW50IGdhdGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzYwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NjUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NjY6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBnYXRlX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzY3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NzE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBnYXRlX25ldF9vcHMgPSB7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzItXHQuaW5pdCA9IGdhdGVfaW5pdF9uZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Nzc4OnN0YXRpYyBpbnQgX19pbml0IGdhdGVfaW5pdF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3OS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzgyLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzgzOnN0YXRpYyB2b2lkIF9fZXhpdCBnYXRlX2NsZWFudXBfbW9kdWxlKHZvaWQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03ODQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc4Ny1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4ODptb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4OTptb2R1bGVfZXhpdChnYXRlX2NsZWFudXBfbW9kdWxlKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc5MC1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7VEMgZ2F0ZSBhY3Rpb25cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRjZl9nYXRlX2FjdGAgVmFyaWFibGUqKgoKT2theSwgc28gYHRjZl9nYXRlX2FjdGAgaXMgKm5vdCogYSBzdGF0aWMgdmFyaWFibGUsIHdoaWNoIGluaXRpYWxseSB0aHJldyBtZSBmb3IgYSBsb29wLiBCdXQgaGFuZyBvbiwgSSBzZWUgaXQmIzM5O3MgZGVjbGFyZWQgd2l0aCBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdGAuICBgVENfSU5ESVJFQ1RfU0NPUEVgIHR5cGljYWxseSBpbXBsaWVzIHNvbWV0aGluZyBsaWtlIGBfX21heWJlX3VudXNlZGAgb3IgYSBzaW1pbGFyIGNvbXBpbGVyIGhpbnQgdG8gcG90ZW50aWFsbHkgcHJldmVudCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGl0JiMzOTtzICphcHBsaWVkIHRvIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiouCgpUaGF0IGNvbWJpbmF0aW9uIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGlzIHBlY3VsaWFyaXR5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgYHRjZl9nYXRlX2FjdGAgaXMgZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZ2F0ZSYjMzk7cyBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9nYXRlX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jPTcxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEyMjpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhdGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMjMtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ny1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0ODpcdC5hY3RcdFx0PVx0dGNmX2dhdGVfYWN0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ5LVx0LmR1bXBcdFx0PVx0dGNmX2dhdGVfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB0Y2ZfZ2F0ZSBDb2RlIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYHRjZl9nYXRlX2FjdGAgaXMgY2xlYXJseSB0aGUgbWFpbiBgLmFjdGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBob3QgcGF0aCBmb3IgdGhlIFRDIGFjdGlvbi4gQnV0IHRoZSBhY3R1YWwgY2hhbmdlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBsaWVzIHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAuIFdhaXQsIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBzdGF0aWMuLi4gYnV0IGl0ICppcyogdGhlIGAuaW5pdGAgZnVuY3Rpb24gZm9yIGBhY3RfZ2F0ZV9vcHNgLCBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gSW50ZXJlc3RpbmcuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuCgpTbywgaW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgdXNpbmcgYHRjZl9nYXRlX2FjdGAgYXMgYSBmb2N1cyBzeW1ib2wgb3IgZXZlbiBub3Qgc3BlY2lmeWluZyBhIGZvY3VzIHN5bWJvbCBhdCBhbGwgZ2l2ZW4gdGhlIGxhY2sgb2YgZ29vZCBjYW5kaWRhdGVzLiBIb3dldmVyLCBgdGNmX2dhdGVfYWN0YCBpcyBhICpob3QgcGF0aCogZnVuY3Rpb24sIGNhbGxlZCBmb3IgZXZlcnkgcGFja2V0LiBXZSBkZWZpbml0ZWx5IGRvbiYjMzk7dCB3YW50IHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cyB0aGVyZTsgdGhhdCYjMzk7cyBnZW5lcmljLiBTaW5jZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBub24tc3RhdGljLCBub24taG90LXBhdGggZnVuY3Rpb25zIHRvIGNvbnNpZGVyLCBpdCBsb29rcyBsaWtlIHdlIGNhbiBsZWF2ZSBgRm9jdXNTeW1ib2xzYCBlbXB0eS4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgaXMgYHRjZl9nYXRlX2luaXRgIHJlYWNoYWJsZT8gWWVzLCB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoYXQmIzM5O3MgZ29vZC4KCkFscmlnaHQsIHRoZSBjaGFuZ2UgaXRzZWxmLi4uIEFoLCBoZXJlIGl0IGlzOiBhIGNydWNpYWwgdmFsaWRhdGlvbiBjaGVjayBvbiBgY3ljbGV0aW1lYC4gSXQgbm93IGNoZWNrcyBpZiBgY3ljbGV0aW1lYCBpcyB3aXRoaW4gdGhlIHJhbmdlIDAgdG8gYElOVF9NQVhgLCBhbmQgdGhyb3dzIGFuIGVycm9yIGlmIG5vdC4gVGhpcyBsb29rcyBsaWtlIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBjbGVhciBlcnJvciBoYW5kbGluZy4gV2UmIzM5O2xsIGJlIGFibGUgdG8gY3JlYXRlIGludGVyZXN0aW5nIHRlc3QgY2FzZXMgYnkgZ2VuZXJhdGluZyB2YWx1ZXMgb2YgYGN5Y2xldGltZWAgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlIG5lZWQgYm90aCBgTkVUX0FDVF9HQVRFYCBhbmQgYE5FVF9DTFNfQUNUYC4gSXQgaXMgYSBnb29kIHRoaW5nIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgZmlyc3Qgb25lIGlzIGVub3VnaC4gWWVzLCBgTkVUX0FDVF9HQVRFYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAuIFRoZXJlZm9yZSB3ZSB3aWxsIHJldHVybiBib3RoLiBOb3csIGxldCBtZSBjaGVjayBhZ2FpbiBpZiB3ZSBuZWVkIHRvIGluY2x1ZGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5FVF9DTFNfQUNUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQ0xTX0FDVGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgbW9kdWxlIGZ1bmN0aW9ucyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgZXhpc3RpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byB0aGlzIG1vZHVsZSBhbmQgc2VlIHdoZXJlIHRoZXkgb3JpZ2luYXRlLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIHJlbGllcyBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgY29tcG9uZW50cywgb3IgYXJlIHRoZXJlIGFueSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBpbnZvbHZlZD8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYXMgd2VsbCwgb2J2aW91c2x5LiBUaG9zZSBhcmUgYWx3YXlzIGEgaGVhZGFjaGUgYW5kIGNhbiBjYXVzZSByZWFsbHkgZGlmZmljdWx0LXRvLWRlYnVnIHByb2JsZW1zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIHZlcnNpb24gbnVtYmVycyBhcmUgY29tcGF0aWJsZSwgZXNwZWNpYWxseSBpZiB0aGlzIHV0aWxpemVzIGFueSB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga25vd24gYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIGRlcGVuZGVuY2llcy4gQSBnb29kIGRlcGVuZGVuY3kgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgYWdhaW4uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBORVRfQ0xTX0FDVGAuIFRoZSBuYW1lIGFsb25lIHNjcmVhbXMgJiMzNDtuZXR3b3JrIGNsYXNzaWZpY2F0aW9uIGFuZCBhY3Rpb24sJiMzNDsgYnV0IHRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8gbmF2aWdhdGUgdG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSXQmIzM5O3MgS2NvbmZpZyBmb3IgYSByZWFzb247IHRoaXMgZmlsZSAqaGFzKiB0byBob2xkIHRoZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIHVucmF2ZWwuIFVuZGVyc3RhbmRpbmcgaG93IGBORVRfQ0xTX0FDVGAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCBleGFjdGx5IHdoYXQgaXQgZG9lcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyAqdXNlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdGhlIHNwZWNpZmljcyBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyByZWxldmFudCB0byBteSBzcGVjaWZpYyBwcm9qZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHQgIG1hdGNoZXMuXG4gNjk2Olx0XHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFwmIzM0O3BvbGljeVwmIzM0OyB3aGljaCBhbGxvd3MgcGFja2V0IGNsYXNzaWZpY2F0aW9uXG4gNjk3Olx0XHQgIGJhc2VkIG9uIElQc2VjIHBvbGljeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBkZWNhcHN1bGF0aW9uXG4gNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCBhbmQgSSBub3RpY2UgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbiBleHBsaWNpdCBgZGVwZW5kcyBvbmAgZW50cnkgaW4gaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSBhbHdheXMgbG9vayBmb3IgdGhvc2UuIEJ1dCB0aGVuIEkgc2VlIHRoYXQgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gQWxyaWdodCwgdGltZSB0byBnbyBjaGVjayBgTkVUX1NDSEVEYCYjMzk7cyBjb25maWd1cmF0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyBpdHMgaW5jbHVzaW9uLCBhbmQgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSwgaW5kaXJlY3RseSwgdGhlIGluY2x1c2lvbiBvZiBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbG9naWMgY2hhaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBORVRfU0NIRUQgS2NvbmZpZyBFbnRyeSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9TQ0hFRGAgS2NvbmZpZyBlbnRyeSB3aXRoaW4gYG5ldC9zY2hlZC9gLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIGFuZCBrbm93IHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZT8gRG9lcyBpdCBtYWtlIHVzZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgdGVjaG5vbG9naWVzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiB0aGUgbG9naWMgYmVoaW5kIGl0cyBkZWZhdWx0IHNldHRpbmcuIFdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBtYWtlIHVzIHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQ/IEkmIzM5O2xsIHdhbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gb24gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHVzYWdlLiBLbm93aW5nIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBzZXR0aW5nIGlzIGNyaXRpY2FsIGZvciBmaW5lLXR1bmluZyBvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX1NDSEVEIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfU0NIRURgIGlzIGEgcmVxdWlyZWQgY29tcG9uZW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXM7IG5vdGhpbmcgaXMgd29yc2UgdGhhbiBoYXZpbmcgc29tZXRoaW5nIGZhaWwgYmVjYXVzZSBhIHByZS1yZXF1aXNpdGUgaXNuJiMzOTt0IHNhdGlzZmllZC4gSG1tLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIG5vIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGp1c3QgYSB0b3AtbGV2ZWwgYG1lbnVjb25maWdgIG9wdGlvbi4gV2FpdCBhIHNlY29uZCwgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBBaCwgaXQgbGl2ZXMgaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIG5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgZWxzZSBJIGNhbiBnbGVhbiBmcm9tIHRoZXJlLiBJIGhhdmUgdG8gc2VlIGhvdyBgTkVUX1NDSEVEYCBpcyBjb25uZWN0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNjk9c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcJiMzNDtuZXQvc2NoZWQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjcxLXNvdXJjZSBcJiMzNDtuZXQvZGNiL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvS2NvbmZpZ2AsIGFuZCB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGxpbmUgYHNvdXJjZSAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDtgLiBQcmV0dHkgc3RhbmRhcmQgS2NvbmZpZyBzdHVmZiwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGtleS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBlbnN1cmUgSSYjMzk7dmUgZ290IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGluIG1pbmQuIFdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGBuZXQvc2NoZWQvS2NvbmZpZ2AgaW50cm9kdWNlIHdpdGhpbiB0aGUgbGFyZ2VyIGBuZXQvYCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaG93IHRoaXMgaW5jbHVzaW9uIGFmZmVjdHMgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdoYXQgb3B0aW9ucyBpdCBwb3RlbnRpYWxseSB1bmxvY2tzIChvciByZXN0cmljdHMpLgoKU28sIGxldCBtZSB6b29tIGluIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIGZpbGVzLCBvciBleHRlcm5hbCB2YXJpYWJsZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBpbmNsdXNpb24sIG9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiBEb2VzIGBuZXQvc2NoZWQvS2NvbmZpZ2AgaW50cm9kdWNlIG5ldyBzeW1ib2xzIG9yIHJlZGVmaW5lIGV4aXN0aW5nIG9uZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgaW5jbHVkZXMgb3IgZXhjbHVzaW9ucyBkZXBlbmRlbnQgb24gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbj8gVGhpcyBpcyBhbGwgYWJvdXQgZWZmaWNpZW50bHkgbWFwcGluZyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIGludGVncmF0ZWQuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYG5ldC9zY2hlZC9LY29uZmlnYCBleHBhbmRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgc2NoZWR1bGluZy4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG4gMjYxOlx0c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuIDI2MjpcdHNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xuIDI2MzpcdHNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbiAyNjQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG4gMjY1Olx0c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbiAyNjY6XHRzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG4gMjY3Olx0c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAyNjg6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDI2OTpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbiAyNzA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbiAyNzE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4gMjcyOlx0c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xuIDI3MzpcdHNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG4gMjc0Olx0c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG4gMjc1Olx0c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xuIDI3NjpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4gMjc3Olx0c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbiAyNzg6XHRzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG4gMjc5Olx0c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZzogVGhlIHRjZl9nYXRlX2luaXQgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JraW5nIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGEgZ29vZCBzcG90IGZvciBmdXp6aW5nLiBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGF0ZWQgdG8gdGhlIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJ1cmllZCBpbnNpZGUgdGhlIGBtZW51ICYjMzQ7TmV0d29ya2luZyBvcHRpb25zJiMzNDtgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVwZW5kZW50IG9uIGBORVRgLiBUaGVyZWZvcmUsIGl04oCZcyByZWxhdGVkIHRvIGBORVRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGBORVRfQUNUX0dBVEVgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgYHRjZl9nYXRlX2luaXRgLiBNeSBmb2N1cyBoYWQgYmVlbiBvbiBmaW5kaW5nIGEgc3VpdGFibGUgZW50cnkgcG9pbnQsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBBdCBmaXJzdCwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGJlY2F1c2UgYHRjZl9nYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSB3YXMgd29ycmllZCB0aGlzIG1pZ2h0IG1lYW4gaXQgd291bGQgYmUgaW5saW5lZCBhbmQgd291bGRuJiMzOTt0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiB0aGUga2VybmVsIGltYWdlLCB3aGljaCB3b3VsZCBtYWtlIGl0IGxlc3MgaWRlYWwgZm9yIGZ1enppbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGFkZHJlc3Mgb2YgYHRjZl9nYXRlX2luaXRgIGlzIGFjdHVhbGx5IHRha2VuISBJdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgLgoKVGhpcyBpcyB0aGUga2V5LiBTaW5jZSBhIHN0YXRpYyBmdW5jdGlvbiBoYXMgaXRzIGFkZHJlc3MgdGFrZW4sIHRoZSBjb21waWxlciAqbXVzdCogZ2VuZXJhdGUgYSBkaXN0aW5jdCBmdW5jdGlvbiBmb3IgaXQuIFRoYXQgbWVhbnMgYHRjZl9nYXRlX2luaXRgICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2whIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGFzc3VtcHRpb24gdGhvdWdoLiBZZXMsIGNvbmZpcm1lZC4gV2hlbiBhIHN0YXRpYyBmdW5jdGlvbuKAmXMgYWRkcmVzcyBpcyB1c2VkLCB0aGUgY29tcGlsZXIgbXVzdCBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGVyZSYjMzk7cyBhIHBvaW50ZXIgdG8gaXQuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGFkZGluZyBgdGNmX2dhdGVfaW5pdGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYWRkaW5nIHZhbGlkYXRpb24gdG8gYGN5Y2xldGltZWAgd2l0aGluIGB0Y2ZfZ2F0ZV9pbml0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoaXMgc291bmRzIGxpa2UgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuCgpNeSBjb25maWcgcmVxdWlyZW1lbnRzIGFyZTogYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAuIE15IGBGb2N1c1N5bWJvbHNgIGlzIGB0Y2ZfZ2F0ZV9pbml0YC4gVGltZSB0byBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGF0IGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0zMzk9c3RhdGljIHZvaWQgZ2F0ZV9zZXR1cF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIHMzMiBjbG9ja2lkLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0Ni1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ5LVx0LmR1bXBcdFx0PVx0dGNmX2dhdGVfZHVtcCxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcdC5pbml0XHRcdD1cdHRjZl9nYXRlX2luaXQsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NTEtXHQuY2xlYW51cFx0PVx0dGNmX2dhdGVfY2xlYW51cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTUKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgLmluaXQgPSB0Y2ZfZ2F0ZV9pbml0YCBpcyBjb3JyZWN0LiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0IHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBMZXQmIzM5O3MgdHJhY2UgdGhlc2UgZGVwZW5kZW5jaWVzLiBJIHNlZSBgTkVUX0FDVF9HQVRFYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAuIEFuZCBsb29raW5nIGZ1cnRoZXIsIGBORVRfQ0xTX0FDVGAgaXMgcGFydCBvZiBgTkVUX1NDSEVEYC4gRmluYWxseSwgYE5FVF9TQ0hFRGAgYmVsb25ncyB0byBgTkVUYC4gQWxyaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAgYXJlIGFsbCBjb3JyZWN0bHkgY29uZmlndXJlZC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2dhdGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGV4Y2VlZCBgSU5UX01BWGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgYSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIChlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIG5ldGxpbmsgYXR0cmlidXRlcyBvciBjYWxjdWxhdGVkIGZyb20gZW50cnkgaW50ZXJ2YWxzKSBjYW4gY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2FuIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCwgY2F1c2luZyB0aGUgaHJ0aW1lciB0byBiZSBzZXQgaW4gdGhlIHBhc3QgYW5kIHRyaWdnZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBvZiB0aW1lciBpbnRlcnJ1cHRzIChhIERlbmlhbCBvZiBTZXJ2aWNlIGJ1ZykuXG5cblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3YjllMGJiNWVkNGI1NDBhNDMxNDI4YzAyY2U0NDgzMzc0YzljYzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jIGIvbmV0L3NjaGVkL2FjdF9nYXRlLmMKaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9nYXRlLmMKQEAgLTUwMSw2ICYjNDM7NTAxLDE0IEBAIHN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAkJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwogCQljeWNsZXRpbWUgPSBjeWNsZTsKIAl9CiYjNDM7CiYjNDM7CWlmIChjeWNsZXRpbWUgJmx0OyAwIHx8IGN5Y2xldGltZSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Z2FjdC0mZ3Q7dGNmX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwogCXAtJmd0O3RjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lOwogCXAtJmd0O3RjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY3RfR2F0ZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdmVyaWZ5aW5nIGlmIGBjeWNsZXRpbWVgIGZhbGxzIHdpdGhpbiBhIHJlYXNvbmFibGUgcmFuZ2UgKDAgdG8gYElOVF9NQVhgKS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBsb2dpYyBvciBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gVGhlIGNoZWNrIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIGBjeWNsZXRpbWVgIGlzIG5lZ2F0aXZlIG9yIGV4Y2VlZHMgYElOVF9NQVhgLCBhbiBlcnJvciBpcyB0cmlnZ2VyZWQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRhdGEgdHlwZSBvZiBgY3ljbGV0aW1lYD8mIzM0OyBJIHJlY2FsbCB0aGF0IGBrdGltZV9hZGRfbnNgIHJldHVybnMgYSBga3RpbWVfdGAsIHdoaWNoLCBJIGJlbGlldmUsIHJlc29sdmVzIHRvIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBvciBwb3NzaWJseSBhbiB1bnNpZ25lZCBvbmUgaW4gc29tZSBjb250ZXh0cy4gU28sIGBjeWNsZXRpbWVgIGlzIGxpa2VseSBhbiBgczY0YCBvciBgdTY0YC4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgY29uY2VybiBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIGBjeWNsZXRpbWVgIGZyb20gdmVudHVyaW5nIGJleW9uZCB0aGVzZSBkZWZpbmVkIGJvdW5kcy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBzaW1wbHkgYSB2YWxpZGF0aW9uIHN0ZXAuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsd2F5cyBwcnVkZW50IHRvIGRvdWJsZS1jaGVjayBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBlcnJfZnJlZWAgcGF0aCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBzdGF0ZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zIGlmIHRoZSBjaGVjayBmYWlscy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZW5zdXJlIHRoaXMgY2hlY2sgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMsIGV2ZW4gaWYgaXQgYWltcyB0byBmaXggb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2F0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cdC5kdW1wXHRcdD1cdHRjZl9nYXRlX2R1bXAsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTA6XHQuaW5pdFx0XHQ9XHR0Y2ZfZ2F0ZV9pbml0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzUxLVx0LmNsZWFudXBcdD1cdHRjZl9nYXRlX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHBsYWNlIHdoZXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgZ2F0ZSBpbml0aWFsaXphdGlvbiBiZWdpbnMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiDigJMgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIHJlc29sdmVkLiBUaGlzIGluaXRpYWwgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGhpZ2gtbGV2ZWwgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc3RhcnQgZXhhbWluaW5nIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgb3V0c2V0LCB0byBkZXRlcm1pbmUgaG93IHRoZSBgZ2F0ZWAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDc6XHRzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gMzQ4Olx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4gMzQ5Olx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1MzIgZmxhZ3MsXG4gMzUwOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzNTE6XHR7XG4gMzUyOlx0XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9nYXRlX29wcy5uZXRfaWQpO1xuIDM1MzpcdFx0dTY0IGN5Y2xldGltZSA9IDAsIGJhc2V0aW1lID0gMCwgY3ljbGV0aW1lX2V4dCA9IDA7XG4gMzU0Olx0XHRzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwID0gTlVMTCwgKm9sZF9wID0gTlVMTDtcbiAzNTU6XHRcdGVudW0gdGtfb2Zmc2V0cyBvbGRfdGtfb2Zmc2V0ID0gVEtfT0ZGU19UQUk7XG4gMzU2Olx0XHRjb25zdCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpjdXJfcCA9IE5VTEw7XG4gMzU3Olx0XHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuIDM1ODpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0dBVEVfTUFYICYjNDM7IDFdO1xuIDM1OTpcdFx0ZW51bSB0a19vZmZzZXRzIHRrbyA9IFRLX09GRlNfVEFJO1xuIDM2MDpcdFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XG4gMzYxOlx0XHRzMzIgdGltZXJfY2xvY2tpZCA9IENMT0NLX1RBSTtcbiAzNjI6XHRcdGJvb2wgdXNlX29sZF9lbnRyaWVzID0gZmFsc2U7XG4gMzYzOlx0XHRzMzIgb2xkX2Nsb2NraWQgPSBDTE9DS19UQUk7XG4gMzY0Olx0XHRib29sIG5lZWRfY2FuY2VsID0gZmFsc2U7XG4gMzY1Olx0XHRzMzIgY2xvY2tpZCA9IENMT0NLX1RBSTtcbiAzNjY6XHRcdHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdDtcbiAzNjc6XHRcdHN0cnVjdCB0Y19nYXRlICpwYXJtO1xuIDM2ODpcdFx0dTY0IG9sZF9iYXNldGltZSA9IDA7XG4gMzY5Olx0XHRpbnQgcmV0ID0gMCwgZXJyO1xuIDM3MDpcdFx0dTMyIGdmbGFncyA9IDA7XG4gMzcxOlx0XHRzMzIgcHJpbyA9IC0xO1xuIDM3MjpcdFx0a3RpbWVfdCBzdGFydDtcbiAzNzM6XHRcdHUzMiBpbmRleDtcbiAzNzQ6XHRcbiAzNzU6XHRcdGlmICghbmxhKVxuIDM3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNzc6XHRcbiAzNzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9HQVRFX01BWCwgbmxhLCBnYXRlX3BvbGljeSwgZXh0YWNrKTtcbiAzNzk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMzgwOlx0XHRcdHJldHVybiBlcnI7XG4gMzgxOlx0XG4gMzgyOlx0XHRpZiAoIXRiW1RDQV9HQVRFX1BBUk1TXSlcbiAzODM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAodGJbVENBX0dBVEVfQ0xPQ0tJRF0pXG4gMzg2Olx0XHRcdGNsb2NraWQgPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9DTE9DS0lEXSk7XG4gMzg3Olx0XG4gMzg4Olx0XHRwYXJtID0gbmxhX2RhdGEodGJbVENBX0dBVEVfUEFSTVNdKTtcbiAzODk6XHRcdGluZGV4ID0gcGFybS1cdTAwM2VpbmRleDtcbiAzOTA6XHRcbiAzOTE6XHRcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcbiAzOTI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiBlcnI7XG4gMzk0Olx0XG4gMzk1Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBiaW5kKVxuIDM5NjpcdFx0XHRyZXR1cm4gQUNUX1BfQk9VTkQ7XG4gMzk3Olx0XG4gMzk4Olx0XHRpZiAoIWVycikge1xuIDM5OTpcdFx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxuIDQwMDpcdFx0XHRcdFx0XHRcdFx1MDAyNmFjdF9nYXRlX29wcywgYmluZCwgZmxhZ3MpO1xuIDQwMTpcdFx0XHRpZiAocmV0KSB7XG4gNDAyOlx0XHRcdFx0dGNmX2lkcl9jbGVhbnVwKHRuLCBpbmRleCk7XG4gNDAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiA0MDQ6XHRcdFx0fVxuIDQwNTpcdFxuIDQwNjpcdFx0XHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xuIDQwNzpcdFx0fSBlbHNlIGlmICghKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XG4gNDA4Olx0XHRcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4gNDA5Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDQxMDpcdFx0fVxuIDQxMTpcdFxuIDQxMjpcdFx0Z2FjdCA9IHRvX2dhdGUoKmEpO1xuIDQxMzpcdFxuIDQxNDpcdFx0ZXJyID0gdGNmX2FjdGlvbl9jaGVja19jdHJsYWN0KHBhcm0tXHUwMDNlYWN0aW9uLCB0cCwgXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcbiA0MTU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDE2Olx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gNDE3Olx0XG4gNDE4Olx0XHRwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTtcbiA0MTk6XHRcdGlmICghcCkge1xuIDQyMDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDQyMTpcdFx0XHRnb3RvIGNoYWluX3B1dDtcbiA0MjI6XHRcdH1cbiA0MjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZW50cmllcyk7XG4gNDI0Olx0XG4gNDI1Olx0XHR1c2Vfb2xkX2VudHJpZXMgPSAhdGJbVENBX0dBVEVfRU5UUllfTElTVF07XG4gNDI2Olx0XHRpZiAoIXVzZV9vbGRfZW50cmllcykge1xuIDQyNzpcdFx0XHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XG4gNDI4Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDI5Olx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiA0MzA6XHRcdFx0dXNlX29sZF9lbnRyaWVzID0gIWVycjtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCBcdTAwMjZcdTAwMjYgdXNlX29sZF9lbnRyaWVzKSB7XG4gNDM0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VGhlIGVudHJ5IGxpc3QgaXMgZW1wdHlcJiMzNDspO1xuIDQzNTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDQzNjpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDQzNzpcdFx0fVxuIDQzODpcdFxuIDQzOTpcdFx0aWYgKHJldCAhPSBBQ1RfUF9DUkVBVEVEKSB7XG4gNDQwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA0NDE6XHRcdFx0Y3VyX3AgPSByY3VfZGVyZWZlcmVuY2UoZ2FjdC1cdTAwM2VwYXJhbSk7XG4gNDQyOlx0XG4gNDQzOlx0XHRcdG9sZF9iYXNldGltZSAgPSBjdXJfcC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lO1xuIDQ0NDpcdFx0XHRvbGRfY2xvY2tpZCAgID0gY3VyX3AtXHUwMDNldGNmZ19jbG9ja2lkO1xuIDQ0NTpcdFx0XHRvbGRfdGtfb2Zmc2V0ID0gUkVBRF9PTkNFKGdhY3QtXHUwMDNldGtfb2Zmc2V0KTtcbiA0NDY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGFraW5nIHRoZSBsZWFkIG9uIGFuYWx5emluZyB0aGUgZnVuY3Rpb246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgQ29kZSoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgdGhlIGluaXRpYWwgZ2xpbXBzZSBvZiB0aGUgZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIG5vdCBqdXN0IHN0b3AgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0byBtb3ZlIHBhc3QgdGhlIGluaXRpYWwgb3ZlcnZpZXcgYW5kIHNlZSBob3cgaXQgYWxsIHdvcmtzIGluIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiwgdW5kZXJzdGFuZGluZyB3aGF0IGl0cyBzcGVjaWZpYyBjb21wb25lbnRzIGFyZSBhbmQgdGhlIGxvZ2ljIHRoYXQgc3RpdGNoZXMgdGhlbSB0b2dldGhlciB0byBmaW5kIGl0cyBjb21wbGV0ZSBtZWFuaW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBhcHByZWNpYXRlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDc6XHRcdFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcbiA0NDg6XHRcdFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dDtcbiA0NDk6XHRcdFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVx1MDAzZXRjZmdfcHJpb3JpdHk7XG4gNDUwOlx0XHRcdGdmbGFncyAgICAgICAgPSBjdXJfcC1cdTAwM2V0Y2ZnX2ZsYWdzO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0XHRpZiAoIXRiW1RDQV9HQVRFX0NMT0NLSURdKVxuIDQ1MzpcdFx0XHRcdGNsb2NraWQgPSBvbGRfY2xvY2tpZDtcbiA0NTQ6XHRcbiA0NTU6XHRcdFx0ZXJyID0gMDtcbiA0NTY6XHRcdFx0aWYgKHVzZV9vbGRfZW50cmllcykge1xuIDQ1NzpcdFx0XHRcdGVyciA9IHRjZl9nYXRlX2NvcHlfZW50cmllcyhwLCBjdXJfcCwgZXh0YWNrKTtcbiA0NTg6XHRcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIXRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuIDQ1OTpcdFx0XHRcdFx0Y3ljbGV0aW1lID0gY3VyX3AtXHUwMDNldGNmZ19jeWNsZXRpbWU7XG4gNDYwOlx0XHRcdH1cbiA0NjE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNDYyOlx0XHRcdGlmIChlcnIpXG4gNDYzOlx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiA0NjQ6XHRcdH1cbiA0NjU6XHRcbiA0NjY6XHRcdGlmICh0YltUQ0FfR0FURV9QUklPUklUWV0pXG4gNDY3Olx0XHRcdHByaW8gPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9QUklPUklUWV0pO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHRiW1RDQV9HQVRFX0JBU0VfVElNRV0pXG4gNDcwOlx0XHRcdGJhc2V0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQkFTRV9USU1FXSk7XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAodGJbVENBX0dBVEVfRkxBR1NdKVxuIDQ3MzpcdFx0XHRnZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9GTEFHU10pO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0aWYgKHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuIDQ3NjpcdFx0XHRjeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7XG4gNDc3Olx0XG4gNDc4Olx0XHRpZiAodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKVxuIDQ3OTpcdFx0XHRjeWNsZXRpbWVfZXh0ID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKTtcbiA0ODA6XHRcbiA0ODE6XHRcdGVyciA9IGdhdGVfY2xvY2tfcmVzb2x2ZShjbG9ja2lkLCBcdTAwMjZ0a28sIGV4dGFjayk7XG4gNDgyOlx0XHRpZiAoZXJyKVxuIDQ4MzpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDQ4NDpcdFx0dGltZXJfY2xvY2tpZCA9IGNsb2NraWQ7XG4gNDg1Olx0XG4gNDg2Olx0XHRuZWVkX2NhbmNlbCA9IHJldCAhPSBBQ1RfUF9DUkVBVEVEIFx1MDAyNlx1MDAyNlxuIDQ4NzpcdFx0XHQgICAgICBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbChiYXNldGltZSwgb2xkX2Jhc2V0aW1lLFxuIDQ4ODpcdFx0XHRcdFx0XHQgICAgICB0a28sIG9sZF90a19vZmZzZXQsXG4gNDg5Olx0XHRcdFx0XHRcdCAgICAgIHRpbWVyX2Nsb2NraWQsIG9sZF9jbG9ja2lkKTtcbiA0OTA6XHRcbiA0OTE6XHRcdGlmIChuZWVkX2NhbmNlbClcbiA0OTI6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2Z2FjdC1cdTAwM2VoaXRpbWVyKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbiA0OTU6XHRcbiA0OTY6XHRcdGlmICghY3ljbGV0aW1lKSB7XG4gNDk3Olx0XHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuIDQ5ODpcdFx0XHRrdGltZV90IGN5Y2xlID0gMDtcbiA0OTk6XHRcbiA1MDA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2cC1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuIDUwMTpcdFx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gNTAyOlx0XHRcdGN5Y2xldGltZSA9IGN5Y2xlO1xuIDUwMzpcdFx0fVxuIDUwNDpcdFxuIDUwNTpcdFx0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbiA1MDY6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbiA1MDc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA1MDg6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4gNTA5Olx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lO1xuIDUxMzpcdFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0O1xuIDUxNDpcdFxuIDUxNTpcdFx0aWYgKG5lZWRfY2FuY2VsIHx8IHJldCA9PSBBQ1RfUF9DUkVBVEVEKVxuIDUxNjpcdFx0XHRnYXRlX3NldHVwX3RpbWVyKGdhY3QsIHRpbWVyX2Nsb2NraWQsIHRrbyk7XG4gNTE3Olx0XHRwLVx1MDAzZXRjZmdfcHJpb3JpdHkgPSBwcmlvO1xuIDUxODpcdFx0cC1cdTAwM2V0Y2ZnX2ZsYWdzID0gZ2ZsYWdzO1xuIDUxOTpcdFx0cC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lID0gYmFzZXRpbWU7XG4gNTIwOlx0XHRwLVx1MDAzZXRjZmdfY2xvY2tpZCA9IHRpbWVyX2Nsb2NraWQ7XG4gNTIxOlx0XHRnYXRlX2dldF9zdGFydF90aW1lKGdhY3QsIHAsIFx1MDAyNnN0YXJ0KTtcbiA1MjI6XHRcbiA1MjM6XHRcdG9sZF9wID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYWN0LVx1MDAzZXBhcmFtLCBwLFxuIDUyNDpcdFx0XHRcdFx0ICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKSk7XG4gNTI1Olx0XG4gNTI2Olx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IHN0YXJ0O1xuIDUyNzpcdFx0Z2FjdC1cdTAwM2VjdXJyZW50X2dhdGVfc3RhdHVzID0gR0FURV9BQ1RfR0FURV9PUEVOIHwgR0FURV9BQ1RfUEVORElORztcbiA1Mjg6XHRcbiA1Mjk6XHRcdGdhY3QtXHUwMDNlbmV4dF9lbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cC1cdTAwM2VlbnRyaWVzLFxuIDUzMDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSwgbGlzdCk7XG4gNTMxOlx0XG4gNTMyOlx0XHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xuIDUzMzpcdFxuIDUzNDpcdFx0Z2F0ZV9zdGFydF90aW1lcihnYWN0LCBzdGFydCk7XG4gNTM1Olx0XG4gNTM2Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbiA1Mzc6XHRcbiA1Mzg6XHRcdGlmIChnb3RvX2NoKVxuIDUzOTpcdFx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbiA1NDA6XHRcbiA1NDE6XHRcdGlmIChvbGRfcClcbiA1NDI6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkX3AtXHUwMDNlcmN1LCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3UpO1xuIDU0MzpcdFxuIDU0NDpcdFx0cmV0dXJuIHJldDtcbiA1NDU6XHRcbiA1NDY6XHRlcnJfZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjeWNsZXRpbWVgIENoZWNrKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgY3ljbGV0aW1lICZsdDsgMCB8fCBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBob2xkIG9uLCBgY3ljbGV0aW1lYCBpcyBhIGB1NjRgISBBIGB1NjRgIGNhbiAqbmV2ZXIqIGJlIGxlc3MgdGhhbiB6ZXJvLiBUaGF0IHBhcnQgb2YgdGhlIGNoZWNrIGlzIGEgbm8tb3AsIGEgdGF1dG9sb2d5LiAKClRoZW4gSSBzYXcgdGhlIGRlY2xhcmF0aW9uOiBgdTY0IGN5Y2xldGltZSA9IDA7YCBhdCBsaW5lIDM1My4gQnV0IHdhaXQsIHdoZXJlIGRvZXMgYGN5Y2xldGltZWAgYWN0dWFsbHkgZ2V0IGl0cyB2YWx1ZT8gQWgsIGhlcmUgaXQgaXM6IGBjeWNsZXRpbWUgPSBjeWNsZTtgIEFuZCBgY3ljbGVgIGlzIGEgYGt0aW1lX3RgLCB3aGljaCBpcyByZWFsbHkgYW4gYHM2NGAuIFNvIHdlJiMzOTtyZSBhc3NpZ25pbmcgYSBzaWduZWQgNjQtYml0IGludGVnZXIgdG8gYW4gKnVuc2lnbmVkKiA2NC1iaXQgaW50ZWdlci4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLgoKSWYgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgYGN5Y2xldGltZWAgd2lsbCBiZWNvbWUgYSAqdmVyeSogbGFyZ2UgcG9zaXRpdmUgbnVtYmVyIGR1ZSB0byB0aGUgd3JhcHBpbmcuIE5vdyB0aGUgYGN5Y2xldGltZSAmZ3Q7IElOVF9NQVhgIGNoZWNrIG1ha2VzIHNlbnNlLiBJZiB0aGUgc2lnbmVkIGBjeWNsZWAgaXMgbmVnYXRpdmUsIHRoZW4gYGN5Y2xldGltZWAgd2lsbCBiZSBncmVhdGVyIHRoYW4gYElOVF9NQVhgLCBhbmQgaXQgd2lsbCBjYXRjaCB0aGUgb3ZlcmZsb3cuCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGFib3V0IGBjeWNsZXRpbWUgJmx0OyAwYCBiZWluZyBtZWFuaW5nbGVzcyBpcyBjb3JyZWN0LCBidXQgaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgb3ZlcnNpZ2h0LiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGFzc2lnbm1lbnQgYW5kIHRoZSBgSU5UX01BWGAgY2hlY2sgaXMgZWZmZWN0aXZlbHkgYSB3YXkgdG8gaGFuZGxlIG5lZ2F0aXZlIGlucHV0IHZhbHVlcyBvZiBgY3ljbGVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhpcyBpbiB0aGUgZnV0dXJlIQoKQnV0LCB3aGF0JiMzOTtzIHRoZSBwb2ludCBvZiBjaGVja2luZyBgY3ljbGV0aW1lICZndDsgSU5UX01BWGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIGJldCB0aGlzIGlzIGJlY2F1c2UgYGN5Y2xldGltZWAgaXMgdXNlZCBzb21ld2hlcmUgaW4gYSB0aW1lciBjYWxjdWxhdGlvbi4gQSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIGNvdWxkIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgb3IgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiB0aGUgYGdhdGVfdGltZXJfZm5gIG9yIGFub3RoZXIgcGFydCBvZiB0aGUgdGltZXIgY29kZS4gTGV0IG1lIGNoZWNrIHdoZXJlIGBjeWNsZXRpbWVgIGlzIGFjdHVhbGx5IHVzZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmZ19jeWNsZXRpbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0zNz1zdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUyOlx0Y3ljbGUgPSBwYXJhbS1cdTAwM2V0Y2ZnX2N5Y2xldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUzLVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTcxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEwNi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEwNzpcdFx0Y3ljbGUgPSBwLVx1MDAzZXRjZmdfY3ljbGV0aW1lO1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTA4LVx0XHRiYXNlID0gbnNfdG9fa3RpbWUocC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zNDc9c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ0Ny1cdFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjQ0ODpcdFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dDtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ0OS1cdFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVx1MDAzZXRjZmdfcHJpb3JpdHk7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDU4LVx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhdGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0NTk6XHRcdFx0XHRjeWNsZXRpbWUgPSBjdXJfcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ2MC1cdFx0fVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUxMS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUxMjpcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1MTM6XHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MTQtXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NjEzPXN0YXRpYyBpbnQgdGNmX2dhdGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYzOS1cdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFRDQV9HQVRFX0NZQ0xFX1RJTUUsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDA6XHRcdFx0ICAgICAgcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZSwgVENBX0dBVEVfUEFEKSlcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY0MS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQzLVx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENBX0dBVEVfQ1lDTEVfVElNRV9FWFQsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDQ6XHRcdFx0ICAgICAgcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQsIFRDQV9HQVRFX1BBRCkpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02NDUtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBUaW1lciBJbnN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHN1c3BlY3RpbmcgdGhlIHByb2JsZW0gaXMgYSB0aW1lci1yZWxhdGVkIGluc3RhYmlsaXR5IHdoZW4gYGN5Y2xldGltZWAgZ2V0cyB0b28gYmlnLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYSBsYXJnZSBgY3ljbGV0aW1lYCB2YWx1ZSBjb3VsZCBiZSBjYXVzaW5nIGFuIG92ZXJmbG93IHdpdGhpbiBga3RpbWVfYWRkX25zYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIG9yIHBvc3NpYmx5IGxlYWRpbmcgdG8gYGdhdGVfdGltZXJfZnVuY2AgZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBjeWNsZXRpbWVgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIHdpdGhpbiBgZ2F0ZV90aW1lcl9mdW5jYCwgcmlnaHQ/IFNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBnYXRlX3RpbWVyX2Z1bmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgd2l0aCBgY3ljbGV0aW1lYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcxOlx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGdhdGVfdGltZXJfZnVuYyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gIDcyOlx0e1xuICA3MzpcdFx0c3RydWN0IHRjZl9nYXRlICpnYWN0ID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGNmX2dhdGUsXG4gIDc0Olx0XHRcdFx0XHRcdCAgICAgaGl0aW1lcik7XG4gIDc1Olx0XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICpuZXh0O1xuICA3NjpcdFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcDtcbiAgNzc6XHRcdGt0aW1lX3QgY2xvc2VfdGltZSwgbm93O1xuICA3ODpcdFxuICA3OTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuICA4MDpcdFxuICA4MTpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2FjdC1cdTAwM2VwYXJhbSxcbiAgODI6XHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKSk7XG4gIDgzOlx0XHRuZXh0ID0gZ2FjdC1cdTAwM2VuZXh0X2VudHJ5O1xuICA4NDpcdFxuICA4NTpcdFx0LyogY3ljbGUgc3RhcnQsIGNsZWFyIHBlbmRpbmcgYml0LCBjbGVhciB0b3RhbCBvY3RldHMgKi9cbiAgODY6XHRcdGdhY3QtXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IG5leHQtXHUwMDNlZ2F0ZV9zdGF0ZSA/IEdBVEVfQUNUX0dBVEVfT1BFTiA6IDA7XG4gIDg3Olx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfZW50cnlfb2N0ZXRzID0gMDtcbiAgODg6XHRcdGdhY3QtXHUwMDNlY3VycmVudF9tYXhfb2N0ZXRzID0gbmV4dC1cdTAwM2VtYXhvY3RldHM7XG4gIDg5Olx0XG4gIDkwOlx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IGt0aW1lX2FkZF9ucyhnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSxcbiAgOTE6XHRcdFx0XHRcdFx0XHRuZXh0LVx1MDAzZWludGVydmFsKTtcbiAgOTI6XHRcbiAgOTM6XHRcdGNsb3NlX3RpbWUgPSBnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZTtcbiAgOTQ6XHRcbiAgOTU6XHRcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZWVudHJpZXMpKVxuICA5NjpcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZwLVx1MDAzZWVudHJpZXMsXG4gIDk3Olx0XHRcdFx0XHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xuICA5ODpcdFx0ZWxzZVxuICA5OTpcdFx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xuIDEwMDpcdFxuIDEwMTpcdFx0bm93ID0gZ2F0ZV9nZXRfdGltZShnYWN0KTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmIChrdGltZV9hZnRlcihub3csIGNsb3NlX3RpbWUpKSB7XG4gMTA0Olx0XHRcdGt0aW1lX3QgY3ljbGUsIGJhc2U7XG4gMTA1Olx0XHRcdHU2NCBuO1xuIDEwNjpcdFxuIDEwNzpcdFx0XHRjeWNsZSA9IHAtXHUwMDNldGNmZ19jeWNsZXRpbWU7XG4gMTA4Olx0XHRcdGJhc2UgPSBuc190b19rdGltZShwLVx1MDAzZXRjZmdfYmFzZXRpbWUpO1xuIDEwOTpcdFx0XHRuID0gZGl2NjRfdTY0KGt0aW1lX3N1Yl9ucyhub3csIGJhc2UpLCBjeWNsZSk7XG4gMTEwOlx0XHRcdGNsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoYmFzZSwgKG4gJiM0MzsgMSkgKiBjeWNsZSk7XG4gMTExOlx0XHR9XG4gMTEyOlx0XG4gMTEzOlx0XHRnYWN0LVx1MDAzZW5leHRfZW50cnkgPSBuZXh0O1xuIDExNDpcdFxuIDExNTpcdFx0aHJ0aW1lcl9zZXRfZXhwaXJlcyhcdTAwMjZnYWN0LVx1MDAzZWhpdGltZXIsIGNsb3NlX3RpbWUpO1xuIDExNjpcdFxuIDExNzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4gMTE4Olx0XG4gMTE5Olx0XHRyZXR1cm4gSFJUSU1FUl9SRVNUQVJUO1xuIDEyMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGl2aXNpb24gYnkgWmVybyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnYXRlX3RpbWVyX2Z1bmNgIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lOiBpZiB0aGUgYGN5Y2xlYCB2YWx1ZSBpcyB6ZXJvLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIGlzc3VlIHdpdGggYGRpdjY0X3U2NGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZywgZWFzeSB0byBvdmVybG9vay4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHNlZW1zIHRvIGhhdmUgc29tZSBjaGVja3MgaW4gYHRjZl9nYXRlX2luaXRgOgoKYGBgYwoJaWYgKCFjeWNsZXRpbWUpIHsKCQlzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTsKCQlrdGltZV90IGN5Y2xlID0gMDsKCgkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtwLSZndDtlbnRyaWVzLCBsaXN0KQoJCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKCQljeWNsZXRpbWUgPSBjeWNsZTsKCX0KYGBgCgpJdCBjaGVja3MgYCFjeWNsZXRpbWVgLCB3aGljaCBtYWtlcyBpdCAqc2VlbSogbGlrZSBpdCYjMzk7cyB0YWtpbmcgY2FyZSBvZiBhIHplcm8gYGN5Y2xldGltZWAuIEl0ICpjYWxjdWxhdGVzKiBgY3ljbGV0aW1lYCBmcm9tIHRoZSBzdW0gb2YgYGVudHJ5LSZndDtpbnRlcnZhbGAuIE9rYXksIHNvIHdoYXQgaWYgdGhhdCBzdW0gKmlzKiB6ZXJvPyBUaGVuIGBjeWNsZXRpbWVgIGVuZHMgdXAgYmVpbmcgemVybyBhcyB3ZWxsLiBUaGVuLCBpbiB0aGUgcGF0Y2gsIHRoZXJlIGlzIHRoaXMgY2hlY2s6IGBjeWNsZXRpbWUgJmx0OyAwIHx8IGN5Y2xldGltZSAmZ3Q7IElOVF9NQVhgLgoKSG1tLCBub3cgbGV0IG1lIHRoaW5rLi4uIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIHNvIGBjeWNsZXRpbWUgJmx0OyAwYCBpcyAqYWx3YXlzKiBnb2luZyB0byBiZSBmYWxzZS4gVGhhdCBwYXJ0IG9mIHRoZSBjaGVjayBpcyB1c2VsZXNzLiBCdXQgd2hhdCBhYm91dCBgY3ljbGV0aW1lICZndDsgSU5UX01BWGA/IFNpbmNlIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIGl0JiMzOTtzIG5vdCBnb2luZyB0byB3cmFwIGFyb3VuZCBsaWtlIGEgc2lnbmVkIGludGVnZXIgbWlnaHQuIFNvLCBpZiBgY3ljbGV0aW1lYCBpcyB6ZXJvLCBpdCYjMzk7cyAqbm90KiBncmVhdGVyIHRoYW4gYElOVF9NQVhgLgoKQW5kLCBmb3IgdGhlIHJlY29yZCwgYElOVF9NQVhgIGlzIDIxNDc0ODM2NDcuCgpJZiBgY3ljbGV0aW1lYCAqaXMqIGxhcmdlciB0aGFuIGBJTlRfTUFYYCwgaXQgZXJyb3JzIG91dCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdoeSBgSU5UX01BWGA/IEFoISBJIGJldCBpdCYjMzk7cyBiZWNhdXNlIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgIGlzIGEgYHUzMmAgd2l0aGluIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gY29uZmlybSB0aGUgZW50cnksIG5vdy4gTGV0JiMzOTtzIGNoZWNrIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD0xMD1zdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnkge1xuLS1cbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgtMTYtXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjE3OnN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkge1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xOC1cdGludFx0XHRcdGluZGV4O1xuLS1cbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmg9NDE9c3RydWN0IHRjZl9nYXRlIHtcbi0tXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTQ3LVx0czMyXHRcdFx0Y3VycmVudF9tYXhfb2N0ZXRzO1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDo0ODpcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnlcdCpuZXh0X2VudHJ5O1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00OS1cdHN0cnVjdCBocnRpbWVyXHRcdGhpdGltZXI7XG4tLVxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD0xMTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnlcbi0tXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTEyMi1cdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnA7XG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjEyMzpcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xMjQtXHR1MzIgbnVtX2VudHJpZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdGNfZ2F0ZS5oYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgdGNfZ2F0ZS5oYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFRyYWZmaWMgQ29udHJvbCAoVEMpIGdhdGluZyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgZ2F0ZSBjb25maWd1cmF0aW9uczogdGhlIHBhcmFtZXRlcnMgZm9yIGRlZmluaW5nIGdhdGUgc3RhdGVzIChvcGVuL2Nsb3NlZCkgYmFzZWQgb24gdmFyaW91cyBjb25kaXRpb25zLCBwZXJoYXBzIFFvUyBtYXJrZXJzLCBmbG93IElEcywgb3Igc3BlY2lmaWMgcGFja2V0IGhlYWRlciBmaWVsZHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBsZXZlcmFnZXMgZXhpc3RpbmcgVEMgbWVjaGFuaXNtcyBvciBpbnRyb2R1Y2VzIGVudGlyZWx5IG5ldyBlbGVtZW50cyBmb3IgdGhlIGdhdGUtc3BlY2lmaWMgbG9naWMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGF0b21pY2l0eSBvZiBnYXRlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFzc3VtaW5nIHRoYXQgdGhpcyBoZWFkZXIgbGlrZWx5IGludGVyYWN0cyB3aXRoIGtlcm5lbCBzcGFjZSBhbmQgcG90ZW50aWFsbHkgaGFyZHdhcmUuIEFyZSB0aGVyZSBtdXRleGVzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBBcmUgYXRvbWljIG9wZXJhdGlvbnMgYmVpbmcgdXNlZCBlZmZlY3RpdmVseT8KClNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZ2F0ZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gYW5kIHF1ZXVpbmcgZGlzY2lwbGluZXMuIEhvdyBzZWFtbGVzc2x5IGRvZXMgdGhlIGdhdGluZyBpbnRlZ3JhdGUgd2l0aCBvdGhlciBUQyBjb21wb25lbnRzIGxpa2UgY2xhc3NpZmllcnMgKGUuZy4sIGBjbHNfdTMyYCwgYGNsc19icGZgKSwgc2NoZWR1bGVycywgYW5kIHNoYXBlcnM/IERvZXMgdGhlIGRlc2lnbiBpbnRyb2R1Y2UgYW55IGluZWZmaWNpZW5jaWVzIG9yIGJvdHRsZW5lY2tzIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgaG9va3Mgb3IgY2FsbC1iYWNrcyBpbXBsZW1lbnRlZC4KCkJleW9uZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMsIEkmIzM5O2xsIGJlIHNjYW5uaW5nIGZvciBhbnkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZXNlIGdhdGVzLCBhcyB0aGV5IG9mdGVuIGdpdmUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBpbnRlbmRlZCB1c2FnZSBwYXR0ZXJucyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSDigJMgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBnYXRpbmcgZ3JhbnVsYXJpdHksIGNvbnRyb2wgb3ZlcmhlYWQsIGFuZCBvdmVyYWxsIHBhY2tldCBsYXRlbmN5LiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbGVnYW50LCBlZmZpY2llbnQsIGFuZCB3ZWxsLWludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBUQyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5IHtcbiAgMTg6XHRcdGludFx0XHRcdGluZGV4O1xuICAxOTpcdFx0dThcdFx0XHRnYXRlX3N0YXRlO1xuICAyMDpcdFx0dTMyXHRcdFx0aW50ZXJ2YWw7XG4gIDIxOlx0XHRzMzJcdFx0XHRpcHY7XG4gIDIyOlx0XHRzMzJcdFx0XHRtYXhvY3RldHM7XG4gIDIzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyB7XG4gIDI3Olx0XHRzMzJcdFx0XHR0Y2ZnX3ByaW9yaXR5O1xuICAyODpcdFx0dTY0XHRcdFx0dGNmZ19iYXNldGltZTtcbiAgMjk6XHRcdHU2NFx0XHRcdHRjZmdfY3ljbGV0aW1lO1xuICAzMDpcdFx0dTY0XHRcdFx0dGNmZ19jeWNsZXRpbWVfZXh0O1xuICAzMTpcdFx0dTMyXHRcdFx0dGNmZ19mbGFncztcbiAgMzI6XHRcdHMzMlx0XHRcdHRjZmdfY2xvY2tpZDtcbiAgMzM6XHRcdHNpemVfdFx0XHRcdG51bV9lbnRyaWVzO1xuICAzNDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0ZW50cmllcztcbiAgMzU6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDM2Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIERlbmlhbCBvZiBTZXJ2aWNlIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEdhdGUgUWRpc2MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGN5Y2xldGltZWAgdmFyaWFibGUgaW4gdGhlIEdhdGUgUWRpc2MsIGFuZCBJJiMzOTttIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3LiBJbml0aWFsbHksIGBjeWNsZXRpbWVgIGlzIGRlZmluZWQgYXMgYSBgdTY0YC4gVGhlbiwgaW4gYHRjZl9nYXRlX2luaXRgLCBpdCYjMzk7cyBzdWJqZWN0IHRvIGEgYm91bmRzIGNoZWNrLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGUgY2hlY2sgYGN5Y2xldGltZSAmbHQ7IDBgIGlzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGl0IGlzIGFuIHVuc2lnbmVkIGludGVnZXIuIEhvd2V2ZXIsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYYCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LgoKSW5pdGlhbGx5IEkgd2FzIHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBjYXN0IHRvIGEgc2lnbmVkIGludGVnZXIuIEhvd2V2ZXIsIHRoZXJlIGlzbiYjMzk7dC4KCkxvb2tpbmcgZGVlcGVyLCBgY3ljbGV0aW1lYCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgLiBIb3dldmVyLCBgZW50cnktJmd0O2ludGVydmFsYCBpcyBhIGB1MzJgLCBzbyB0aGUgYWNjdW11bGF0aW9uIHRvIGBjeWNsZWAgc2hvdWxkIGFsd2F5cyBiZSBwb3NpdGl2ZS4gSG93ZXZlciwgSSBzZWUgYSBzZWNvbmQgcGF0aCB3aGVyZSB0aGUgdXNlciBjYW4gcHJvdmlkZSBgY3ljbGV0aW1lYCBkaXJlY3RseSB2aWEgYG5sYV9nZXRfdTY0YC4gU28gbm93IEkgcmVhbGl6ZSB0aGVyZSBhcmUgdHdvIHNlcGFyYXRlIGNvZGUgcGF0aHMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGBnYXRlX3RpbWVyX2Z1bmNgIGZ1bmN0aW9uLiBJZiB0aGUgcHJvdmlkZWQgYGN5Y2xldGltZWAgaXMgYSB2ZXJ5IGxhcmdlIHZhbHVlLCB0aGUgbXVsdGlwbGljYXRpb24gYChuICYjNDM7IDEpICogY3ljbGVgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIG92ZXJmbG93IGEgYHM2NGAuIEFuIG92ZXJmbG93IHdvdWxkIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYC4gVGhpcyBuZWdhdGl2ZSBgY2xvc2VfdGltZWAgd291bGQgYmUgc2V0IGFzIHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBoaWdoLXJlc29sdXRpb24gdGltZXIuICBBIG5lZ2F0aXZlIHRpbWUgY29ycmVzcG9uZHMgdG8gYSB0aW1lIGluIHRoZSBwYXN0LiBUaGlzIGluIHR1cm4gd2lsbCBjYXVzZSBgZ2F0ZV90aW1lcl9mdW5jYCB0byBiZSBjYWxsZWQgcmVwZWF0ZWRseSBhbmQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGFuIGluZmluaXRlIGxvb3AgdHJpZ2dlcmVkIGJ5IGEgbGFyZ2UgYGN5Y2xldGltZWAgdmFsdWUsIGFuZCBpdCBjb21wbGV0ZWx5IGhhbmdzIHRoZSBzeXN0ZW0uIFRoaXMgaXMgYSBjbGFzc2ljIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgY2F1c2VkIGJ5IGEgbG9naWMgYnVnOiBhbiBpbmZpbml0ZSBsb29wLgoKVGhlIGluaXRpYWwgcGF0Y2ggYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2ssIGJ1dCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhlIGNvZGUgZ29lcyB0byBgZXJyX2ZyZWVgLiBUaGVyZSYjMzk7cyBhIGBrZnJlZShwKWAgY2FsbCB0aGVyZSwgYnV0IGl0IGFsc28gaGFzIGBwLSZndDtlbnRyaWVzYCwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLiBBcmUgdGhlIGVsZW1lbnRzIGluIHRoZSBgcC0mZ3Q7ZW50cmllc2AgbGlzdHMgZnJlZWQ/IEkgbmVlZCB0byBhbmFseXplIGBwYXJzZV9nYXRlX2xpc3RgIHRvIHNlZSBob3cgdGhvc2UgZW50cmllcyBhcmUgbWFuYWdlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBEb1MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX2dhdGVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIzMz1zdGF0aWMgaW50IHRjZl9nYXRlX2NvcHlfZW50cmllcyhzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpkc3QsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjYyOnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9saXN0KHN0cnVjdCBubGF0dHIgKmxpc3RfYXR0cixcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2My1cdFx0XHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zNDc9c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyNi1cdGlmICghdXNlX29sZF9lbnRyaWVzKSB7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0Mjc6XHRcdGVyciA9IHBhcnNlX2dhdGVfbGlzdCh0YltUQ0FfR0FURV9FTlRSWV9MSVNUXSwgcCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyOC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgaW50byBgcGFyc2VfZ2F0ZV9saXN0YC4gVGhpcyBwcm9iYWJseSBtZWFucyBzb21ldGhpbmcgY3J1Y2lhbCBpcyBoYXBwZW5pbmcgd2l0aCBob3cgd2UmIzM5O3JlIGJ1aWxkaW5nIHRoZSBjaXJjdWl0IHJlcHJlc2VudGF0aW9uLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBwYXJzaW5nIG9mIGEgbGlzdCBvZiAmIzM0O2dhdGVzJiMzNDsg4oCTIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvbXBsZXhpdGllcyByZXNpZGUgaW4gdGhpcyBraW5kIG9mIHByb2dyYW0uIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQ6IHdoYXQmIzM5O3MgdGhlIGlucHV0IGZvcm1hdD8gSXMgaXQgYSBzaW1wbGUgbGlzdCBvZiBzdHJpbmcgaWRlbnRpZmllcnM/IElzIGl0IGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBBcmUgd2UgaGFuZGxpbmcgZGlmZmVyZW50IGdhdGUgdHlwZXMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRpc3Rpbmd1aXNoZWQ/IEFueSBlcnJvciBoYW5kbGluZyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBhcyBJIHJldmlldz8gS25vd2luZyB0aGUgc291cmNlIGZvcm1hdCB3aWxsIGJlIGltcG9ydGFudC4gSXQgd2lsbCBkcml2ZSBob3cgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MjpcdHN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9saXN0KHN0cnVjdCBubGF0dHIgKmxpc3RfYXR0cixcbiAyNjM6XHRcdFx0XHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcbiAyNjQ6XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMjY1Olx0e1xuIDI2NjpcdFx0c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7XG4gMjY3Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuIDI2ODpcdFx0aW50IGVyciwgcmVtO1xuIDI2OTpcdFx0aW50IGkgPSAwO1xuIDI3MDpcdFxuIDI3MTpcdFx0aWYgKCFsaXN0X2F0dHIpXG4gMjcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI3MzpcdFxuIDI3NDpcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChuLCBsaXN0X2F0dHIsIHJlbSkge1xuIDI3NTpcdFx0XHRpZiAobmxhX3R5cGUobikgIT0gVENBX0dBVEVfT05FX0VOVFJZKSB7XG4gMjc2Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBdHRyaWJ1dGUgaXNuJiMzOTt0IHR5cGUgJiMzOTtlbnRyeSYjMzk7XCYjMzQ7KTtcbiAyNzc6XHRcdFx0XHRjb250aW51ZTtcbiAyNzg6XHRcdFx0fVxuIDI3OTpcdFxuIDI4MDpcdFx0XHRlbnRyeSA9IGt6YWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG4gMjgxOlx0XHRcdGlmICghZW50cnkpIHtcbiAyODI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vdCBlbm91Z2ggbWVtb3J5IGZvciBlbnRyeVwmIzM0Oyk7XG4gMjgzOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAyODQ6XHRcdFx0XHRnb3RvIHJlbGVhc2VfbGlzdDtcbiAyODU6XHRcdFx0fVxuIDI4NjpcdFxuIDI4NzpcdFx0XHRlcnIgPSBwYXJzZV9nYXRlX2VudHJ5KG4sIGVudHJ5LCBpLCBleHRhY2spO1xuIDI4ODpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMjg5Olx0XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDI5MDpcdFx0XHRcdGdvdG8gcmVsZWFzZV9saXN0O1xuIDI5MTpcdFx0XHR9XG4gMjkyOlx0XG4gMjkzOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCwgXHUwMDI2c2NoZWQtXHUwMDNlZW50cmllcyk7XG4gMjk0Olx0XHRcdGkmIzQzOyYjNDM7O1xuIDI5NTpcdFx0fVxuIDI5NjpcdFxuIDI5NzpcdFx0c2NoZWQtXHUwMDNlbnVtX2VudHJpZXMgPSBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0cmV0dXJuIGk7XG4gMzAwOlx0XG4gMzAxOlx0cmVsZWFzZV9saXN0OlxuIDMwMjpcdFx0cmVsZWFzZV9lbnRyeV9saXN0KFx1MDAyNnNjaGVkLVx1MDAzZWVudHJpZXMpO1xuIDMwMzpcdFxuIDMwNDpcdFx0cmV0dXJuIGVycjtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxuIDMwODpcdFx0XHRcdFx0ICAgIGVudW0gdGtfb2Zmc2V0cyB0a28sXG4gMzA5Olx0XHRcdFx0XHQgICAgZW51bSB0a19vZmZzZXRzIG9sZF90a28sXG4gMzEwOlx0XHRcdFx0XHQgICAgczMyIGNsb2NraWQsIHMzMiBvbGRfY2xvY2tpZClcbiAzMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiBUQ0YgR2F0ZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGUgYHAtJmd0O2VudHJpZXNgIHN0cnVjdHVyZSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIHBvcHVsYXRlZCBieSBgcGFyc2VfZ2F0ZV9saXN0YCwgaW50ZXJhY3RzIHdpdGggdGhlIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGF0IGlmIGBwYXJzZV9nYXRlX2xpc3RgIHN1Y2NlZWRzLCBpdCBwb3B1bGF0ZXMgYHAtJmd0O2VudHJpZXNgIHdpdGggZGF0YS4gR3JlYXQsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuCgpOb3csIGlmIGBjeWNsZXRpbWVgIGlzIGludmFsaWQsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZWAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIG15IGNvbmNlcm4gbGllcy4gTG9va2luZyBhdCB0aGUgYGVycl9mcmVlYCBsYWJlbCwgSSBzZWUgYGtmcmVlKHApYCwgd2hpY2gsIG9mIGNvdXJzZSwgZnJlZXMgdGhlIGBwYCBzdHJ1Y3R1cmUgaXRzZWxmLiBCdXQsIGNydWNpYWxseSwgYGtmcmVlKHApYCAqZG9lc24mIzM5O3QqIGF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgaW5kaXZpZHVhbCBlbnRyaWVzIHdpdGhpbiBgcC0mZ3Q7ZW50cmllc2AhIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZy4uLiBpcyB0aGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrPyBJIG1lYW4sIHRoZXNlIGVudHJpZXMsIGlmIGFsbG9jYXRlZCwgYXJlIGp1c3Qgc2l0dGluZyB0aGVyZSwgb3JwaGFuZWQgYWZ0ZXIgYHBgIGlzIGZyZWVkLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIHRydWUgYW5kIHRoYXQgdGhlcmUgaXMgYSBsZWFrLCBhbmQgaWYgc28sIGhvdyBtdWNoIG1lbW9yeSBpcyBsZWFrZWQ/IEkgbmVlZCB0byBhbmFseXplIGBlcnJfZnJlZWAgbW9yZSBjbG9zZWx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgZmFsc2UgYWxhcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NjpcdGVycl9mcmVlOlxuIDU0NzpcdFx0cmVsZWFzZV9lbnRyeV9saXN0KFx1MDAyNnAtXHUwMDNlZW50cmllcyk7XG4gNTQ4Olx0XHRrZnJlZShwKTtcbiA1NDk6XHRjaGFpbl9wdXQ6XG4gNTUwOlx0XHRpZiAoZ290b19jaClcbiA1NTE6XHRcdFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XG4gNTUyOlx0cmVsZWFzZV9pZHI6XG4gNTUzOlx0XHQvKiBhY3Rpb24gaXMgbm90IGluc2VydGVkIGluIGFueSBsaXN0OiBpdCYjMzk7cyBzYWZlIHRvIGluaXQgaGl0aW1lclxuIDU1NDpcdFx0ICogd2l0aG91dCB0YWtpbmcgdGNmX2xvY2suXG4gNTU1Olx0XHQgKi9cbiA1NTY6XHRcdGlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRClcbiA1NTc6XHRcdFx0Z2F0ZV9zZXR1cF90aW1lcihnYWN0LCB0aW1lcl9jbG9ja2lkLCB0a28pO1xuIDU1ODpcdFxuIDU1OTpcdFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcbiA1NjA6XHRcdHJldHVybiBlcnI7XG4gNTYxOlx0fVxuIDU2MjpcdFxuIDU2MzpcdHN0YXRpYyB2b2lkIHRjZl9nYXRlX3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gNTY0Olx0e1xuIDU2NTpcdFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zLCByY3UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1OAoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJ1ZyoqCgpPa2F5LCBzbyBgZXJyX2ZyZWVgIHByb3Blcmx5IGNsZWFucyB1cCB0aGUgbWVtb3J5IHdpdGggYHJlbGVhc2VfZW50cnlfbGlzdGAgYW5kIHRoZW4gYGtmcmVlYC4gTm8gbWVtb3J5IGxlYWssIHRoYXQmIzM5O3MgZ29vZC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGxhY2sgb2YgYSBib3VuZHMgY2hlY2sgb24gYGN5Y2xldGltZWAsIHdoaWNoIGxldHMgYGdhdGVfdGltZXJfZnVuY2AgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCBhbmQgdHJpZ2dlciBhIGRlbmlhbCBvZiBzZXJ2aWNlLiBJdCYjMzk7cyBhIGxvZ2ljIGJ1ZywgcGxhaW4gYW5kIHNpbXBsZSwgYW5kIHNob3VsZCBiZSBlYXNpbHkgZm91bmQgdGhyb3VnaCBmdXp6aW5nIG9yIGEgZGVjZW50IGNvZGUgcmV2aWV3LiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgY3ljbGV0aW1lYCAqaXMqIGluaXRpYWxpemVkLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJdTY0IGN5Y2xldGltZSA9IDAsIGJhc2V0aW1lID0gMCwgY3ljbGV0aW1lX2V4dCA9IDA7CmBgYAoKWXVwLCBpbml0aWFsaXplZCB0byB6ZXJvLiBBbmQgdGhlbjoKCmBgYGMKCWlmICh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSkKCQljeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7CmBgYAoKSWYgdGhlIHZhbHVlIGlzbiYjMzk7dCBwcm92aWRlZCwgaXQgc3RheXMgemVyby4gRmluYWxseToKCmBgYGMKCWlmICghY3ljbGV0aW1lKSB7CgkJc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7CgkJa3RpbWVfdCBjeWNsZSA9IDA7CgoJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7cC0mZ3Q7ZW50cmllcywgbGlzdCkKCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CgkJY3ljbGV0aW1lID0gY3ljbGU7Cgl9CmBgYAoKU28gYGN5Y2xldGltZWAgaXMgYWx3YXlzIGluaXRpYWxpemVkOyBpdCBjYW4gYmUgemVybywgYnV0IGl0JiMzOTtzIG5ldmVyIHVuaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyBzaW1wbHkgdGhhdCB0aGUgdmFsdWUgb2YgYGN5Y2xldGltZWAgbWlnaHQgYmUgdG9vIGxhcmdlLCB3aGljaCB0aGVuIGxlYWRzIHRvIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2AuIFRoaXMgcmVzdWx0cyBpbiBhIERvUyBiZWNhdXNlIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24gYmVjb21lcyBuZWdhdGl2ZSwgY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEl0JiMzOTtzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG9jdW1lbnQgdGhpcyBjbGVhcmx5LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYHRjZl9nYXRlX2luaXRgIGZvciBgY3ljbGV0aW1lYCB0byBwcmV2ZW50IGFuIG92ZXJzaXplZCB2YWx1ZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgY3ljbGV0aW1lYCBpcyB0b28gbGFyZ2UgKGdyZWF0ZXIgdGhhbiBgSU5UX01BWGApLCBhbiBpbnRlZ2VyIG92ZXJmbG93IHdpbGwgb2NjdXIgd2l0aGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2F1c2VzIGBjbG9zZV90aW1lYCB0byBiZWNvbWUgbmVnYXRpdmUgYW5kIGxlYWRzIHRvIGEgdGltZXIgaW50ZXJydXB0IGxvb3AsIGFuZCB0aGUgRG9TLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBidWcsIG5vdCBhIGNhc2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB0aGUgaW52b2x2ZWQgdmFyaWFibGVzLCBpbmNsdWRpbmcgYGN5Y2xldGltZWAsIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBzbyBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gU3RhbmRhcmQgS0FTQU4gb3IgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGNhdGNoIHRoZXNlIHNvcnRzIG9mIGxvZ2ljIGVycm9ycyBhbmQgaW5maW5pdGUgbG9vcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDAuNTE5MDEyNTUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTI3MjE2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9HQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2dhdGVfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjAwLjUxOTAxODA0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2ODg4NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdiOWUwYmI1ZWQ0YjU0MGE0MzE0MjhjMDJjZTQ0ODMzNzRjOWNjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXFxuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhdGUuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXFxuQEAgLTUwMSw2ICs1MDEsMTQgQEAgc3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiBcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gXFx0XFx0Y3ljbGV0aW1lID0gY3ljbGU7XFxuIFxcdH1cXG4rXFxuK1xcdGlmIChjeWNsZXRpbWUgXFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZl9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4gXFx0cC1cXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XFxuIFxcdHAtXFx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowMC45MjY1NjM0NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDYwMDQyMTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiOWUwYmI1ZWQ0YjU0MGE0MzE0MjhjMDJjZTQ0ODMzNzRjOWNjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuQEAgLTUwMSw2ICs1MDEsMTQgQEAgc3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXHRcdGN5Y2xldGltZSA9IGN5Y2xlO1xuIFx0fVxuK1xuK1x0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbiBcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XG4gXHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowMC45MjY1NjQ5MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMxMjYzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IGBhY3RfZ2F0ZS5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdG91Y2hpbmcgYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZSwgd2hpY2ggaXMgdGhhdCBuZXcgY2hlY2sgaW4gYHRjZl9nYXRlX2luaXRgLiBMb29raW5nIGF0IGl0LCB0aGV5J3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgY3ljbGV0aW1lYCBub3csIGVuc3VyaW5nIGl0J3Mgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSDigJMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8gYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgSU5UX01BWGAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBtZS5cblxuVGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBgY3ljbGV0aW1lYCBiZWluZyBvdXRzaWRlIG9mIGFjY2VwdGFibGUgYm91bmRzLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3Igb3RoZXIgaXNzdWVzIGRvd24gdGhlIGxpbmUsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQncyBwcm9wZXJseSBzZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHYCBhbmQgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIFRoZXkgYWxzbyBzZWVtIHRvIGJlIHVubG9ja2luZyB0aGUgbG9jayBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIGVycm9yLCB3aGljaCBpcyBjcnVjaWFsLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gYHRjZl9nYXRlX2luaXRgLCBpdCdzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrIG9yIGFuIEFQSSBhbHRlcmF0aW9uIGJ1dCBhIHN0cmFpZ2h0Zm9yd2FyZCB2YWxpZGF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEtjb25maWcgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQsIG9mIGNvdXJzZSwgdG8gZW5zdXJlIHRoZSBnYXRlIGFjdGlvbiBpcyBlbmFibGVkIGFuZCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gTGV0J3MgZGl2ZSBpbnRvIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgYW5kIEtjb25maWcgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdCBubyBuZXcgZGVwZW5kZW5jaWVzIHdlcmUgaW50cm9kdWNlZCBoZXJlIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjA1Ljc1NzgzMTE1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowNS44MDczNjQzMjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM5OTQ1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBgYWN0X2dhdGVgIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdGNmX2dhdGVfaW5pdGAuLi4gYWggeWVzLCB0aGF0J3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgYWN0X2dhdGVfb3BzYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBnYXRlIG1lY2hhbmlzbSBpcyBjb25maWd1cmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0J3MgZ2V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIGBhY3RfZ2F0ZS5jYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgZGVmaW5lZCwgYW5kIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBwcmVyZXF1aXNpdGVzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjA5LjM0NzMxMjgxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA1NDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19ORVRfQUNUX0NUKVxcdCs9IGFjdF9jdC5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19ORVRfQUNUX0dBVEUpXFx0Kz0gYWN0X2dhdGUub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX1NDSF9GSUZPKVxcdCs9IHNjaF9maWZvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDkuMzk4MzcyNTM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDkyMjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgTkVUX0FDVF9HQVRFYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgc2V0dGluZ3MsIG1vZHVsZXMsIG9yIHByZWNvbmRpdGlvbnMgcmVseSBvbiBgTkVUX0FDVF9HQVRFYCBiZWluZyBkZWZpbmVkIG9yIHNldCB0byBhIHBhcnRpY3VsYXIgdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcy4gQSBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIHRoZSBmb3VuZGF0aW9uIG9mIGFueSByb2J1c3QgY29uZmlndXJhdGlvbiB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTMuMDI5Mjk3ODUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTUyMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0dBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9OTE3PWNvbmZpZyBORVRfQUNUX0NUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXFxubmV0L3NjaGVkL0tjb25maWc6OTMwOmNvbmZpZyBORVRfQUNUX0dBVEVcXG5uZXQvc2NoZWQvS2NvbmZpZy05MzEtXFx0dHJpc3RhdGUgXFxcIkZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTMuMTE4ODU0MjcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODYwNzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5FVF9BQ1RfR0FURSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgTkVUX0FDVF9HQVRFYCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciB0aGUgb2J2aW91czogaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHdoZXRoZXIgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzLiBJJ20gbG9va2luZyBmb3IgdGhlIFwidHJpY2t5IGJpdHNcIiDigJMgYXJlIHRoZXJlIGFueSBvYnNjdXJlIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBpbXBhY3Qgb24gb3RoZXIgbmV0d29ya2luZyBmdW5jdGlvbmFsaXRpZXMuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBpZiBpdCBoYXMgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBLY29uZmlnLCBzbyB0aGF0IEkgY2FuIGdvIG92ZXIgaXQgbGF0ZXIgb24uIFRoZW4sIEknbGwgYXNzZXNzIGl0cyBvdmVyYWxsIGltcG9ydGFuY2UgYW5kIHNjb3BlLiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBpbmZsdWVuY2Ugc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVW5kZXJzdGFuZGluZyB0aGUgZ2F0aW5nIG9wdGlvbnMgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG5ldHdvcmsgdHJhZmZpYyBmbG93IGJhc2VkIG9uIHZhcmlvdXMgcGFyYW1ldGVycy4gSXMgdGhpcyBhIHNpbXBsZSBiaW5hcnkgY2hvaWNlICh5ZXMvbm8pLCBvciBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBhbGxvdyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbD8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGRlZmF1bHQgc2V0dGluZ3MuIEZpbmFsbHksIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTYuNDM3NDY0NDY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuIDkzMDpcXHRjb25maWcgTkVUX0FDVF9HQVRFXFxuIDkzMTpcXHRcXHR0cmlzdGF0ZSBcXFwiRnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXFxcIlxcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MzM6XFx0XFx0aGVscFxcbiA5MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcXG4gOTM1OlxcdFxcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxcbiA5MzY6XFx0XFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkzOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTQwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9nYXRlLlxcbiA5NDE6XFx0XFxuIDk0MjpcXHRjb25maWcgTkVUX0lGRV9TS0JNQVJLXFxuIDk0MzpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCB0byBlbmNvZGluZyBkZWNvZGluZyBza2IgbWFyayBvbiBJRkUgYWN0aW9uXFxcIlxcbiA5NDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUNUX0lGRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoxNi40Mzc1NjQ1MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NDI5MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEFjdGlvbiBHYXRlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgZGVwZW5kZW5jaWVzIGhlcmUsIHNwZWNpZmljYWxseSBhcm91bmQgYE5FVF9DTFNfQUNUYC4gSSBjYW4gc2VlIEkgbmVlZCBib3RoIGBORVRfQUNUX0dBVEVgIGFuZCBgTkVUX0NMU19BQ1RgIHRvIGdldCB0aGlzIHRoaW5nIG9mZiB0aGUgZ3JvdW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGZpZ3VyaW5nIHRoYXQncyB0aGUgb2J2aW91cyBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGBpbml0YCBwcm9jZXNzLlxuXG5BaCwgd2FpdCBhIHNlY29uZC4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLiBTdGF0aWMgZnVuY3Rpb25zIGFyZW4ndCBpZGVhbCBhcyBmb2N1cyBzeW1ib2xzIHNpbmNlIHRoZXkgaGF2ZSBsaW1pdGVkIHNjb3BlLiBIbW0sIGJ1dC4uLiBJIGRvIHJlbWVtYmVyIGl0IGJlaW5nIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgaW5pdGAgd2l0aGluIGB0Y19hY3Rpb25fb3BzYCwgc28gaXQgaXMgb24gdGhlIHJhZGFyLlxuXG5MZXQgbWUgdGFrZSBhIHN0ZXAgYmFjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgd2l0aGluIGBhY3RfZ2F0ZS5jYC4gUGVyaGFwcyB0aGVyZSdzIGEgbW9yZSBhY2Nlc3NpYmxlIGZ1bmN0aW9uIGluIHRoZXJlIHRoYXQgSSBjYW4gdXNlIGFzIGEgYmV0dGVyIHBvaW50IG9mIGF0dGFjay4gSSdsbCBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoyMC40ODE4NTg4NzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODEzNDU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9BLVowLTldKyBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjIwLjUzMzY4MTU2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNjQwMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGFjdF9nYXRlLmNgIEZ1bmN0aW9uIFNjb3BlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGFjdF9nYXRlLmNgIGZpbGUuIEknbSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHJhbmRvbWx5IGJyb3dzaW5nLCBJIHdhbnQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHRoaW5ncyBnb2luZyBvbiB3aXRoICpub24tc3RhdGljKiBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IGhhdmUgYnJvYWRlciBzY29wZSBhbmQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBTbywgbGV0J3MgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhvc2UuIFRoYXQncyB1c3VhbGx5IHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcsIGF0IGxlYXN0IGluaXRpYWxseS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2V0IG1lIGEgbWFuYWdlYWJsZSBsaXN0IHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjIsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoyNC43MzczMjU1MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY1MTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI0Ljc4MzY5ODQ5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5Mjk4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJZGVudGlmeWluZyBFeHBvcnRlZCBGdW5jdGlvbnM6IEEgUHJhZ21hdGljIEFwcHJvYWNoKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHBpbnBvaW50IHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIG9yIG1vcmUgZ2VuZXJhbGx5LCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRha2UgdGhlIHNpbXBsZXN0IHJvdXRlIGZpcnN0LiBMZXQncyBqdXN0IGRpdmUgcmlnaHQgaW50byByZWFkaW5nIHRoZSBmaWxlIGl0c2VsZi4gVGhlcmUncyBubyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncyB3aXRoIGludHJpY2F0ZSBwYXJzaW5nIG9yIHJlbHlpbmcgb24gZXh0ZXJuYWwgdG9vbHMgcmlnaHQgb2ZmIHRoZSBiYXQuIEEgZGlyZWN0IHNjYW4sIHBlcmhhcHMgd2l0aCBzb21lIGJhc2ljIHBhdHRlcm4gbWF0Y2hpbmcsIGlzIGxpa2VseSBzdWZmaWNpZW50IHRvIGlkZW50aWZ5IGZ1bmN0aW9uIGRlZmluaXRpb25zLiBXZSdyZSBsb29raW5nIGZvciB0aGUgdGVsbHRhbGUgc2lnbnM6IGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEl0J3MgYSBwcmFnbWF0aWMsIFwic2VlIHdoYXQgd2UgY2FuIGZpbmQgcXVpY2tseVwiIGFwcHJvYWNoLiBXZSBjYW4gYWx3YXlzIHJlZmluZSB0aGUgc2VhcmNoIGxhdGVyIGlmIHRoaXMgaW5pdGlhbCBzd2VlcCBkb2Vzbid0IHlpZWxkIHRoZSByZXN1bHRzIHdlJ3JlIGV4cGVjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI4LjEzMjk5OTI5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg4MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI4LjE3OTY0ODEyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI2MjIxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBHYXRlIEFjdGlvbiBDb2RlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYCBmaWxlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBcImdhdGVcIiBhY3Rpb24sIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29kZSB0aGF0IHJlbGF0ZSB0byB0aGlzIFwiZ2F0ZVwiIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSdtIHRhcmdldGluZyBsaW5lcyB0aGF0IGxpa2VseSBkZWNsYXJlIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGlzIGdhdGUgYmVoYXZpb3IuXG5cblRvIGRvIHRoaXMgZWZmaWNpZW50bHksIEknbGwgc2VhcmNoIGZvciBwYXR0ZXJucyB0aGF0IGFyZSBjb21tb25seSB1c2VkIGluIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuIEknbGwgc3RhcnQgd2l0aCBgXmludCBgLCBgXnZvaWQgYCwgYW5kIGBec3RhdGljIGAuIFRoZXNlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gaWRlbnRpZnkgaW50ZWdlci1yZXR1cm5pbmcgZnVuY3Rpb25zIG9yIHZvaWQtcmV0dXJuaW5nIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBzdGF0aWMgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgYW5kIGhlbHAgbmFycm93IG15IGZvY3VzIHdpdGhpbiB0aGF0IGNvZGUgYmFzZS4gT25jZSBJIGhhdmUgdGhlIG91dHB1dCBmcm9tIHRoZSBncmVwLCBJIGNhbiBxdWlja2x5IGhvbWUgaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjozMi4xMDU4NzM3NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkxMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0xNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhdGVfcG9saWN5W1RDQV9HQVRFX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE4MTpzdGF0aWMgaW50IGZpbGxfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMDUtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjA2OnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICpuLCBzdHJ1Y3QgIHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA3LVxcdFxcdFxcdCAgICBpbnQgaW5kZXgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIyMz1zdGF0aWMgdm9pZCByZWxlYXNlX2VudHJ5X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZW50cmllcylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzMi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMzM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc3JjLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzA3PXN0YXRpYyBib29sIGdhdGVfdGltZXJfbmVlZHNfY2FuY2VsKHU2NCBiYXNldGltZSwgdTY0IG9sZF9iYXNldGltZSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMTc6c3RhdGljIGludCBnYXRlX2Nsb2NrX3Jlc29sdmUoczMyIGNsb2NraWQsIGVudW0gdGtfb2Zmc2V0cyAqdGtvLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zMzk9c3RhdGljIHZvaWQgZ2F0ZV9zZXR1cF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIHMzMiBjbG9ja2lkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NTcxPXN0YXRpYyB2b2lkIHRjZl9nYXRlX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4MS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1ODI6c3RhdGljIGludCBkdW1waW5nX2VudHJ5KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgzLVxcdFxcdFxcdCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxMi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2MTM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjE0LVxcdFxcdFxcdCBpbnQgYmluZCwgaW50IHJlZilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTY5NT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9lbnRyeV9kZXN0cnVjdG9yKHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MDEtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MDMtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzE1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcxNjpzdGF0aWMgaW50IHRjZl9nYXRlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXFx0XFx0XFx0XFx0ICAgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3Ny1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgZ2F0ZV9pbml0X21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjMyLjE1NTI3MjE5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2OTEyNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBjb2RlIGZvciB0aGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgYW5kIHRoZSBzcGVjaWZpYyBtb3RpdmF0aW9ucyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBpdC4gQXJlIHdlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB0aHJlYWQgc2FmZXR5IGlzc3Vlcz8gT3IgcGVyaGFwcyB0cnlpbmcgdG8gdW5kZXJzdGFuZCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudCB3aXRoaW4gYSBsYXJnZXIgZGVzaWduPyBNYXliZSBldmVuIHNlYXJjaGluZyBmb3Igb3Bwb3J0dW5pdGllcyB0byByZWZhY3RvciBhbmQgb3B0aW1pemUgYXJvdW5kIHNoYXJlZCBzdGF0ZT8gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlc2Ugbm9uLXN0YXRpYyBtZXRob2RzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBzdGVwcyBpbiBteSBhbmFseXNpcywgYW5kIEnigJlsbCBiZSB0dW5pbmcgbXkgYXBwcm9hY2ggYWNjb3JkaW5nbHkuIFRoaXMgc2VlbXMgYSBzdHJhaWdodGZvcndhcmQgc3RhcnRpbmcgcG9pbnQsIGEgYmFzaWMgYnV0IGVzc2VudGlhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgY2FuIGRldmVsb3AgYW4gaW4tZGVwdGggdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MzUuMTYyMTg4MjY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQzOTc3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjM1LjIwNzYzNTYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjM1OTAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWN0X2dhdGUuY2AgTW9kdWxlKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIG1vZHVsZS4gSG1tLCBpbml0aWFsbHksIEkgd2FzIGFzc3VtaW5nIGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgd2VyZSBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBldmVuIGBnYXRlX2luaXRfbW9kdWxlYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gQWgsIHllcywgY29uZmlybWVkIGJ5IGBtb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKWAuIFRoaXMgbWVhbnMgd2UgY2FuJ3QgZGlyZWN0bHkgZXhwb3J0IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBmcm9tIHRoaXMgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEkgd291bGQgdXN1YWxseSBleHBlY3Qgd2hlbiBkZWFsaW5nIHdpdGggbW9kdWxlIGluaXQuIEJ1dCBoYW5nIG9uLi4uIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgaXMgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICphY3R1YWwqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgaW4gYGFjdF9nYXRlLmNgPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjozOC44MzEyMjkzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzI0OTM1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjM4Ljg3NDk2MDk0OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU5NTc0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBhY3RfZ2F0ZS5jYCBmb3IgUHVibGljIEludGVyZmFjZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgZmlsZS4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQsIGFuZCB0aGUgdGhpbmcgSSdsbCB1c3VhbGx5IGNoZWNrIGZpcnN0LCBpcyB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCAqYXJlbid0KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBjb25maW5lcyBvZiB0aGF0IHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGZvbGxvd2VkIHJlYXNvbmFibHkgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGhlcmUsIHNvIHRoYXQgYW55dGhpbmcgbWVhbnQgdG8gYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UgaXMgZGVjbGFyZWQgd2l0aG91dCBgc3RhdGljYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZGluZyB3aGF0IGhvb2tzIGFyZSBhdmFpbGFibGUuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc3RhcnQgc2Nhbm5pbmcuLi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjQyLjEzNDUzODM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc4OTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcztcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMTpzdGF0aWMga3RpbWVfdCBnYXRlX2dldF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMi17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNzpzdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zOC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwYXJhbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4OnN0YXRpYyB2b2lkIGdhdGVfc3RhcnRfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBrdGltZV90IHN0YXJ0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcxOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcyLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTEyMj1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhdGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTMtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTU0Om92ZXJsaW1pdDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTUtXFx0dGNmX2FjdGlvbl9pbmNfb3ZlcmxpbWl0X3FzdGF0cyhcXHUwMDI2Z2FjdC1cXHUwMDNlY29tbW9uKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxNTY6ZHJvcDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTctXFx0dGNmX2FjdGlvbl9pbmNfZHJvcF9xc3RhdHMoXFx1MDAyNmdhY3QtXFx1MDAzZWNvbW1vbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNjAtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBlbnRyeV9wb2xpY3lbVENBX0dBVEVfRU5UUllfTUFYICsgMV0gPSB7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTYyLVxcdFtUQ0FfR0FURV9FTlRSWV9JTkRFWF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNjgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnYXRlX3BvbGljeVtUQ0FfR0FURV9NQVggKyAxXSA9IHtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNzAtXFx0W1RDQV9HQVRFX1BBUk1TXVxcdFxcdD1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4MC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxODE6c3RhdGljIGludCBmaWxsX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODItXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIwNjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqbiwgc3RydWN0ICB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwNy1cXHRcXHRcXHQgICAgaW50IGluZGV4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjItXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjIzOnN0YXRpYyB2b2lkIHJlbGVhc2VfZW50cnlfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyaWVzKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIyNC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzItXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjMzOnN0YXRpYyBpbnQgdGNmX2dhdGVfY29weV9lbnRyaWVzKHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKmRzdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzQtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNyYyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2MS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyNjI6c3RhdGljIGludCBwYXJzZV9nYXRlX2xpc3Qoc3RydWN0IG5sYXR0ciAqbGlzdF9hdHRyLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2My1cXHRcXHRcXHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDE6cmVsZWFzZV9saXN0Olxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMi1cXHRyZWxlYXNlX2VudHJ5X2xpc3QoXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDc6c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwOC1cXHRcXHRcXHRcXHQgICAgZW51bSB0a19vZmZzZXRzIHRrbyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMTc6c3RhdGljIGludCBnYXRlX2Nsb2NrX3Jlc29sdmUoczMyIGNsb2NraWQsIGVudW0gdGtfb2Zmc2V0cyAqdGtvLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zMzgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzM5OnN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDAtXFx0XFx0XFx0ICAgICBlbnVtIHRrX29mZnNldHMgdGtvKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTQ1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU0NjplcnJfZnJlZTpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDctXFx0cmVsZWFzZV9lbnRyeV9saXN0KFxcdTAwMjZwLVxcdTAwM2VlbnRyaWVzKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDgtXFx0a2ZyZWUocCk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTQ5OmNoYWluX3B1dDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NTAtXFx0aWYgKGdvdG9fY2gpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTUxLVxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU1MjpyZWxlYXNlX2lkcjpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NTMtXFx0LyogYWN0aW9uIGlzIG5vdCBpbnNlcnRlZCBpbiBhbnkgbGlzdDogaXQncyBzYWZlIHRvIGluaXQgaGl0aW1lclxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTYyLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU2MzpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU2NC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzAtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTcxOnN0YXRpYyB2b2lkIHRjZl9nYXRlX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzIte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4MjpzdGF0aWMgaW50IGR1bXBpbmdfZW50cnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01ODMtXFx0XFx0XFx0IHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYwODpubGFfcHV0X2ZhaWx1cmU6XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA5LVxcdG5sYV9uZXN0X2NhbmNlbChza2IsIGl0ZW0pO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjEyLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYxMzpzdGF0aWMgaW50IHRjZl9nYXRlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTQtXFx0XFx0XFx0IGludCBiaW5kLCBpbnQgcmVmKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjczLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY3NDpubGFfcHV0X2ZhaWx1cmU6XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjc1LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjc5LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MDpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODEtXFx0XFx0XFx0XFx0ICB1NjQgZHJvcHMsIHU2NCBsYXN0dXNlLCBib29sIGh3KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjg5LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY5MDpzdGF0aWMgc2l6ZV90IHRjZl9nYXRlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5MS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02OTQtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njk1OnN0YXRpYyB2b2lkIHRjZl9nYXRlX2VudHJ5X2Rlc3RydWN0b3Iodm9pZCAqcHJpdilcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02OTYte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcwMjpzdGF0aWMgaW50IHRjZl9nYXRlX2dldF9lbnRyaWVzKHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcxNS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzE3LVxcdFxcdFxcdFxcdCAgICAgIHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDMtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzQ0OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ1LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJnYXRlXFxcIixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc1Nz1NT0RVTEVfQUxJQVNfTkVUX0FDVChcXFwiZ2F0ZVxcXCIpO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1OC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTk6c3RhdGljIF9fbmV0X2luaXQgaW50IGdhdGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc2MC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NjUtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzY2OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZ2F0ZV9leGl0X25ldChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03Njcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzcwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc3MTpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzItXFx0LmluaXQgPSBnYXRlX2luaXRfbmV0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc3ODpzdGF0aWMgaW50IF9faW5pdCBnYXRlX2luaXRfbW9kdWxlKHZvaWQpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc4Mi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3ODM6c3RhdGljIHZvaWQgX19leGl0IGdhdGVfY2xlYW51cF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03ODQte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzg3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4ODptb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3ODk6bW9kdWxlX2V4aXQoZ2F0ZV9jbGVhbnVwX21vZHVsZSk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzkwLU1PRFVMRV9ERVNDUklQVElPTihcXFwiVEMgZ2F0ZSBhY3Rpb25cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NDIuMTgwMzMxODQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzExMjEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNmX2dhdGVfYWN0YCBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIGB0Y2ZfZ2F0ZV9hY3RgIGlzICpub3QqIGEgc3RhdGljIHZhcmlhYmxlLCB3aGljaCBpbml0aWFsbHkgdGhyZXcgbWUgZm9yIGEgbG9vcC4gQnV0IGhhbmcgb24sIEkgc2VlIGl0J3MgZGVjbGFyZWQgd2l0aCBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdGAuICBgVENfSU5ESVJFQ1RfU0NPUEVgIHR5cGljYWxseSBpbXBsaWVzIHNvbWV0aGluZyBsaWtlIGBfX21heWJlX3VudXNlZGAgb3IgYSBzaW1pbGFyIGNvbXBpbGVyIGhpbnQgdG8gcG90ZW50aWFsbHkgcHJldmVudCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGl0J3MgKmFwcGxpZWQgdG8gYSBub24tc3RhdGljIGZ1bmN0aW9uKi5cblxuVGhhdCBjb21iaW5hdGlvbiBpcyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGlzIHBlY3VsaWFyaXR5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgYHRjZl9nYXRlX2FjdGAgaXMgZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZ2F0ZSdzIGJlaGF2aW9yIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo0NS45NTE0NTU2ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzYwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9nYXRlX2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz03MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxMjI6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDctXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0ODpcXHQuYWN0XFx0XFx0PVxcdHRjZl9nYXRlX2FjdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDktXFx0LmR1bXBcXHRcXHQ9XFx0dGNmX2dhdGVfZHVtcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NDUuOTk5MjIwODQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDA5NzcyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB0Y2ZfZ2F0ZSBDb2RlIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0Y2ZfZ2F0ZV9hY3RgIGlzIGNsZWFybHkgdGhlIG1haW4gYC5hY3RgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaG90IHBhdGggZm9yIHRoZSBUQyBhY3Rpb24uIEJ1dCB0aGUgYWN0dWFsIGNoYW5nZSBJJ20gaW50ZXJlc3RlZCBpbiBsaWVzIHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAuIFdhaXQsIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBzdGF0aWMuLi4gYnV0IGl0ICppcyogdGhlIGAuaW5pdGAgZnVuY3Rpb24gZm9yIGBhY3RfZ2F0ZV9vcHNgLCBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gSW50ZXJlc3RpbmcuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZS5cblxuU28sIGluaXRpYWxseSwgSSBjb25zaWRlcmVkIHVzaW5nIGB0Y2ZfZ2F0ZV9hY3RgIGFzIGEgZm9jdXMgc3ltYm9sIG9yIGV2ZW4gbm90IHNwZWNpZnlpbmcgYSBmb2N1cyBzeW1ib2wgYXQgYWxsIGdpdmVuIHRoZSBsYWNrIG9mIGdvb2QgY2FuZGlkYXRlcy4gSG93ZXZlciwgYHRjZl9nYXRlX2FjdGAgaXMgYSAqaG90IHBhdGgqIGZ1bmN0aW9uLCBjYWxsZWQgZm9yIGV2ZXJ5IHBhY2tldC4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cyB0aGVyZTsgdGhhdCdzIGdlbmVyaWMuIFNpbmNlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYywgbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucyB0byBjb25zaWRlciwgaXQgbG9va3MgbGlrZSB3ZSBjYW4gbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgYHRjZl9nYXRlX2luaXRgIHJlYWNoYWJsZT8gWWVzLCB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aGUgY2hhbmdlIGl0c2VsZi4uLiBBaCwgaGVyZSBpdCBpczogYSBjcnVjaWFsIHZhbGlkYXRpb24gY2hlY2sgb24gYGN5Y2xldGltZWAuIEl0IG5vdyBjaGVja3MgaWYgYGN5Y2xldGltZWAgaXMgd2l0aGluIHRoZSByYW5nZSAwIHRvIGBJTlRfTUFYYCwgYW5kIHRocm93cyBhbiBlcnJvciBpZiBub3QuIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggY2xlYXIgZXJyb3IgaGFuZGxpbmcuIFdlJ2xsIGJlIGFibGUgdG8gY3JlYXRlIGludGVyZXN0aW5nIHRlc3QgY2FzZXMgYnkgZ2VuZXJhdGluZyB2YWx1ZXMgb2YgYGN5Y2xldGltZWAgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgd2UgbmVlZCBib3RoIGBORVRfQUNUX0dBVEVgIGFuZCBgTkVUX0NMU19BQ1RgLiBJdCBpcyBhIGdvb2QgdGhpbmcgdG8gZG91YmxlIGNoZWNrIGlmIHRoZSBmaXJzdCBvbmUgaXMgZW5vdWdoLiBZZXMsIGBORVRfQUNUX0dBVEVgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYC4gVGhlcmVmb3JlIHdlIHdpbGwgcmV0dXJuIGJvdGguIE5vdywgbGV0IG1lIGNoZWNrIGFnYWluIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBvdGhlciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NTQuMDAwMjAwOTA3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcwNTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9HQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTkxNz1jb25maWcgTkVUX0FDVF9DVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTI5LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkzMDpjb25maWcgTkVUX0FDVF9HQVRFXFxubmV0L3NjaGVkL0tjb25maWctOTMxLVxcdHRyaXN0YXRlIFxcXCJGcmFtZSBnYXRlIGVudHJ5IGxpc3QgY29udHJvbCB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjU0LjA0NzkxMDA0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQxNjMxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgTkVUX0NMU19BQ1RgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgbW9kdWxlIGZ1bmN0aW9ucyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyBvciBjb25mbGljdHMgd2l0aGluIHRoZSBleGlzdGluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byB0aGlzIG1vZHVsZSBhbmQgc2VlIHdoZXJlIHRoZXkgb3JpZ2luYXRlLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIHJlbGllcyBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgY29tcG9uZW50cywgb3IgYXJlIHRoZXJlIGFueSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBpbnZvbHZlZD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFzIHdlbGwsIG9idmlvdXNseS4gVGhvc2UgYXJlIGFsd2F5cyBhIGhlYWRhY2hlIGFuZCBjYW4gY2F1c2UgcmVhbGx5IGRpZmZpY3VsdC10by1kZWJ1ZyBwcm9ibGVtcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB2ZXJzaW9uIG51bWJlcnMgYXJlIGNvbXBhdGlibGUsIGVzcGVjaWFsbHkgaWYgdGhpcyB1dGlsaXplcyBhbnkgdGhpcmQgcGFydHkgbGlicmFyaWVzLiBGaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga25vd24gYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIGRlcGVuZGVuY2llcy4gQSBnb29kIGRlcGVuZGVuY3kgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo1Ny4zODk1NDM3MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTYyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo1Ny40MzUxMDk4OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjE1OTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBLZXJuZWwncyBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBhZ2Fpbi5cIiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVF9DTFNfQUNUYC4gVGhlIG5hbWUgYWxvbmUgc2NyZWFtcyBcIm5ldHdvcmsgY2xhc3NpZmljYXRpb24gYW5kIGFjdGlvbixcIiBidXQgdGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgaG93IGl0J3MgY29uZmlndXJlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBuYXZpZ2F0ZSB0byBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCdzIEtjb25maWcgZm9yIGEgcmVhc29uOyB0aGlzIGZpbGUgKmhhcyogdG8gaG9sZCB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB1bnJhdmVsLiBVbmRlcnN0YW5kaW5nIGhvdyBgTkVUX0NMU19BQ1RgIGlzIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBmaWd1cmluZyBvdXQgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyAqdXNlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0aGUgc3BlY2lmaWNzIHNvIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIG15IHNwZWNpZmljIHByb2plY3QuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDAuNzU3MjcxMjYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5NTpcXHRcXHQgIG1hdGNoZXMuXFxuIDY5NjpcXHRcXHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFxcXCJwb2xpY3lcXFwiIHdoaWNoIGFsbG93cyBwYWNrZXQgY2xhc3NpZmljYXRpb25cXG4gNjk3OlxcdFxcdCAgYmFzZWQgb24gSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb25cXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcwMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXFxuIDcwMTpcXHRcXG4gNzAyOlxcdGNvbmZpZyBORVRfQ0xTX0FDVFxcbiA3MDM6XFx0XFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG4gNzA0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDcwNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTU1xcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xcbiA3MDg6XFx0XFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxcbiA3MDk6XFx0XFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXFxuIDcxMDpcXHRcXHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXFxuIDcxMzpcXHRcXHQgIGV4dGVuZGVkIG1hdGNoZXMuXFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDAuNzU3MzYyMzMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk0MTI2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCBhbmQgSSBub3RpY2UgaXQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBlbnRyeSBpbiBpdHMgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgYWx3YXlzIGxvb2sgZm9yIHRob3NlLiBCdXQgdGhlbiBJIHNlZSB0aGF0IGl0J3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gQWxyaWdodCwgdGltZSB0byBnbyBjaGVjayBgTkVUX1NDSEVEYCdzIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSB3aGF0J3MgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiwgYW5kIHRoZXJlZm9yZSwgcG90ZW50aWFsbHksIGluZGlyZWN0bHksIHRoZSBpbmNsdXNpb24gb2YgYE5FVF9DTFNfQUNUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxvZ2ljIGNoYWluIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzowNC4xMTY3Nzc1MzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTI5NTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDQuNDg4MDgwNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODc4OTAyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUX1NDSEVEIEtjb25maWcgRW50cnkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9TQ0hFRGAgS2NvbmZpZyBlbnRyeSB3aXRoaW4gYG5ldC9zY2hlZC9gLiBGaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHNhbWUgcGFnZSBhbmQga25vdyB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgZmVhdHVyZXMgZG9lcyBpdCBlbmFibGU/IERvZXMgaXQgbWFrZSB1c2Ugb2YgYW55IHNwZWNpZmljIGhhcmR3YXJlIG9yIHRlY2hub2xvZ2llcz8gSSdsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiB0aGUgbG9naWMgYmVoaW5kIGl0cyBkZWZhdWx0IHNldHRpbmcuIFdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBtYWtlIHVzIHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQ/IEknbGwgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UuIEtub3dpbmcgdGhlIGlucyBhbmQgb3V0cyBvZiB0aGlzIHNldHRpbmcgaXMgY3JpdGljYWwgZm9yIGZpbmUtdHVuaW5nIG91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDguMzc1OTc0NzkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcXG4gIDE3OlxcdFxcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXFxuICAxOTpcXHRcXHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXFxuICAyMDpcXHRcXHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzowOC4zNzYwNjgzOTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5ODcxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfU0NIRUQgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBhIHJlcXVpcmVkIGNvbXBvbmVudCBmb3Igd2hhdGV2ZXIgSSdtIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBtYWtlIHN1cmUgaXQncyBwcm9wZXJseSBjb25maWd1cmVkLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzOyBub3RoaW5nIGlzIHdvcnNlIHRoYW4gaGF2aW5nIHNvbWV0aGluZyBmYWlsIGJlY2F1c2UgYSBwcmUtcmVxdWlzaXRlIGlzbid0IHNhdGlzZmllZC4gSG1tLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIG5vIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuIEl0J3MganVzdCBhIHRvcC1sZXZlbCBgbWVudWNvbmZpZ2Agb3B0aW9uLiBXYWl0IGEgc2Vjb25kLCB3aGVyZSBpcyB0aGlzIGRlZmluZWQ/IEFoLCBpdCBsaXZlcyBpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgbm93IEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCBlbHNlIEkgY2FuIGdsZWFuIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBzZWUgaG93IGBORVRfU0NIRURgIGlzIGNvbm5lY3RlZCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoxMy44NzQ3OTAwMjJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTg0MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI2OT1zb3VyY2UgXFxcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzA6c291cmNlIFxcXCJuZXQvc2NoZWQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNzEtc291cmNlIFxcXCJuZXQvZGNiL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjEzLjk2ODM4MTU5M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA5NzExOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldC9LY29uZmlnYCwgYW5kIHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbGluZSBgc291cmNlIFwibmV0L3NjaGVkL0tjb25maWdcImAuIFByZXR0eSBzdGFuZGFyZCBLY29uZmlnIHN0dWZmLCBidXQgY29udGV4dCBpcyBhbHdheXMga2V5LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGVuc3VyZSBJJ3ZlIGdvdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBpbiBtaW5kLiBXaGF0IGRlcGVuZGVuY2llcyBtaWdodCBgbmV0L3NjaGVkL0tjb25maWdgIGludHJvZHVjZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2Agc2NvcGU/IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIGluY2x1c2lvbiBhZmZlY3RzIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IG9wdGlvbnMgaXQgcG90ZW50aWFsbHkgdW5sb2NrcyAob3IgcmVzdHJpY3RzKS5cblxuU28sIGxldCBtZSB6b29tIGluIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEknbGwgcXVpY2tseSBzY2FuIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgZmlsZXMsIG9yIGV4dGVybmFsIHZhcmlhYmxlcyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIGluY2x1c2lvbiwgb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIERvZXMgYG5ldC9zY2hlZC9LY29uZmlnYCBpbnRyb2R1Y2UgbmV3IHN5bWJvbHMgb3IgcmVkZWZpbmUgZXhpc3Rpbmcgb25lcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBpbmNsdWRlcyBvciBleGNsdXNpb25zIGRlcGVuZGVudCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uPyBUaGlzIGlzIGFsbCBhYm91dCBlZmZpY2llbnRseSBtYXBwaW5nIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBtb2R1bGUgaXMgaW50ZWdyYXRlZC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgbmV0L3NjaGVkL0tjb25maWdgIGV4cGFuZHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgdG8gdGhlIHVzZXIgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBzY2hlZHVsaW5nLiBUaW1lIHRvIGdldCBkb3duIHRvIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MTcuODc4MDk2NDA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG4gMjYxOlxcdHNvdXJjZSBcXFwibmV0L2RzYS9LY29uZmlnXFxcIlxcbiAyNjI6XFx0c291cmNlIFxcXCJuZXQvODAyMXEvS2NvbmZpZ1xcXCJcXG4gMjYzOlxcdHNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbiAyNjQ6XFx0c291cmNlIFxcXCJuZXQveDI1L0tjb25maWdcXFwiXFxuIDI2NTpcXHRzb3VyY2UgXFxcIm5ldC9sYXBiL0tjb25maWdcXFwiXFxuIDI2NjpcXHRzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG4gMjY3OlxcdHNvdXJjZSBcXFwibmV0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gMjY4OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjY5OlxcdHNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbiAyNzA6XFx0c291cmNlIFxcXCJuZXQvc2NoZWQvS2NvbmZpZ1xcXCJcXG4gMjcxOlxcdHNvdXJjZSBcXFwibmV0L2RjYi9LY29uZmlnXFxcIlxcbiAyNzI6XFx0c291cmNlIFxcXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcXFwiXFxuIDI3MzpcXHRzb3VyY2UgXFxcIm5ldC9iYXRtYW4tYWR2L0tjb25maWdcXFwiXFxuIDI3NDpcXHRzb3VyY2UgXFxcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXFxcIlxcbiAyNzU6XFx0c291cmNlIFxcXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcXFwiXFxuIDI3NjpcXHRzb3VyY2UgXFxcIm5ldC9uZXRsaW5rL0tjb25maWdcXFwiXFxuIDI3NzpcXHRzb3VyY2UgXFxcIm5ldC9tcGxzL0tjb25maWdcXFwiXFxuIDI3ODpcXHRzb3VyY2UgXFxcIm5ldC9uc2gvS2NvbmZpZ1xcXCJcXG4gMjc5OlxcdHNvdXJjZSBcXFwibmV0L2hzci9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoxNy44NzgxODU0NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3OTcyNzEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZzogVGhlIHRjZl9nYXRlX2luaXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29ya2luZyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBhIGdvb2Qgc3BvdCBmb3IgZnV6emluZy4gSSBzZWUgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCdzIGJ1cmllZCBpbnNpZGUgdGhlIGBtZW51IFwiTmV0d29ya2luZyBvcHRpb25zXCJgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVwZW5kZW50IG9uIGBORVRgLiBUaGVyZWZvcmUsIGl04oCZcyByZWxhdGVkIHRvIGBORVRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGBORVRfQUNUX0dBVEVgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBgdGNmX2dhdGVfaW5pdGAuIE15IGZvY3VzIGhhZCBiZWVuIG9uIGZpbmRpbmcgYSBzdWl0YWJsZSBlbnRyeSBwb2ludCwgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEF0IGZpcnN0LCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYmVjYXVzZSBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJIHdhcyB3b3JyaWVkIHRoaXMgbWlnaHQgbWVhbiBpdCB3b3VsZCBiZSBpbmxpbmVkIGFuZCB3b3VsZG4ndCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBpbWFnZSwgd2hpY2ggd291bGQgbWFrZSBpdCBsZXNzIGlkZWFsIGZvciBmdXp6aW5nLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHdhaXQgYSBtaW51dGUsIHRoZSBhZGRyZXNzIG9mIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBhY3R1YWxseSB0YWtlbiEgSXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgLlxuXG5UaGlzIGlzIHRoZSBrZXkuIFNpbmNlIGEgc3RhdGljIGZ1bmN0aW9uIGhhcyBpdHMgYWRkcmVzcyB0YWtlbiwgdGhlIGNvbXBpbGVyICptdXN0KiBnZW5lcmF0ZSBhIGRpc3RpbmN0IGZ1bmN0aW9uIGZvciBpdC4gVGhhdCBtZWFucyBgdGNmX2dhdGVfaW5pdGAgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCEgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiB0aG91Z2guIFllcywgY29uZmlybWVkLiBXaGVuIGEgc3RhdGljIGZ1bmN0aW9u4oCZcyBhZGRyZXNzIGlzIHVzZWQsIHRoZSBjb21waWxlciBtdXN0IGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoZXJlJ3MgYSBwb2ludGVyIHRvIGl0LlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gYWRkaW5nIGB0Y2ZfZ2F0ZV9pbml0YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBhZGRpbmcgdmFsaWRhdGlvbiB0byBgY3ljbGV0aW1lYCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0aGUgVEMgYWN0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIHByaW1lIGZ1enppbmcgdGVycml0b3J5LlxuXG5NeSBjb25maWcgcmVxdWlyZW1lbnRzIGFyZTogYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAuIE15IGBGb2N1c1N5bWJvbHNgIGlzIGB0Y2ZfZ2F0ZV9pbml0YC4gVGltZSB0byBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGF0IGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MjYuNTU3OTE2MjAyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM5NzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoyNi42MTEzMTc5NjdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzNDM1NjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgIGlzIGNvcnJlY3QuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dCB0aGF0IEkndmUgbWlzc2VkLiBMZXQncyB0cmFjZSB0aGVzZSBkZXBlbmRlbmNpZXMuIEkgc2VlIGBORVRfQUNUX0dBVEVgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYC4gQW5kIGxvb2tpbmcgZnVydGhlciwgYE5FVF9DTFNfQUNUYCBpcyBwYXJ0IG9mIGBORVRfU0NIRURgLiBGaW5hbGx5LCBgTkVUX1NDSEVEYCBiZWxvbmdzIHRvIGBORVRgLiBBbHJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgTkVUYCwgYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9HQVRFYCBhcmUgYWxsIGNvcnJlY3RseSBjb25maWd1cmVkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTUsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjMxLjQ0NTY3NzcyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzAzODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MzEuNTI2OTg3Nzk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MTkyMzEwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzozMS41Mjc0NDA5MDdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwOTE4NzczODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGV4Y2VlZCBgSU5UX01BWGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgYSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIChlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIG5ldGxpbmsgYXR0cmlidXRlcyBvciBjYWxjdWxhdGVkIGZyb20gZW50cnkgaW50ZXJ2YWxzKSBjYW4gY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2FuIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCwgY2F1c2luZyB0aGUgaHJ0aW1lciB0byBiZSBzZXQgaW4gdGhlIHBhc3QgYW5kIHRyaWdnZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBvZiB0aW1lciBpbnRlcnJ1cHRzIChhIERlbmlhbCBvZiBTZXJ2aWNlIGJ1ZykuXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG5pbmRleCBmZGJmY2FhM2UyYWI5Li4zMGJjZjE3MzI3NGNiIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9nYXRlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG5AQCAtNTAxLDYgKzUwMSwxNCBAQCBzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcdFx0Y3ljbGV0aW1lID0gY3ljbGU7XG4gXHR9XG4rXG4rXHRpZiAoY3ljbGV0aW1lIFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcIik7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1x0fVxuK1xuIFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcbiBcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0ID0gY3ljbGV0aW1lX2V4dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjMxLjUyNzQ0MTcxN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAyMzEzOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWN0X0dhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQncyB2ZXJpZnlpbmcgaWYgYGN5Y2xldGltZWAgZmFsbHMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSAoMCB0byBgSU5UX01BWGApLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGxvZ2ljIG9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBUaGUgY2hlY2sgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYGN5Y2xldGltZWAgaXMgbmVnYXRpdmUgb3IgZXhjZWVkcyBgSU5UX01BWGAsIGFuIGVycm9yIGlzIHRyaWdnZXJlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGRhdGEgdHlwZSBvZiBgY3ljbGV0aW1lYD9cIiBJIHJlY2FsbCB0aGF0IGBrdGltZV9hZGRfbnNgIHJldHVybnMgYSBga3RpbWVfdGAsIHdoaWNoLCBJIGJlbGlldmUsIHJlc29sdmVzIHRvIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBvciBwb3NzaWJseSBhbiB1bnNpZ25lZCBvbmUgaW4gc29tZSBjb250ZXh0cy4gU28sIGBjeWNsZXRpbWVgIGlzIGxpa2VseSBhbiBgczY0YCBvciBgdTY0YC4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBjb25jZXJuIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgYGN5Y2xldGltZWAgZnJvbSB2ZW50dXJpbmcgYmV5b25kIHRoZXNlIGRlZmluZWQgYm91bmRzLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHNpbXBseSBhIHZhbGlkYXRpb24gc3RlcC4gSG93ZXZlciwgaXQncyBhbHdheXMgcHJ1ZGVudCB0byBkb3VibGUtY2hlY2sgZXJyb3IgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBlcnJfZnJlZWAgcGF0aCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBzdGF0ZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGF0ZWQgY29uY2VybnMgaWYgdGhlIGNoZWNrIGZhaWxzLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGRvZXNuJ3QgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMsIGV2ZW4gaWYgaXQgYWltcyB0byBmaXggb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MzcuMjI5NzU4NjkzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwNjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzozNy4yNzc1Njk2NDhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTAyNjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjZl9nYXRlX2luaXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbi4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGdhdGUgaW5pdGlhbGl6YXRpb24gYmVnaW5zLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiDigJMgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIHJlc29sdmVkLiBUaGlzIGluaXRpYWwgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGhpZ2gtbGV2ZWwgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc3RhcnQgZXhhbWluaW5nIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBvdXRzZXQsIHRvIGRldGVybWluZSBob3cgdGhlIGBnYXRlYCBpcyBiZWluZyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjQwLjE2ODU5ODkyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0NzpcXHRzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIDM0ODpcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4gMzQ5OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGZsYWdzLFxcbiAzNTA6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2dhdGVfb3BzLm5ldF9pZCk7XFxuIDM1MzpcXHRcXHR1NjQgY3ljbGV0aW1lID0gMCwgYmFzZXRpbWUgPSAwLCBjeWNsZXRpbWVfZXh0ID0gMDtcXG4gMzU0OlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnAgPSBOVUxMLCAqb2xkX3AgPSBOVUxMO1xcbiAzNTU6XFx0XFx0ZW51bSB0a19vZmZzZXRzIG9sZF90a19vZmZzZXQgPSBUS19PRkZTX1RBSTtcXG4gMzU2OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKmN1cl9wID0gTlVMTDtcXG4gMzU3OlxcdFxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbiAzNTg6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0dBVEVfTUFYICsgMV07XFxuIDM1OTpcXHRcXHRlbnVtIHRrX29mZnNldHMgdGtvID0gVEtfT0ZGU19UQUk7XFxuIDM2MDpcXHRcXHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcXG4gMzYxOlxcdFxcdHMzMiB0aW1lcl9jbG9ja2lkID0gQ0xPQ0tfVEFJO1xcbiAzNjI6XFx0XFx0Ym9vbCB1c2Vfb2xkX2VudHJpZXMgPSBmYWxzZTtcXG4gMzYzOlxcdFxcdHMzMiBvbGRfY2xvY2tpZCA9IENMT0NLX1RBSTtcXG4gMzY0OlxcdFxcdGJvb2wgbmVlZF9jYW5jZWwgPSBmYWxzZTtcXG4gMzY1OlxcdFxcdHMzMiBjbG9ja2lkID0gQ0xPQ0tfVEFJO1xcbiAzNjY6XFx0XFx0c3RydWN0IHRjZl9nYXRlICpnYWN0O1xcbiAzNjc6XFx0XFx0c3RydWN0IHRjX2dhdGUgKnBhcm07XFxuIDM2ODpcXHRcXHR1NjQgb2xkX2Jhc2V0aW1lID0gMDtcXG4gMzY5OlxcdFxcdGludCByZXQgPSAwLCBlcnI7XFxuIDM3MDpcXHRcXHR1MzIgZ2ZsYWdzID0gMDtcXG4gMzcxOlxcdFxcdHMzMiBwcmlvID0gLTE7XFxuIDM3MjpcXHRcXHRrdGltZV90IHN0YXJ0O1xcbiAzNzM6XFx0XFx0dTMyIGluZGV4O1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRpZiAoIW5sYSlcXG4gMzc2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfR0FURV9NQVgsIG5sYSwgZ2F0ZV9wb2xpY3ksIGV4dGFjayk7XFxuIDM3OTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMzgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlmICghdGJbVENBX0dBVEVfUEFSTVNdKVxcbiAzODM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmICh0YltUQ0FfR0FURV9DTE9DS0lEXSlcXG4gMzg2OlxcdFxcdFxcdGNsb2NraWQgPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9DTE9DS0lEXSk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdHBhcm0gPSBubGFfZGF0YSh0YltUQ0FfR0FURV9QQVJNU10pO1xcbiAzODk6XFx0XFx0aW5kZXggPSBwYXJtLVxcdTAwM2VpbmRleDtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcXG4gMzkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBiaW5kKVxcbiAzOTY6XFx0XFx0XFx0cmV0dXJuIEFDVF9QX0JPVU5EO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRpZiAoIWVycikge1xcbiAzOTk6XFx0XFx0XFx0cmV0ID0gdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyh0biwgaW5kZXgsIGVzdCwgYSxcXG4gNDAwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZhY3RfZ2F0ZV9vcHMsIGJpbmQsIGZsYWdzKTtcXG4gNDAxOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gNDAyOlxcdFxcdFxcdFxcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xcbiA0MDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA0OlxcdFxcdFxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0XFx0XFx0cmV0ID0gQUNUX1BfQ1JFQVRFRDtcXG4gNDA3OlxcdFxcdH0gZWxzZSBpZiAoIShmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHtcXG4gNDA4OlxcdFxcdFxcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XFxuIDQwOTpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNDEwOlxcdFxcdH1cXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0Z2FjdCA9IHRvX2dhdGUoKmEpO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cXHUwMDNlYWN0aW9uLCB0cCwgXFx1MDAyNmdvdG9fY2gsIGV4dGFjayk7XFxuIDQxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDE2OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpO1xcbiA0MTk6XFx0XFx0aWYgKCFwKSB7XFxuIDQyMDpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA0MjE6XFx0XFx0XFx0Z290byBjaGFpbl9wdXQ7XFxuIDQyMjpcXHRcXHR9XFxuIDQyMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlZW50cmllcyk7XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdHVzZV9vbGRfZW50cmllcyA9ICF0YltUQ0FfR0FURV9FTlRSWV9MSVNUXTtcXG4gNDI2OlxcdFxcdGlmICghdXNlX29sZF9lbnRyaWVzKSB7XFxuIDQyNzpcXHRcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XFxuIDQyODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDI5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDQzMDpcXHRcXHRcXHR1c2Vfb2xkX2VudHJpZXMgPSAhZXJyO1xcbiA0MzE6XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAocmV0ID09IEFDVF9QX0NSRUFURUQgXFx1MDAyNlxcdTAwMjYgdXNlX29sZF9lbnRyaWVzKSB7XFxuIDQzNDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUaGUgZW50cnkgbGlzdCBpcyBlbXB0eVxcXCIpO1xcbiA0MzU6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNDM2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDQzNzpcXHRcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdGlmIChyZXQgIT0gQUNUX1BfQ1JFQVRFRCkge1xcbiA0NDA6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0NDE6XFx0XFx0XFx0Y3VyX3AgPSByY3VfZGVyZWZlcmVuY2UoZ2FjdC1cXHUwMDNlcGFyYW0pO1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRcXHRvbGRfYmFzZXRpbWUgID0gY3VyX3AtXFx1MDAzZXRjZmdfYmFzZXRpbWU7XFxuIDQ0NDpcXHRcXHRcXHRvbGRfY2xvY2tpZCAgID0gY3VyX3AtXFx1MDAzZXRjZmdfY2xvY2tpZDtcXG4gNDQ1OlxcdFxcdFxcdG9sZF90a19vZmZzZXQgPSBSRUFEX09OQ0UoZ2FjdC1cXHUwMDNldGtfb2Zmc2V0KTtcXG4gNDQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo0MC4xNjg3MDIzNTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMTExNTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGFuZCB0YWtpbmcgdGhlIGxlYWQgb24gYW5hbHl6aW5nIHRoZSBmdW5jdGlvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIENvZGUqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGdvdCB0aGUgaW5pdGlhbCBnbGltcHNlIG9mIHRoZSBmdW5jdGlvbi4gTm93LCBsZXQncyBub3QganVzdCBzdG9wIHRoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbW92ZSBwYXN0IHRoZSBpbml0aWFsIG92ZXJ2aWV3IGFuZCBzZWUgaG93IGl0IGFsbCB3b3JrcyBpbiBjb250ZXh0LiBJJ2xsIHJlYWQgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiwgdW5kZXJzdGFuZGluZyB3aGF0IGl0cyBzcGVjaWZpYyBjb21wb25lbnRzIGFyZSBhbmQgdGhlIGxvZ2ljIHRoYXQgc3RpdGNoZXMgdGhlbSB0b2dldGhlciB0byBmaW5kIGl0cyBjb21wbGV0ZSBtZWFuaW5nLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGFwcHJlY2lhdGUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NDMuMTk5ODIwNjE0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDc6XFx0XFx0XFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcXG4gNDQ4OlxcdFxcdFxcdGN5Y2xldGltZV9leHQgPSBjdXJfcC1cXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0O1xcbiA0NDk6XFx0XFx0XFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVxcdTAwM2V0Y2ZnX3ByaW9yaXR5O1xcbiA0NTA6XFx0XFx0XFx0Z2ZsYWdzICAgICAgICA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2ZsYWdzO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRcXHRpZiAoIXRiW1RDQV9HQVRFX0NMT0NLSURdKVxcbiA0NTM6XFx0XFx0XFx0XFx0Y2xvY2tpZCA9IG9sZF9jbG9ja2lkO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRcXHRlcnIgPSAwO1xcbiA0NTY6XFx0XFx0XFx0aWYgKHVzZV9vbGRfZW50cmllcykge1xcbiA0NTc6XFx0XFx0XFx0XFx0ZXJyID0gdGNmX2dhdGVfY29weV9lbnRyaWVzKHAsIGN1cl9wLCBleHRhY2spO1xcbiA0NTg6XFx0XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIXRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0Y3ljbGV0aW1lID0gY3VyX3AtXFx1MDAzZXRjZmdfY3ljbGV0aW1lO1xcbiA0NjA6XFx0XFx0XFx0fVxcbiA0NjE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQ2MjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gNDY0OlxcdFxcdH1cXG4gNDY1OlxcdFxcbiA0NjY6XFx0XFx0aWYgKHRiW1RDQV9HQVRFX1BSSU9SSVRZXSlcXG4gNDY3OlxcdFxcdFxcdHByaW8gPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9QUklPUklUWV0pO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAodGJbVENBX0dBVEVfQkFTRV9USU1FXSlcXG4gNDcwOlxcdFxcdFxcdGJhc2V0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQkFTRV9USU1FXSk7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGlmICh0YltUQ0FfR0FURV9GTEFHU10pXFxuIDQ3MzpcXHRcXHRcXHRnZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9GTEFHU10pO1xcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRpZiAodGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXFxuIDQ3NjpcXHRcXHRcXHRjeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGlmICh0YltUQ0FfR0FURV9DWUNMRV9USU1FX0VYVF0pXFxuIDQ3OTpcXHRcXHRcXHRjeWNsZXRpbWVfZXh0ID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKTtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ZXJyID0gZ2F0ZV9jbG9ja19yZXNvbHZlKGNsb2NraWQsIFxcdTAwMjZ0a28sIGV4dGFjayk7XFxuIDQ4MjpcXHRcXHRpZiAoZXJyKVxcbiA0ODM6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gNDg0OlxcdFxcdHRpbWVyX2Nsb2NraWQgPSBjbG9ja2lkO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRuZWVkX2NhbmNlbCA9IHJldCAhPSBBQ1RfUF9DUkVBVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDQ4NzpcXHRcXHRcXHQgICAgICBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbChiYXNldGltZSwgb2xkX2Jhc2V0aW1lLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdGtvLCBvbGRfdGtfb2Zmc2V0LFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdGltZXJfY2xvY2tpZCwgb2xkX2Nsb2NraWQpO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobmVlZF9jYW5jZWwpXFxuIDQ5MjpcXHRcXHRcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2Z2FjdC1cXHUwMDNlaGl0aW1lcik7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHRpZiAoIWN5Y2xldGltZSkge1xcbiA0OTc6XFx0XFx0XFx0c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7XFxuIDQ5ODpcXHRcXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNnAtXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuIDUwMTpcXHRcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gNTAyOlxcdFxcdFxcdGN5Y2xldGltZSA9IGN5Y2xlO1xcbiA1MDM6XFx0XFx0fVxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRpZiAoY3ljbGV0aW1lIFxcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuIDUwNjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1xcXCIpO1xcbiA1MDc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNTA4OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZnYWN0LVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDUwOTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiA1MTA6XFx0XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcXG4gNTEzOlxcdFxcdHAtXFx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdGlmIChuZWVkX2NhbmNlbCB8fCByZXQgPT0gQUNUX1BfQ1JFQVRFRClcXG4gNTE2OlxcdFxcdFxcdGdhdGVfc2V0dXBfdGltZXIoZ2FjdCwgdGltZXJfY2xvY2tpZCwgdGtvKTtcXG4gNTE3OlxcdFxcdHAtXFx1MDAzZXRjZmdfcHJpb3JpdHkgPSBwcmlvO1xcbiA1MTg6XFx0XFx0cC1cXHUwMDNldGNmZ19mbGFncyA9IGdmbGFncztcXG4gNTE5OlxcdFxcdHAtXFx1MDAzZXRjZmdfYmFzZXRpbWUgPSBiYXNldGltZTtcXG4gNTIwOlxcdFxcdHAtXFx1MDAzZXRjZmdfY2xvY2tpZCA9IHRpbWVyX2Nsb2NraWQ7XFxuIDUyMTpcXHRcXHRnYXRlX2dldF9zdGFydF90aW1lKGdhY3QsIHAsIFxcdTAwMjZzdGFydCk7XFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdG9sZF9wID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYWN0LVxcdTAwM2VwYXJhbSwgcCxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdCAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZl9sb2NrKSk7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGdhY3QtXFx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IHN0YXJ0O1xcbiA1Mjc6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IEdBVEVfQUNUX0dBVEVfT1BFTiB8IEdBVEVfQUNUX1BFTkRJTkc7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdGdhY3QtXFx1MDAzZW5leHRfZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZwLVxcdTAwM2VlbnRyaWVzLFxcbiA1MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cXHUwMDNlYWN0aW9uLCBnb3RvX2NoKTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0Z2F0ZV9zdGFydF90aW1lcihnYWN0LCBzdGFydCk7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZnYWN0LVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcdGlmIChnb3RvX2NoKVxcbiA1Mzk6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XFxuIDU0MDpcXHRcXG4gNTQxOlxcdFxcdGlmIChvbGRfcClcXG4gNTQyOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZvbGRfcC1cXHUwMDNlcmN1LCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3UpO1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRlcnJfZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NDMuMTk5OTE5ODA0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNzM3NDQzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY3ljbGV0aW1lYCBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgY3ljbGV0aW1lIFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgaG9sZCBvbiwgYGN5Y2xldGltZWAgaXMgYSBgdTY0YCEgQSBgdTY0YCBjYW4gKm5ldmVyKiBiZSBsZXNzIHRoYW4gemVyby4gVGhhdCBwYXJ0IG9mIHRoZSBjaGVjayBpcyBhIG5vLW9wLCBhIHRhdXRvbG9neS4gXG5cblRoZW4gSSBzYXcgdGhlIGRlY2xhcmF0aW9uOiBgdTY0IGN5Y2xldGltZSA9IDA7YCBhdCBsaW5lIDM1My4gQnV0IHdhaXQsIHdoZXJlIGRvZXMgYGN5Y2xldGltZWAgYWN0dWFsbHkgZ2V0IGl0cyB2YWx1ZT8gQWgsIGhlcmUgaXQgaXM6IGBjeWNsZXRpbWUgPSBjeWNsZTtgIEFuZCBgY3ljbGVgIGlzIGEgYGt0aW1lX3RgLCB3aGljaCBpcyByZWFsbHkgYW4gYHM2NGAuIFNvIHdlJ3JlIGFzc2lnbmluZyBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciB0byBhbiAqdW5zaWduZWQqIDY0LWJpdCBpbnRlZ2VyLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy5cblxuSWYgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgYGN5Y2xldGltZWAgd2lsbCBiZWNvbWUgYSAqdmVyeSogbGFyZ2UgcG9zaXRpdmUgbnVtYmVyIGR1ZSB0byB0aGUgd3JhcHBpbmcuIE5vdyB0aGUgYGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWGAgY2hlY2sgbWFrZXMgc2Vuc2UuIElmIHRoZSBzaWduZWQgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgdGhlbiBgY3ljbGV0aW1lYCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIGFuZCBpdCB3aWxsIGNhdGNoIHRoZSBvdmVyZmxvdy5cblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBhYm91dCBgY3ljbGV0aW1lIFx1MDAzYyAwYCBiZWluZyBtZWFuaW5nbGVzcyBpcyBjb3JyZWN0LCBidXQgaXQncyBub3QgYSBjb21wbGV0ZSBvdmVyc2lnaHQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgYXNzaWdubWVudCBhbmQgdGhlIGBJTlRfTUFYYCBjaGVjayBpcyBlZmZlY3RpdmVseSBhIHdheSB0byBoYW5kbGUgbmVnYXRpdmUgaW5wdXQgdmFsdWVzIG9mIGBjeWNsZWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGlzIGluIHRoZSBmdXR1cmUhXG5cbkJ1dCwgd2hhdCdzIHRoZSBwb2ludCBvZiBjaGVja2luZyBgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYCBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgYmV0IHRoaXMgaXMgYmVjYXVzZSBgY3ljbGV0aW1lYCBpcyB1c2VkIHNvbWV3aGVyZSBpbiBhIHRpbWVyIGNhbGN1bGF0aW9uLiBBIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgY291bGQgY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBvciBwb3RlbnRpYWxseSBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3Agd2l0aGluIHRoZSBgZ2F0ZV90aW1lcl9mbmAgb3IgYW5vdGhlciBwYXJ0IG9mIHRoZSB0aW1lciBjb2RlLiBMZXQgbWUgY2hlY2sgd2hlcmUgYGN5Y2xldGltZWAgaXMgYWN0dWFsbHkgdXNlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NTAuNDczNjY3NTQ2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxNTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZnX2N5Y2xldGltZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0zNz1zdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUyOlxcdGN5Y2xlID0gcGFyYW0tXFx1MDAzZXRjZmdfY3ljbGV0aW1lO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUzLVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGdhdGVfdGltZXJfZnVuYyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTA3OlxcdFxcdGN5Y2xlID0gcC1cXHUwMDNldGNmZ19jeWNsZXRpbWU7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTA4LVxcdFxcdGJhc2UgPSBuc190b19rdGltZShwLVxcdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTM0Nz1zdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy00NDctXFx0XFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0NDg6XFx0XFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQ7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDQ5LVxcdFxcdHByaW8gICAgICAgICAgPSBjdXJfcC1cXHUwMDNldGNmZ19wcmlvcml0eTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ1OC1cXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiAhdGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NDU5OlxcdFxcdFxcdFxcdGN5Y2xldGltZSA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy00NjAtXFx0XFx0fVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTExLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUxMjpcXHRwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1MTM6XFx0cC1cXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0ID0gY3ljbGV0aW1lX2V4dDtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MTQtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz02MTM9c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MzktXFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENBX0dBVEVfQ1lDTEVfVElNRSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDA6XFx0XFx0XFx0ICAgICAgcC1cXHUwMDNldGNmZ19jeWNsZXRpbWUsIFRDQV9HQVRFX1BBRCkpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQzLVxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFRDQV9HQVRFX0NZQ0xFX1RJTUVfRVhULFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY0NDpcXHRcXHRcXHQgICAgICBwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQsIFRDQV9HQVRFX1BBRCkpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQ1LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo1MC41MjE5ODcyMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MTkwNTMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFRpbWVyIEluc3RhYmlsaXR5KipcblxuT2theSwgc28gSSdtIHN1c3BlY3RpbmcgdGhlIHByb2JsZW0gaXMgYSB0aW1lci1yZWxhdGVkIGluc3RhYmlsaXR5IHdoZW4gYGN5Y2xldGltZWAgZ2V0cyB0b28gYmlnLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYSBsYXJnZSBgY3ljbGV0aW1lYCB2YWx1ZSBjb3VsZCBiZSBjYXVzaW5nIGFuIG92ZXJmbG93IHdpdGhpbiBga3RpbWVfYWRkX25zYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIG9yIHBvc3NpYmx5IGxlYWRpbmcgdG8gYGdhdGVfdGltZXJfZnVuY2AgZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBjeWNsZXRpbWVgLCBhbmQgdGhhdCdzIHVzZWQgd2l0aGluIGBnYXRlX3RpbWVyX2Z1bmNgLCByaWdodD8gU28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGdhdGVfdGltZXJfZnVuY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHdpdGggYGN5Y2xldGltZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NTQuOTEzODk0OTY0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MTpcXHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gIDcyOlxcdHtcXG4gIDczOlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRjZl9nYXRlLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBoaXRpbWVyKTtcXG4gIDc1OlxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKm5leHQ7XFxuICA3NjpcXHRcXHRzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwO1xcbiAgNzc6XFx0XFx0a3RpbWVfdCBjbG9zZV90aW1lLCBub3c7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiAgODA6XFx0XFxuICA4MTpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYWN0LVxcdTAwM2VwYXJhbSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spKTtcXG4gIDgzOlxcdFxcdG5leHQgPSBnYWN0LVxcdTAwM2VuZXh0X2VudHJ5O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHQvKiBjeWNsZSBzdGFydCwgY2xlYXIgcGVuZGluZyBiaXQsIGNsZWFyIHRvdGFsIG9jdGV0cyAqL1xcbiAgODY6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IG5leHQtXFx1MDAzZWdhdGVfc3RhdGUgPyBHQVRFX0FDVF9HQVRFX09QRU4gOiAwO1xcbiAgODc6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9lbnRyeV9vY3RldHMgPSAwO1xcbiAgODg6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9tYXhfb2N0ZXRzID0gbmV4dC1cXHUwMDNlbWF4b2N0ZXRzO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRnYWN0LVxcdTAwM2VjdXJyZW50X2Nsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoZ2FjdC1cXHUwMDNlY3VycmVudF9jbG9zZV90aW1lLFxcbiAgOTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmV4dC1cXHUwMDNlaW50ZXJ2YWwpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRjbG9zZV90aW1lID0gZ2FjdC1cXHUwMDNlY3VycmVudF9jbG9zZV90aW1lO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRpZiAobGlzdF9pc19sYXN0KFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0LCBcXHUwMDI2cC1cXHUwMDNlZW50cmllcykpXFxuICA5NjpcXHRcXHRcXHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2cC1cXHUwMDNlZW50cmllcyxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xcbiAgOTg6XFx0XFx0ZWxzZVxcbiAgOTk6XFx0XFx0XFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcXG4gMTAwOlxcdFxcbiAxMDE6XFx0XFx0bm93ID0gZ2F0ZV9nZXRfdGltZShnYWN0KTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0aWYgKGt0aW1lX2FmdGVyKG5vdywgY2xvc2VfdGltZSkpIHtcXG4gMTA0OlxcdFxcdFxcdGt0aW1lX3QgY3ljbGUsIGJhc2U7XFxuIDEwNTpcXHRcXHRcXHR1NjQgbjtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0XFx0Y3ljbGUgPSBwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZTtcXG4gMTA4OlxcdFxcdFxcdGJhc2UgPSBuc190b19rdGltZShwLVxcdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcXG4gMTA5OlxcdFxcdFxcdG4gPSBkaXY2NF91NjQoa3RpbWVfc3ViX25zKG5vdywgYmFzZSksIGN5Y2xlKTtcXG4gMTEwOlxcdFxcdFxcdGNsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoYmFzZSwgKG4gKyAxKSAqIGN5Y2xlKTtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0Z2FjdC1cXHUwMDNlbmV4dF9lbnRyeSA9IG5leHQ7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdGhydGltZXJfc2V0X2V4cGlyZXMoXFx1MDAyNmdhY3QtXFx1MDAzZWhpdGltZXIsIGNsb3NlX3RpbWUpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRyZXR1cm4gSFJUSU1FUl9SRVNUQVJUO1xcbiAxMjA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo1NC45MTQwMDI0ODRaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MzgzODc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGl2aXNpb24gYnkgWmVybyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2F0ZV90aW1lcl9mdW5jYCBhbmQgaXQncyBoaXR0aW5nIG1lOiBpZiB0aGUgYGN5Y2xlYCB2YWx1ZSBpcyB6ZXJvLCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gaXNzdWUgd2l0aCBgZGl2NjRfdTY0YC4gVGhhdCdzIGEgY2xhc3NpYyBidWcsIGVhc3kgdG8gb3Zlcmxvb2suIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBoYXZlIHNvbWUgY2hlY2tzIGluIGB0Y2ZfZ2F0ZV9pbml0YDpcblxuYGBgY1xuXHRpZiAoIWN5Y2xldGltZSkge1xuXHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuXG5cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2cC1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcblx0XHRjeWNsZXRpbWUgPSBjeWNsZTtcblx0fVxuYGBgXG5cbkl0IGNoZWNrcyBgIWN5Y2xldGltZWAsIHdoaWNoIG1ha2VzIGl0ICpzZWVtKiBsaWtlIGl0J3MgdGFraW5nIGNhcmUgb2YgYSB6ZXJvIGBjeWNsZXRpbWVgLiBJdCAqY2FsY3VsYXRlcyogYGN5Y2xldGltZWAgZnJvbSB0aGUgc3VtIG9mIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIE9rYXksIHNvIHdoYXQgaWYgdGhhdCBzdW0gKmlzKiB6ZXJvPyBUaGVuIGBjeWNsZXRpbWVgIGVuZHMgdXAgYmVpbmcgemVybyBhcyB3ZWxsLiBUaGVuLCBpbiB0aGUgcGF0Y2gsIHRoZXJlIGlzIHRoaXMgY2hlY2s6IGBjeWNsZXRpbWUgXHUwMDNjIDAgfHwgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYC5cblxuSG1tLCBub3cgbGV0IG1lIHRoaW5rLi4uIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIHNvIGBjeWNsZXRpbWUgXHUwMDNjIDBgIGlzICphbHdheXMqIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGF0IHBhcnQgb2YgdGhlIGNoZWNrIGlzIHVzZWxlc3MuIEJ1dCB3aGF0IGFib3V0IGBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVhgPyBTaW5jZSBgY3ljbGV0aW1lYCBpcyBhIGB1NjRgLCBpdCdzIG5vdCBnb2luZyB0byB3cmFwIGFyb3VuZCBsaWtlIGEgc2lnbmVkIGludGVnZXIgbWlnaHQuIFNvLCBpZiBgY3ljbGV0aW1lYCBpcyB6ZXJvLCBpdCdzICpub3QqIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAuXG5cbkFuZCwgZm9yIHRoZSByZWNvcmQsIGBJTlRfTUFYYCBpcyAyMTQ3NDgzNjQ3LlxuXG5JZiBgY3ljbGV0aW1lYCAqaXMqIGxhcmdlciB0aGFuIGBJTlRfTUFYYCwgaXQgZXJyb3JzIG91dCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdoeSBgSU5UX01BWGA/IEFoISBJIGJldCBpdCdzIGJlY2F1c2UgYGVudHJ5LVx1MDAzZWludGVydmFsYCBpcyBhIGB1MzJgIHdpdGhpbiBgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeWAuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5LCBub3cuIExldCdzIGNoZWNrIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjAxLjU2Nzg0NDAwMVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMDk3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjZmdfZ2F0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmg9MTA9c3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgtMTYtXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDoxNzpzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5IHtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTE4LVxcdGludFxcdFxcdFxcdGluZGV4O1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD00MT1zdHJ1Y3QgdGNmX2dhdGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00Ny1cXHRzMzJcXHRcXHRcXHRjdXJyZW50X21heF9vY3RldHM7XFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDo0ODpcXHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5XFx0Km5leHRfZW50cnk7XFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00OS1cXHRzdHJ1Y3QgaHJ0aW1lclxcdFxcdGhpdGltZXI7XFxuLS1cXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oPTExOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBhY3Rpb25fZ2F0ZV9lbnRyeVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xMjItXFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcDtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjEyMzpcXHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTEyNC1cXHR1MzIgbnVtX2VudHJpZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjAxLjYyMTA2NjExNVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1MjAzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y19nYXRlLmhgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgdGNfZ2F0ZS5oYC4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgVHJhZmZpYyBDb250cm9sIChUQykgZ2F0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5lZCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVwcmVzZW50IGdhdGUgY29uZmlndXJhdGlvbnM6IHRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBnYXRlIHN0YXRlcyAob3Blbi9jbG9zZWQpIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucywgcGVyaGFwcyBRb1MgbWFya2VycywgZmxvdyBJRHMsIG9yIHNwZWNpZmljIHBhY2tldCBoZWFkZXIgZmllbGRzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbnRlcmZhY2UgbGV2ZXJhZ2VzIGV4aXN0aW5nIFRDIG1lY2hhbmlzbXMgb3IgaW50cm9kdWNlcyBlbnRpcmVseSBuZXcgZWxlbWVudHMgZm9yIHRoZSBnYXRlLXNwZWNpZmljIGxvZ2ljLlxuXG5JJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBhdG9taWNpdHkgb2YgZ2F0ZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBhc3N1bWluZyB0aGF0IHRoaXMgaGVhZGVyIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgc3BhY2UgYW5kIHBvdGVudGlhbGx5IGhhcmR3YXJlLiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gQXJlIGF0b21pYyBvcGVyYXRpb25zIGJlaW5nIHVzZWQgZWZmZWN0aXZlbHk/XG5cblNwZWNpZmljYWxseSwgSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnYXRlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSB1bmRlcmx5aW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWluZyBkaXNjaXBsaW5lcy4gSG93IHNlYW1sZXNzbHkgZG9lcyB0aGUgZ2F0aW5nIGludGVncmF0ZSB3aXRoIG90aGVyIFRDIGNvbXBvbmVudHMgbGlrZSBjbGFzc2lmaWVycyAoZS5nLiwgYGNsc191MzJgLCBgY2xzX2JwZmApLCBzY2hlZHVsZXJzLCBhbmQgc2hhcGVycz8gRG9lcyB0aGUgZGVzaWduIGludHJvZHVjZSBhbnkgaW5lZmZpY2llbmNpZXMgb3IgYm90dGxlbmVja3MgaW4gdGhlIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmU/IEknbGwgYWxzbyBjaGVjayBmb3IgYW55IGhvb2tzIG9yIGNhbGwtYmFja3MgaW1wbGVtZW50ZWQuXG5cbkJleW9uZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMsIEknbGwgYmUgc2Nhbm5pbmcgZm9yIGFueSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlc2UgZ2F0ZXMsIGFzIHRoZXkgb2Z0ZW4gZ2l2ZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIGludGVuZGVkIHVzYWdlIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2Ug4oCTIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gZ2F0aW5nIGdyYW51bGFyaXR5LCBjb250cm9sIG92ZXJoZWFkLCBhbmQgb3ZlcmFsbCBwYWNrZXQgbGF0ZW5jeS4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZWxlZ2FudCwgZWZmaWNpZW50LCBhbmQgd2VsbC1pbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgVEMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjA3LjMxNjI3MTkwNVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkge1xcbiAgMTg6XFx0XFx0aW50XFx0XFx0XFx0aW5kZXg7XFxuICAxOTpcXHRcXHR1OFxcdFxcdFxcdGdhdGVfc3RhdGU7XFxuICAyMDpcXHRcXHR1MzJcXHRcXHRcXHRpbnRlcnZhbDtcXG4gIDIxOlxcdFxcdHMzMlxcdFxcdFxcdGlwdjtcXG4gIDIyOlxcdFxcdHMzMlxcdFxcdFxcdG1heG9jdGV0cztcXG4gIDIzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyB7XFxuICAyNzpcXHRcXHRzMzJcXHRcXHRcXHR0Y2ZnX3ByaW9yaXR5O1xcbiAgMjg6XFx0XFx0dTY0XFx0XFx0XFx0dGNmZ19iYXNldGltZTtcXG4gIDI5OlxcdFxcdHU2NFxcdFxcdFxcdHRjZmdfY3ljbGV0aW1lO1xcbiAgMzA6XFx0XFx0dTY0XFx0XFx0XFx0dGNmZ19jeWNsZXRpbWVfZXh0O1xcbiAgMzE6XFx0XFx0dTMyXFx0XFx0XFx0dGNmZ19mbGFncztcXG4gIDMyOlxcdFxcdHMzMlxcdFxcdFxcdHRjZmdfY2xvY2tpZDtcXG4gIDMzOlxcdFxcdHNpemVfdFxcdFxcdFxcdG51bV9lbnRyaWVzO1xcbiAgMzQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGVudHJpZXM7XFxuICAzNTpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuICAzNjpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDowNy4zMTYzMzg2MjVaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzU4NTg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIERlbmlhbCBvZiBTZXJ2aWNlIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEdhdGUgUWRpc2MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjeWNsZXRpbWVgIHZhcmlhYmxlIGluIHRoZSBHYXRlIFFkaXNjLCBhbmQgSSdtIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3LiBJbml0aWFsbHksIGBjeWNsZXRpbWVgIGlzIGRlZmluZWQgYXMgYSBgdTY0YC4gVGhlbiwgaW4gYHRjZl9nYXRlX2luaXRgLCBpdCdzIHN1YmplY3QgdG8gYSBib3VuZHMgY2hlY2suIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjaGVjayBgY3ljbGV0aW1lIFx1MDAzYyAwYCBpcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBpdCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjaGVjayBgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LlxuXG5Jbml0aWFsbHkgSSB3YXMgd29uZGVyaW5nIGlmIHRoZXJlIHdhcyBhIGNhc3QgdG8gYSBzaWduZWQgaW50ZWdlci4gSG93ZXZlciwgdGhlcmUgaXNuJ3QuXG5cbkxvb2tpbmcgZGVlcGVyLCBgY3ljbGV0aW1lYCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIEhvd2V2ZXIsIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAgaXMgYSBgdTMyYCwgc28gdGhlIGFjY3VtdWxhdGlvbiB0byBgY3ljbGVgIHNob3VsZCBhbHdheXMgYmUgcG9zaXRpdmUuIEhvd2V2ZXIsIEkgc2VlIGEgc2Vjb25kIHBhdGggd2hlcmUgdGhlIHVzZXIgY2FuIHByb3ZpZGUgYGN5Y2xldGltZWAgZGlyZWN0bHkgdmlhIGBubGFfZ2V0X3U2NGAuIFNvIG5vdyBJIHJlYWxpemUgdGhlcmUgYXJlIHR3byBzZXBhcmF0ZSBjb2RlIHBhdGhzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGBnYXRlX3RpbWVyX2Z1bmNgIGZ1bmN0aW9uLiBJZiB0aGUgcHJvdmlkZWQgYGN5Y2xldGltZWAgaXMgYSB2ZXJ5IGxhcmdlIHZhbHVlLCB0aGUgbXVsdGlwbGljYXRpb24gYChuICsgMSkgKiBjeWNsZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24gY291bGQgb3ZlcmZsb3cgYSBgczY0YC4gQW4gb3ZlcmZsb3cgd291bGQgcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLiBUaGlzIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCB3b3VsZCBiZSBzZXQgYXMgdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lci4gIEEgbmVnYXRpdmUgdGltZSBjb3JyZXNwb25kcyB0byBhIHRpbWUgaW4gdGhlIHBhc3QuIFRoaXMgaW4gdHVybiB3aWxsIGNhdXNlIGBnYXRlX3RpbWVyX2Z1bmNgIHRvIGJlIGNhbGxlZCByZXBlYXRlZGx5IGFuZCBpbW1lZGlhdGVseS4gSXQncyBhbiBpbmZpbml0ZSBsb29wIHRyaWdnZXJlZCBieSBhIGxhcmdlIGBjeWNsZXRpbWVgIHZhbHVlLCBhbmQgaXQgY29tcGxldGVseSBoYW5ncyB0aGUgc3lzdGVtLiBUaGlzIGlzIGEgY2xhc3NpYyBkZW5pYWwtb2Ytc2VydmljZSB2dWxuZXJhYmlsaXR5IGNhdXNlZCBieSBhIGxvZ2ljIGJ1ZzogYW4gaW5maW5pdGUgbG9vcC5cblxuVGhlIGluaXRpYWwgcGF0Y2ggYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2ssIGJ1dCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGUgY29kZSBnb2VzIHRvIGBlcnJfZnJlZWAuIFRoZXJlJ3MgYSBga2ZyZWUocClgIGNhbGwgdGhlcmUsIGJ1dCBpdCBhbHNvIGhhcyBgcC1cdTAwM2VlbnRyaWVzYCwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLiBBcmUgdGhlIGVsZW1lbnRzIGluIHRoZSBgcC1cdTAwM2VlbnRyaWVzYCBsaXN0cyBmcmVlZD8gSSBuZWVkIHRvIGFuYWx5emUgYHBhcnNlX2dhdGVfbGlzdGAgdG8gc2VlIGhvdyB0aG9zZSBlbnRyaWVzIGFyZSBtYW5hZ2VkIGFuZCBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiBpbiBhZGRpdGlvbiB0byB0aGUgRG9TLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjE5Ljk5MjIwMDYxOFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMzgxMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX2dhdGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0yMzM9c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzQ3PXN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyNi1cXHRpZiAoIXVzZV9vbGRfZW50cmllcykge1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjQyNzpcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDI4LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDoyMC40MTM1ODkwMDVaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDk5ODE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHNvbWV0aGluZyBjcnVjaWFsIGlzIGhhcHBlbmluZyB3aXRoIGhvdyB3ZSdyZSBidWlsZGluZyB0aGUgY2lyY3VpdCByZXByZXNlbnRhdGlvbi4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBwYXJzaW5nIG9mIGEgbGlzdCBvZiBcImdhdGVzXCIg4oCTIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29tcGxleGl0aWVzIHJlc2lkZSBpbiB0aGlzIGtpbmQgb2YgcHJvZ3JhbS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OiB3aGF0J3MgdGhlIGlucHV0IGZvcm1hdD8gSXMgaXQgYSBzaW1wbGUgbGlzdCBvZiBzdHJpbmcgaWRlbnRpZmllcnM/IElzIGl0IGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBBcmUgd2UgaGFuZGxpbmcgZGlmZmVyZW50IGdhdGUgdHlwZXMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRpc3Rpbmd1aXNoZWQ/IEFueSBlcnJvciBoYW5kbGluZyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBhcyBJIHJldmlldz8gS25vd2luZyB0aGUgc291cmNlIGZvcm1hdCB3aWxsIGJlIGltcG9ydGFudC4gSXQgd2lsbCBkcml2ZSBob3cgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTQ6MjMuODE0NTg5NTdaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MjpcXHRzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxuIDI2MzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcXG4gMjY0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xcbiAyNjc6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4gMjY4OlxcdFxcdGludCBlcnIsIHJlbTtcXG4gMjY5OlxcdFxcdGludCBpID0gMDtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0aWYgKCFsaXN0X2F0dHIpXFxuIDI3MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChuLCBsaXN0X2F0dHIsIHJlbSkge1xcbiAyNzU6XFx0XFx0XFx0aWYgKG5sYV90eXBlKG4pICE9IFRDQV9HQVRFX09ORV9FTlRSWSkge1xcbiAyNzY6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQXR0cmlidXRlIGlzbid0IHR5cGUgJ2VudHJ5J1xcXCIpO1xcbiAyNzc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI3ODpcXHRcXHRcXHR9XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdFxcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG4gMjgxOlxcdFxcdFxcdGlmICghZW50cnkpIHtcXG4gMjgyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBlbnRyeVxcXCIpO1xcbiAyODM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saXN0O1xcbiAyODU6XFx0XFx0XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2VudHJ5KG4sIGVudHJ5LCBpLCBleHRhY2spO1xcbiAyODg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gMjg5OlxcdFxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gMjkwOlxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saXN0O1xcbiAyOTE6XFx0XFx0XFx0fVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4gMjk0OlxcdFxcdFxcdGkrKztcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0cmV0dXJuIGk7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdHJlbGVhc2VfbGlzdDpcXG4gMzAyOlxcdFxcdHJlbGVhc2VfZW50cnlfbGlzdChcXHUwMDI2c2NoZWQtXFx1MDAzZWVudHJpZXMpO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRzdGF0aWMgYm9vbCBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbCh1NjQgYmFzZXRpbWUsIHU2NCBvbGRfYmFzZXRpbWUsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSB0a19vZmZzZXRzIHRrbyxcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHRrX29mZnNldHMgb2xkX3RrbyxcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCAgICBzMzIgY2xvY2tpZCwgczMyIG9sZF9jbG9ja2lkKVxcbiAzMTE6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDoyMy44MTQ2OTcwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4NDQ0ODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgTGVhayBEZXRlY3Rpb24gaW4gVENGIEdhdGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZydzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgYHAtXHUwMDNlZW50cmllc2Agc3RydWN0dXJlLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgcG9wdWxhdGVkIGJ5IGBwYXJzZV9nYXRlX2xpc3RgLCBpbnRlcmFjdHMgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgc2VlIHRoYXQgaWYgYHBhcnNlX2dhdGVfbGlzdGAgc3VjY2VlZHMsIGl0IHBvcHVsYXRlcyBgcC1cdTAwM2VlbnRyaWVzYCB3aXRoIGRhdGEuIEdyZWF0LCB0aGF0J3MgZXhwZWN0ZWQuXG5cbk5vdywgaWYgYGN5Y2xldGltZWAgaXMgaW52YWxpZCwgdGhlIGNvZGUganVtcHMgdG8gYGVycl9mcmVlYCwgYW5kIHRoYXQncyB3aGVyZSBteSBjb25jZXJuIGxpZXMuIExvb2tpbmcgYXQgdGhlIGBlcnJfZnJlZWAgbGFiZWwsIEkgc2VlIGBrZnJlZShwKWAsIHdoaWNoLCBvZiBjb3Vyc2UsIGZyZWVzIHRoZSBgcGAgc3RydWN0dXJlIGl0c2VsZi4gQnV0LCBjcnVjaWFsbHksIGBrZnJlZShwKWAgKmRvZXNuJ3QqIGF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgaW5kaXZpZHVhbCBlbnRyaWVzIHdpdGhpbiBgcC1cdTAwM2VlbnRyaWVzYCEgTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nLi4uIGlzIHRoaXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWs/IEkgbWVhbiwgdGhlc2UgZW50cmllcywgaWYgYWxsb2NhdGVkLCBhcmUganVzdCBzaXR0aW5nIHRoZXJlLCBvcnBoYW5lZCBhZnRlciBgcGAgaXMgZnJlZWQuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdHJ1ZSBhbmQgdGhhdCB0aGVyZSBpcyBhIGxlYWssIGFuZCBpZiBzbywgaG93IG11Y2ggbWVtb3J5IGlzIGxlYWtlZD8gSSBuZWVkIHRvIGFuYWx5emUgYGVycl9mcmVlYCBtb3JlIGNsb3NlbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBpc24ndCBhIGZhbHNlIGFsYXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjU2LjQ5OTE0OTY5NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDY6XFx0ZXJyX2ZyZWU6XFxuIDU0NzpcXHRcXHRyZWxlYXNlX2VudHJ5X2xpc3QoXFx1MDAyNnAtXFx1MDAzZWVudHJpZXMpO1xcbiA1NDg6XFx0XFx0a2ZyZWUocCk7XFxuIDU0OTpcXHRjaGFpbl9wdXQ6XFxuIDU1MDpcXHRcXHRpZiAoZ290b19jaClcXG4gNTUxOlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiA1NTI6XFx0cmVsZWFzZV9pZHI6XFxuIDU1MzpcXHRcXHQvKiBhY3Rpb24gaXMgbm90IGluc2VydGVkIGluIGFueSBsaXN0OiBpdCdzIHNhZmUgdG8gaW5pdCBoaXRpbWVyXFxuIDU1NDpcXHRcXHQgKiB3aXRob3V0IHRha2luZyB0Y2ZfbG9jay5cXG4gNTU1OlxcdFxcdCAqL1xcbiA1NTY6XFx0XFx0aWYgKHJldCA9PSBBQ1RfUF9DUkVBVEVEKVxcbiA1NTc6XFx0XFx0XFx0Z2F0ZV9zZXR1cF90aW1lcihnYWN0LCB0aW1lcl9jbG9ja2lkLCB0a28pO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcbiA1NjA6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTYxOlxcdH1cXG4gNTYyOlxcdFxcbiA1NjM6XFx0c3RhdGljIHZvaWQgdGNmX2dhdGVfcGFyYW1zX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gNTY0OlxcdHtcXG4gNTY1OlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnAgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9nYXRlX3BhcmFtcywgcmN1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTQ6NTYuNDk5MjQ5MTA0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQ2OTQ1MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCdWcqKlxuXG5Pa2F5LCBzbyBgZXJyX2ZyZWVgIHByb3Blcmx5IGNsZWFucyB1cCB0aGUgbWVtb3J5IHdpdGggYHJlbGVhc2VfZW50cnlfbGlzdGAgYW5kIHRoZW4gYGtmcmVlYC4gTm8gbWVtb3J5IGxlYWssIHRoYXQncyBnb29kLiBUaGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgbGFjayBvZiBhIGJvdW5kcyBjaGVjayBvbiBgY3ljbGV0aW1lYCwgd2hpY2ggbGV0cyBgZ2F0ZV90aW1lcl9mdW5jYCBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGFuZCB0cmlnZ2VyIGEgZGVuaWFsIG9mIHNlcnZpY2UuIEl0J3MgYSBsb2dpYyBidWcsIHBsYWluIGFuZCBzaW1wbGUsIGFuZCBzaG91bGQgYmUgZWFzaWx5IGZvdW5kIHRocm91Z2ggZnV6emluZyBvciBhIGRlY2VudCBjb2RlIHJldmlldy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBLTVNBTiBpc24ndCByZWxldmFudC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgY3ljbGV0aW1lYCAqaXMqIGluaXRpYWxpemVkLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5cdHU2NCBjeWNsZXRpbWUgPSAwLCBiYXNldGltZSA9IDAsIGN5Y2xldGltZV9leHQgPSAwO1xuYGBgXG5cbll1cCwgaW5pdGlhbGl6ZWQgdG8gemVyby4gQW5kIHRoZW46XG5cbmBgYGNcblx0aWYgKHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuXHRcdGN5Y2xldGltZSA9IG5sYV9nZXRfdTY0KHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKTtcbmBgYFxuXG5JZiB0aGUgdmFsdWUgaXNuJ3QgcHJvdmlkZWQsIGl0IHN0YXlzIHplcm8uIEZpbmFsbHk6XG5cbmBgYGNcblx0aWYgKCFjeWNsZXRpbWUpIHtcblx0XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTtcblx0XHRrdGltZV90IGN5Y2xlID0gMDtcblxuXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnAtXHUwMDNlZW50cmllcywgbGlzdClcblx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG5cdFx0Y3ljbGV0aW1lID0gY3ljbGU7XG5cdH1cbmBgYFxuXG5TbyBgY3ljbGV0aW1lYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQ7IGl0IGNhbiBiZSB6ZXJvLCBidXQgaXQncyBuZXZlciB1bmluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgc2ltcGx5IHRoYXQgdGhlIHZhbHVlIG9mIGBjeWNsZXRpbWVgIG1pZ2h0IGJlIHRvbyBsYXJnZSwgd2hpY2ggdGhlbiBsZWFkcyB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgLiBUaGlzIHJlc3VsdHMgaW4gYSBEb1MgYmVjYXVzZSB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uIGJlY29tZXMgbmVnYXRpdmUsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBJdCdzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbkFscmlnaHQsIGxldCdzIGRvY3VtZW50IHRoaXMgY2xlYXJseS4gVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGB0Y2ZfZ2F0ZV9pbml0YCBmb3IgYGN5Y2xldGltZWAgdG8gcHJldmVudCBhbiBvdmVyc2l6ZWQgdmFsdWUuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgYGN5Y2xldGltZWAgaXMgdG9vIGxhcmdlIChncmVhdGVyIHRoYW4gYElOVF9NQVhgKSwgYW4gaW50ZWdlciBvdmVyZmxvdyB3aWxsIG9jY3VyIHdpdGhpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhdXNlcyBgY2xvc2VfdGltZWAgdG8gYmVjb21lIG5lZ2F0aXZlIGFuZCBsZWFkcyB0byBhIHRpbWVyIGludGVycnVwdCBsb29wLCBhbmQgdGhlIERvUy4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgYnVnLCBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdGhlIGludm9sdmVkIHZhcmlhYmxlcywgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gU3RhbmRhcmQgS0FTQU4gb3IgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGNhdGNoIHRoZXNlIHNvcnRzIG9mIGxvZ2ljIGVycm9ycyBhbmQgaW5maW5pdGUgbG9vcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTU4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU1OjEyLjQ0NjE5Njk2OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-23 04:23:24 +0000 UTC FinishedAt: 2026-08-23 04:55:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "NET_SCHED", "NET_CLS_ACT", "NET_ACT_GATE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "91ec2035134982b98fab0609a9fd8480e8217dc1", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NET", "NET_SCHED", "NET_CLS_ACT", "NET_ACT_GATE" ], "series_id": "c3410d62-60c1-4eaa-8f92-6cf7bb7a7931" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "tcf_gate_init" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2dhdGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuQEAgLTUwMSw2ICYjNDM7NTAxLDE0IEBAIHN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbiBcdFx0XHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXHUwMDNlaW50ZXJ2YWwpO1xuIFx0XHRjeWNsZXRpbWUgPSBjeWNsZTtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbiYjNDM7XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZ1wmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRUlOVkFMO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lO1xuIFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCmluZGV4IGZkYmZjYWEzZTJhYjkuLjMwYmNmMTczMjc0Y2IgMTAwNjQ0Ci0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jCkBAIC01MDEsNiAmIzQzOzUwMSwxNCBAQCBzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsCiAJCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKIAkJY3ljbGV0aW1lID0gY3ljbGU7CiAJfQomIzQzOwomIzQzOwlpZiAoY3ljbGV0aW1lICZsdDsgMCB8fCBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYKSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TRyhleHRhY2ssICYjMzQ7JiMzOTtjeWNsZV90aW1lJiMzOTsgaXMgdG9vIGJpZyYjMzQ7KTsKJiM0MzsJCWVyciA9IC1FSU5WQUw7CiYjNDM7CQlzcGluX3VubG9ja19iaCgmYW1wO2dhY3QtJmd0O3RjZl9sb2NrKTsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CX0KJiM0MzsKIAlwLSZndDt0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTsKIAlwLSZndDt0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjEKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgYGFjdF9nYXRlLmNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUsIGFuZCBpdCYjMzk7cyB0b3VjaGluZyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gem9vbSBpbiBvbiB0aGUgc3BlY2lmaWMgY2hhbmdlLCB3aGljaCBpcyB0aGF0IG5ldyBjaGVjayBpbiBgdGNmX2dhdGVfaW5pdGAuIExvb2tpbmcgYXQgaXQsIHRoZXkmIzM5O3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgY3ljbGV0aW1lYCBub3csIGVuc3VyaW5nIGl0JiMzOTtzIHdpdGhpbiBhIHJlYXNvbmFibGUgcmFuZ2Ug4oCTIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvIGFuZCBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYElOVF9NQVhgLiBTZWVtcyBsaWtlIGEgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgYWRkaXRpb24gdG8gbWUuCgpUaGUgY29kZSBub3cgZXhwbGljaXRseSBoYW5kbGVzIHRoZSBwb3RlbnRpYWwgZm9yIGBjeWNsZXRpbWVgIGJlaW5nIG91dHNpZGUgb2YgYWNjZXB0YWJsZSBib3VuZHMsIHByZXZlbnRpbmcgYSBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBvciBvdGhlciBpc3N1ZXMgZG93biB0aGUgbGluZSwgd2hpY2ggaXMgYSBnb29kIHByYWN0aWNlLiBJdCYjMzk7cyBwcm9wZXJseSBzZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHYCBhbmQgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIFRoZXkgYWxzbyBzZWVtIHRvIGJlIHVubG9ja2luZyB0aGUgbG9jayBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIGVycm9yLCB3aGljaCBpcyBjcnVjaWFsLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAsIGl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrIG9yIGFuIEFQSSBhbHRlcmF0aW9uIGJ1dCBhIHN0cmFpZ2h0Zm9yd2FyZCB2YWxpZGF0aW9uLiBJJiMzOTtsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZSBLY29uZmlnIGlzIGNvcnJlY3RseSBjb25maWd1cmVkLCBvZiBjb3Vyc2UsIHRvIGVuc3VyZSB0aGUgZ2F0ZSBhY3Rpb24gaXMgZW5hYmxlZCBhbmQgdGhhdCBhbGwgZGVwZW5kZW5jaWVzIGFyZSBtZXQuIExldCYjMzk7cyBkaXZlIGludG8gYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYCBhbmQgS2NvbmZpZyB0byBjb25maXJtIG15IGluaXRpYWwgYXNzZXNzbWVudC4gSSYjMzk7bGwgd2FudCB0byB2ZXJpZnkgdGhhdCBubyBuZXcgZGVwZW5kZW5jaWVzIHdlcmUgaW50cm9kdWNlZCBoZXJlIHRvby4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2F0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cdC5kdW1wXHRcdD1cdHRjZl9nYXRlX2R1bXAsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTA6XHQuaW5pdFx0XHQ9XHR0Y2ZfZ2F0ZV9pbml0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzUxLVx0LmNsZWFudXBcdD1cdHRjZl9nYXRlX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgxNgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDM2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipOYXZpZ2F0aW5nIHRoZSBgYWN0X2dhdGVgIENvZGViYXNlKioKCkFscmlnaHQsIGxldCYjMzk7cyBzZWUsIGB0Y2ZfZ2F0ZV9pbml0YC4uLiBhaCB5ZXMsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgYWN0X2dhdGVfb3BzYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBnYXRlIG1lY2hhbmlzbSBpcyBjb25maWd1cmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0JiMzOTtzIGdldCB0aGUgS2NvbmZpZyBmaWxlIGZvciBgYWN0X2dhdGUuY2AuIFRoYXQmIzM5O3MgdXN1YWxseSB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5IGFyZSBkZWZpbmVkLCBhbmQgdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBwcmVyZXF1aXNpdGVzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthY3RfZ2F0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvTWFrZWZpbGU9MzI9b2JqLSQoQ09ORklHX05FVF9BQ1RfQ1QpXHQmIzQzOz0gYWN0X2N0Lm9cbm5ldC9zY2hlZC9NYWtlZmlsZTozMzpvYmotJChDT05GSUdfTkVUX0FDVF9HQVRFKVx0JiM0Mzs9IGFjdF9nYXRlLm9cbm5ldC9zY2hlZC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX1NDSF9GSUZPKVx0JiM0Mzs9IHNjaF9maWZvLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMTIzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgc2l0dWF0aW9uOgoKKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uIHNldHRpbmcgSSYjMzk7bSBsb29raW5nIGF0IGlzIGBORVRfQUNUX0dBVEVgLiBNeSBpbW1lZGlhdGUgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gYW5kIHVuZGVyc3RhbmQgaXRzIGRlcGVuZGVuY2llcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBzZXR0aW5ncywgbW9kdWxlcywgb3IgcHJlY29uZGl0aW9ucyByZWx5IG9uIGBORVRfQUNUX0dBVEVgIGJlaW5nIGRlZmluZWQgb3Igc2V0IHRvIGEgcGFydGljdWxhciB2YWx1ZS4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBvdmVyYWxsIHN5c3RlbSBiZWhhdmlvciBhbmQgcG90ZW50aWFsIGltcGFjdCBvZiBjaGFuZ2VzLiBBIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgdGhlIGZvdW5kYXRpb24gb2YgYW55IHJvYnVzdCBjb25maWd1cmF0aW9uIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM4MwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBORVRfQUNUX0dBVEUgS2NvbmZpZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBgTkVUX0FDVF9HQVRFYCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciB0aGUgb2J2aW91czogaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHdoZXRoZXIgaXQmIzM5O3MgZW5hYmxlZCBieSBkZWZhdWx0LCBhbmQgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBtb2R1bGVzIG9yIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt0cmlja3kgYml0cyYjMzQ7IOKAkyBhcmUgdGhlcmUgYW55IG9ic2N1cmUgZGVwZW5kZW5jaWVzIG9yIGludGVyYWN0aW9ucyB0aGF0IG1pZ2h0IGNhdXNlIHVuZXhwZWN0ZWQgYmVoYXZpb3Igd2hlbiBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcyBmZWF0dXJlPyBJIG5lZWQgdG8gY29uc2lkZXIgaXRzIGltcGFjdCBvbiBvdGhlciBuZXR3b3JraW5nIGZ1bmN0aW9uYWxpdGllcy4gSeKAmWxsIG1ha2Ugc3VyZSB0byBub3RlIGlmIGl0IGhhcyBhbnkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBsaW5rcyBhc3NvY2lhdGVkIHdpdGggdGhlIEtjb25maWcsIHNvIHRoYXQgSSBjYW4gZ28gb3ZlciBpdCBsYXRlciBvbi4gVGhlbiwgSSYjMzk7bGwgYXNzZXNzIGl0cyBvdmVyYWxsIGltcG9ydGFuY2UgYW5kIHNjb3BlLiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBpbmZsdWVuY2Ugc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVW5kZXJzdGFuZGluZyB0aGUgZ2F0aW5nIG9wdGlvbnMgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG5ldHdvcmsgdHJhZmZpYyBmbG93IGJhc2VkIG9uIHZhcmlvdXMgcGFyYW1ldGVycy4gSXMgdGhpcyBhIHNpbXBsZSBiaW5hcnkgY2hvaWNlICh5ZXMvbm8pLCBvciBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBhbGxvdyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbD8gSSYjMzk7bGwgcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW1wbGljYXRpb25zIG9mIGFueSBkZWZhdWx0IHNldHRpbmdzLiBGaW5hbGx5LCBJJiMzOTtsbCBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgb2J2aW91cyBjb25mbGljdHMgb3IgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZmVhdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5MjUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDkyNTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDkyNjpcdFxuIDkyNzpcdFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gOTI4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBhY3RfY3QuXG4gOTI5Olx0XG4gOTMwOlx0Y29uZmlnIE5FVF9BQ1RfR0FURVxuIDkzMTpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4gOTMyOlx0XHRkZXBlbmRzIG9uIE5FVF9DTFNfQUNUXG4gOTMzOlx0XHRoZWxwXG4gOTM0Olx0XHQgIFNheSBZIGhlcmUgdG8gYWxsb3cgdG8gY29udHJvbCB0aGUgaW5ncmVzcyBmbG93IHRvIGJlIHBhc3NlZCBhdFxuIDkzNTpcdFx0ICBzcGVjaWZpYyB0aW1lIHNsb3QgYW5kIGJlIGRyb3BwZWQgYXQgb3RoZXIgc3BlY2lmaWMgdGltZSBzbG90IGJ5XG4gOTM2Olx0XHQgIHRoZSBnYXRlIGVudHJ5IGxpc3QuXG4gOTM3Olx0XG4gOTM4Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gOTM5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA5NDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9nYXRlLlxuIDk0MTpcdFxuIDk0MjpcdGNvbmZpZyBORVRfSUZFX1NLQk1BUktcbiA5NDM6XHRcdHRyaXN0YXRlIFwmIzM0O1N1cHBvcnQgdG8gZW5jb2RpbmcgZGVjb2Rpbmcgc2tiIG1hcmsgb24gSUZFIGFjdGlvblwmIzM0O1xuIDk0NDpcdFx0ZGVwZW5kcyBvbiBORVRfQUNUX0lGRVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDA5CgkJCQkJCQlvdXRwdXQ6IDU0CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEluaXRpYWwgVGhvdWdodHMgb24gQWN0aW9uIEdhdGUgSW5pdGlhbGl6YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGRlcGVuZGVuY2llcyBoZXJlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGBORVRfQ0xTX0FDVGAuIEkgY2FuIHNlZSBJIG5lZWQgYm90aCBgTkVUX0FDVF9HQVRFYCBhbmQgYE5FVF9DTFNfQUNUYCB0byBnZXQgdGhpcyB0aGluZyBvZmYgdGhlIGdyb3VuZC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgYHRjZl9nYXRlX2luaXRgIGZ1bmN0aW9uLCBmaWd1cmluZyB0aGF0JiMzOTtzIHRoZSBvYnZpb3VzIHBvaW50IG9mIGVudHJ5IGZvciB0aGUgYGluaXRgIHByb2Nlc3MuCgpBaCwgd2FpdCBhIHNlY29uZC4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLiBTdGF0aWMgZnVuY3Rpb25zIGFyZW4mIzM5O3QgaWRlYWwgYXMgZm9jdXMgc3ltYm9scyBzaW5jZSB0aGV5IGhhdmUgbGltaXRlZCBzY29wZS4gSG1tLCBidXQuLi4gSSBkbyByZW1lbWJlciBpdCBiZWluZyBhbiBBUEkgZW50cnlwb2ludCBmb3IgYGluaXRgIHdpdGhpbiBgdGNfYWN0aW9uX29wc2AsIHNvIGl0IGlzIG9uIHRoZSByYWRhci4KCkxldCBtZSB0YWtlIGEgc3RlcCBiYWNrIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBub24tc3RhdGljIGFsdGVybmF0aXZlcyB3aXRoaW4gYGFjdF9nYXRlLmNgLiBQZXJoYXBzIHRoZXJlJiMzOTtzIGEgbW9yZSBhY2Nlc3NpYmxlIGZ1bmN0aW9uIGluIHRoZXJlIHRoYXQgSSBjYW4gdXNlIGFzIGEgYmV0dGVyIHBvaW50IG9mIGF0dGFjay4gSSYjMzk7bGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16X0EtWjAtOV0mIzQzOyBbYS16X0EtWjAtOV0mIzQzO1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQyMgoJCQkJCQkJb3V0cHV0OiA2NgoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgYWN0X2dhdGUuY2AgRnVuY3Rpb24gU2NvcGUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGBhY3RfZ2F0ZS5jYCBmaWxlLiBJJiMzOTttIHRoaW5raW5nLCBpbnN0ZWFkIG9mIGp1c3QgcmFuZG9tbHkgYnJvd3NpbmcsIEkgd2FudCB0byB6ZXJvIGluIG9uIHNvbWV0aGluZyBzcGVjaWZpYy4gTXkgZ3V0IHRlbGxzIG1lIHRoZXJlIG1pZ2h0IGJlIHNvbWUgaW50ZXJlc3RpbmcgdGhpbmdzIGdvaW5nIG9uIHdpdGggKm5vbi1zdGF0aWMqIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgcG90ZW50aWFsbHkgaGF2ZSBicm9hZGVyIHNjb3BlIGFuZCBjb3VsZCBiZSBjYWxsZWQgZnJvbSBvdGhlciBwYXJ0cyBvZiB0aGUgY29kZWJhc2UuIFNvLCBsZXQmIzM5O3MgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhvc2UuIFRoYXQmIzM5O3MgdXN1YWxseSB0aGUgZmFzdGVzdCB3YXkgdG8gZ2V0IGEgYmlyZCYjMzk7cy1leWUgdmlldywgYXQgbGVhc3QgaW5pdGlhbGx5LiBIb3BlZnVsbHksIHRoaXMgd2lsbCBnZXQgbWUgYSBtYW5hZ2VhYmxlIGxpc3QgdG8gc3RhcnQgd2l0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NjgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSWRlbnRpZnlpbmcgRXhwb3J0ZWQgRnVuY3Rpb25zOiBBIFByYWdtYXRpYyBBcHByb2FjaCoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBpcyBjbGVhcjogcGlucG9pbnQgdGhlIGV4cG9ydGVkIGZ1bmN0aW9ucywgb3IgbW9yZSBnZW5lcmFsbHksIGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gdGhpcyBmaWxlLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gdGFrZSB0aGUgc2ltcGxlc3Qgcm91dGUgZmlyc3QuIExldCYjMzk7cyBqdXN0IGRpdmUgcmlnaHQgaW50byByZWFkaW5nIHRoZSBmaWxlIGl0c2VsZi4gVGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGluZ3Mgd2l0aCBpbnRyaWNhdGUgcGFyc2luZyBvciByZWx5aW5nIG9uIGV4dGVybmFsIHRvb2xzIHJpZ2h0IG9mZiB0aGUgYmF0LiBBIGRpcmVjdCBzY2FuLCBwZXJoYXBzIHdpdGggc29tZSBiYXNpYyBwYXR0ZXJuIG1hdGNoaW5nLCBpcyBsaWtlbHkgc3VmZmljaWVudCB0byBpZGVudGlmeSBmdW5jdGlvbiBkZWZpbml0aW9ucy4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIHRoZSB0ZWxsdGFsZSBzaWduczogZnVuY3Rpb24gc2lnbmF0dXJlcyB0aGF0IGFyZW4mIzM5O3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEl0JiMzOTtzIGEgcHJhZ21hdGljLCAmIzM0O3NlZSB3aGF0IHdlIGNhbiBmaW5kIHF1aWNrbHkmIzM0OyBhcHByb2FjaC4gV2UgY2FuIGFsd2F5cyByZWZpbmUgdGhlIHNlYXJjaCBsYXRlciBpZiB0aGlzIGluaXRpYWwgc3dlZXAgZG9lc24mIzM5O3QgeWllbGQgdGhlIHJlc3VsdHMgd2UmIzM5O3JlIGV4cGVjdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFBPUlRfU1lNQk9MJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTI0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBQb3RlbnRpYWwgR2F0ZSBBY3Rpb24gQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoZSBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIGZpbGUuIEdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlICYjMzQ7Z2F0ZSYjMzQ7IGFjdGlvbiwgSSYjMzk7bSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29kZSB0aGF0IHJlbGF0ZSB0byB0aGlzICYjMzQ7Z2F0ZSYjMzQ7IGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0YXJnZXRpbmcgbGluZXMgdGhhdCBsaWtlbHkgZGVjbGFyZSBmdW5jdGlvbnMgb3IgdmFyaWFibGVzIHRoYXQgYXJlIGNlbnRyYWwgdG8gdGhpcyBnYXRlIGJlaGF2aW9yLgoKVG8gZG8gdGhpcyBlZmZpY2llbnRseSwgSSYjMzk7bGwgc2VhcmNoIGZvciBwYXR0ZXJucyB0aGF0IGFyZSBjb21tb25seSB1c2VkIGluIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYF5pbnQgYCwgYF52b2lkIGAsIGFuZCBgXnN0YXRpYyBgLiBUaGVzZSBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIHRvIGlkZW50aWZ5IGludGVnZXItcmV0dXJuaW5nIGZ1bmN0aW9ucyBvciB2b2lkLXJldHVybmluZyBmdW5jdGlvbnMsIGFzIHdlbGwgYXMgc3RhdGljIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgdGhhdCBhcmUgbGlrZWx5IHJlbGV2YW50LiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBpbml0aWFsIG92ZXJ2aWV3IGFuZCBoZWxwIG5hcnJvdyBteSBmb2N1cyB3aXRoaW4gdGhhdCBjb2RlIGJhc2UuIE9uY2UgSSBoYXZlIHRoZSBvdXRwdXQgZnJvbSB0aGUgZ3JlcCwgSSBjYW4gcXVpY2tseSBob21lIGluIG9uIHRoZSByZWxldmFudCBzZWN0aW9ucyBvZiBjb2RlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RhdGljIGludCAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0xNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhdGVfcG9saWN5W1RDQV9HQVRFX01BWCAmIzQzOyAxXSA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxODE6c3RhdGljIGludCBmaWxsX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4Mi1cdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA1LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjA2OnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICpuLCBzdHJ1Y3QgIHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMDctXHRcdFx0ICAgIGludCBpbmRleCwgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIyMz1zdGF0aWMgdm9pZCByZWxlYXNlX2VudHJ5X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZW50cmllcylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMzM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjM0LVx0XHRcdFx0IGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNyYyxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yNjEtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyNjI6c3RhdGljIGludCBwYXJzZV9nYXRlX2xpc3Qoc3RydWN0IG5sYXR0ciAqbGlzdF9hdHRyLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVx0XHRcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMwNz1zdGF0aWMgYm9vbCBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbCh1NjQgYmFzZXRpbWUsIHU2NCBvbGRfYmFzZXRpbWUsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzE2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzE3OnN0YXRpYyBpbnQgZ2F0ZV9jbG9ja19yZXNvbHZlKHMzMiBjbG9ja2lkLCBlbnVtIHRrX29mZnNldHMgKnRrbyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTU3MT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTgyOnN0YXRpYyBpbnQgZHVtcGluZ19lbnRyeShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgzLVx0XHRcdCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSlcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2MTM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTQtXHRcdFx0IGludCBiaW5kLCBpbnQgcmVmKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTY5NT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9lbnRyeV9kZXN0cnVjdG9yKHZvaWQgKnByaXYpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXHRcdFx0XHQgICAgICB1MzIgKmluZGV4X2luYywgYm9vbCBiaW5kLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzctXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgZ2F0ZV9pbml0X21vZHVsZSh2b2lkKVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjM0MAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBmb3IgTm9uLVN0YXRpYyBGdW5jdGlvbnMqKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHF1aWNrbHkgYXNzZXNzIHRoaXMgY29kZSBmb3IgdGhlIHByZXNlbmNlIG9mIG5vbi1zdGF0aWMgZnVuY3Rpb25zLiBHaXZlbiB0aGUgY29udGV4dCwgdGhpcyBjb3VsZCBiZSBmb3IgYSB2YXJpZXR5IG9mIHJlYXNvbnMsIGFuZCB0aGUgc3BlY2lmaWMgbW90aXZhdGlvbnMgd2lsbCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggaXQuIEFyZSB3ZSBsb29raW5nIGZvciBwb3RlbnRpYWwgdGhyZWFkIHNhZmV0eSBpc3N1ZXM/IE9yIHBlcmhhcHMgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgb2JqZWN0IGxpZmV0aW1lIG1hbmFnZW1lbnQgd2l0aGluIGEgbGFyZ2VyIGRlc2lnbj8gTWF5YmUgZXZlbiBzZWFyY2hpbmcgZm9yIG9wcG9ydHVuaXRpZXMgdG8gcmVmYWN0b3IgYW5kIG9wdGltaXplIGFyb3VuZCBzaGFyZWQgc3RhdGU/IFRoZSBwcmVzZW5jZSBvciBhYnNlbmNlIG9mIHRoZXNlIG5vbi1zdGF0aWMgbWV0aG9kcyB3aWxsIGRpY3RhdGUgdGhlIG5leHQgc3RlcHMgaW4gbXkgYW5hbHlzaXMsIGFuZCBJ4oCZbGwgYmUgdHVuaW5nIG15IGFwcHJvYWNoIGFjY29yZGluZ2x5LiBUaGlzIHNlZW1zIGEgc3RyYWlnaHRmb3J3YXJkIHN0YXJ0aW5nIHBvaW50LCBhIGJhc2ljIGJ1dCBlc3NlbnRpYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24gSSBuZWVkIGJlZm9yZSBJIGNhbiBkZXZlbG9wIGFuIGluLWRlcHRoIHVuZGVyc3RhbmRpbmcuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15pbnQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTc5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGFjdF9nYXRlLmNgIE1vZHVsZSoqCgpPa2F5LCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIG1vZHVsZS4gSG1tLCBpbml0aWFsbHksIEkgd2FzIGFzc3VtaW5nIGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgd2VyZSBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBldmVuIGBnYXRlX2luaXRfbW9kdWxlYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gQWgsIHllcywgY29uZmlybWVkIGJ5IGBtb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKWAuIFRoaXMgbWVhbnMgd2UgY2FuJiMzOTt0IGRpcmVjdGx5IGV4cG9ydCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgZnJvbSB0aGlzIG1vZHVsZSwgd2hpY2ggaXMgd2hhdCBJIHdvdWxkIHVzdWFsbHkgZXhwZWN0IHdoZW4gZGVhbGluZyB3aXRoIG1vZHVsZSBpbml0LiBCdXQgaGFuZyBvbi4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgY2FsbGVkIHRocm91Z2ggYSBmdW5jdGlvbiBwb2ludGVyLiBUaGlzIGlzIHNvbWV0aGluZyBpbnRlcmVzdGluZy4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSAqYWN0dWFsKiBub24tc3RhdGljIGZ1bmN0aW9ucyBkZWZpbmVkIGluIGBhY3RfZ2F0ZS5jYD8gR290dGEgZG91YmxlLWNoZWNrIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTIzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgYGFjdF9nYXRlLmNgIGZvciBQdWJsaWMgSW50ZXJmYWNlIEZ1bmN0aW9ucyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgZmlsZS4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQsIGFuZCB0aGUgdGhpbmcgSSYjMzk7bGwgdXN1YWxseSBjaGVjayBmaXJzdCwgaXMgdG8gbG9vayBmb3IgZnVuY3Rpb25zIHRoYXQgKmFyZW4mIzM5O3QqIGRlY2xhcmVkIGFzIGBzdGF0aWNgLiAgVGhvc2UgYXJlIHRoZSBvbmVzIHRoYXQgYXJlIGxpa2VseSBpbnRlbmRlZCBmb3IgdXNlIG91dHNpZGUgdGhlIGNvbmZpbmVzIG9mIHRoYXQgc2luZ2xlIGNvbXBpbGF0aW9uIHVuaXQuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGZvbGxvd2VkIHJlYXNvbmFibHkgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGhlcmUsIHNvIHRoYXQgYW55dGhpbmcgbWVhbnQgdG8gYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UgaXMgZGVjbGFyZWQgd2l0aG91dCBgc3RhdGljYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZGluZyB3aGF0IGhvb2tzIGFyZSBhdmFpbGFibGUuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc3RhcnQgc2Nhbm5pbmcuLi4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15bYS16XSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcztcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjE6c3RhdGljIGt0aW1lX3QgZ2F0ZV9nZXRfdGltZShzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMi17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Mzc6c3RhdGljIHZvaWQgZ2F0ZV9nZXRfc3RhcnRfdGltZShzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zOC1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnBhcmFtLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTg6c3RhdGljIHZvaWQgZ2F0ZV9zdGFydF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIGt0aW1lX3Qgc3RhcnQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01OS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTpzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcyLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0xMjI9VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE1My1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE1NDpvdmVybGltaXQ6XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTUtXHR0Y2ZfYWN0aW9uX2luY19vdmVybGltaXRfcXN0YXRzKFx1MDAyNmdhY3QtXHUwMDNlY29tbW9uKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE1Njpkcm9wOlxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTU3LVx0dGNmX2FjdGlvbl9pbmNfZHJvcF9xc3RhdHMoXHUwMDI2Z2FjdC1cdTAwM2Vjb21tb24pO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2MC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE2MTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZW50cnlfcG9saWN5W1RDQV9HQVRFX0VOVFJZX01BWCAmIzQzOyAxXSA9IHtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2Mi1cdFtUQ0FfR0FURV9FTlRSWV9JTkRFWF1cdFx0PSB7IC50eXBlID0gTkxBX1UzMiB9LFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE2OC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE2OTpzdGF0aWMgY29uc3Qgc3RydWN0IG5sYV9wb2xpY3kgZ2F0ZV9wb2xpY3lbVENBX0dBVEVfTUFYICYjNDM7IDFdID0ge1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTcwLVx0W1RDQV9HQVRFX1BBUk1TXVx0XHQ9XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTgxOnN0YXRpYyBpbnQgZmlsbF9nYXRlX2VudHJ5KHN0cnVjdCBubGF0dHIgKip0Yiwgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODItXHRcdFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwNS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIwNjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqbiwgc3RydWN0ICB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA3LVx0XHRcdCAgICBpbnQgaW5kZXgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjItXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMjM6c3RhdGljIHZvaWQgcmVsZWFzZV9lbnRyeV9saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmVudHJpZXMpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzMi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIzMzpzdGF0aWMgaW50IHRjZl9nYXRlX2NvcHlfZW50cmllcyhzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpkc3QsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzQtXHRcdFx0XHQgY29uc3Qgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc3JjLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yNjMtXHRcdFx0ICAgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc2NoZWQsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzAwLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzAxOnJlbGVhc2VfbGlzdDpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMi1cdHJlbGVhc2VfZW50cnlfbGlzdChcdTAwMjZzY2hlZC1cdTAwM2VlbnRyaWVzKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zMDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDc6c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzA4LVx0XHRcdFx0ICAgIGVudW0gdGtfb2Zmc2V0cyB0a28sXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzE2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzE3OnN0YXRpYyBpbnQgZ2F0ZV9jbG9ja19yZXNvbHZlKHMzMiBjbG9ja2lkLCBlbnVtIHRrX29mZnNldHMgKnRrbyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzM4LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzM5OnN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0MC1cdFx0XHQgICAgIGVudW0gdGtfb2Zmc2V0cyB0a28pXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0OC1cdFx0XHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1NDY6ZXJyX2ZyZWU6XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDctXHRyZWxlYXNlX2VudHJ5X2xpc3QoXHUwMDI2cC1cdTAwM2VlbnRyaWVzKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU0OC1cdGtmcmVlKHApO1xubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTQ5OmNoYWluX3B1dDpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU1MC1cdGlmIChnb3RvX2NoKVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTUxLVx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU1MjpyZWxlYXNlX2lkcjpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU1My1cdC8qIGFjdGlvbiBpcyBub3QgaW5zZXJ0ZWQgaW4gYW55IGxpc3Q6IGl0JiMzOTtzIHNhZmUgdG8gaW5pdCBoaXRpbWVyXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTYyLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTYzOnN0YXRpYyB2b2lkIHRjZl9nYXRlX3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NjQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3MC1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU3MTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9jbGVhbnVwKHN0cnVjdCB0Y19hY3Rpb24gKmEpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzIte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4MjpzdGF0aWMgaW50IGR1bXBpbmdfZW50cnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4My1cdFx0XHQgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnkpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NjA4Om5sYV9wdXRfZmFpbHVyZTpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYwOS1cdG5sYV9uZXN0X2NhbmNlbChza2IsIGl0ZW0pO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxMi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYxMzpzdGF0aWMgaW50IHRjZl9nYXRlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxNC1cdFx0XHQgaW50IGJpbmQsIGludCByZWYpXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjczLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njc0Om5sYV9wdXRfZmFpbHVyZTpcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY3NS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY3OS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MDpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY4MS1cdFx0XHRcdCAgdTY0IGRyb3BzLCB1NjQgbGFzdHVzZSwgYm9vbCBodylcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODktXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2OTA6c3RhdGljIHNpemVfdCB0Y2ZfZ2F0ZV9nZXRfZmlsbF9zaXplKGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5MS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjk0LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njk1OnN0YXRpYyB2b2lkIHRjZl9nYXRlX2VudHJ5X2Rlc3RydWN0b3Iodm9pZCAqcHJpdilcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5Ni17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwMy1cdFx0XHRcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXHRcdFx0XHQgICAgICB1MzIgKmluZGV4X2luYywgYm9vbCBiaW5kLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0My1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0NDpzdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ1LVx0LmtpbmRcdFx0PVx0XCYjMzQ7Z2F0ZVwmIzM0Oyxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NTc9TU9EVUxFX0FMSUFTX05FVF9BQ1QoXCYjMzQ7Z2F0ZVwmIzM0Oyk7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NTgtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTk6c3RhdGljIF9fbmV0X2luaXQgaW50IGdhdGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzYwLXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NjUtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NjY6c3RhdGljIHZvaWQgX19uZXRfZXhpdCBnYXRlX2V4aXRfbmV0KHN0cnVjdCBsaXN0X2hlYWQgKm5ldF9saXN0KVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzY3LXtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzAtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NzE6c3RhdGljIHN0cnVjdCBwZXJuZXRfb3BlcmF0aW9ucyBnYXRlX25ldF9vcHMgPSB7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzItXHQuaW5pdCA9IGdhdGVfaW5pdF9uZXQsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc3LVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Nzc4OnN0YXRpYyBpbnQgX19pbml0IGdhdGVfaW5pdF9tb2R1bGUodm9pZClcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3OS17XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzgyLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzgzOnN0YXRpYyB2b2lkIF9fZXhpdCBnYXRlX2NsZWFudXBfbW9kdWxlKHZvaWQpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03ODQte1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc4Ny1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4ODptb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4OTptb2R1bGVfZXhpdChnYXRlX2NsZWFudXBfbW9kdWxlKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc5MC1NT0RVTEVfREVTQ1JJUFRJT04oXCYjMzQ7VEMgZ2F0ZSBhY3Rpb25cJiMzNDspO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYHRjZl9nYXRlX2FjdGAgVmFyaWFibGUqKgoKT2theSwgc28gYHRjZl9nYXRlX2FjdGAgaXMgKm5vdCogYSBzdGF0aWMgdmFyaWFibGUsIHdoaWNoIGluaXRpYWxseSB0aHJldyBtZSBmb3IgYSBsb29wLiBCdXQgaGFuZyBvbiwgSSBzZWUgaXQmIzM5O3MgZGVjbGFyZWQgd2l0aCBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdGAuICBgVENfSU5ESVJFQ1RfU0NPUEVgIHR5cGljYWxseSBpbXBsaWVzIHNvbWV0aGluZyBsaWtlIGBfX21heWJlX3VudXNlZGAgb3IgYSBzaW1pbGFyIGNvbXBpbGVyIGhpbnQgdG8gcG90ZW50aWFsbHkgcHJldmVudCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGl0JiMzOTtzICphcHBsaWVkIHRvIGEgbm9uLXN0YXRpYyBmdW5jdGlvbiouCgpUaGF0IGNvbWJpbmF0aW9uIGlzIGludGVyZXN0aW5nLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGlzIHBlY3VsaWFyaXR5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgYHRjZl9nYXRlX2FjdGAgaXMgZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZ2F0ZSYjMzk7cyBiZWhhdmlvciBpbiB0aGlzIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9nYXRlX2FjdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jPTcxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEyMjpUQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhdGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMjMtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0Ny1cdC5vd25lclx0XHQ9XHRUSElTX01PRFVMRSxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0ODpcdC5hY3RcdFx0PVx0dGNmX2dhdGVfYWN0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ5LVx0LmR1bXBcdFx0PVx0dGNmX2dhdGVfZHVtcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3MTMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSB0Y2ZfZ2F0ZSBDb2RlIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gYHRjZl9nYXRlX2FjdGAgaXMgY2xlYXJseSB0aGUgbWFpbiBgLmFjdGAgZnVuY3Rpb24sIHdoaWNoIGlzIHRoZSBob3QgcGF0aCBmb3IgdGhlIFRDIGFjdGlvbi4gQnV0IHRoZSBhY3R1YWwgY2hhbmdlIEkmIzM5O20gaW50ZXJlc3RlZCBpbiBsaWVzIHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAuIFdhaXQsIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBzdGF0aWMuLi4gYnV0IGl0ICppcyogdGhlIGAuaW5pdGAgZnVuY3Rpb24gZm9yIGBhY3RfZ2F0ZV9vcHNgLCBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gSW50ZXJlc3RpbmcuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb3RoZXIgbm9uLXN0YXRpYyBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGUuCgpTbywgaW5pdGlhbGx5LCBJIGNvbnNpZGVyZWQgdXNpbmcgYHRjZl9nYXRlX2FjdGAgYXMgYSBmb2N1cyBzeW1ib2wgb3IgZXZlbiBub3Qgc3BlY2lmeWluZyBhIGZvY3VzIHN5bWJvbCBhdCBhbGwgZ2l2ZW4gdGhlIGxhY2sgb2YgZ29vZCBjYW5kaWRhdGVzLiBIb3dldmVyLCBgdGNmX2dhdGVfYWN0YCBpcyBhICpob3QgcGF0aCogZnVuY3Rpb24sIGNhbGxlZCBmb3IgZXZlcnkgcGFja2V0LiBXZSBkZWZpbml0ZWx5IGRvbiYjMzk7dCB3YW50IHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cyB0aGVyZTsgdGhhdCYjMzk7cyBnZW5lcmljLiBTaW5jZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBub24tc3RhdGljLCBub24taG90LXBhdGggZnVuY3Rpb25zIHRvIGNvbnNpZGVyLCBpdCBsb29rcyBsaWtlIHdlIGNhbiBsZWF2ZSBgRm9jdXNTeW1ib2xzYCBlbXB0eS4gVGhhdCBtYWtlcyBzZW5zZS4KCk5vdywgaXMgYHRjZl9nYXRlX2luaXRgIHJlYWNoYWJsZT8gWWVzLCB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoYXQmIzM5O3MgZ29vZC4KCkFscmlnaHQsIHRoZSBjaGFuZ2UgaXRzZWxmLi4uIEFoLCBoZXJlIGl0IGlzOiBhIGNydWNpYWwgdmFsaWRhdGlvbiBjaGVjayBvbiBgY3ljbGV0aW1lYC4gSXQgbm93IGNoZWNrcyBpZiBgY3ljbGV0aW1lYCBpcyB3aXRoaW4gdGhlIHJhbmdlIDAgdG8gYElOVF9NQVhgLCBhbmQgdGhyb3dzIGFuIGVycm9yIGlmIG5vdC4gVGhpcyBsb29rcyBsaWtlIGEgcGVyZmVjdCB0YXJnZXQgZm9yIGZ1enppbmcg4oCTIGEgZnVuY3Rpb25hbCBjaGFuZ2Ugd2l0aCBjbGVhciBlcnJvciBoYW5kbGluZy4gV2UmIzM5O2xsIGJlIGFibGUgdG8gY3JlYXRlIGludGVyZXN0aW5nIHRlc3QgY2FzZXMgYnkgZ2VuZXJhdGluZyB2YWx1ZXMgb2YgYGN5Y2xldGltZWAgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuCgpSZWdhcmRpbmcgY29uZmlndXJhdGlvbnMsIHdlIG5lZWQgYm90aCBgTkVUX0FDVF9HQVRFYCBhbmQgYE5FVF9DTFNfQUNUYC4gSXQgaXMgYSBnb29kIHRoaW5nIHRvIGRvdWJsZSBjaGVjayBpZiB0aGUgZmlyc3Qgb25lIGlzIGVub3VnaC4gWWVzLCBgTkVUX0FDVF9HQVRFYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAuIFRoZXJlZm9yZSB3ZSB3aWxsIHJldHVybiBib3RoLiBOb3csIGxldCBtZSBjaGVjayBhZ2FpbiBpZiB3ZSBuZWVkIHRvIGluY2x1ZGUgb3RoZXIgY29uZmlndXJhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRfQUNUX0dBVEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZz05MTc9Y29uZmlnIE5FVF9BQ1RfQ1Rcbi0tXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXG5uZXQvc2NoZWQvS2NvbmZpZzo5MzA6Y29uZmlnIE5FVF9BQ1RfR0FURVxubmV0L3NjaGVkL0tjb25maWctOTMxLVx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzI2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5FVF9DTFNfQUNUYCBEZXBlbmRlbmNpZXMqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIG9mIGBORVRfQ0xTX0FDVGAuIEl0JiMzOTtzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgbW9kdWxlIGZ1bmN0aW9ucyBjb3JyZWN0bHkgYW5kIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgb3IgY29uZmxpY3RzIHdpdGhpbiB0aGUgZXhpc3RpbmcgbmV0d29yayBpbmZyYXN0cnVjdHVyZS4gSSYjMzk7bSB0aGlua2luZyBJJiMzOTtsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byB0aGlzIG1vZHVsZSBhbmQgc2VlIHdoZXJlIHRoZXkgb3JpZ2luYXRlLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIHJlbGllcyBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgY29tcG9uZW50cywgb3IgYXJlIHRoZXJlIGFueSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBpbnZvbHZlZD8KCkkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCBjaXJjdWxhciBkZXBlbmRlbmNpZXMgYXMgd2VsbCwgb2J2aW91c2x5LiBUaG9zZSBhcmUgYWx3YXlzIGEgaGVhZGFjaGUgYW5kIGNhbiBjYXVzZSByZWFsbHkgZGlmZmljdWx0LXRvLWRlYnVnIHByb2JsZW1zLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgdGhlIHZlcnNpb24gbnVtYmVycyBhcmUgY29tcGF0aWJsZSwgZXNwZWNpYWxseSBpZiB0aGlzIHV0aWxpemVzIGFueSB0aGlyZCBwYXJ0eSBsaWJyYXJpZXMuIEZpbmFsbHksIEkmIzM5O2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga25vd24gYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIGRlcGVuZGVuY2llcy4gQSBnb29kIGRlcGVuZGVuY3kgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9DTFNfQUNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL0tjb25maWc9NjkwPWNvbmZpZyBORVRfRU1BVENIX0lQVFxuLS1cbm5ldC9zY2hlZC9LY29uZmlnLTcwMS1cbm5ldC9zY2hlZC9LY29uZmlnOjcwMjpjb25maWcgTkVUX0NMU19BQ1Rcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjA2NwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKlBlZXJpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIENvbmZpZ3VyYXRpb24gTGFieXJpbnRoKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcsICYjMzQ7UmlnaHQsIHRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgc291cmNlIGNvZGUgYWdhaW4uJiMzNDsgU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBORVRfQ0xTX0FDVGAuIFRoZSBuYW1lIGFsb25lIHNjcmVhbXMgJiMzNDtuZXR3b3JrIGNsYXNzaWZpY2F0aW9uIGFuZCBhY3Rpb24sJiMzNDsgYnV0IHRoZSBkZXZpbCYjMzk7cyBhbHdheXMgaW4gdGhlIGRldGFpbHMsIHNvIGxldCYjMzk7cyBzZWUgaG93IGl0JiMzOTtzIGNvbmZpZ3VyZWQuIE15IGZpcnN0IG1vdmUgaXMgdG8gbmF2aWdhdGUgdG8gYG5ldC9zY2hlZC9LY29uZmlnYC4gSXQmIzM5O3MgS2NvbmZpZyBmb3IgYSByZWFzb247IHRoaXMgZmlsZSAqaGFzKiB0byBob2xkIHRoZSBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMgSSBuZWVkIHRvIHVucmF2ZWwuIFVuZGVyc3RhbmRpbmcgaG93IGBORVRfQ0xTX0FDVGAgaXMgZXhwb3NlZCBhcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24gaXMgZ29pbmcgdG8gYmUga2V5IHRvIGZpZ3VyaW5nIG91dCBleGFjdGx5IHdoYXQgaXQgZG9lcywgYW5kIG1vcmUgaW1wb3J0YW50bHksIGhvdyBpdCYjMzk7cyAqdXNlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrLiBJIG5lZWQgdGhlIHNwZWNpZmljcyBzbyBJIGNhbiBkZXRlcm1pbmUgaWYgdGhpcyBpcyByZWxldmFudCB0byBteSBzcGVjaWZpYyBwcm9qZWN0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjk1Olx0XHQgIG1hdGNoZXMuXG4gNjk2Olx0XHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFwmIzM0O3BvbGljeVwmIzM0OyB3aGljaCBhbGxvd3MgcGFja2V0IGNsYXNzaWZpY2F0aW9uXG4gNjk3Olx0XHQgIGJhc2VkIG9uIElQc2VjIHBvbGljeSB0aGF0IHdhcyB1c2VkIGR1cmluZyBkZWNhcHN1bGF0aW9uXG4gNjk4Olx0XG4gNjk5Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiA3MDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGVtX2lwdC5cbiA3MDE6XHRcbiA3MDI6XHRjb25maWcgTkVUX0NMU19BQ1RcbiA3MDM6XHRcdGJvb2wgXCYjMzQ7QWN0aW9uc1wmIzM0O1xuIDcwNDpcdFx0c2VsZWN0IE5FVF9DTFNcbiA3MDU6XHRcdHNlbGVjdCBORVRfWEdSRVNTXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gdXNlIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLiBBY3Rpb25zXG4gNzA4Olx0XHQgIGdldCBhdHRhY2hlZCB0byBjbGFzc2lmaWVycyBhbmQgYXJlIGludm9rZWQgYWZ0ZXIgYSBzdWNjZXNzZnVsXG4gNzA5Olx0XHQgIGNsYXNzaWZpY2F0aW9uLiBUaGV5IGFyZSB1c2VkIHRvIG92ZXJ3cml0ZSB0aGUgY2xhc3NpZmljYXRpb25cbiA3MTA6XHRcdCAgcmVzdWx0LCBpbnN0YW50bHkgZHJvcCBvciByZWRpcmVjdCBwYWNrZXRzLCBldGMuXG4gNzExOlx0XG4gNzEyOlx0XHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXG4gNzEzOlx0XHQgIGV4dGVuZGVkIG1hdGNoZXMuXG4gNzE0Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNjE3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRGl2aW5nIGludG8gQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCBhbmQgSSBub3RpY2UgaXQgZG9lc24mIzM5O3QgaGF2ZSBhbiBleHBsaWNpdCBgZGVwZW5kcyBvbmAgZW50cnkgaW4gaXRzIGNvbmZpZ3VyYXRpb24uIFRoYXQmIzM5O3MgYSBsaXR0bGUgdW51c3VhbCwgSSBhbHdheXMgbG9vayBmb3IgdGhvc2UuIEJ1dCB0aGVuIEkgc2VlIHRoYXQgaXQmIzM5O3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gQWxyaWdodCwgdGltZSB0byBnbyBjaGVjayBgTkVUX1NDSEVEYCYjMzk7cyBjb25maWd1cmF0aW9uIGFuZCBzZWUgd2hhdCYjMzk7cyBjb250cm9sbGluZyBpdHMgaW5jbHVzaW9uLCBhbmQgdGhlcmVmb3JlLCBwb3RlbnRpYWxseSwgaW5kaXJlY3RseSwgdGhlIGluY2x1c2lvbiBvZiBgTkVUX0NMU19BQ1RgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbG9naWMgY2hhaW4gaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVudWNvbmZpZyBORVRfU0NIRUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvS2NvbmZpZy01LVxubmV0L3NjaGVkL0tjb25maWc6NjptZW51Y29uZmlnIE5FVF9TQ0hFRFxubmV0L3NjaGVkL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODgxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIHRoZSBORVRfU0NIRUQgS2NvbmZpZyBFbnRyeSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9TQ0hFRGAgS2NvbmZpZyBlbnRyeSB3aXRoaW4gYG5ldC9zY2hlZC9gLiBGaXJzdCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHdlJiMzOTtyZSBvbiB0aGUgc2FtZSBwYWdlIGFuZCBrbm93IHdoYXQgd2UgYXJlIGRlYWxpbmcgd2l0aC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgaXMgY29uZmlndXJlZCB3aXRoaW4gdGhlIG5ldHdvcmtpbmcgc3RhY2suIFdoYXQgZGVwZW5kZW5jaWVzIGRvZXMgaXQgaGF2ZT8gV2hhdCBmZWF0dXJlcyBkb2VzIGl0IGVuYWJsZT8gRG9lcyBpdCBtYWtlIHVzZSBvZiBhbnkgc3BlY2lmaWMgaGFyZHdhcmUgb3IgdGVjaG5vbG9naWVzPyBJJiMzOTtsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiB0aGUgbG9naWMgYmVoaW5kIGl0cyBkZWZhdWx0IHNldHRpbmcuIFdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBtYWtlIHVzIHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQ/IEkmIzM5O2xsIHdhbnQgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBwYXJ0aWN1bGFyIGNvbmZpZyBvcHRpb24gb24gb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHVzYWdlLiBLbm93aW5nIHRoZSBpbnMgYW5kIG91dHMgb2YgdGhpcyBzZXR0aW5nIGlzIGNyaXRpY2FsIGZvciBmaW5lLXR1bmluZyBvdXIgbmV0d29yayBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgVHJhZmZpYyBjb250cm9sIGNvbmZpZ3VyYXRpb24uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdG1lbnVjb25maWcgTkVUX1NDSEVEXG4gICA3Olx0XHRib29sIFwmIzM0O1FvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1wmIzM0O1xuICAgODpcdFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xuICAgOTpcdFx0aGVscFxuICAxMDpcdFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xuICAxMTpcdFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXG4gIDEyOlx0XHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXG4gIDEzOlx0XHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xuICAxNDpcdFx0ICBcJiMzNDtmYWlybHlcJiMzNDsgaGF2ZSBiZWVuIHByb3Bvc2VkLlxuICAxNTpcdFxuICAxNjpcdFx0ICBJZiB5b3Ugc2F5IE4gaGVyZSwgeW91IHdpbGwgZ2V0IHRoZSBzdGFuZGFyZCBwYWNrZXQgc2NoZWR1bGVyLCB3aGljaFxuICAxNzpcdFx0ICBpcyBhIEZJRk8gKGZpcnN0IGNvbWUsIGZpcnN0IHNlcnZlZCkuIElmIHlvdSBzYXkgWSBoZXJlLCB5b3Ugd2lsbCBiZVxuICAxODpcdFx0ICBhYmxlIHRvIGNob29zZSBmcm9tIGFtb25nIHNldmVyYWwgYWx0ZXJuYXRpdmUgYWxnb3JpdGhtcyB3aGljaCBjYW5cbiAgMTk6XHRcdCAgdGhlbiBiZSBhdHRhY2hlZCB0byBkaWZmZXJlbnQgbmV0d29yayBkZXZpY2VzLiBUaGlzIGlzIHVzZWZ1bCBmb3JcbiAgMjA6XHRcdCAgZXhhbXBsZSBpZiBzb21lIG9mIHlvdXIgbmV0d29yayBkZXZpY2VzIGFyZSByZWFsIHRpbWUgZGV2aWNlcyB0aGF0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNDExCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyB0aGUgTkVUX1NDSEVEIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbioqCgpPa2F5LCBzbyBJIHNlZSB0aGF0IGBORVRfU0NIRURgIGlzIGEgcmVxdWlyZWQgY29tcG9uZW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQmIzM5O3MgbWFrZSBzdXJlIGl0JiMzOTtzIHByb3Blcmx5IGNvbmZpZ3VyZWQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBkZXBlbmRlbmNpZXM7IG5vdGhpbmcgaXMgd29yc2UgdGhhbiBoYXZpbmcgc29tZXRoaW5nIGZhaWwgYmVjYXVzZSBhIHByZS1yZXF1aXNpdGUgaXNuJiMzOTt0IHNhdGlzZmllZC4gSG1tLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIG5vIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuIEl0JiMzOTtzIGp1c3QgYSB0b3AtbGV2ZWwgYG1lbnVjb25maWdgIG9wdGlvbi4gV2FpdCBhIHNlY29uZCwgd2hlcmUgaXMgdGhpcyBkZWZpbmVkPyBBaCwgaXQgbGl2ZXMgaW4gYG5ldC9LY29uZmlnYC4gUmlnaHQsIG5vdyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoYXQgZmlsZSBhbmQgc2VlIHdoYXQgZWxzZSBJIGNhbiBnbGVhbiBmcm9tIHRoZXJlLiBJIGhhdmUgdG8gc2VlIGhvdyBgTkVUX1NDSEVEYCBpcyBjb25uZWN0ZWQgd2l0aGluIHRoZSBuZXR3b3JrIGNvbmZpZ3VyYXRpb24gc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDsmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvS2NvbmZpZz0yNjk9c291cmNlIFwmIzM0O25ldC9tYWM4MDIxNTQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWc6MjcwOnNvdXJjZSBcJiMzNDtuZXQvc2NoZWQvS2NvbmZpZ1wmIzM0O1xubmV0L0tjb25maWctMjcxLXNvdXJjZSBcJiMzNDtuZXQvZGNiL0tjb25maWdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM3NTYKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCYjMzk7cyBOZXR3b3JrIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZXQvS2NvbmZpZ2AsIGFuZCB0aGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlIGxpbmUgYHNvdXJjZSAmIzM0O25ldC9zY2hlZC9LY29uZmlnJiMzNDtgLiBQcmV0dHkgc3RhbmRhcmQgS2NvbmZpZyBzdHVmZiwgYnV0IGNvbnRleHQgaXMgYWx3YXlzIGtleS4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBlbnN1cmUgSSYjMzk7dmUgZ290IHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBvZiB0aGUgbmV0d29ya2luZyBjb25maWd1cmF0aW9uIGluIG1pbmQuIFdoYXQgZGVwZW5kZW5jaWVzIG1pZ2h0IGBuZXQvc2NoZWQvS2NvbmZpZ2AgaW50cm9kdWNlIHdpdGhpbiB0aGUgbGFyZ2VyIGBuZXQvYCBzY29wZT8gSSBuZWVkIHRvIHF1aWNrbHkgZ3Jhc3AgaG93IHRoaXMgaW5jbHVzaW9uIGFmZmVjdHMgdGhlIGJ1aWxkIHByb2Nlc3MgYW5kIHdoYXQgb3B0aW9ucyBpdCBwb3RlbnRpYWxseSB1bmxvY2tzIChvciByZXN0cmljdHMpLgoKU28sIGxldCBtZSB6b29tIGluIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEkmIzM5O2xsIHF1aWNrbHkgc2NhbiBmb3IgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBLY29uZmlnIGZpbGVzLCBvciBleHRlcm5hbCB2YXJpYWJsZXMgdGhhdCBjb3VsZCBpbmZsdWVuY2UgdGhpcyBpbmNsdXNpb24sIG9yIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzLiBEb2VzIGBuZXQvc2NoZWQvS2NvbmZpZ2AgaW50cm9kdWNlIG5ldyBzeW1ib2xzIG9yIHJlZGVmaW5lIGV4aXN0aW5nIG9uZXM/IEFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgaW5jbHVkZXMgb3IgZXhjbHVzaW9ucyBkZXBlbmRlbnQgb24gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2sgY29uZmlndXJhdGlvbj8gVGhpcyBpcyBhbGwgYWJvdXQgZWZmaWNpZW50bHkgbWFwcGluZyBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgc3BlY2lmaWMgbW9kdWxlIGlzIGludGVncmF0ZWQuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiBob3cgYG5ldC9zY2hlZC9LY29uZmlnYCBleHBhbmRzIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXZhaWxhYmxlIHRvIHRoZSB1c2VyIGluIHRoZSBjb250ZXh0IG9mIG5ldHdvcmsgc2NoZWR1bGluZy4gVGltZSB0byBnZXQgZG93biB0byBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAyNjA6XHRzb3VyY2UgXCYjMzQ7bmV0L2JyaWRnZS9LY29uZmlnXCYjMzQ7XG4gMjYxOlx0c291cmNlIFwmIzM0O25ldC9kc2EvS2NvbmZpZ1wmIzM0O1xuIDI2MjpcdHNvdXJjZSBcJiMzNDtuZXQvODAyMXEvS2NvbmZpZ1wmIzM0O1xuIDI2MzpcdHNvdXJjZSBcJiMzNDtuZXQvbGxjL0tjb25maWdcJiMzNDtcbiAyNjQ6XHRzb3VyY2UgXCYjMzQ7bmV0L3gyNS9LY29uZmlnXCYjMzQ7XG4gMjY1Olx0c291cmNlIFwmIzM0O25ldC9sYXBiL0tjb25maWdcJiMzNDtcbiAyNjY6XHRzb3VyY2UgXCYjMzQ7bmV0L3Bob25ldC9LY29uZmlnXCYjMzQ7XG4gMjY3Olx0c291cmNlIFwmIzM0O25ldC82bG93cGFuL0tjb25maWdcJiMzNDtcbiAyNjg6XHRzb3VyY2UgXCYjMzQ7bmV0L2llZWU4MDIxNTQvS2NvbmZpZ1wmIzM0O1xuIDI2OTpcdHNvdXJjZSBcJiMzNDtuZXQvbWFjODAyMTU0L0tjb25maWdcJiMzNDtcbiAyNzA6XHRzb3VyY2UgXCYjMzQ7bmV0L3NjaGVkL0tjb25maWdcJiMzNDtcbiAyNzE6XHRzb3VyY2UgXCYjMzQ7bmV0L2RjYi9LY29uZmlnXCYjMzQ7XG4gMjcyOlx0c291cmNlIFwmIzM0O25ldC9kbnNfcmVzb2x2ZXIvS2NvbmZpZ1wmIzM0O1xuIDI3MzpcdHNvdXJjZSBcJiMzNDtuZXQvYmF0bWFuLWFkdi9LY29uZmlnXCYjMzQ7XG4gMjc0Olx0c291cmNlIFwmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnXCYjMzQ7XG4gMjc1Olx0c291cmNlIFwmIzM0O25ldC92bXdfdnNvY2svS2NvbmZpZ1wmIzM0O1xuIDI3NjpcdHNvdXJjZSBcJiMzNDtuZXQvbmV0bGluay9LY29uZmlnXCYjMzQ7XG4gMjc3Olx0c291cmNlIFwmIzM0O25ldC9tcGxzL0tjb25maWdcJiMzNDtcbiAyNzg6XHRzb3VyY2UgXCYjMzQ7bmV0L25zaC9LY29uZmlnXCYjMzQ7XG4gMjc5Olx0c291cmNlIFwmIzM0O25ldC9oc3IvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ2MAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZzogVGhlIHRjZl9nYXRlX2luaXQgRnVuY3Rpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBuZXR3b3JraW5nIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGEgZ29vZCBzcG90IGZvciBmdXp6aW5nLiBJIHNlZSB0aGlzIHBhdGNoIGlzIHJlbGF0ZWQgdG8gdGhlIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGJ1cmllZCBpbnNpZGUgdGhlIGBtZW51ICYjMzQ7TmV0d29ya2luZyBvcHRpb25zJiMzNDtgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVwZW5kZW50IG9uIGBORVRgLiBUaGVyZWZvcmUsIGl04oCZcyByZWxhdGVkIHRvIGBORVRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGBORVRfQUNUX0dBVEVgLgoKTXkgaW5pdGlhbCB0aG91Z2h0IHdhcyB0byBkb3VibGUtY2hlY2sgYHRjZl9nYXRlX2luaXRgLiBNeSBmb2N1cyBoYWQgYmVlbiBvbiBmaW5kaW5nIGEgc3VpdGFibGUgZW50cnkgcG9pbnQsIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSBtZW50aW9uIHByZWZlcnJpbmcgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zLiBBdCBmaXJzdCwgSSB3YXMgYSBiaXQgY29uY2VybmVkIGJlY2F1c2UgYHRjZl9nYXRlX2luaXRgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSSB3YXMgd29ycmllZCB0aGlzIG1pZ2h0IG1lYW4gaXQgd291bGQgYmUgaW5saW5lZCBhbmQgd291bGRuJiMzOTt0IGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcyBpbiB0aGUga2VybmVsIGltYWdlLCB3aGljaCB3b3VsZCBtYWtlIGl0IGxlc3MgaWRlYWwgZm9yIGZ1enppbmcuIEJ1dCB0aGVuIEkgcmVtZW1iZXJlZCwgd2FpdCBhIG1pbnV0ZSwgdGhlIGFkZHJlc3Mgb2YgYHRjZl9nYXRlX2luaXRgIGlzIGFjdHVhbGx5IHRha2VuISBJdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgLgoKVGhpcyBpcyB0aGUga2V5LiBTaW5jZSBhIHN0YXRpYyBmdW5jdGlvbiBoYXMgaXRzIGFkZHJlc3MgdGFrZW4sIHRoZSBjb21waWxlciAqbXVzdCogZ2VuZXJhdGUgYSBkaXN0aW5jdCBmdW5jdGlvbiBmb3IgaXQuIFRoYXQgbWVhbnMgYHRjZl9nYXRlX2luaXRgICp3aWxsKiBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MsIG1ha2luZyBpdCBhIHBlcmZlY3RseSB2YWxpZCBmb2N1cyBzeW1ib2whIEkgc2hvdWxkIGRvdWJsZS1jaGVjayB0aGF0IGFzc3VtcHRpb24gdGhvdWdoLiBZZXMsIGNvbmZpcm1lZC4gV2hlbiBhIHN0YXRpYyBmdW5jdGlvbuKAmXMgYWRkcmVzcyBpcyB1c2VkLCB0aGUgY29tcGlsZXIgbXVzdCBjcmVhdGUgYSBzZXBhcmF0ZSBmdW5jdGlvbiBzbyB0aGVyZSYjMzk7cyBhIHBvaW50ZXIgdG8gaXQuCgpUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IGluIGFkZGluZyBgdGNmX2dhdGVfaW5pdGAgdG8gbXkgYEZvY3VzU3ltYm9sc2AgbGlzdC4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQmIzM5O3MgYWRkaW5nIHZhbGlkYXRpb24gdG8gYGN5Y2xldGltZWAgd2l0aGluIGB0Y2ZfZ2F0ZV9pbml0YC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhbmQgaXQmIzM5O3MgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoaXMgc291bmRzIGxpa2UgcHJpbWUgZnV6emluZyB0ZXJyaXRvcnkuCgpNeSBjb25maWcgcmVxdWlyZW1lbnRzIGFyZTogYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAuIE15IGBGb2N1c1N5bWJvbHNgIGlzIGB0Y2ZfZ2F0ZV9pbml0YC4gVGltZSB0byBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGF0IGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0zMzk9c3RhdGljIHZvaWQgZ2F0ZV9zZXR1cF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIHMzMiBjbG9ja2lkLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTM0Ni1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXHRcdFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ5LVx0LmR1bXBcdFx0PVx0dGNmX2dhdGVfZHVtcCxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcdC5pbml0XHRcdD1cdHRjZl9nYXRlX2luaXQsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NTEtXHQuY2xlYW51cFx0PVx0dGNmX2dhdGVfY2xlYW51cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NTUKCQkJCQkJCW91dHB1dDogMTM4CgkJCQkJCQl0aG91Z2h0czogMTEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQXNzZXNzbWVudCoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCBgLmluaXQgPSB0Y2ZfZ2F0ZV9pbml0YCBpcyBjb3JyZWN0LiBOb3csIEkgbmVlZCB0byBtYWtlIGFic29sdXRlbHkgc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSBvdGhlciBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcyBsdXJraW5nIGFib3V0IHRoYXQgSSYjMzk7dmUgbWlzc2VkLiBMZXQmIzM5O3MgdHJhY2UgdGhlc2UgZGVwZW5kZW5jaWVzLiBJIHNlZSBgTkVUX0FDVF9HQVRFYCBkZXBlbmRzIG9uIGBORVRfQ0xTX0FDVGAuIEFuZCBsb29raW5nIGZ1cnRoZXIsIGBORVRfQ0xTX0FDVGAgaXMgcGFydCBvZiBgTkVUX1NDSEVEYC4gRmluYWxseSwgYE5FVF9TQ0hFRGAgYmVsb25ncyB0byBgTkVUYC4gQWxyaWdodCwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAgYXJlIGFsbCBjb3JyZWN0bHkgY29uZmlndXJlZC4gSSB3aWxsIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORVQmIzM0OywKICAgICYjMzQ7TkVUX1NDSEVEJiMzNDssCiAgICAmIzM0O05FVF9DTFNfQUNUJiMzNDssCiAgICAmIzM0O05FVF9BQ1RfR0FURSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3RjZl9nYXRlX2luaXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05FVCYjMzQ7LAogICAgJiMzNDtORVRfU0NIRUQmIzM0OywKICAgICYjMzQ7TkVUX0NMU19BQ1QmIzM0OywKICAgICYjMzQ7TkVUX0FDVF9HQVRFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dGNmX2dhdGVfaW5pdCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGV4Y2VlZCBgSU5UX01BWGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgYSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIChlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIG5ldGxpbmsgYXR0cmlidXRlcyBvciBjYWxjdWxhdGVkIGZyb20gZW50cnkgaW50ZXJ2YWxzKSBjYW4gY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2FuIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCwgY2F1c2luZyB0aGUgaHJ0aW1lciB0byBiZSBzZXQgaW4gdGhlIHBhc3QgYW5kIHRyaWdnZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBvZiB0aW1lciBpbnRlcnJ1cHRzIChhIERlbmlhbCBvZiBTZXJ2aWNlIGJ1ZykuXG5cblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDQ3YjllMGJiNWVkNGI1NDBhNDMxNDI4YzAyY2U0NDgzMzc0YzljYzkKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTo1OSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jIGIvbmV0L3NjaGVkL2FjdF9nYXRlLmMKaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDQKLS0tIGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L3NjaGVkL2FjdF9nYXRlLmMKQEAgLTUwMSw2ICYjNDM7NTAxLDE0IEBAIHN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSwKIAkJCWN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS0mZ3Q7aW50ZXJ2YWwpOwogCQljeWNsZXRpbWUgPSBjeWNsZTsKIAl9CiYjNDM7CiYjNDM7CWlmIChjeWNsZXRpbWUgJmx0OyAwIHx8IGN5Y2xldGltZSAmZ3Q7IElOVF9NQVgpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHKGV4dGFjaywgJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnJiMzNDspOwomIzQzOwkJZXJyID0gLUVJTlZBTDsKJiM0MzsJCXNwaW5fdW5sb2NrX2JoKCZhbXA7Z2FjdC0mZ3Q7dGNmX2xvY2spOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQomIzQzOwogCXAtJmd0O3RjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lOwogCXAtJmd0O3RjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNTgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBY3RfR2F0ZSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgdmVyaWZ5aW5nIGlmIGBjeWNsZXRpbWVgIGZhbGxzIHdpdGhpbiBhIHJlYXNvbmFibGUgcmFuZ2UgKDAgdG8gYElOVF9NQVhgKS4gTXkgaW5pdGlhbCByZWFjdGlvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGFkZHJlc3NpbmcgYSBsb2dpYyBvciBwb3RlbnRpYWwgaW50ZWdlciBvdmVyZmxvdyBpc3N1ZS4gVGhlIGNoZWNrIGl0c2VsZiBzZWVtcyBzdHJhaWdodGZvcndhcmQ6IGlmIGBjeWNsZXRpbWVgIGlzIG5lZ2F0aXZlIG9yIGV4Y2VlZHMgYElOVF9NQVhgLCBhbiBlcnJvciBpcyB0cmlnZ2VyZWQuCgpNeSBmaXJzdCB0aG91Z2h0IGlzLCAmIzM0O1doYXQmIzM5O3MgdGhlIGRhdGEgdHlwZSBvZiBgY3ljbGV0aW1lYD8mIzM0OyBJIHJlY2FsbCB0aGF0IGBrdGltZV9hZGRfbnNgIHJldHVybnMgYSBga3RpbWVfdGAsIHdoaWNoLCBJIGJlbGlldmUsIHJlc29sdmVzIHRvIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBvciBwb3NzaWJseSBhbiB1bnNpZ25lZCBvbmUgaW4gc29tZSBjb250ZXh0cy4gU28sIGBjeWNsZXRpbWVgIGlzIGxpa2VseSBhbiBgczY0YCBvciBgdTY0YC4gVGhlIHBhdGNoJiMzOTtzIHByaW1hcnkgY29uY2VybiBzZWVtcyB0byBiZSBwcmV2ZW50aW5nIGBjeWNsZXRpbWVgIGZyb20gdmVudHVyaW5nIGJleW9uZCB0aGVzZSBkZWZpbmVkIGJvdW5kcy4KCkdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIHBhdGNoLCBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBzaW1wbHkgYSB2YWxpZGF0aW9uIHN0ZXAuIEhvd2V2ZXIsIGl0JiMzOTtzIGFsd2F5cyBwcnVkZW50IHRvIGRvdWJsZS1jaGVjayBlcnJvciBoYW5kbGluZy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBlcnJfZnJlZWAgcGF0aCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBzdGF0ZSBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBLTVNBTi1yZWxhdGVkIGNvbmNlcm5zIGlmIHRoZSBjaGVjayBmYWlscy4gSXQmIzM5O3MgYSBnb29kIHByYWN0aWNlIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZW5zdXJlIHRoaXMgY2hlY2sgZG9lc24mIzM5O3QgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMsIGV2ZW4gaWYgaXQgYWltcyB0byBmaXggb25lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0Y2ZfZ2F0ZV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmM9MzM5PXN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNDc6c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVx0XHRcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc0ND1zdGF0aWMgc3RydWN0IHRjX2FjdGlvbl9vcHMgYWN0X2dhdGVfb3BzID0ge1xuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cdC5kdW1wXHRcdD1cdHRjZl9nYXRlX2R1bXAsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTA6XHQuaW5pdFx0XHQ9XHR0Y2ZfZ2F0ZV9pbml0LFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzUxLVx0LmNsZWFudXBcdD1cdHRjZl9nYXRlX2NsZWFudXAsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NjEKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgRnVuY3Rpb24qKgoKQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEkmIzM5O20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24uIEl0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHBsYWNlIHdoZXJlIGV2ZXJ5dGhpbmcgcmVsYXRlZCB0byB0aGUgZ2F0ZSBpbml0aWFsaXphdGlvbiBiZWdpbnMuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiDigJMgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIHJlc29sdmVkLiBUaGlzIGluaXRpYWwgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGhpZ2gtbGV2ZWwgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc3RhcnQgZXhhbWluaW5nIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBhdCB0aGUgb3V0c2V0LCB0byBkZXRlcm1pbmUgaG93IHRoZSBgZ2F0ZWAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNDc6XHRzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gMzQ4Olx0XHRcdFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXG4gMzQ5Olx0XHRcdFx0IHN0cnVjdCB0Y2ZfcHJvdG8gKnRwLCB1MzIgZmxhZ3MsXG4gMzUwOlx0XHRcdFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAzNTE6XHR7XG4gMzUyOlx0XHRzdHJ1Y3QgdGNfYWN0aW9uX25ldCAqdG4gPSBuZXRfZ2VuZXJpYyhuZXQsIGFjdF9nYXRlX29wcy5uZXRfaWQpO1xuIDM1MzpcdFx0dTY0IGN5Y2xldGltZSA9IDAsIGJhc2V0aW1lID0gMCwgY3ljbGV0aW1lX2V4dCA9IDA7XG4gMzU0Olx0XHRzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwID0gTlVMTCwgKm9sZF9wID0gTlVMTDtcbiAzNTU6XHRcdGVudW0gdGtfb2Zmc2V0cyBvbGRfdGtfb2Zmc2V0ID0gVEtfT0ZGU19UQUk7XG4gMzU2Olx0XHRjb25zdCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpjdXJfcCA9IE5VTEw7XG4gMzU3Olx0XHRib29sIGJpbmQgPSBmbGFncyBcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xuIDM1ODpcdFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0dBVEVfTUFYICYjNDM7IDFdO1xuIDM1OTpcdFx0ZW51bSB0a19vZmZzZXRzIHRrbyA9IFRLX09GRlNfVEFJO1xuIDM2MDpcdFx0c3RydWN0IHRjZl9jaGFpbiAqZ290b19jaCA9IE5VTEw7XG4gMzYxOlx0XHRzMzIgdGltZXJfY2xvY2tpZCA9IENMT0NLX1RBSTtcbiAzNjI6XHRcdGJvb2wgdXNlX29sZF9lbnRyaWVzID0gZmFsc2U7XG4gMzYzOlx0XHRzMzIgb2xkX2Nsb2NraWQgPSBDTE9DS19UQUk7XG4gMzY0Olx0XHRib29sIG5lZWRfY2FuY2VsID0gZmFsc2U7XG4gMzY1Olx0XHRzMzIgY2xvY2tpZCA9IENMT0NLX1RBSTtcbiAzNjY6XHRcdHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdDtcbiAzNjc6XHRcdHN0cnVjdCB0Y19nYXRlICpwYXJtO1xuIDM2ODpcdFx0dTY0IG9sZF9iYXNldGltZSA9IDA7XG4gMzY5Olx0XHRpbnQgcmV0ID0gMCwgZXJyO1xuIDM3MDpcdFx0dTMyIGdmbGFncyA9IDA7XG4gMzcxOlx0XHRzMzIgcHJpbyA9IC0xO1xuIDM3MjpcdFx0a3RpbWVfdCBzdGFydDtcbiAzNzM6XHRcdHUzMiBpbmRleDtcbiAzNzQ6XHRcbiAzNzU6XHRcdGlmICghbmxhKVxuIDM3NjpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiAzNzc6XHRcbiAzNzg6XHRcdGVyciA9IG5sYV9wYXJzZV9uZXN0ZWQodGIsIFRDQV9HQVRFX01BWCwgbmxhLCBnYXRlX3BvbGljeSwgZXh0YWNrKTtcbiAzNzk6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMzgwOlx0XHRcdHJldHVybiBlcnI7XG4gMzgxOlx0XG4gMzgyOlx0XHRpZiAoIXRiW1RDQV9HQVRFX1BBUk1TXSlcbiAzODM6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gMzg0Olx0XG4gMzg1Olx0XHRpZiAodGJbVENBX0dBVEVfQ0xPQ0tJRF0pXG4gMzg2Olx0XHRcdGNsb2NraWQgPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9DTE9DS0lEXSk7XG4gMzg3Olx0XG4gMzg4Olx0XHRwYXJtID0gbmxhX2RhdGEodGJbVENBX0dBVEVfUEFSTVNdKTtcbiAzODk6XHRcdGluZGV4ID0gcGFybS1cdTAwM2VpbmRleDtcbiAzOTA6XHRcbiAzOTE6XHRcdGVyciA9IHRjZl9pZHJfY2hlY2tfYWxsb2ModG4sIFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcbiAzOTI6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gMzkzOlx0XHRcdHJldHVybiBlcnI7XG4gMzk0Olx0XG4gMzk1Olx0XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBiaW5kKVxuIDM5NjpcdFx0XHRyZXR1cm4gQUNUX1BfQk9VTkQ7XG4gMzk3Olx0XG4gMzk4Olx0XHRpZiAoIWVycikge1xuIDM5OTpcdFx0XHRyZXQgPSB0Y2ZfaWRyX2NyZWF0ZV9mcm9tX2ZsYWdzKHRuLCBpbmRleCwgZXN0LCBhLFxuIDQwMDpcdFx0XHRcdFx0XHRcdFx1MDAyNmFjdF9nYXRlX29wcywgYmluZCwgZmxhZ3MpO1xuIDQwMTpcdFx0XHRpZiAocmV0KSB7XG4gNDAyOlx0XHRcdFx0dGNmX2lkcl9jbGVhbnVwKHRuLCBpbmRleCk7XG4gNDAzOlx0XHRcdFx0cmV0dXJuIHJldDtcbiA0MDQ6XHRcdFx0fVxuIDQwNTpcdFxuIDQwNjpcdFx0XHRyZXQgPSBBQ1RfUF9DUkVBVEVEO1xuIDQwNzpcdFx0fSBlbHNlIGlmICghKGZsYWdzIFx1MDAyNiBUQ0FfQUNUX0ZMQUdTX1JFUExBQ0UpKSB7XG4gNDA4Olx0XHRcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XG4gNDA5Olx0XHRcdHJldHVybiAtRUVYSVNUO1xuIDQxMDpcdFx0fVxuIDQxMTpcdFxuIDQxMjpcdFx0Z2FjdCA9IHRvX2dhdGUoKmEpO1xuIDQxMzpcdFxuIDQxNDpcdFx0ZXJyID0gdGNmX2FjdGlvbl9jaGVja19jdHJsYWN0KHBhcm0tXHUwMDNlYWN0aW9uLCB0cCwgXHUwMDI2Z290b19jaCwgZXh0YWNrKTtcbiA0MTU6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDE2Olx0XHRcdGdvdG8gcmVsZWFzZV9pZHI7XG4gNDE3Olx0XG4gNDE4Olx0XHRwID0ga3phbGxvYyhzaXplb2YoKnApLCBHRlBfS0VSTkVMKTtcbiA0MTk6XHRcdGlmICghcCkge1xuIDQyMDpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDQyMTpcdFx0XHRnb3RvIGNoYWluX3B1dDtcbiA0MjI6XHRcdH1cbiA0MjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnAtXHUwMDNlZW50cmllcyk7XG4gNDI0Olx0XG4gNDI1Olx0XHR1c2Vfb2xkX2VudHJpZXMgPSAhdGJbVENBX0dBVEVfRU5UUllfTElTVF07XG4gNDI2Olx0XHRpZiAoIXVzZV9vbGRfZW50cmllcykge1xuIDQyNzpcdFx0XHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XG4gNDI4Olx0XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNDI5Olx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiA0MzA6XHRcdFx0dXNlX29sZF9lbnRyaWVzID0gIWVycjtcbiA0MzE6XHRcdH1cbiA0MzI6XHRcbiA0MzM6XHRcdGlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRCBcdTAwMjZcdTAwMjYgdXNlX29sZF9lbnRyaWVzKSB7XG4gNDM0Olx0XHRcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXCYjMzQ7VGhlIGVudHJ5IGxpc3QgaXMgZW1wdHlcJiMzNDspO1xuIDQzNTpcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIDQzNjpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDQzNzpcdFx0fVxuIDQzODpcdFxuIDQzOTpcdFx0aWYgKHJldCAhPSBBQ1RfUF9DUkVBVEVEKSB7XG4gNDQwOlx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbiA0NDE6XHRcdFx0Y3VyX3AgPSByY3VfZGVyZWZlcmVuY2UoZ2FjdC1cdTAwM2VwYXJhbSk7XG4gNDQyOlx0XG4gNDQzOlx0XHRcdG9sZF9iYXNldGltZSAgPSBjdXJfcC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lO1xuIDQ0NDpcdFx0XHRvbGRfY2xvY2tpZCAgID0gY3VyX3AtXHUwMDNldGNmZ19jbG9ja2lkO1xuIDQ0NTpcdFx0XHRvbGRfdGtfb2Zmc2V0ID0gUkVBRF9PTkNFKGdhY3QtXHUwMDNldGtfb2Zmc2V0KTtcbiA0NDY6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDgyMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJiMzOTttIGFuIGV4cGVydCBhbmQgdGFraW5nIHRoZSBsZWFkIG9uIGFuYWx5emluZyB0aGUgZnVuY3Rpb246CgoqKkRpdmluZyBEZWVwZXIgaW50byB0aGUgQ29kZSoqCgpBbHJpZ2h0LCBJJiMzOTt2ZSBnb3QgdGhlIGluaXRpYWwgZ2xpbXBzZSBvZiB0aGUgZnVuY3Rpb24uIE5vdywgbGV0JiMzOTtzIG5vdCBqdXN0IHN0b3AgdGhlcmUuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdldCBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcuIEkgbmVlZCB0byBtb3ZlIHBhc3QgdGhlIGluaXRpYWwgb3ZlcnZpZXcgYW5kIHNlZSBob3cgaXQgYWxsIHdvcmtzIGluIGNvbnRleHQuIEkmIzM5O2xsIHJlYWQgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiwgdW5kZXJzdGFuZGluZyB3aGF0IGl0cyBzcGVjaWZpYyBjb21wb25lbnRzIGFyZSBhbmQgdGhlIGxvZ2ljIHRoYXQgc3RpdGNoZXMgdGhlbSB0b2dldGhlciB0byBmaW5kIGl0cyBjb21wbGV0ZSBtZWFuaW5nLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIGFuZCBhcHByZWNpYXRlIHRoZSBiaWdnZXIgcGljdHVyZSBvZiB0aGlzIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NDc6XHRcdFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcbiA0NDg6XHRcdFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dDtcbiA0NDk6XHRcdFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVx1MDAzZXRjZmdfcHJpb3JpdHk7XG4gNDUwOlx0XHRcdGdmbGFncyAgICAgICAgPSBjdXJfcC1cdTAwM2V0Y2ZnX2ZsYWdzO1xuIDQ1MTpcdFxuIDQ1MjpcdFx0XHRpZiAoIXRiW1RDQV9HQVRFX0NMT0NLSURdKVxuIDQ1MzpcdFx0XHRcdGNsb2NraWQgPSBvbGRfY2xvY2tpZDtcbiA0NTQ6XHRcbiA0NTU6XHRcdFx0ZXJyID0gMDtcbiA0NTY6XHRcdFx0aWYgKHVzZV9vbGRfZW50cmllcykge1xuIDQ1NzpcdFx0XHRcdGVyciA9IHRjZl9nYXRlX2NvcHlfZW50cmllcyhwLCBjdXJfcCwgZXh0YWNrKTtcbiA0NTg6XHRcdFx0XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgIXRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuIDQ1OTpcdFx0XHRcdFx0Y3ljbGV0aW1lID0gY3VyX3AtXHUwMDNldGNmZ19jeWNsZXRpbWU7XG4gNDYwOlx0XHRcdH1cbiA0NjE6XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gNDYyOlx0XHRcdGlmIChlcnIpXG4gNDYzOlx0XHRcdFx0Z290byBlcnJfZnJlZTtcbiA0NjQ6XHRcdH1cbiA0NjU6XHRcbiA0NjY6XHRcdGlmICh0YltUQ0FfR0FURV9QUklPUklUWV0pXG4gNDY3Olx0XHRcdHByaW8gPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9QUklPUklUWV0pO1xuIDQ2ODpcdFxuIDQ2OTpcdFx0aWYgKHRiW1RDQV9HQVRFX0JBU0VfVElNRV0pXG4gNDcwOlx0XHRcdGJhc2V0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQkFTRV9USU1FXSk7XG4gNDcxOlx0XG4gNDcyOlx0XHRpZiAodGJbVENBX0dBVEVfRkxBR1NdKVxuIDQ3MzpcdFx0XHRnZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9GTEFHU10pO1xuIDQ3NDpcdFxuIDQ3NTpcdFx0aWYgKHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuIDQ3NjpcdFx0XHRjeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7XG4gNDc3Olx0XG4gNDc4Olx0XHRpZiAodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKVxuIDQ3OTpcdFx0XHRjeWNsZXRpbWVfZXh0ID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKTtcbiA0ODA6XHRcbiA0ODE6XHRcdGVyciA9IGdhdGVfY2xvY2tfcmVzb2x2ZShjbG9ja2lkLCBcdTAwMjZ0a28sIGV4dGFjayk7XG4gNDgyOlx0XHRpZiAoZXJyKVxuIDQ4MzpcdFx0XHRnb3RvIGVycl9mcmVlO1xuIDQ4NDpcdFx0dGltZXJfY2xvY2tpZCA9IGNsb2NraWQ7XG4gNDg1Olx0XG4gNDg2Olx0XHRuZWVkX2NhbmNlbCA9IHJldCAhPSBBQ1RfUF9DUkVBVEVEIFx1MDAyNlx1MDAyNlxuIDQ4NzpcdFx0XHQgICAgICBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbChiYXNldGltZSwgb2xkX2Jhc2V0aW1lLFxuIDQ4ODpcdFx0XHRcdFx0XHQgICAgICB0a28sIG9sZF90a19vZmZzZXQsXG4gNDg5Olx0XHRcdFx0XHRcdCAgICAgIHRpbWVyX2Nsb2NraWQsIG9sZF9jbG9ja2lkKTtcbiA0OTA6XHRcbiA0OTE6XHRcdGlmIChuZWVkX2NhbmNlbClcbiA0OTI6XHRcdFx0aHJ0aW1lcl9jYW5jZWwoXHUwMDI2Z2FjdC1cdTAwM2VoaXRpbWVyKTtcbiA0OTM6XHRcbiA0OTQ6XHRcdHNwaW5fbG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbiA0OTU6XHRcbiA0OTY6XHRcdGlmICghY3ljbGV0aW1lKSB7XG4gNDk3Olx0XHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuIDQ5ODpcdFx0XHRrdGltZV90IGN5Y2xlID0gMDtcbiA0OTk6XHRcbiA1MDA6XHRcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2cC1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuIDUwMTpcdFx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gNTAyOlx0XHRcdGN5Y2xldGltZSA9IGN5Y2xlO1xuIDUwMzpcdFx0fVxuIDUwNDpcdFxuIDUwNTpcdFx0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbiA1MDY6XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDsmIzM5O2N5Y2xlX3RpbWUmIzM5OyBpcyB0b28gYmlnXCYjMzQ7KTtcbiA1MDc6XHRcdFx0ZXJyID0gLUVJTlZBTDtcbiA1MDg6XHRcdFx0c3Bpbl91bmxvY2tfYmgoXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4gNTA5Olx0XHRcdGdvdG8gZXJyX2ZyZWU7XG4gNTEwOlx0XHR9XG4gNTExOlx0XG4gNTEyOlx0XHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lID0gY3ljbGV0aW1lO1xuIDUxMzpcdFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQgPSBjeWNsZXRpbWVfZXh0O1xuIDUxNDpcdFxuIDUxNTpcdFx0aWYgKG5lZWRfY2FuY2VsIHx8IHJldCA9PSBBQ1RfUF9DUkVBVEVEKVxuIDUxNjpcdFx0XHRnYXRlX3NldHVwX3RpbWVyKGdhY3QsIHRpbWVyX2Nsb2NraWQsIHRrbyk7XG4gNTE3Olx0XHRwLVx1MDAzZXRjZmdfcHJpb3JpdHkgPSBwcmlvO1xuIDUxODpcdFx0cC1cdTAwM2V0Y2ZnX2ZsYWdzID0gZ2ZsYWdzO1xuIDUxOTpcdFx0cC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lID0gYmFzZXRpbWU7XG4gNTIwOlx0XHRwLVx1MDAzZXRjZmdfY2xvY2tpZCA9IHRpbWVyX2Nsb2NraWQ7XG4gNTIxOlx0XHRnYXRlX2dldF9zdGFydF90aW1lKGdhY3QsIHAsIFx1MDAyNnN0YXJ0KTtcbiA1MjI6XHRcbiA1MjM6XHRcdG9sZF9wID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYWN0LVx1MDAzZXBhcmFtLCBwLFxuIDUyNDpcdFx0XHRcdFx0ICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKSk7XG4gNTI1Olx0XG4gNTI2Olx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IHN0YXJ0O1xuIDUyNzpcdFx0Z2FjdC1cdTAwM2VjdXJyZW50X2dhdGVfc3RhdHVzID0gR0FURV9BQ1RfR0FURV9PUEVOIHwgR0FURV9BQ1RfUEVORElORztcbiA1Mjg6XHRcbiA1Mjk6XHRcdGdhY3QtXHUwMDNlbmV4dF9lbnRyeSA9IGxpc3RfZmlyc3RfZW50cnkoXHUwMDI2cC1cdTAwM2VlbnRyaWVzLFxuIDUzMDpcdFx0XHRcdFx0XHQgICAgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSwgbGlzdCk7XG4gNTMxOlx0XG4gNTMyOlx0XHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cdTAwM2VhY3Rpb24sIGdvdG9fY2gpO1xuIDUzMzpcdFxuIDUzNDpcdFx0Z2F0ZV9zdGFydF90aW1lcihnYWN0LCBzdGFydCk7XG4gNTM1Olx0XG4gNTM2Olx0XHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbiA1Mzc6XHRcbiA1Mzg6XHRcdGlmIChnb3RvX2NoKVxuIDUzOTpcdFx0XHR0Y2ZfY2hhaW5fcHV0X2J5X2FjdChnb3RvX2NoKTtcbiA1NDA6XHRcbiA1NDE6XHRcdGlmIChvbGRfcClcbiA1NDI6XHRcdFx0Y2FsbF9yY3UoXHUwMDI2b2xkX3AtXHUwMDNlcmN1LCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3UpO1xuIDU0MzpcdFxuIDU0NDpcdFx0cmV0dXJuIHJldDtcbiA1NDU6XHRcbiA1NDY6XHRlcnJfZnJlZTpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY0NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDM5OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGBjeWNsZXRpbWVgIENoZWNrKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgY3ljbGV0aW1lICZsdDsgMCB8fCBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYYC4gTXkgaW1tZWRpYXRlIHJlYWN0aW9uIGlzLCBob2xkIG9uLCBgY3ljbGV0aW1lYCBpcyBhIGB1NjRgISBBIGB1NjRgIGNhbiAqbmV2ZXIqIGJlIGxlc3MgdGhhbiB6ZXJvLiBUaGF0IHBhcnQgb2YgdGhlIGNoZWNrIGlzIGEgbm8tb3AsIGEgdGF1dG9sb2d5LiAKClRoZW4gSSBzYXcgdGhlIGRlY2xhcmF0aW9uOiBgdTY0IGN5Y2xldGltZSA9IDA7YCBhdCBsaW5lIDM1My4gQnV0IHdhaXQsIHdoZXJlIGRvZXMgYGN5Y2xldGltZWAgYWN0dWFsbHkgZ2V0IGl0cyB2YWx1ZT8gQWgsIGhlcmUgaXQgaXM6IGBjeWNsZXRpbWUgPSBjeWNsZTtgIEFuZCBgY3ljbGVgIGlzIGEgYGt0aW1lX3RgLCB3aGljaCBpcyByZWFsbHkgYW4gYHM2NGAuIFNvIHdlJiMzOTtyZSBhc3NpZ25pbmcgYSBzaWduZWQgNjQtYml0IGludGVnZXIgdG8gYW4gKnVuc2lnbmVkKiA2NC1iaXQgaW50ZWdlci4gVGhhdCYjMzk7cyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLgoKSWYgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgYGN5Y2xldGltZWAgd2lsbCBiZWNvbWUgYSAqdmVyeSogbGFyZ2UgcG9zaXRpdmUgbnVtYmVyIGR1ZSB0byB0aGUgd3JhcHBpbmcuIE5vdyB0aGUgYGN5Y2xldGltZSAmZ3Q7IElOVF9NQVhgIGNoZWNrIG1ha2VzIHNlbnNlLiBJZiB0aGUgc2lnbmVkIGBjeWNsZWAgaXMgbmVnYXRpdmUsIHRoZW4gYGN5Y2xldGltZWAgd2lsbCBiZSBncmVhdGVyIHRoYW4gYElOVF9NQVhgLCBhbmQgaXQgd2lsbCBjYXRjaCB0aGUgb3ZlcmZsb3cuCgpPa2F5LCBzbyB0aGUgaW5pdGlhbCB0aG91Z2h0IGFib3V0IGBjeWNsZXRpbWUgJmx0OyAwYCBiZWluZyBtZWFuaW5nbGVzcyBpcyBjb3JyZWN0LCBidXQgaXQmIzM5O3Mgbm90IGEgY29tcGxldGUgb3ZlcnNpZ2h0LiBUaGUgY29tYmluYXRpb24gb2YgdGhlIGFzc2lnbm1lbnQgYW5kIHRoZSBgSU5UX01BWGAgY2hlY2sgaXMgZWZmZWN0aXZlbHkgYSB3YXkgdG8gaGFuZGxlIG5lZ2F0aXZlIGlucHV0IHZhbHVlcyBvZiBgY3ljbGVgLiBJIG5lZWQgdG8gcmVtZW1iZXIgdGhpcyBpbiB0aGUgZnV0dXJlIQoKQnV0LCB3aGF0JiMzOTtzIHRoZSBwb2ludCBvZiBjaGVja2luZyBgY3ljbGV0aW1lICZndDsgSU5UX01BWGAgaW4gdGhlIGZpcnN0IHBsYWNlPyBJIGJldCB0aGlzIGlzIGJlY2F1c2UgYGN5Y2xldGltZWAgaXMgdXNlZCBzb21ld2hlcmUgaW4gYSB0aW1lciBjYWxjdWxhdGlvbi4gQSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIGNvdWxkIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgb3IgcG90ZW50aWFsbHkgbGVhZCB0byBhbiBpbmZpbml0ZSBsb29wIHdpdGhpbiB0aGUgYGdhdGVfdGltZXJfZm5gIG9yIGFub3RoZXIgcGFydCBvZiB0aGUgdGltZXIgY29kZS4gTGV0IG1lIGNoZWNrIHdoZXJlIGBjeWNsZXRpbWVgIGlzIGFjdHVhbGx5IHVzZWQuLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNmZ19jeWNsZXRpbWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc2NoZWQvYWN0X2dhdGUuYz0zNz1zdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUyOlx0Y3ljbGUgPSBwYXJhbS1cdTAwM2V0Y2ZnX2N5Y2xldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUzLVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTcxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEwNi1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjEwNzpcdFx0Y3ljbGUgPSBwLVx1MDAzZXRjZmdfY3ljbGV0aW1lO1xubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTA4LVx0XHRiYXNlID0gbnNfdG9fa3RpbWUocC1cdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zNDc9c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ0Ny1cdFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjQ0ODpcdFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dDtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ0OS1cdFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVx1MDAzZXRjZmdfcHJpb3JpdHk7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDU4LVx0XHRcdGlmICghZXJyIFx1MDAyNlx1MDAyNiAhdGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0NTk6XHRcdFx0XHRjeWNsZXRpbWUgPSBjdXJfcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ2MC1cdFx0fVxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUxMS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUxMjpcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1MTM6XHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MTQtXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NjEzPXN0YXRpYyBpbnQgdGNmX2dhdGVfZHVtcChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYzOS1cdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFRDQV9HQVRFX0NZQ0xFX1RJTUUsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDA6XHRcdFx0ICAgICAgcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZSwgVENBX0dBVEVfUEFEKSlcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY0MS1cdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQzLVx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENBX0dBVEVfQ1lDTEVfVElNRV9FWFQsXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDQ6XHRcdFx0ICAgICAgcC1cdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQsIFRDQV9HQVRFX1BBRCkpXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02NDUtXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Mjk3CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBUaW1lciBJbnN0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIHN1c3BlY3RpbmcgdGhlIHByb2JsZW0gaXMgYSB0aW1lci1yZWxhdGVkIGluc3RhYmlsaXR5IHdoZW4gYGN5Y2xldGltZWAgZ2V0cyB0b28gYmlnLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYSBsYXJnZSBgY3ljbGV0aW1lYCB2YWx1ZSBjb3VsZCBiZSBjYXVzaW5nIGFuIG92ZXJmbG93IHdpdGhpbiBga3RpbWVfYWRkX25zYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIG9yIHBvc3NpYmx5IGxlYWRpbmcgdG8gYGdhdGVfdGltZXJfZnVuY2AgZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBjeWNsZXRpbWVgLCBhbmQgdGhhdCYjMzk7cyB1c2VkIHdpdGhpbiBgZ2F0ZV90aW1lcl9mdW5jYCwgcmlnaHQ/IFNvIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIGBnYXRlX3RpbWVyX2Z1bmNgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUgd2l0aCBgY3ljbGV0aW1lYC4gVGhhdCBmdW5jdGlvbiBpcyBwcm9iYWJseSB0aGUgcm9vdCBvZiB0aGUgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDcxOlx0c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGdhdGVfdGltZXJfZnVuYyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXG4gIDcyOlx0e1xuICA3MzpcdFx0c3RydWN0IHRjZl9nYXRlICpnYWN0ID0gY29udGFpbmVyX29mKHRpbWVyLCBzdHJ1Y3QgdGNmX2dhdGUsXG4gIDc0Olx0XHRcdFx0XHRcdCAgICAgaGl0aW1lcik7XG4gIDc1Olx0XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICpuZXh0O1xuICA3NjpcdFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcDtcbiAgNzc6XHRcdGt0aW1lX3QgY2xvc2VfdGltZSwgbm93O1xuICA3ODpcdFxuICA3OTpcdFx0c3Bpbl9sb2NrKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuICA4MDpcdFxuICA4MTpcdFx0cCA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2FjdC1cdTAwM2VwYXJhbSxcbiAgODI6XHRcdFx0XHRcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKSk7XG4gIDgzOlx0XHRuZXh0ID0gZ2FjdC1cdTAwM2VuZXh0X2VudHJ5O1xuICA4NDpcdFxuICA4NTpcdFx0LyogY3ljbGUgc3RhcnQsIGNsZWFyIHBlbmRpbmcgYml0LCBjbGVhciB0b3RhbCBvY3RldHMgKi9cbiAgODY6XHRcdGdhY3QtXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IG5leHQtXHUwMDNlZ2F0ZV9zdGF0ZSA/IEdBVEVfQUNUX0dBVEVfT1BFTiA6IDA7XG4gIDg3Olx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfZW50cnlfb2N0ZXRzID0gMDtcbiAgODg6XHRcdGdhY3QtXHUwMDNlY3VycmVudF9tYXhfb2N0ZXRzID0gbmV4dC1cdTAwM2VtYXhvY3RldHM7XG4gIDg5Olx0XG4gIDkwOlx0XHRnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IGt0aW1lX2FkZF9ucyhnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSxcbiAgOTE6XHRcdFx0XHRcdFx0XHRuZXh0LVx1MDAzZWludGVydmFsKTtcbiAgOTI6XHRcbiAgOTM6XHRcdGNsb3NlX3RpbWUgPSBnYWN0LVx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZTtcbiAgOTQ6XHRcbiAgOTU6XHRcdGlmIChsaXN0X2lzX2xhc3QoXHUwMDI2bmV4dC1cdTAwM2VsaXN0LCBcdTAwMjZwLVx1MDAzZWVudHJpZXMpKVxuICA5NjpcdFx0XHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcdTAwMjZwLVx1MDAzZWVudHJpZXMsXG4gIDk3Olx0XHRcdFx0XHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xuICA5ODpcdFx0ZWxzZVxuICA5OTpcdFx0XHRuZXh0ID0gbGlzdF9uZXh0X2VudHJ5KG5leHQsIGxpc3QpO1xuIDEwMDpcdFxuIDEwMTpcdFx0bm93ID0gZ2F0ZV9nZXRfdGltZShnYWN0KTtcbiAxMDI6XHRcbiAxMDM6XHRcdGlmIChrdGltZV9hZnRlcihub3csIGNsb3NlX3RpbWUpKSB7XG4gMTA0Olx0XHRcdGt0aW1lX3QgY3ljbGUsIGJhc2U7XG4gMTA1Olx0XHRcdHU2NCBuO1xuIDEwNjpcdFxuIDEwNzpcdFx0XHRjeWNsZSA9IHAtXHUwMDNldGNmZ19jeWNsZXRpbWU7XG4gMTA4Olx0XHRcdGJhc2UgPSBuc190b19rdGltZShwLVx1MDAzZXRjZmdfYmFzZXRpbWUpO1xuIDEwOTpcdFx0XHRuID0gZGl2NjRfdTY0KGt0aW1lX3N1Yl9ucyhub3csIGJhc2UpLCBjeWNsZSk7XG4gMTEwOlx0XHRcdGNsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoYmFzZSwgKG4gJiM0MzsgMSkgKiBjeWNsZSk7XG4gMTExOlx0XHR9XG4gMTEyOlx0XG4gMTEzOlx0XHRnYWN0LVx1MDAzZW5leHRfZW50cnkgPSBuZXh0O1xuIDExNDpcdFxuIDExNTpcdFx0aHJ0aW1lcl9zZXRfZXhwaXJlcyhcdTAwMjZnYWN0LVx1MDAzZWhpdGltZXIsIGNsb3NlX3RpbWUpO1xuIDExNjpcdFxuIDExNzpcdFx0c3Bpbl91bmxvY2soXHUwMDI2Z2FjdC1cdTAwM2V0Y2ZfbG9jayk7XG4gMTE4Olx0XG4gMTE5Olx0XHRyZXR1cm4gSFJUSU1FUl9SRVNUQVJUO1xuIDEyMDpcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTM1MgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGl2aXNpb24gYnkgWmVybyBWdWxuZXJhYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBnYXRlX3RpbWVyX2Z1bmNgIGFuZCBpdCYjMzk7cyBoaXR0aW5nIG1lOiBpZiB0aGUgYGN5Y2xlYCB2YWx1ZSBpcyB6ZXJvLCB3ZSYjMzk7dmUgZ290IGEgcG90ZW50aWFsIGRpdmlkZS1ieS16ZXJvIGlzc3VlIHdpdGggYGRpdjY0X3U2NGAuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIGJ1ZywgZWFzeSB0byBvdmVybG9vay4gQnV0IGhvbGQgb24sIHRoZSBjb2RlIHNlZW1zIHRvIGhhdmUgc29tZSBjaGVja3MgaW4gYHRjZl9nYXRlX2luaXRgOgoKYGBgYwoJaWYgKCFjeWNsZXRpbWUpIHsKCQlzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTsKCQlrdGltZV90IGN5Y2xlID0gMDsKCgkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmFtcDtwLSZndDtlbnRyaWVzLCBsaXN0KQoJCQljeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktJmd0O2ludGVydmFsKTsKCQljeWNsZXRpbWUgPSBjeWNsZTsKCX0KYGBgCgpJdCBjaGVja3MgYCFjeWNsZXRpbWVgLCB3aGljaCBtYWtlcyBpdCAqc2VlbSogbGlrZSBpdCYjMzk7cyB0YWtpbmcgY2FyZSBvZiBhIHplcm8gYGN5Y2xldGltZWAuIEl0ICpjYWxjdWxhdGVzKiBgY3ljbGV0aW1lYCBmcm9tIHRoZSBzdW0gb2YgYGVudHJ5LSZndDtpbnRlcnZhbGAuIE9rYXksIHNvIHdoYXQgaWYgdGhhdCBzdW0gKmlzKiB6ZXJvPyBUaGVuIGBjeWNsZXRpbWVgIGVuZHMgdXAgYmVpbmcgemVybyBhcyB3ZWxsLiBUaGVuLCBpbiB0aGUgcGF0Y2gsIHRoZXJlIGlzIHRoaXMgY2hlY2s6IGBjeWNsZXRpbWUgJmx0OyAwIHx8IGN5Y2xldGltZSAmZ3Q7IElOVF9NQVhgLgoKSG1tLCBub3cgbGV0IG1lIHRoaW5rLi4uIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIHNvIGBjeWNsZXRpbWUgJmx0OyAwYCBpcyAqYWx3YXlzKiBnb2luZyB0byBiZSBmYWxzZS4gVGhhdCBwYXJ0IG9mIHRoZSBjaGVjayBpcyB1c2VsZXNzLiBCdXQgd2hhdCBhYm91dCBgY3ljbGV0aW1lICZndDsgSU5UX01BWGA/IFNpbmNlIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIGl0JiMzOTtzIG5vdCBnb2luZyB0byB3cmFwIGFyb3VuZCBsaWtlIGEgc2lnbmVkIGludGVnZXIgbWlnaHQuIFNvLCBpZiBgY3ljbGV0aW1lYCBpcyB6ZXJvLCBpdCYjMzk7cyAqbm90KiBncmVhdGVyIHRoYW4gYElOVF9NQVhgLgoKQW5kLCBmb3IgdGhlIHJlY29yZCwgYElOVF9NQVhgIGlzIDIxNDc0ODM2NDcuCgpJZiBgY3ljbGV0aW1lYCAqaXMqIGxhcmdlciB0aGFuIGBJTlRfTUFYYCwgaXQgZXJyb3JzIG91dCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdoeSBgSU5UX01BWGA/IEFoISBJIGJldCBpdCYjMzk7cyBiZWNhdXNlIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgIGlzIGEgYHUzMmAgd2l0aGluIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC4gSXQgbG9va3MgbGlrZSBJIG5lZWQgdG8gY29uZmlybSB0aGUgZW50cnksIG5vdy4gTGV0JiMzOTtzIGNoZWNrIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD0xMD1zdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnkge1xuLS1cbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgtMTYtXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjE3OnN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkge1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xOC1cdGludFx0XHRcdGluZGV4O1xuLS1cbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmg9NDE9c3RydWN0IHRjZl9nYXRlIHtcbi0tXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTQ3LVx0czMyXHRcdFx0Y3VycmVudF9tYXhfb2N0ZXRzO1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDo0ODpcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnlcdCpuZXh0X2VudHJ5O1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00OS1cdHN0cnVjdCBocnRpbWVyXHRcdGhpdGltZXI7XG4tLVxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD0xMTg9c3RhdGljIGlubGluZSBzdHJ1Y3QgYWN0aW9uX2dhdGVfZW50cnlcbi0tXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTEyMi1cdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnA7XG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjEyMzpcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xMjQtXHR1MzIgbnVtX2VudHJpZXM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNjQwCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBgdGNfZ2F0ZS5oYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgY3JhY2sgb3BlbiBgdGNfZ2F0ZS5oYC4gSSYjMzk7bSBpbW1lZGlhdGVseSBpbnRlcmVzdGVkIGluIHNlZWluZyBob3cgdGhlIFRyYWZmaWMgQ29udHJvbCAoVEMpIGdhdGluZyBmdW5jdGlvbmFsaXR5IGlzIGRlZmluZWQgaGVyZS4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCB0aGUgY29yZSBkYXRhIHN0cnVjdHVyZXMgdGhhdCByZXByZXNlbnQgZ2F0ZSBjb25maWd1cmF0aW9uczogdGhlIHBhcmFtZXRlcnMgZm9yIGRlZmluaW5nIGdhdGUgc3RhdGVzIChvcGVuL2Nsb3NlZCkgYmFzZWQgb24gdmFyaW91cyBjb25kaXRpb25zLCBwZXJoYXBzIFFvUyBtYXJrZXJzLCBmbG93IElEcywgb3Igc3BlY2lmaWMgcGFja2V0IGhlYWRlciBmaWVsZHMuIEkgd2FudCB0byBzZWUgaWYgdGhlIGludGVyZmFjZSBsZXZlcmFnZXMgZXhpc3RpbmcgVEMgbWVjaGFuaXNtcyBvciBpbnRyb2R1Y2VzIGVudGlyZWx5IG5ldyBlbGVtZW50cyBmb3IgdGhlIGdhdGUtc3BlY2lmaWMgbG9naWMuCgpJJiMzOTtsbCBiZSBsb29raW5nIGNsb3NlbHkgYXQgaG93IHRoZXkmIzM5O3ZlIGhhbmRsZWQgdGhlIGF0b21pY2l0eSBvZiBnYXRlIHN0YXRlIHRyYW5zaXRpb25zIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMsIGFzc3VtaW5nIHRoYXQgdGhpcyBoZWFkZXIgbGlrZWx5IGludGVyYWN0cyB3aXRoIGtlcm5lbCBzcGFjZSBhbmQgcG90ZW50aWFsbHkgaGFyZHdhcmUuIEFyZSB0aGVyZSBtdXRleGVzIG9yIG90aGVyIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzPyBBcmUgYXRvbWljIG9wZXJhdGlvbnMgYmVpbmcgdXNlZCBlZmZlY3RpdmVseT8KClNwZWNpZmljYWxseSwgSSYjMzk7bSBob3BpbmcgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgZ2F0ZSBjb25maWd1cmF0aW9uIGFuZCB0aGUgdW5kZXJseWluZyBwYWNrZXQgY2xhc3NpZmljYXRpb24gYW5kIHF1ZXVpbmcgZGlzY2lwbGluZXMuIEhvdyBzZWFtbGVzc2x5IGRvZXMgdGhlIGdhdGluZyBpbnRlZ3JhdGUgd2l0aCBvdGhlciBUQyBjb21wb25lbnRzIGxpa2UgY2xhc3NpZmllcnMgKGUuZy4sIGBjbHNfdTMyYCwgYGNsc19icGZgKSwgc2NoZWR1bGVycywgYW5kIHNoYXBlcnM/IERvZXMgdGhlIGRlc2lnbiBpbnRyb2R1Y2UgYW55IGluZWZmaWNpZW5jaWVzIG9yIGJvdHRsZW5lY2tzIGluIHRoZSBvdmVyYWxsIHBhY2tldCBwcm9jZXNzaW5nIHBpcGVsaW5lPyBJJiMzOTtsbCBhbHNvIGNoZWNrIGZvciBhbnkgaG9va3Mgb3IgY2FsbC1iYWNrcyBpbXBsZW1lbnRlZC4KCkJleW9uZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMsIEkmIzM5O2xsIGJlIHNjYW5uaW5nIGZvciBhbnkgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgdXNlZCB0byBtYW5pcHVsYXRlIHRoZXNlIGdhdGVzLCBhcyB0aGV5IG9mdGVuIGdpdmUgdmFsdWFibGUgaW5zaWdodCBpbnRvIHRoZSBpbnRlbmRlZCB1c2FnZSBwYXR0ZXJucyBhbmQgcGVyZm9ybWFuY2UgY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIGFsc28gYmUgY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucyBmb3IgbmV0d29yayBwZXJmb3JtYW5jZSDigJMgdGhlIHRyYWRlLW9mZnMgYmV0d2VlbiBnYXRpbmcgZ3JhbnVsYXJpdHksIGNvbnRyb2wgb3ZlcmhlYWQsIGFuZCBvdmVyYWxsIHBhY2tldCBsYXRlbmN5LiBVbHRpbWF0ZWx5LCBJIHdhbnQgdG8gYXNzZXNzIHdoZXRoZXIgdGhpcyBpbXBsZW1lbnRhdGlvbiBpcyBlbGVnYW50LCBlZmZpY2llbnQsIGFuZCB3ZWxsLWludGVncmF0ZWQgaW50byB0aGUgYnJvYWRlciBUQyBmcmFtZXdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE3LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgMTc6XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5IHtcbiAgMTg6XHRcdGludFx0XHRcdGluZGV4O1xuICAxOTpcdFx0dThcdFx0XHRnYXRlX3N0YXRlO1xuICAyMDpcdFx0dTMyXHRcdFx0aW50ZXJ2YWw7XG4gIDIxOlx0XHRzMzJcdFx0XHRpcHY7XG4gIDIyOlx0XHRzMzJcdFx0XHRtYXhvY3RldHM7XG4gIDIzOlx0XHRzdHJ1Y3QgbGlzdF9oZWFkXHRsaXN0O1xuICAyNDpcdH07XG4gIDI1Olx0XG4gIDI2Olx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyB7XG4gIDI3Olx0XHRzMzJcdFx0XHR0Y2ZnX3ByaW9yaXR5O1xuICAyODpcdFx0dTY0XHRcdFx0dGNmZ19iYXNldGltZTtcbiAgMjk6XHRcdHU2NFx0XHRcdHRjZmdfY3ljbGV0aW1lO1xuICAzMDpcdFx0dTY0XHRcdFx0dGNmZ19jeWNsZXRpbWVfZXh0O1xuICAzMTpcdFx0dTMyXHRcdFx0dGNmZ19mbGFncztcbiAgMzI6XHRcdHMzMlx0XHRcdHRjZmdfY2xvY2tpZDtcbiAgMzM6XHRcdHNpemVfdFx0XHRcdG51bV9lbnRyaWVzO1xuICAzNDpcdFx0c3RydWN0IGxpc3RfaGVhZFx0ZW50cmllcztcbiAgMzU6XHRcdHN0cnVjdCByY3VfaGVhZFx0XHRyY3U7XG4gIDM2Olx0fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzMzUKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA5NjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIERlbmlhbCBvZiBTZXJ2aWNlIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEdhdGUgUWRpc2MgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYGN5Y2xldGltZWAgdmFyaWFibGUgaW4gdGhlIEdhdGUgUWRpc2MsIGFuZCBJJiMzOTttIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3LiBJbml0aWFsbHksIGBjeWNsZXRpbWVgIGlzIGRlZmluZWQgYXMgYSBgdTY0YC4gVGhlbiwgaW4gYHRjZl9nYXRlX2luaXRgLCBpdCYjMzk7cyBzdWJqZWN0IHRvIGEgYm91bmRzIGNoZWNrLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCB0aGUgY2hlY2sgYGN5Y2xldGltZSAmbHQ7IDBgIGlzIGFsd2F5cyBmYWxzZSBiZWNhdXNlIGl0IGlzIGFuIHVuc2lnbmVkIGludGVnZXIuIEhvd2V2ZXIsIHRoZSBzdWJzZXF1ZW50IGNoZWNrIGBjeWNsZXRpbWUgJmd0OyBJTlRfTUFYYCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LgoKSW5pdGlhbGx5IEkgd2FzIHdvbmRlcmluZyBpZiB0aGVyZSB3YXMgYSBjYXN0IHRvIGEgc2lnbmVkIGludGVnZXIuIEhvd2V2ZXIsIHRoZXJlIGlzbiYjMzk7dC4KCkxvb2tpbmcgZGVlcGVyLCBgY3ljbGV0aW1lYCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIGBlbnRyeS0mZ3Q7aW50ZXJ2YWxgLiBIb3dldmVyLCBgZW50cnktJmd0O2ludGVydmFsYCBpcyBhIGB1MzJgLCBzbyB0aGUgYWNjdW11bGF0aW9uIHRvIGBjeWNsZWAgc2hvdWxkIGFsd2F5cyBiZSBwb3NpdGl2ZS4gSG93ZXZlciwgSSBzZWUgYSBzZWNvbmQgcGF0aCB3aGVyZSB0aGUgdXNlciBjYW4gcHJvdmlkZSBgY3ljbGV0aW1lYCBkaXJlY3RseSB2aWEgYG5sYV9nZXRfdTY0YC4gU28gbm93IEkgcmVhbGl6ZSB0aGVyZSBhcmUgdHdvIHNlcGFyYXRlIGNvZGUgcGF0aHMuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGBnYXRlX3RpbWVyX2Z1bmNgIGZ1bmN0aW9uLiBJZiB0aGUgcHJvdmlkZWQgYGN5Y2xldGltZWAgaXMgYSB2ZXJ5IGxhcmdlIHZhbHVlLCB0aGUgbXVsdGlwbGljYXRpb24gYChuICYjNDM7IDEpICogY3ljbGVgIHdpdGhpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIG92ZXJmbG93IGEgYHM2NGAuIEFuIG92ZXJmbG93IHdvdWxkIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYC4gVGhpcyBuZWdhdGl2ZSBgY2xvc2VfdGltZWAgd291bGQgYmUgc2V0IGFzIHRoZSBleHBpcmF0aW9uIHRpbWUgZm9yIHRoZSBoaWdoLXJlc29sdXRpb24gdGltZXIuICBBIG5lZ2F0aXZlIHRpbWUgY29ycmVzcG9uZHMgdG8gYSB0aW1lIGluIHRoZSBwYXN0LiBUaGlzIGluIHR1cm4gd2lsbCBjYXVzZSBgZ2F0ZV90aW1lcl9mdW5jYCB0byBiZSBjYWxsZWQgcmVwZWF0ZWRseSBhbmQgaW1tZWRpYXRlbHkuIEl0JiMzOTtzIGFuIGluZmluaXRlIGxvb3AgdHJpZ2dlcmVkIGJ5IGEgbGFyZ2UgYGN5Y2xldGltZWAgdmFsdWUsIGFuZCBpdCBjb21wbGV0ZWx5IGhhbmdzIHRoZSBzeXN0ZW0uIFRoaXMgaXMgYSBjbGFzc2ljIGRlbmlhbC1vZi1zZXJ2aWNlIHZ1bG5lcmFiaWxpdHkgY2F1c2VkIGJ5IGEgbG9naWMgYnVnOiBhbiBpbmZpbml0ZSBsb29wLgoKVGhlIGluaXRpYWwgcGF0Y2ggYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2ssIGJ1dCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgaWYgdGhlIGNvZGUgZ29lcyB0byBgZXJyX2ZyZWVgLiBUaGVyZSYjMzk7cyBhIGBrZnJlZShwKWAgY2FsbCB0aGVyZSwgYnV0IGl0IGFsc28gaGFzIGBwLSZndDtlbnRyaWVzYCwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLiBBcmUgdGhlIGVsZW1lbnRzIGluIHRoZSBgcC0mZ3Q7ZW50cmllc2AgbGlzdHMgZnJlZWQ/IEkgbmVlZCB0byBhbmFseXplIGBwYXJzZV9nYXRlX2xpc3RgIHRvIHNlZSBob3cgdGhvc2UgZW50cmllcyBhcmUgbWFuYWdlZCBhbmQgaWYgdGhlcmUmIzM5O3MgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWsgb3IgdXNlLWFmdGVyLWZyZWUgc2l0dWF0aW9uIGluIGFkZGl0aW9uIHRvIHRoZSBEb1MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BhcnNlX2dhdGVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIzMz1zdGF0aWMgaW50IHRjZl9nYXRlX2NvcHlfZW50cmllcyhzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpkc3QsXG4tLVxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjYyOnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9saXN0KHN0cnVjdCBubGF0dHIgKmxpc3RfYXR0cixcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2My1cdFx0XHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcbi0tXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zNDc9c3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuLS1cbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyNi1cdGlmICghdXNlX29sZF9lbnRyaWVzKSB7XG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0Mjc6XHRcdGVyciA9IHBhcnNlX2dhdGVfbGlzdCh0YltUQ0FfR0FURV9FTlRSWV9MSVNUXSwgcCwgZXh0YWNrKTtcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyOC1cdFx0aWYgKGVyciBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjMgMDQ6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMxMDAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIG15IGRvbWFpbiBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgKioKCkFscmlnaHQsIHRpbWUgdG8gY3JhY2sgaW50byBgcGFyc2VfZ2F0ZV9saXN0YC4gVGhpcyBwcm9iYWJseSBtZWFucyBzb21ldGhpbmcgY3J1Y2lhbCBpcyBoYXBwZW5pbmcgd2l0aCBob3cgd2UmIzM5O3JlIGJ1aWxkaW5nIHRoZSBjaXJjdWl0IHJlcHJlc2VudGF0aW9uLiBCYXNlZCBvbiB0aGUgbmFtaW5nLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBwYXJzaW5nIG9mIGEgbGlzdCBvZiAmIzM0O2dhdGVzJiMzNDsg4oCTIGFuZCB0aGF0JiMzOTtzIHVzdWFsbHkgd2hlcmUgdGhlIGNvbXBsZXhpdGllcyByZXNpZGUgaW4gdGhpcyBraW5kIG9mIHByb2dyYW0uIEkmIzM5O20gaW1tZWRpYXRlbHkgdGhpbmtpbmcgYWJvdXQ6IHdoYXQmIzM5O3MgdGhlIGlucHV0IGZvcm1hdD8gSXMgaXQgYSBzaW1wbGUgbGlzdCBvZiBzdHJpbmcgaWRlbnRpZmllcnM/IElzIGl0IGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBBcmUgd2UgaGFuZGxpbmcgZGlmZmVyZW50IGdhdGUgdHlwZXMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRpc3Rpbmd1aXNoZWQ/IEFueSBlcnJvciBoYW5kbGluZyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBhcyBJIHJldmlldz8gS25vd2luZyB0aGUgc291cmNlIGZvcm1hdCB3aWxsIGJlIGltcG9ydGFudC4gSXQgd2lsbCBkcml2ZSBob3cgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNjIsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI2MjpcdHN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9saXN0KHN0cnVjdCBubGF0dHIgKmxpc3RfYXR0cixcbiAyNjM6XHRcdFx0XHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcbiAyNjQ6XHRcdFx0XHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMjY1Olx0e1xuIDI2NjpcdFx0c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7XG4gMjY3Olx0XHRzdHJ1Y3QgbmxhdHRyICpuO1xuIDI2ODpcdFx0aW50IGVyciwgcmVtO1xuIDI2OTpcdFx0aW50IGkgPSAwO1xuIDI3MDpcdFxuIDI3MTpcdFx0aWYgKCFsaXN0X2F0dHIpXG4gMjcyOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuIDI3MzpcdFxuIDI3NDpcdFx0bmxhX2Zvcl9lYWNoX25lc3RlZChuLCBsaXN0X2F0dHIsIHJlbSkge1xuIDI3NTpcdFx0XHRpZiAobmxhX3R5cGUobikgIT0gVENBX0dBVEVfT05FX0VOVFJZKSB7XG4gMjc2Olx0XHRcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcJiMzNDtBdHRyaWJ1dGUgaXNuJiMzOTt0IHR5cGUgJiMzOTtlbnRyeSYjMzk7XCYjMzQ7KTtcbiAyNzc6XHRcdFx0XHRjb250aW51ZTtcbiAyNzg6XHRcdFx0fVxuIDI3OTpcdFxuIDI4MDpcdFx0XHRlbnRyeSA9IGt6YWxsb2Nfb2JqKCplbnRyeSwgR0ZQX0FUT01JQyk7XG4gMjgxOlx0XHRcdGlmICghZW50cnkpIHtcbiAyODI6XHRcdFx0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwmIzM0O05vdCBlbm91Z2ggbWVtb3J5IGZvciBlbnRyeVwmIzM0Oyk7XG4gMjgzOlx0XHRcdFx0ZXJyID0gLUVOT01FTTtcbiAyODQ6XHRcdFx0XHRnb3RvIHJlbGVhc2VfbGlzdDtcbiAyODU6XHRcdFx0fVxuIDI4NjpcdFxuIDI4NzpcdFx0XHRlcnIgPSBwYXJzZV9nYXRlX2VudHJ5KG4sIGVudHJ5LCBpLCBleHRhY2spO1xuIDI4ODpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gMjg5Olx0XHRcdFx0a2ZyZWUoZW50cnkpO1xuIDI5MDpcdFx0XHRcdGdvdG8gcmVsZWFzZV9saXN0O1xuIDI5MTpcdFx0XHR9XG4gMjkyOlx0XG4gMjkzOlx0XHRcdGxpc3RfYWRkX3RhaWwoXHUwMDI2ZW50cnktXHUwMDNlbGlzdCwgXHUwMDI2c2NoZWQtXHUwMDNlZW50cmllcyk7XG4gMjk0Olx0XHRcdGkmIzQzOyYjNDM7O1xuIDI5NTpcdFx0fVxuIDI5NjpcdFxuIDI5NzpcdFx0c2NoZWQtXHUwMDNlbnVtX2VudHJpZXMgPSBpO1xuIDI5ODpcdFxuIDI5OTpcdFx0cmV0dXJuIGk7XG4gMzAwOlx0XG4gMzAxOlx0cmVsZWFzZV9saXN0OlxuIDMwMjpcdFx0cmVsZWFzZV9lbnRyeV9saXN0KFx1MDAyNnNjaGVkLVx1MDAzZWVudHJpZXMpO1xuIDMwMzpcdFxuIDMwNDpcdFx0cmV0dXJuIGVycjtcbiAzMDU6XHR9XG4gMzA2Olx0XG4gMzA3Olx0c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxuIDMwODpcdFx0XHRcdFx0ICAgIGVudW0gdGtfb2Zmc2V0cyB0a28sXG4gMzA5Olx0XHRcdFx0XHQgICAgZW51bSB0a19vZmZzZXRzIG9sZF90a28sXG4gMzEwOlx0XHRcdFx0XHQgICAgczMyIGNsb2NraWQsIHMzMiBvbGRfY2xvY2tpZClcbiAzMTE6XHR7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDI0CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk1lbW9yeSBMZWFrIERldGVjdGlvbiBpbiBUQ0YgR2F0ZSBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGFuZCBzb21ldGhpbmcmIzM5O3MgYnVnZ2luZyBtZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIGhvdyB0aGUgYHAtJmd0O2VudHJpZXNgIHN0cnVjdHVyZSwgd2hpY2ggSSB1bmRlcnN0YW5kIGlzIHBvcHVsYXRlZCBieSBgcGFyc2VfZ2F0ZV9saXN0YCwgaW50ZXJhY3RzIHdpdGggdGhlIGVycm9yIGhhbmRsaW5nLiBJIHNlZSB0aGF0IGlmIGBwYXJzZV9nYXRlX2xpc3RgIHN1Y2NlZWRzLCBpdCBwb3B1bGF0ZXMgYHAtJmd0O2VudHJpZXNgIHdpdGggZGF0YS4gR3JlYXQsIHRoYXQmIzM5O3MgZXhwZWN0ZWQuCgpOb3csIGlmIGBjeWNsZXRpbWVgIGlzIGludmFsaWQsIHRoZSBjb2RlIGp1bXBzIHRvIGBlcnJfZnJlZWAsIGFuZCB0aGF0JiMzOTtzIHdoZXJlIG15IGNvbmNlcm4gbGllcy4gTG9va2luZyBhdCB0aGUgYGVycl9mcmVlYCBsYWJlbCwgSSBzZWUgYGtmcmVlKHApYCwgd2hpY2gsIG9mIGNvdXJzZSwgZnJlZXMgdGhlIGBwYCBzdHJ1Y3R1cmUgaXRzZWxmLiBCdXQsIGNydWNpYWxseSwgYGtmcmVlKHApYCAqZG9lc24mIzM5O3QqIGF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgaW5kaXZpZHVhbCBlbnRyaWVzIHdpdGhpbiBgcC0mZ3Q7ZW50cmllc2AhIE15IHNwaWRleSBzZW5zZSBpcyB0aW5nbGluZy4uLiBpcyB0aGlzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrPyBJIG1lYW4sIHRoZXNlIGVudHJpZXMsIGlmIGFsbG9jYXRlZCwgYXJlIGp1c3Qgc2l0dGluZyB0aGVyZSwgb3JwaGFuZWQgYWZ0ZXIgYHBgIGlzIGZyZWVkLiBJIG5lZWQgdG8gY29uZmlybSBpZiB0aGlzIGlzIHRydWUgYW5kIHRoYXQgdGhlcmUgaXMgYSBsZWFrLCBhbmQgaWYgc28sIGhvdyBtdWNoIG1lbW9yeSBpcyBsZWFrZWQ/IEkgbmVlZCB0byBhbmFseXplIGBlcnJfZnJlZWAgbW9yZSBjbG9zZWx5IGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgZnVuY3Rpb24gYW5kIG1ha2Ugc3VyZSB0aGF0IHRoaXMgaXNuJiMzOTt0IGEgZmFsc2UgYWxhcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L3NjaGVkL2FjdF9nYXRlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDYsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NjpcdGVycl9mcmVlOlxuIDU0NzpcdFx0cmVsZWFzZV9lbnRyeV9saXN0KFx1MDAyNnAtXHUwMDNlZW50cmllcyk7XG4gNTQ4Olx0XHRrZnJlZShwKTtcbiA1NDk6XHRjaGFpbl9wdXQ6XG4gNTUwOlx0XHRpZiAoZ290b19jaClcbiA1NTE6XHRcdFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XG4gNTUyOlx0cmVsZWFzZV9pZHI6XG4gNTUzOlx0XHQvKiBhY3Rpb24gaXMgbm90IGluc2VydGVkIGluIGFueSBsaXN0OiBpdCYjMzk7cyBzYWZlIHRvIGluaXQgaGl0aW1lclxuIDU1NDpcdFx0ICogd2l0aG91dCB0YWtpbmcgdGNmX2xvY2suXG4gNTU1Olx0XHQgKi9cbiA1NTY6XHRcdGlmIChyZXQgPT0gQUNUX1BfQ1JFQVRFRClcbiA1NTc6XHRcdFx0Z2F0ZV9zZXR1cF90aW1lcihnYWN0LCB0aW1lcl9jbG9ja2lkLCB0a28pO1xuIDU1ODpcdFxuIDU1OTpcdFx0dGNmX2lkcl9yZWxlYXNlKCphLCBiaW5kKTtcbiA1NjA6XHRcdHJldHVybiBlcnI7XG4gNTYxOlx0fVxuIDU2MjpcdFxuIDU2MzpcdHN0YXRpYyB2b2lkIHRjZl9nYXRlX3BhcmFtc19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4gNTY0Olx0e1xuIDU2NTpcdFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcCA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zLCByY3UpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjY3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMyAwNDo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDk1OAoJCQkJCQkJb3V0cHV0OiAyMzkKCQkJCQkJCXRob3VnaHRzOiA1NDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJ1ZyoqCgpPa2F5LCBzbyBgZXJyX2ZyZWVgIHByb3Blcmx5IGNsZWFucyB1cCB0aGUgbWVtb3J5IHdpdGggYHJlbGVhc2VfZW50cnlfbGlzdGAgYW5kIHRoZW4gYGtmcmVlYC4gTm8gbWVtb3J5IGxlYWssIHRoYXQmIzM5O3MgZ29vZC4gVGhlIHByb2JsZW0gc2VlbXMgdG8gYmUgdGhlIGxhY2sgb2YgYSBib3VuZHMgY2hlY2sgb24gYGN5Y2xldGltZWAsIHdoaWNoIGxldHMgYGdhdGVfdGltZXJfZnVuY2AgZ2V0IGludG8gYW4gaW5maW5pdGUgbG9vcCBhbmQgdHJpZ2dlciBhIGRlbmlhbCBvZiBzZXJ2aWNlLiBJdCYjMzk7cyBhIGxvZ2ljIGJ1ZywgcGxhaW4gYW5kIHNpbXBsZSwgYW5kIHNob3VsZCBiZSBlYXNpbHkgZm91bmQgdGhyb3VnaCBmdXp6aW5nIG9yIGEgZGVjZW50IGNvZGUgcmV2aWV3LiBUaGVyZSYjMzk7cyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBLTVNBTiBpc24mIzM5O3QgcmVsZXZhbnQuCgpMZXQmIzM5O3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgY3ljbGV0aW1lYCAqaXMqIGluaXRpYWxpemVkLiBMb29raW5nIGF0IHRoZSBjb2RlOgoKYGBgYwoJdTY0IGN5Y2xldGltZSA9IDAsIGJhc2V0aW1lID0gMCwgY3ljbGV0aW1lX2V4dCA9IDA7CmBgYAoKWXVwLCBpbml0aWFsaXplZCB0byB6ZXJvLiBBbmQgdGhlbjoKCmBgYGMKCWlmICh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSkKCQljeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7CmBgYAoKSWYgdGhlIHZhbHVlIGlzbiYjMzk7dCBwcm92aWRlZCwgaXQgc3RheXMgemVyby4gRmluYWxseToKCmBgYGMKCWlmICghY3ljbGV0aW1lKSB7CgkJc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7CgkJa3RpbWVfdCBjeWNsZSA9IDA7CgoJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZhbXA7cC0mZ3Q7ZW50cmllcywgbGlzdCkKCQkJY3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LSZndDtpbnRlcnZhbCk7CgkJY3ljbGV0aW1lID0gY3ljbGU7Cgl9CmBgYAoKU28gYGN5Y2xldGltZWAgaXMgYWx3YXlzIGluaXRpYWxpemVkOyBpdCBjYW4gYmUgemVybywgYnV0IGl0JiMzOTtzIG5ldmVyIHVuaW5pdGlhbGl6ZWQuIFRoZSBpc3N1ZSBpcyBzaW1wbHkgdGhhdCB0aGUgdmFsdWUgb2YgYGN5Y2xldGltZWAgbWlnaHQgYmUgdG9vIGxhcmdlLCB3aGljaCB0aGVuIGxlYWRzIHRvIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2AuIFRoaXMgcmVzdWx0cyBpbiBhIERvUyBiZWNhdXNlIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24gYmVjb21lcyBuZWdhdGl2ZSwgY2F1c2luZyBhbiBpbmZpbml0ZSBsb29wLiBLTVNBTiBpcyBmb3IgY2F0Y2hpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgYWNjZXNzZXMuIEl0JiMzOTtzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZG9jdW1lbnQgdGhpcyBjbGVhcmx5LiBUaGUgcGF0Y2ggY29ycmVjdGx5IGFkZHMgYSBib3VuZHMgY2hlY2sgaW4gYHRjZl9nYXRlX2luaXRgIGZvciBgY3ljbGV0aW1lYCB0byBwcmV2ZW50IGFuIG92ZXJzaXplZCB2YWx1ZS4gVGhlIGNvcmUgb2YgdGhlIHByb2JsZW0gaXMgdGhhdCBpZiBgY3ljbGV0aW1lYCBpcyB0b28gbGFyZ2UgKGdyZWF0ZXIgdGhhbiBgSU5UX01BWGApLCBhbiBpbnRlZ2VyIG92ZXJmbG93IHdpbGwgb2NjdXIgd2l0aGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2F1c2VzIGBjbG9zZV90aW1lYCB0byBiZWNvbWUgbmVnYXRpdmUgYW5kIGxlYWRzIHRvIGEgdGltZXIgaW50ZXJydXB0IGxvb3AsIGFuZCB0aGUgRG9TLiBUaGlzIGlzIGEgbG9naWMvaW50ZWdlciBvdmVyZmxvdyBidWcsIG5vdCBhIGNhc2Ugb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFsbCB0aGUgaW52b2x2ZWQgdmFyaWFibGVzLCBpbmNsdWRpbmcgYGN5Y2xldGltZWAsIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkLCBzbyBLTVNBTiBpc24mIzM5O3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gU3RhbmRhcmQgS0FTQU4gb3IgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGNhdGNoIHRoZXNlIHNvcnRzIG9mIGxvZ2ljIGVycm9ycyBhbmQgaW5maW5pdGUgbG9vcHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIzIDA0OjU1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBib3VuZHMgY2hlY2sgZm9yIGBjeWNsZXRpbWVgIGluIGB0Y2ZfZ2F0ZV9pbml0YCB0byBlbnN1cmUgaXQgZG9lcyBub3QgZXhjZWVkIGBJTlRfTUFYYC4gV2l0aG91dCB0aGlzIGNoZWNrLCBhIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgKGVpdGhlciBwcm92aWRlZCBieSB0aGUgdXNlciB2aWEgbmV0bGluayBhdHRyaWJ1dGVzIG9yIGNhbGN1bGF0ZWQgZnJvbSBlbnRyeSBpbnRlcnZhbHMpIGNhbiBjYXVzZSBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgIHdoZW4gY2FsY3VsYXRpbmcgdGhlIG5leHQgdGltZXIgZXhwaXJhdGlvbi4gVGhpcyBvdmVyZmxvdyBjYW4gcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLCBjYXVzaW5nIHRoZSBocnRpbWVyIHRvIGJlIHNldCBpbiB0aGUgcGFzdCBhbmQgdHJpZ2dlcmluZyBhbiBpbmZpbml0ZSBsb29wIG9mIHRpbWVyIGludGVycnVwdHMgKGEgRGVuaWFsIG9mIFNlcnZpY2UgYnVnKS5cblxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDAuNTE5MDEyNTUyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxOTI3MjE2Mjc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5FVFwiLFxuICAgIFwiTkVUX1NDSEVEXCIsXG4gICAgXCJORVRfQ0xTX0FDVFwiLFxuICAgIFwiTkVUX0FDVF9HQVRFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidGNmX2dhdGVfaW5pdFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGZ1bmN0aW9uYWwgdmFsaWRhdGlvbiBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgLCB3aGljaCBpcyB0aGUgaW5pdGlhbGl6YXRpb24gY2FsbGJhY2sgZm9yIHRoZSBgZ2F0ZWAgVEMgYWN0aW9uLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRyYWZmaWMgY29udHJvbCBhY3Rpb25zLCBhbmQgdGhlIGNoYW5nZSBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IGJ5IHJlamVjdGluZyBpbnZhbGlkIGN5Y2xlIHRpbWVzLiBUaGVyZWZvcmUsIGl0IGlzIHdvcnRoIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjAwLjUxOTAxODA0MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA2ODg4NTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNDdiOWUwYmI1ZWQ0YjU0MGE0MzE0MjhjMDJjZTQ0ODMzNzRjOWNjOVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEF1ZyAyMyAwNDo1MTo1OSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXFxuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcXG4tLS0gYS9uZXQvc2NoZWQvYWN0X2dhdGUuY1xcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXFxuQEAgLTUwMSw2ICs1MDEsMTQgQEAgc3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxcbiBcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gXFx0XFx0Y3ljbGV0aW1lID0gY3ljbGU7XFxuIFxcdH1cXG4rXFxuK1xcdGlmIChjeWNsZXRpbWUgXFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcXHUwMDNlIElOVF9NQVgpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcXFwiKTtcXG4rXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfYmgoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZl9sb2NrKTtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbitcXG4gXFx0cC1cXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XFxuIFxcdHAtXFx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowMC45MjY1NjM0NzlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MDYwMDQyMTA1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNDdiOWUwYmI1ZWQ0YjU0MGE0MzE0MjhjMDJjZTQ0ODMzNzRjOWNjOVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gQXVnIDIzIDA0OjUxOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L3NjaGVkL2FjdF9nYXRlLmMgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuaW5kZXggZmRiZmNhYTNlMmFiOS4uMzBiY2YxNzMyNzRjYiAxMDA2NDRcbi0tLSBhL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG4rKysgYi9uZXQvc2NoZWQvYWN0X2dhdGUuY1xuQEAgLTUwMSw2ICs1MDEsMTQgQEAgc3RhdGljIGludCB0Y2ZfZ2F0ZV9pbml0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5sYXR0ciAqbmxhLFxuIFx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG4gXHRcdGN5Y2xldGltZSA9IGN5Y2xlO1xuIFx0fVxuK1xuK1x0aWYgKGN5Y2xldGltZSBcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVgpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcIidjeWNsZV90aW1lJyBpcyB0b28gYmlnXCIpO1xuK1x0XHRlcnIgPSAtRUlOVkFMO1xuK1x0XHRzcGluX3VubG9ja19iaChcdTAwMjZnYWN0LVx1MDAzZXRjZl9sb2NrKTtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcdH1cbitcbiBcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWUgPSBjeWNsZXRpbWU7XG4gXHRwLVx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowMC45MjY1NjQ5MjlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODMxMjYzNzMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IGBhY3RfZ2F0ZS5jYCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaGVyZSwgYW5kIGl0J3MgdG91Y2hpbmcgYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHpvb20gaW4gb24gdGhlIHNwZWNpZmljIGNoYW5nZSwgd2hpY2ggaXMgdGhhdCBuZXcgY2hlY2sgaW4gYHRjZl9nYXRlX2luaXRgLiBMb29raW5nIGF0IGl0LCB0aGV5J3JlIGV4cGxpY2l0bHkgdmFsaWRhdGluZyBgY3ljbGV0aW1lYCBub3csIGVuc3VyaW5nIGl0J3Mgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSDigJMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8gYW5kIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgSU5UX01BWGAuIFNlZW1zIGxpa2UgYSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBhZGRpdGlvbiB0byBtZS5cblxuVGhlIGNvZGUgbm93IGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgcG90ZW50aWFsIGZvciBgY3ljbGV0aW1lYCBiZWluZyBvdXRzaWRlIG9mIGFjY2VwdGFibGUgYm91bmRzLCBwcmV2ZW50aW5nIGEgcG90ZW50aWFsIGludGVnZXIgb3ZlcmZsb3cgb3Igb3RoZXIgaXNzdWVzIGRvd24gdGhlIGxpbmUsIHdoaWNoIGlzIGEgZ29vZCBwcmFjdGljZS4gSXQncyBwcm9wZXJseSBzZXR0aW5nIGFuIGVycm9yIG1lc3NhZ2UgdXNpbmcgYE5MX1NFVF9FUlJfTVNHYCBhbmQgcmV0dXJuaW5nIGAtRUlOVkFMYCBpZiB0aGUgdmFsdWUgaXMgaW52YWxpZCwgd2hpY2ggaXMgdGhlIGNvcnJlY3QgYXBwcm9hY2guIFRoZXkgYWxzbyBzZWVtIHRvIGJlIHVubG9ja2luZyB0aGUgbG9jayBiZWZvcmUgcmV0dXJuaW5nIGZyb20gdGhlIGVycm9yLCB3aGljaCBpcyBjcnVjaWFsLlxuXG5HaXZlbiB0aGF0IGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gYHRjZl9nYXRlX2luaXRgLCBpdCdzIG5vdCBhIHBlcmZvcm1hbmNlIHR3ZWFrIG9yIGFuIEFQSSBhbHRlcmF0aW9uIGJ1dCBhIHN0cmFpZ2h0Zm9yd2FyZCB2YWxpZGF0aW9uLiBJJ2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlIEtjb25maWcgaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQsIG9mIGNvdXJzZSwgdG8gZW5zdXJlIHRoZSBnYXRlIGFjdGlvbiBpcyBlbmFibGVkIGFuZCB0aGF0IGFsbCBkZXBlbmRlbmNpZXMgYXJlIG1ldC4gTGV0J3MgZGl2ZSBpbnRvIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgYW5kIEtjb25maWcgdG8gY29uZmlybSBteSBpbml0aWFsIGFzc2Vzc21lbnQuIEknbGwgd2FudCB0byB2ZXJpZnkgdGhhdCBubyBuZXcgZGVwZW5kZW5jaWVzIHdlcmUgaW50cm9kdWNlZCBoZXJlIHRvby5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA2MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjA1Ljc1NzgzMTE1OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTUyODEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjowNS44MDczNjQzMjRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTM5OTQ1ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipOYXZpZ2F0aW5nIHRoZSBgYWN0X2dhdGVgIENvZGViYXNlKipcblxuQWxyaWdodCwgbGV0J3Mgc2VlLCBgdGNmX2dhdGVfaW5pdGAuLi4gYWggeWVzLCB0aGF0J3MgZGVmaW5pdGVseSBoYW5naW5nIG91dCBpbiBgYWN0X2dhdGVfb3BzYC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyB3aG9sZSBnYXRlIG1lY2hhbmlzbSBpcyBjb25maWd1cmVkLiBUaGF0IG1lYW5zIEkgbmVlZCB0byBsb2NhdGUgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucy4gTGV0J3MgZ2V0IHRoZSBLY29uZmlnIGZpbGUgZm9yIGBhY3RfZ2F0ZS5jYC4gVGhhdCdzIHVzdWFsbHkgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24ga25vYnMgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSBhcmUgZGVmaW5lZCwgYW5kIHRoYXQncyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIEZyb20gdGhlcmUgSSBjYW4gZGV0ZXJtaW5lIHRoZSBwcmVyZXF1aXNpdGVzIHRvIGdldCB0aGlzIGZ1bmN0aW9uYWxpdHkgZW5hYmxlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgxNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjA5LjM0NzMxMjgxNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTA1NDgzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhY3RfZ2F0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL01ha2VmaWxlPTMyPW9iai0kKENPTkZJR19ORVRfQUNUX0NUKVxcdCs9IGFjdF9jdC5vXFxubmV0L3NjaGVkL01ha2VmaWxlOjMzOm9iai0kKENPTkZJR19ORVRfQUNUX0dBVEUpXFx0Kz0gYWN0X2dhdGUub1xcbm5ldC9zY2hlZC9NYWtlZmlsZS0zNC1vYmotJChDT05GSUdfTkVUX1NDSF9GSUZPKVxcdCs9IHNjaF9maWZvLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MDkuMzk4MzcyNTM5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMDkyMjY3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipBbmFseXppbmcgdGhlIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jeSoqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyBJJ20gbG9va2luZyBhdCBpcyBgTkVUX0FDVF9HQVRFYC4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGFuZCB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgc2V0dGluZ3MsIG1vZHVsZXMsIG9yIHByZWNvbmRpdGlvbnMgcmVseSBvbiBgTkVUX0FDVF9HQVRFYCBiZWluZyBkZWZpbmVkIG9yIHNldCB0byBhIHBhcnRpY3VsYXIgdmFsdWUuIFRoaXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgb3ZlcmFsbCBzeXN0ZW0gYmVoYXZpb3IgYW5kIHBvdGVudGlhbCBpbXBhY3Qgb2YgY2hhbmdlcy4gQSBkZXBlbmRlbmN5IGFuYWx5c2lzIGlzIHRoZSBmb3VuZGF0aW9uIG9mIGFueSByb2J1c3QgY29uZmlndXJhdGlvbiB1bmRlcnN0YW5kaW5nLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMTIzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTMuMDI5Mjk3ODUxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NTUyMDYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQUNUX0dBVEVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL0tjb25maWc9OTE3PWNvbmZpZyBORVRfQUNUX0NUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy05MjktXFxubmV0L3NjaGVkL0tjb25maWc6OTMwOmNvbmZpZyBORVRfQUNUX0dBVEVcXG5uZXQvc2NoZWQvS2NvbmZpZy05MzEtXFx0dHJpc3RhdGUgXFxcIkZyYW1lIGdhdGUgZW50cnkgbGlzdCBjb250cm9sIHRjIGFjdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTMuMTE4ODU0MjcxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxODYwNzQxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIE5FVF9BQ1RfR0FURSBLY29uZmlnKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBgTkVUX0FDVF9HQVRFYCBLY29uZmlnLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgY29uZmlndXJhdGlvbiBvcHRpb25zIGFuZCBkZXBlbmRlbmNpZXMuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcXVpY2tseSBzY2FuIGZvciB0aGUgb2J2aW91czogaXRzIGxvY2F0aW9uIHdpdGhpbiB0aGUgS2NvbmZpZyBoaWVyYXJjaHksIHdoZXRoZXIgaXQncyBlbmFibGVkIGJ5IGRlZmF1bHQsIGFuZCBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIG1vZHVsZXMgb3Iga2VybmVsIGZlYXR1cmVzLiBJJ20gbG9va2luZyBmb3IgdGhlIFwidHJpY2t5IGJpdHNcIiDigJMgYXJlIHRoZXJlIGFueSBvYnNjdXJlIGRlcGVuZGVuY2llcyBvciBpbnRlcmFjdGlvbnMgdGhhdCBtaWdodCBjYXVzZSB1bmV4cGVjdGVkIGJlaGF2aW9yIHdoZW4gZW5hYmxpbmcgb3IgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZT8gSSBuZWVkIHRvIGNvbnNpZGVyIGl0cyBpbXBhY3Qgb24gb3RoZXIgbmV0d29ya2luZyBmdW5jdGlvbmFsaXRpZXMuIEnigJlsbCBtYWtlIHN1cmUgdG8gbm90ZSBpZiBpdCBoYXMgYW55IHJlbGV2YW50IGRvY3VtZW50YXRpb24gbGlua3MgYXNzb2NpYXRlZCB3aXRoIHRoZSBLY29uZmlnLCBzbyB0aGF0IEkgY2FuIGdvIG92ZXIgaXQgbGF0ZXIgb24uIFRoZW4sIEknbGwgYXNzZXNzIGl0cyBvdmVyYWxsIGltcG9ydGFuY2UgYW5kIHNjb3BlLiBEb2VzIHRoaXMgY29uZmlndXJhdGlvbiBpbmZsdWVuY2Ugc2VjdXJpdHksIHBlcmZvcm1hbmNlLCBvciBvdmVyYWxsIG5ldHdvcmsgYmVoYXZpb3Igc2lnbmlmaWNhbnRseT8gVW5kZXJzdGFuZGluZyB0aGUgZ2F0aW5nIG9wdGlvbnMgaXMgY3JpdGljYWwgZm9yIG1hbmFnaW5nIG5ldHdvcmsgdHJhZmZpYyBmbG93IGJhc2VkIG9uIHZhcmlvdXMgcGFyYW1ldGVycy4gSXMgdGhpcyBhIHNpbXBsZSBiaW5hcnkgY2hvaWNlICh5ZXMvbm8pLCBvciBhcmUgdGhlcmUgc3ViLW9wdGlvbnMgdGhhdCBhbGxvdyBmb3IgbW9yZSBmaW5lLWdyYWluZWQgY29udHJvbD8gSSdsbCBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbXBsaWNhdGlvbnMgb2YgYW55IGRlZmF1bHQgc2V0dGluZ3MuIEZpbmFsbHksIEknbGwgbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IG9idmlvdXMgY29uZmxpY3RzIG9yIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGZlYXR1cmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzgzLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MTYuNDM3NDY0NDY3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4MDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDkyNSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDkyNTpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkyNjpcXHRcXG4gOTI3OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGNvZGUgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA5Mjg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgYWN0X2N0LlxcbiA5Mjk6XFx0XFxuIDkzMDpcXHRjb25maWcgTkVUX0FDVF9HQVRFXFxuIDkzMTpcXHRcXHR0cmlzdGF0ZSBcXFwiRnJhbWUgZ2F0ZSBlbnRyeSBsaXN0IGNvbnRyb2wgdGMgYWN0aW9uXFxcIlxcbiA5MzI6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQ0xTX0FDVFxcbiA5MzM6XFx0XFx0aGVscFxcbiA5MzQ6XFx0XFx0ICBTYXkgWSBoZXJlIHRvIGFsbG93IHRvIGNvbnRyb2wgdGhlIGluZ3Jlc3MgZmxvdyB0byBiZSBwYXNzZWQgYXRcXG4gOTM1OlxcdFxcdCAgc3BlY2lmaWMgdGltZSBzbG90IGFuZCBiZSBkcm9wcGVkIGF0IG90aGVyIHNwZWNpZmljIHRpbWUgc2xvdCBieVxcbiA5MzY6XFx0XFx0ICB0aGUgZ2F0ZSBlbnRyeSBsaXN0LlxcbiA5Mzc6XFx0XFxuIDkzODpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDkzOTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBjb2RlIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG4gOTQwOlxcdFxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGFjdF9nYXRlLlxcbiA5NDE6XFx0XFxuIDk0MjpcXHRjb25maWcgTkVUX0lGRV9TS0JNQVJLXFxuIDk0MzpcXHRcXHR0cmlzdGF0ZSBcXFwiU3VwcG9ydCB0byBlbmNvZGluZyBkZWNvZGluZyBza2IgbWFyayBvbiBJRkUgYWN0aW9uXFxcIlxcbiA5NDQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfQUNUX0lGRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoxNi40Mzc1NjQ1MDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA0NDI5MTg5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIFRob3VnaHRzIG9uIEFjdGlvbiBHYXRlIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgZGVwZW5kZW5jaWVzIGhlcmUsIHNwZWNpZmljYWxseSBhcm91bmQgYE5FVF9DTFNfQUNUYC4gSSBjYW4gc2VlIEkgbmVlZCBib3RoIGBORVRfQUNUX0dBVEVgIGFuZCBgTkVUX0NMU19BQ1RgIHRvIGdldCB0aGlzIHRoaW5nIG9mZiB0aGUgZ3JvdW5kLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGZpZ3VyaW5nIHRoYXQncyB0aGUgb2J2aW91cyBwb2ludCBvZiBlbnRyeSBmb3IgdGhlIGBpbml0YCBwcm9jZXNzLlxuXG5BaCwgd2FpdCBhIHNlY29uZC4uLiBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIFRoYXQgY291bGQgYmUgYSBwcm9ibGVtLiBTdGF0aWMgZnVuY3Rpb25zIGFyZW4ndCBpZGVhbCBhcyBmb2N1cyBzeW1ib2xzIHNpbmNlIHRoZXkgaGF2ZSBsaW1pdGVkIHNjb3BlLiBIbW0sIGJ1dC4uLiBJIGRvIHJlbWVtYmVyIGl0IGJlaW5nIGFuIEFQSSBlbnRyeXBvaW50IGZvciBgaW5pdGAgd2l0aGluIGB0Y19hY3Rpb25fb3BzYCwgc28gaXQgaXMgb24gdGhlIHJhZGFyLlxuXG5MZXQgbWUgdGFrZSBhIHN0ZXAgYmFjayBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgbm9uLXN0YXRpYyBhbHRlcm5hdGl2ZXMgd2l0aGluIGBhY3RfZ2F0ZS5jYC4gUGVyaGFwcyB0aGVyZSdzIGEgbW9yZSBhY2Nlc3NpYmxlIGZ1bmN0aW9uIGluIHRoZXJlIHRoYXQgSSBjYW4gdXNlIGFzIGEgYmV0dGVyIHBvaW50IG9mIGF0dGFjay4gSSdsbCBuZWVkIHRvIGRpZyBhIGxpdHRsZSBkZWVwZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMDksIk91dHB1dFRva2VucyI6NTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoyMC40ODE4NTg4NzdaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxODEzNDU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel9BLVowLTldKyBbYS16X0EtWjAtOV0rXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjIwLjUzMzY4MTU2MVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjAzNjQwMjkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkludmVzdGlnYXRpbmcgYGFjdF9nYXRlLmNgIEZ1bmN0aW9uIFNjb3BlKipcblxuUmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGUgYGFjdF9nYXRlLmNgIGZpbGUuIEknbSB0aGlua2luZywgaW5zdGVhZCBvZiBqdXN0IHJhbmRvbWx5IGJyb3dzaW5nLCBJIHdhbnQgdG8gemVybyBpbiBvbiBzb21ldGhpbmcgc3BlY2lmaWMuIE15IGd1dCB0ZWxscyBtZSB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHRoaW5ncyBnb2luZyBvbiB3aXRoICpub24tc3RhdGljKiBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IGhhdmUgYnJvYWRlciBzY29wZSBhbmQgY291bGQgYmUgY2FsbGVkIGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIGNvZGViYXNlLiBTbywgbGV0J3MgdXNlIGBncmVwYCB0byBxdWlja2x5IGZpbHRlciBmb3IgdGhvc2UuIFRoYXQncyB1c3VhbGx5IHRoZSBmYXN0ZXN0IHdheSB0byBnZXQgYSBiaXJkJ3MtZXllIHZpZXcsIGF0IGxlYXN0IGluaXRpYWxseS4gSG9wZWZ1bGx5LCB0aGlzIHdpbGwgZ2V0IG1lIGEgbWFuYWdlYWJsZSBsaXN0IHRvIHN0YXJ0IHdpdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0MjIsIk91dHB1dFRva2VucyI6NjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjoyNC43MzczMjU1MjVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2MzY1MTU1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2EtekEtWl9dW2EtekEtWjAtOV9dKiBbYS16QS1aX11bYS16QS1aMC05X10qXFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI0Ljc4MzY5ODQ5MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQ5Mjk4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJZGVudGlmeWluZyBFeHBvcnRlZCBGdW5jdGlvbnM6IEEgUHJhZ21hdGljIEFwcHJvYWNoKipcblxuQWxyaWdodCwgc28gdGhlIHRhc2sgaXMgY2xlYXI6IHBpbnBvaW50IHRoZSBleHBvcnRlZCBmdW5jdGlvbnMsIG9yIG1vcmUgZ2VuZXJhbGx5LCBhbnkgbm9uLXN0YXRpYyBmdW5jdGlvbnMgd2l0aGluIHRoaXMgZmlsZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIHRha2UgdGhlIHNpbXBsZXN0IHJvdXRlIGZpcnN0LiBMZXQncyBqdXN0IGRpdmUgcmlnaHQgaW50byByZWFkaW5nIHRoZSBmaWxlIGl0c2VsZi4gVGhlcmUncyBubyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoaW5ncyB3aXRoIGludHJpY2F0ZSBwYXJzaW5nIG9yIHJlbHlpbmcgb24gZXh0ZXJuYWwgdG9vbHMgcmlnaHQgb2ZmIHRoZSBiYXQuIEEgZGlyZWN0IHNjYW4sIHBlcmhhcHMgd2l0aCBzb21lIGJhc2ljIHBhdHRlcm4gbWF0Y2hpbmcsIGlzIGxpa2VseSBzdWZmaWNpZW50IHRvIGlkZW50aWZ5IGZ1bmN0aW9uIGRlZmluaXRpb25zLiBXZSdyZSBsb29raW5nIGZvciB0aGUgdGVsbHRhbGUgc2lnbnM6IGZ1bmN0aW9uIHNpZ25hdHVyZXMgdGhhdCBhcmVuJ3QgZGVjbGFyZWQgYXMgYHN0YXRpY2AuIEl0J3MgYSBwcmFnbWF0aWMsIFwic2VlIHdoYXQgd2UgY2FuIGZpbmQgcXVpY2tseVwiIGFwcHJvYWNoLiBXZSBjYW4gYWx3YXlzIHJlZmluZSB0aGUgc2VhcmNoIGxhdGVyIGlmIHRoaXMgaW5pdGlhbCBzd2VlcCBkb2Vzbid0IHlpZWxkIHRoZSByZXN1bHRzIHdlJ3JlIGV4cGVjdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDY4MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI4LjEzMjk5OTI5M1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY2Mzg4MTUsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkVYUE9SVF9TWU1CT0xcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjI4LjE3OTY0ODEyOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTI2MjIxMjU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFBvdGVudGlhbCBHYXRlIEFjdGlvbiBDb2RlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGRpdmUgaW50byB0aGUgYG5ldC9zY2hlZC9hY3RfZ2F0ZS5jYCBmaWxlLiBHaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBcImdhdGVcIiBhY3Rpb24sIEknbSBpbW1lZGlhdGVseSB0aGlua2luZyBhYm91dCBob3cgaXQgbWlnaHQgaW50ZXJhY3Qgd2l0aCBkYXRhIHR5cGVzIGFuZCBmdW5jdGlvbiBkZWZpbml0aW9ucy4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgaWRlbnRpZnkga2V5IGVsZW1lbnRzIHdpdGhpbiB0aGUgY29kZSB0aGF0IHJlbGF0ZSB0byB0aGlzIFwiZ2F0ZVwiIGZ1bmN0aW9uYWxpdHkuIFNwZWNpZmljYWxseSwgSSdtIHRhcmdldGluZyBsaW5lcyB0aGF0IGxpa2VseSBkZWNsYXJlIGZ1bmN0aW9ucyBvciB2YXJpYWJsZXMgdGhhdCBhcmUgY2VudHJhbCB0byB0aGlzIGdhdGUgYmVoYXZpb3IuXG5cblRvIGRvIHRoaXMgZWZmaWNpZW50bHksIEknbGwgc2VhcmNoIGZvciBwYXR0ZXJucyB0aGF0IGFyZSBjb21tb25seSB1c2VkIGluIGZ1bmN0aW9uIGFuZCB2YXJpYWJsZSBkZWNsYXJhdGlvbnMuIEknbGwgc3RhcnQgd2l0aCBgXmludCBgLCBgXnZvaWQgYCwgYW5kIGBec3RhdGljIGAuIFRoZXNlIGFyZSBzb2xpZCBzdGFydGluZyBwb2ludHMgdG8gaWRlbnRpZnkgaW50ZWdlci1yZXR1cm5pbmcgZnVuY3Rpb25zIG9yIHZvaWQtcmV0dXJuaW5nIGZ1bmN0aW9ucywgYXMgd2VsbCBhcyBzdGF0aWMgdmFyaWFibGVzIG9yIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgcmVsZXZhbnQuIFRoaXMgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgYW5kIGhlbHAgbmFycm93IG15IGZvY3VzIHdpdGhpbiB0aGF0IGNvZGUgYmFzZS4gT25jZSBJIGhhdmUgdGhlIG91dHB1dCBmcm9tIHRoZSBncmVwLCBJIGNhbiBxdWlja2x5IGhvbWUgaW4gb24gdGhlIHJlbGV2YW50IHNlY3Rpb25zIG9mIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ5MjQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjozMi4xMDU4NzM3NjJaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MzkxMzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgaW50IFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0xNjk9c3RhdGljIGNvbnN0IHN0cnVjdCBubGFfcG9saWN5IGdhdGVfcG9saWN5W1RDQV9HQVRFX01BWCArIDFdID0ge1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjE4MTpzdGF0aWMgaW50IGZpbGxfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICoqdGIsIHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4Mi1cXHRcXHRcXHQgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMDUtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjA2OnN0YXRpYyBpbnQgcGFyc2VfZ2F0ZV9lbnRyeShzdHJ1Y3QgbmxhdHRyICpuLCBzdHJ1Y3QgIHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA3LVxcdFxcdFxcdCAgICBpbnQgaW5kZXgsIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTIyMz1zdGF0aWMgdm9pZCByZWxlYXNlX2VudHJ5X2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZW50cmllcylcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzMi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMzM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIzNC1cXHRcXHRcXHRcXHQgY29uc3Qgc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqc3JjLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzA3PXN0YXRpYyBib29sIGdhdGVfdGltZXJfbmVlZHNfY2FuY2VsKHU2NCBiYXNldGltZSwgdTY0IG9sZF9iYXNldGltZSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMTc6c3RhdGljIGludCBnYXRlX2Nsb2NrX3Jlc29sdmUoczMyIGNsb2NraWQsIGVudW0gdGtfb2Zmc2V0cyAqdGtvLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz0zMzk9c3RhdGljIHZvaWQgZ2F0ZV9zZXR1cF90aW1lcihzdHJ1Y3QgdGNmX2dhdGUgKmdhY3QsIHMzMiBjbG9ja2lkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NTcxPXN0YXRpYyB2b2lkIHRjZl9nYXRlX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU4MS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1ODI6c3RhdGljIGludCBkdW1waW5nX2VudHJ5KHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgzLVxcdFxcdFxcdCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSlcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTYxMi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2MTM6c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjE0LVxcdFxcdFxcdCBpbnQgYmluZCwgaW50IHJlZilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTY5NT1zdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9lbnRyeV9kZXN0cnVjdG9yKHZvaWQgKnByaXYpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MDEtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzAyOnN0YXRpYyBpbnQgdGNmX2dhdGVfZ2V0X2VudHJpZXMoc3RydWN0IGZsb3dfYWN0aW9uX2VudHJ5ICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MDMtXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzE1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcxNjpzdGF0aWMgaW50IHRjZl9nYXRlX29mZmxvYWRfYWN0X3NldHVwKHN0cnVjdCB0Y19hY3Rpb24gKmFjdCwgdm9pZCAqZW50cnlfZGF0YSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03MTctXFx0XFx0XFx0XFx0ICAgICAgdTMyICppbmRleF9pbmMsIGJvb2wgYmluZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc3MT1zdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3Ny1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3Nzg6c3RhdGljIGludCBfX2luaXQgZ2F0ZV9pbml0X21vZHVsZSh2b2lkKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc3OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjMyLjE1NTI3MjE5N1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDA2OTEyNTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgZm9yIE5vbi1TdGF0aWMgRnVuY3Rpb25zKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gcXVpY2tseSBhc3Nlc3MgdGhpcyBjb2RlIGZvciB0aGUgcHJlc2VuY2Ugb2Ygbm9uLXN0YXRpYyBmdW5jdGlvbnMuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGNvdWxkIGJlIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgYW5kIHRoZSBzcGVjaWZpYyBtb3RpdmF0aW9ucyB3aWxsIGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCBpdC4gQXJlIHdlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCB0aHJlYWQgc2FmZXR5IGlzc3Vlcz8gT3IgcGVyaGFwcyB0cnlpbmcgdG8gdW5kZXJzdGFuZCBvYmplY3QgbGlmZXRpbWUgbWFuYWdlbWVudCB3aXRoaW4gYSBsYXJnZXIgZGVzaWduPyBNYXliZSBldmVuIHNlYXJjaGluZyBmb3Igb3Bwb3J0dW5pdGllcyB0byByZWZhY3RvciBhbmQgb3B0aW1pemUgYXJvdW5kIHNoYXJlZCBzdGF0ZT8gVGhlIHByZXNlbmNlIG9yIGFic2VuY2Ugb2YgdGhlc2Ugbm9uLXN0YXRpYyBtZXRob2RzIHdpbGwgZGljdGF0ZSB0aGUgbmV4dCBzdGVwcyBpbiBteSBhbmFseXNpcywgYW5kIEnigJlsbCBiZSB0dW5pbmcgbXkgYXBwcm9hY2ggYWNjb3JkaW5nbHkuIFRoaXMgc2VlbXMgYSBzdHJhaWdodGZvcndhcmQgc3RhcnRpbmcgcG9pbnQsIGEgYmFzaWMgYnV0IGVzc2VudGlhbCBwaWVjZSBvZiBpbmZvcm1hdGlvbiBJIG5lZWQgYmVmb3JlIEkgY2FuIGRldmVsb3AgYW4gaW4tZGVwdGggdW5kZXJzdGFuZGluZy4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MzQwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6MzUuMTYyMTg4MjY1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTQzOTc3NSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXmludCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjM1LjIwNzYzNTYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2MjM1OTAwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgYWN0X2dhdGUuY2AgTW9kdWxlKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBgbmV0L3NjaGVkL2FjdF9nYXRlLmNgIG1vZHVsZS4gSG1tLCBpbml0aWFsbHksIEkgd2FzIGFzc3VtaW5nIGFsbCB0aGUgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIGZpbGUgd2VyZSBzdGF0aWMsIGFuZCBpdCBsb29rcyBsaWtlIEkgd2FzIHJpZ2h0LCBldmVuIGBnYXRlX2luaXRfbW9kdWxlYCBhcHBlYXJzIHRvIGJlIHN0YXRpYy4gQWgsIHllcywgY29uZmlybWVkIGJ5IGBtb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKWAuIFRoaXMgbWVhbnMgd2UgY2FuJ3QgZGlyZWN0bHkgZXhwb3J0IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyBmcm9tIHRoaXMgbW9kdWxlLCB3aGljaCBpcyB3aGF0IEkgd291bGQgdXN1YWxseSBleHBlY3Qgd2hlbiBkZWFsaW5nIHdpdGggbW9kdWxlIGluaXQuIEJ1dCBoYW5nIG9uLi4uIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIuIFRoaXMgaXMgc29tZXRoaW5nIGludGVyZXN0aW5nLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55ICphY3R1YWwqIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGRlZmluZWQgaW4gYGFjdF9nYXRlLmNgPyBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjU3OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MjozOC44MzEyMjkzMTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzI0OTM1LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjM4Ljg3NDk2MDk0OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU5NTc0ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBhY3RfZ2F0ZS5jYCBmb3IgUHVibGljIEludGVyZmFjZSBGdW5jdGlvbnMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB3b3JrLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbnkgcG90ZW50aWFsIGVudHJ5IHBvaW50cyBvciBwdWJsaWNseSBhY2Nlc3NpYmxlIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AgZmlsZS4gVGhlIGVhc2llc3Qgd2F5IHRvIGRvIHRoYXQsIGFuZCB0aGUgdGhpbmcgSSdsbCB1c3VhbGx5IGNoZWNrIGZpcnN0LCBpcyB0byBsb29rIGZvciBmdW5jdGlvbnMgdGhhdCAqYXJlbid0KiBkZWNsYXJlZCBhcyBgc3RhdGljYC4gIFRob3NlIGFyZSB0aGUgb25lcyB0aGF0IGFyZSBsaWtlbHkgaW50ZW5kZWQgZm9yIHVzZSBvdXRzaWRlIHRoZSBjb25maW5lcyBvZiB0aGF0IHNpbmdsZSBjb21waWxhdGlvbiB1bml0LiBJJ20gYXNzdW1pbmcgdGhhdCB0aGUgZGV2ZWxvcGVycyBoYXZlIGZvbGxvd2VkIHJlYXNvbmFibHkgZ29vZCBjb2RpbmcgcHJhY3RpY2VzIGhlcmUsIHNvIHRoYXQgYW55dGhpbmcgbWVhbnQgdG8gYmUgZXhwb3NlZCBmb3IgZXh0ZXJuYWwgdXNhZ2UgaXMgZGVjbGFyZWQgd2l0aG91dCBgc3RhdGljYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYXBwcm9hY2ggdG8gdW5kZXJzdGFuZGluZyB3aGF0IGhvb2tzIGFyZSBhdmFpbGFibGUuIFRpbWUgdG8gb3BlbiB0aGUgZmlsZSBhbmQgc3RhcnQgc2Nhbm5pbmcuLi4gTGV0J3Mgc2VlIHdoYXQgd2UgZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjkyMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjQyLjEzNDUzODM4WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTc4OTEzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeW2Etel1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmMtMTgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTk6c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcztcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyMTpzdGF0aWMga3RpbWVfdCBnYXRlX2dldF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMi17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNTpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozNzpzdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zOC1cXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwYXJhbSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4OnN0YXRpYyB2b2lkIGdhdGVfc3RhcnRfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBrdGltZV90IHN0YXJ0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcxOnN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBnYXRlX3RpbWVyX2Z1bmMoc3RydWN0IGhydGltZXIgKnRpbWVyKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcyLXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTEyMj1UQ19JTkRJUkVDVF9TQ09QRSBpbnQgdGNmX2dhdGVfYWN0KHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTMtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTU0Om92ZXJsaW1pdDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTUtXFx0dGNmX2FjdGlvbl9pbmNfb3ZlcmxpbWl0X3FzdGF0cyhcXHUwMDI2Z2FjdC1cXHUwMDNlY29tbW9uKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxNTY6ZHJvcDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNTctXFx0dGNmX2FjdGlvbl9pbmNfZHJvcF9xc3RhdHMoXFx1MDAyNmdhY3QtXFx1MDAzZWNvbW1vbik7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNjAtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTYxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBlbnRyeV9wb2xpY3lbVENBX0dBVEVfRU5UUllfTUFYICsgMV0gPSB7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTYyLVxcdFtUQ0FfR0FURV9FTlRSWV9JTkRFWF1cXHRcXHQ9IHsgLnR5cGUgPSBOTEFfVTMyIH0sXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNjgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTY5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmxhX3BvbGljeSBnYXRlX3BvbGljeVtUQ0FfR0FURV9NQVggKyAxXSA9IHtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xNzAtXFx0W1RDQV9HQVRFX1BBUk1TXVxcdFxcdD1cXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTE4MC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxODE6c3RhdGljIGludCBmaWxsX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqKnRiLCBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xODItXFx0XFx0XFx0ICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjA1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjIwNjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfZW50cnkoc3RydWN0IG5sYXR0ciAqbiwgc3RydWN0ICB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIwNy1cXHRcXHRcXHQgICAgaW50IGluZGV4LCBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMjItXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjIzOnN0YXRpYyB2b2lkIHJlbGVhc2VfZW50cnlfbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyaWVzKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTIyNC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzItXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MjMzOnN0YXRpYyBpbnQgdGNmX2dhdGVfY29weV9lbnRyaWVzKHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKmRzdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0yMzQtXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNyYyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2MS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoyNjI6c3RhdGljIGludCBwYXJzZV9nYXRlX2xpc3Qoc3RydWN0IG5sYXR0ciAqbGlzdF9hdHRyLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTI2My1cXHRcXHRcXHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDE6cmVsZWFzZV9saXN0Olxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwMi1cXHRyZWxlYXNlX2VudHJ5X2xpc3QoXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMDc6c3RhdGljIGJvb2wgZ2F0ZV90aW1lcl9uZWVkc19jYW5jZWwodTY0IGJhc2V0aW1lLCB1NjQgb2xkX2Jhc2V0aW1lLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMwOC1cXHRcXHRcXHRcXHQgICAgZW51bSB0a19vZmZzZXRzIHRrbyxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxNi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzozMTc6c3RhdGljIGludCBnYXRlX2Nsb2NrX3Jlc29sdmUoczMyIGNsb2NraWQsIGVudW0gdGtfb2Zmc2V0cyAqdGtvLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTMxOC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zMzgtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzM5OnN0YXRpYyB2b2lkIGdhdGVfc2V0dXBfdGltZXIoc3RydWN0IHRjZl9nYXRlICpnYWN0LCBzMzIgY2xvY2tpZCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDAtXFx0XFx0XFx0ICAgICBlbnVtIHRrX29mZnNldHMgdGtvKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ2LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjM0NzpzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMzQ4LVxcdFxcdFxcdCBzdHJ1Y3QgbmxhdHRyICplc3QsIHN0cnVjdCB0Y19hY3Rpb24gKiphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTQ1LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU0NjplcnJfZnJlZTpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDctXFx0cmVsZWFzZV9lbnRyeV9saXN0KFxcdTAwMjZwLVxcdTAwM2VlbnRyaWVzKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NDgtXFx0a2ZyZWUocCk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTQ5OmNoYWluX3B1dDpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NTAtXFx0aWYgKGdvdG9fY2gpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTUxLVxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU1MjpyZWxlYXNlX2lkcjpcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NTMtXFx0LyogYWN0aW9uIGlzIG5vdCBpbnNlcnRlZCBpbiBhbnkgbGlzdDogaXQncyBzYWZlIHRvIGluaXQgaGl0aW1lclxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTYyLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU2MzpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTU2NC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzAtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NTcxOnN0YXRpYyB2b2lkIHRjZl9nYXRlX2NsZWFudXAoc3RydWN0IHRjX2FjdGlvbiAqYSlcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01NzIte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTgxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjU4MjpzdGF0aWMgaW50IGR1bXBpbmdfZW50cnkoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01ODMtXFx0XFx0XFx0IHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYwODpubGFfcHV0X2ZhaWx1cmU6XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjA5LVxcdG5sYV9uZXN0X2NhbmNlbChza2IsIGl0ZW0pO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjEyLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjYxMzpzdGF0aWMgaW50IHRjZl9nYXRlX2R1bXAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IHRjX2FjdGlvbiAqYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MTQtXFx0XFx0XFx0IGludCBiaW5kLCBpbnQgcmVmKVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjczLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY3NDpubGFfcHV0X2ZhaWx1cmU6XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjc1LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjc5LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY4MDpzdGF0aWMgdm9pZCB0Y2ZfZ2F0ZV9zdGF0c191cGRhdGUoc3RydWN0IHRjX2FjdGlvbiAqYSwgdTY0IGJ5dGVzLCB1NjQgcGFja2V0cyxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02ODEtXFx0XFx0XFx0XFx0ICB1NjQgZHJvcHMsIHU2NCBsYXN0dXNlLCBib29sIGh3KVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjg5LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY5MDpzdGF0aWMgc2l6ZV90IHRjZl9nYXRlX2dldF9maWxsX3NpemUoY29uc3Qgc3RydWN0IHRjX2FjdGlvbiAqYWN0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTY5MS17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02OTQtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6Njk1OnN0YXRpYyB2b2lkIHRjZl9nYXRlX2VudHJ5X2Rlc3RydWN0b3Iodm9pZCAqcHJpdilcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02OTYte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjcwMjpzdGF0aWMgaW50IHRjZl9nYXRlX2dldF9lbnRyaWVzKHN0cnVjdCBmbG93X2FjdGlvbl9lbnRyeSAqZW50cnksXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzAzLVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCB0Y19hY3Rpb24gKmFjdClcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTcxNS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3MTY6c3RhdGljIGludCB0Y2ZfZ2F0ZV9vZmZsb2FkX2FjdF9zZXR1cChzdHJ1Y3QgdGNfYWN0aW9uICphY3QsIHZvaWQgKmVudHJ5X2RhdGEsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzE3LVxcdFxcdFxcdFxcdCAgICAgIHUzMiAqaW5kZXhfaW5jLCBib29sIGJpbmQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDMtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzQ0OnN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzQ1LVxcdC5raW5kXFx0XFx0PVxcdFxcXCJnYXRlXFxcIixcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTc1Nz1NT0RVTEVfQUxJQVNfTkVUX0FDVChcXFwiZ2F0ZVxcXCIpO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1OC1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3NTk6c3RhdGljIF9fbmV0X2luaXQgaW50IGdhdGVfaW5pdF9uZXQoc3RydWN0IG5ldCAqbmV0KVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc2MC17XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NjUtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NzY2OnN0YXRpYyB2b2lkIF9fbmV0X2V4aXQgZ2F0ZV9leGl0X25ldChzdHJ1Y3QgbGlzdF9oZWFkICpuZXRfbGlzdClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03Njcte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzcwLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc3MTpzdGF0aWMgc3RydWN0IHBlcm5ldF9vcGVyYXRpb25zIGdhdGVfbmV0X29wcyA9IHtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NzItXFx0LmluaXQgPSBnYXRlX2luaXRfbmV0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc3ODpzdGF0aWMgaW50IF9faW5pdCBnYXRlX2luaXRfbW9kdWxlKHZvaWQpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzc5LXtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc4Mi1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3ODM6c3RhdGljIHZvaWQgX19leGl0IGdhdGVfY2xlYW51cF9tb2R1bGUodm9pZClcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03ODQte1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzg3LVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc4ODptb2R1bGVfaW5pdChnYXRlX2luaXRfbW9kdWxlKTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo3ODk6bW9kdWxlX2V4aXQoZ2F0ZV9jbGVhbnVwX21vZHVsZSk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNzkwLU1PRFVMRV9ERVNDUklQVElPTihcXFwiVEMgZ2F0ZSBhY3Rpb25cXFwiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NDIuMTgwMzMxODQ2WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NzExMjEwNjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgdGNmX2dhdGVfYWN0YCBWYXJpYWJsZSoqXG5cbk9rYXksIHNvIGB0Y2ZfZ2F0ZV9hY3RgIGlzICpub3QqIGEgc3RhdGljIHZhcmlhYmxlLCB3aGljaCBpbml0aWFsbHkgdGhyZXcgbWUgZm9yIGEgbG9vcC4gQnV0IGhhbmcgb24sIEkgc2VlIGl0J3MgZGVjbGFyZWQgd2l0aCBgVENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdGAuICBgVENfSU5ESVJFQ1RfU0NPUEVgIHR5cGljYWxseSBpbXBsaWVzIHNvbWV0aGluZyBsaWtlIGBfX21heWJlX3VudXNlZGAgb3IgYSBzaW1pbGFyIGNvbXBpbGVyIGhpbnQgdG8gcG90ZW50aWFsbHkgcHJldmVudCB1bnVzZWQgdmFyaWFibGUgd2FybmluZ3MgaW4gY2VydGFpbiBjb25maWd1cmF0aW9ucy4gVGhlIGNydWNpYWwgcGFydCBpcyB0aGF0IGl0J3MgKmFwcGxpZWQgdG8gYSBub24tc3RhdGljIGZ1bmN0aW9uKi5cblxuVGhhdCBjb21iaW5hdGlvbiBpcyBpbnRlcmVzdGluZywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGlzIHBlY3VsaWFyaXR5LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gZGVsdmUgaW50byB0aGUgc291cmNlIGNvZGUgd2hlcmUgYHRjZl9nYXRlX2FjdGAgaXMgZGVmaW5lZCwgc3BlY2lmaWNhbGx5IGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgZ2F0ZSdzIGJlaGF2aW9yIGluIHRoaXMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNjQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo0NS45NTE0NTU2ODJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NzYwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRjZl9nYXRlX2FjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz03MT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzoxMjI6VENfSU5ESVJFQ1RfU0NPUEUgaW50IHRjZl9nYXRlX2FjdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTEyMy1cXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgdGNfYWN0aW9uICphLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzQ0PXN0YXRpYyBzdHJ1Y3QgdGNfYWN0aW9uX29wcyBhY3RfZ2F0ZV9vcHMgPSB7XFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDctXFx0Lm93bmVyXFx0XFx0PVxcdFRISVNfTU9EVUxFLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc0ODpcXHQuYWN0XFx0XFx0PVxcdHRjZl9nYXRlX2FjdCxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy03NDktXFx0LmR1bXBcXHRcXHQ9XFx0dGNmX2dhdGVfZHVtcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NDUuOTk5MjIwODQ4WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMDA5NzcyMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSB0Y2ZfZ2F0ZSBDb2RlIGZvciBGdXp6aW5nIE9wcG9ydHVuaXRpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIGB0Y2ZfZ2F0ZV9hY3RgIGlzIGNsZWFybHkgdGhlIG1haW4gYC5hY3RgIGZ1bmN0aW9uLCB3aGljaCBpcyB0aGUgaG90IHBhdGggZm9yIHRoZSBUQyBhY3Rpb24uIEJ1dCB0aGUgYWN0dWFsIGNoYW5nZSBJJ20gaW50ZXJlc3RlZCBpbiBsaWVzIHdpdGhpbiBgdGNmX2dhdGVfaW5pdGAuIFdhaXQsIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBzdGF0aWMuLi4gYnV0IGl0ICppcyogdGhlIGAuaW5pdGAgZnVuY3Rpb24gZm9yIGBhY3RfZ2F0ZV9vcHNgLCBjYWxsZWQgdmlhIGEgZnVuY3Rpb24gcG9pbnRlci4gSW50ZXJlc3RpbmcuIEkgZG9uJ3Qgc2VlIGFueSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZS5cblxuU28sIGluaXRpYWxseSwgSSBjb25zaWRlcmVkIHVzaW5nIGB0Y2ZfZ2F0ZV9hY3RgIGFzIGEgZm9jdXMgc3ltYm9sIG9yIGV2ZW4gbm90IHNwZWNpZnlpbmcgYSBmb2N1cyBzeW1ib2wgYXQgYWxsIGdpdmVuIHRoZSBsYWNrIG9mIGdvb2QgY2FuZGlkYXRlcy4gSG93ZXZlciwgYHRjZl9nYXRlX2FjdGAgaXMgYSAqaG90IHBhdGgqIGZ1bmN0aW9uLCBjYWxsZWQgZm9yIGV2ZXJ5IHBhY2tldC4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIGZvY3VzIGZ1enppbmcgZWZmb3J0cyB0aGVyZTsgdGhhdCdzIGdlbmVyaWMuIFNpbmNlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgbm9uLXN0YXRpYywgbm9uLWhvdC1wYXRoIGZ1bmN0aW9ucyB0byBjb25zaWRlciwgaXQgbG9va3MgbGlrZSB3ZSBjYW4gbGVhdmUgYEZvY3VzU3ltYm9sc2AgZW1wdHkuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdywgaXMgYHRjZl9nYXRlX2luaXRgIHJlYWNoYWJsZT8gWWVzLCB2aWEgbmV0bGluayB3aGVuIGNvbmZpZ3VyaW5nIHRoZSBUQyBhY3Rpb24uIFRoYXQncyBnb29kLlxuXG5BbHJpZ2h0LCB0aGUgY2hhbmdlIGl0c2VsZi4uLiBBaCwgaGVyZSBpdCBpczogYSBjcnVjaWFsIHZhbGlkYXRpb24gY2hlY2sgb24gYGN5Y2xldGltZWAuIEl0IG5vdyBjaGVja3MgaWYgYGN5Y2xldGltZWAgaXMgd2l0aGluIHRoZSByYW5nZSAwIHRvIGBJTlRfTUFYYCwgYW5kIHRocm93cyBhbiBlcnJvciBpZiBub3QuIFRoaXMgbG9va3MgbGlrZSBhIHBlcmZlY3QgdGFyZ2V0IGZvciBmdXp6aW5nIOKAkyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGggY2xlYXIgZXJyb3IgaGFuZGxpbmcuIFdlJ2xsIGJlIGFibGUgdG8gY3JlYXRlIGludGVyZXN0aW5nIHRlc3QgY2FzZXMgYnkgZ2VuZXJhdGluZyB2YWx1ZXMgb2YgYGN5Y2xldGltZWAgb3V0c2lkZSB0aGUgdmFsaWQgcmFuZ2UuXG5cblJlZ2FyZGluZyBjb25maWd1cmF0aW9ucywgd2UgbmVlZCBib3RoIGBORVRfQUNUX0dBVEVgIGFuZCBgTkVUX0NMU19BQ1RgLiBJdCBpcyBhIGdvb2QgdGhpbmcgdG8gZG91YmxlIGNoZWNrIGlmIHRoZSBmaXJzdCBvbmUgaXMgZW5vdWdoLiBZZXMsIGBORVRfQUNUX0dBVEVgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYC4gVGhlcmVmb3JlIHdlIHdpbGwgcmV0dXJuIGJvdGguIE5vdywgbGV0IG1lIGNoZWNrIGFnYWluIGlmIHdlIG5lZWQgdG8gaW5jbHVkZSBvdGhlciBjb25maWd1cmF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA3MTMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTI6NTQuMDAwMjAwOTA3WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzcwNTQ3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0FDVF9HQVRFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9LY29uZmlnPTkxNz1jb25maWcgTkVUX0FDVF9DVFxcbi0tXFxubmV0L3NjaGVkL0tjb25maWctOTI5LVxcbm5ldC9zY2hlZC9LY29uZmlnOjkzMDpjb25maWcgTkVUX0FDVF9HQVRFXFxubmV0L3NjaGVkL0tjb25maWctOTMxLVxcdHRyaXN0YXRlIFxcXCJGcmFtZSBnYXRlIGVudHJ5IGxpc3QgY29udHJvbCB0YyBhY3Rpb25cXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUyOjU0LjA0NzkxMDA0MloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzQxNjMxNjcxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgTkVUX0NMU19BQ1RgIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGZpcnN0IHRoaW5ncyBmaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBvZiBgTkVUX0NMU19BQ1RgLiBJdCdzIGNydWNpYWwgdG8gZW5zdXJlIHRoaXMgbW9kdWxlIGZ1bmN0aW9ucyBjb3JyZWN0bHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSB1bmZvcmVzZWVuIGlzc3VlcyBvciBjb25mbGljdHMgd2l0aGluIHRoZSBleGlzdGluZyBuZXR3b3JrIGluZnJhc3RydWN0dXJlLiBJJ20gdGhpbmtpbmcgSSdsbCBzdGFydCBieSB0cmFjaW5nIHRoZSBjYWxscyB0byB0aGlzIG1vZHVsZSBhbmQgc2VlIHdoZXJlIHRoZXkgb3JpZ2luYXRlLiBUaGVuLCBJIG5lZWQgdG8gYW5hbHl6ZSBhbnkgZXh0ZXJuYWwgbGlicmFyaWVzIG9yIGZ1bmN0aW9ucyB0aGlzIHJlbGllcyBvbi4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgY29tcG9uZW50cywgb3IgYXJlIHRoZXJlIGFueSB1c2VyLXNwYWNlIGFwcGxpY2F0aW9ucyBpbnZvbHZlZD9cblxuSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgY2lyY3VsYXIgZGVwZW5kZW5jaWVzIGFzIHdlbGwsIG9idmlvdXNseS4gVGhvc2UgYXJlIGFsd2F5cyBhIGhlYWRhY2hlIGFuZCBjYW4gY2F1c2UgcmVhbGx5IGRpZmZpY3VsdC10by1kZWJ1ZyBwcm9ibGVtcy4gSSBhbHNvIHdhbnQgdG8gbWFrZSBzdXJlIHRoZSB2ZXJzaW9uIG51bWJlcnMgYXJlIGNvbXBhdGlibGUsIGVzcGVjaWFsbHkgaWYgdGhpcyB1dGlsaXplcyBhbnkgdGhpcmQgcGFydHkgbGlicmFyaWVzLiBGaW5hbGx5LCBJJ2xsIGJlIGxvb2tpbmcgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkga25vd24gYnVncyBvciB2dWxuZXJhYmlsaXRpZXMgYXNzb2NpYXRlZCB3aXRoIHRob3NlIGRlcGVuZGVuY2llcy4gQSBnb29kIGRlcGVuZGVuY3kgY2hlY2sgY2FuIHNhdmUgYSB0b24gb2YgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MjYsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo1Ny4zODk1NDM3MTNaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NTYyNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORVRfQ0xTX0FDVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZz02OTA9Y29uZmlnIE5FVF9FTUFUQ0hfSVBUXFxuLS1cXG5uZXQvc2NoZWQvS2NvbmZpZy03MDEtXFxubmV0L3NjaGVkL0tjb25maWc6NzAyOmNvbmZpZyBORVRfQ0xTX0FDVFxcbm5ldC9zY2hlZC9LY29uZmlnLTcwMy1cXHRib29sIFxcXCJBY3Rpb25zXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mjo1Ny40MzUxMDk4OTlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMjE1OTA3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqUGVlcmluZyBpbnRvIHRoZSBLZXJuZWwncyBDb25maWd1cmF0aW9uIExhYnlyaW50aCoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgXCJSaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGtlcm5lbCBzb3VyY2UgY29kZSBhZ2Fpbi5cIiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYE5FVF9DTFNfQUNUYC4gVGhlIG5hbWUgYWxvbmUgc2NyZWFtcyBcIm5ldHdvcmsgY2xhc3NpZmljYXRpb24gYW5kIGFjdGlvbixcIiBidXQgdGhlIGRldmlsJ3MgYWx3YXlzIGluIHRoZSBkZXRhaWxzLCBzbyBsZXQncyBzZWUgaG93IGl0J3MgY29uZmlndXJlZC4gTXkgZmlyc3QgbW92ZSBpcyB0byBuYXZpZ2F0ZSB0byBgbmV0L3NjaGVkL0tjb25maWdgLiBJdCdzIEtjb25maWcgZm9yIGEgcmVhc29uOyB0aGlzIGZpbGUgKmhhcyogdG8gaG9sZCB0aGUgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIEkgbmVlZCB0byB1bnJhdmVsLiBVbmRlcnN0YW5kaW5nIGhvdyBgTkVUX0NMU19BQ1RgIGlzIGV4cG9zZWQgYXMgYSBjb25maWd1cmFibGUgb3B0aW9uIGlzIGdvaW5nIHRvIGJlIGtleSB0byBmaWd1cmluZyBvdXQgZXhhY3RseSB3aGF0IGl0IGRvZXMsIGFuZCBtb3JlIGltcG9ydGFudGx5LCBob3cgaXQncyAqdXNlZCogd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIGtlcm5lbCdzIG5ldHdvcmtpbmcgc3RhY2suIEkgbmVlZCB0aGUgc3BlY2lmaWNzIHNvIEkgY2FuIGRldGVybWluZSBpZiB0aGlzIGlzIHJlbGV2YW50IHRvIG15IHNwZWNpZmljIHByb2plY3QuIExldCdzIHNlZSB3aGF0IHdlIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDY3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDAuNzU3MjcxMjYzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg5NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY5NSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY5NTpcXHRcXHQgIG1hdGNoZXMuXFxuIDY5NjpcXHRcXHQgIEN1cnJlbnQgc3VwcG9ydGVkIG1hdGNoIGlzIFxcXCJwb2xpY3lcXFwiIHdoaWNoIGFsbG93cyBwYWNrZXQgY2xhc3NpZmljYXRpb25cXG4gNjk3OlxcdFxcdCAgYmFzZWQgb24gSVBzZWMgcG9saWN5IHRoYXQgd2FzIHVzZWQgZHVyaW5nIGRlY2Fwc3VsYXRpb25cXG4gNjk4OlxcdFxcbiA2OTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgY29kZSBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuIDcwMDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBlbV9pcHQuXFxuIDcwMTpcXHRcXG4gNzAyOlxcdGNvbmZpZyBORVRfQ0xTX0FDVFxcbiA3MDM6XFx0XFx0Ym9vbCBcXFwiQWN0aW9uc1xcXCJcXG4gNzA0OlxcdFxcdHNlbGVjdCBORVRfQ0xTXFxuIDcwNTpcXHRcXHRzZWxlY3QgTkVUX1hHUkVTU1xcbiA3MDY6XFx0XFx0aGVscFxcbiA3MDc6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIHVzZSB0cmFmZmljIGNvbnRyb2wgYWN0aW9ucy4gQWN0aW9uc1xcbiA3MDg6XFx0XFx0ICBnZXQgYXR0YWNoZWQgdG8gY2xhc3NpZmllcnMgYW5kIGFyZSBpbnZva2VkIGFmdGVyIGEgc3VjY2Vzc2Z1bFxcbiA3MDk6XFx0XFx0ICBjbGFzc2lmaWNhdGlvbi4gVGhleSBhcmUgdXNlZCB0byBvdmVyd3JpdGUgdGhlIGNsYXNzaWZpY2F0aW9uXFxuIDcxMDpcXHRcXHQgIHJlc3VsdCwgaW5zdGFudGx5IGRyb3Agb3IgcmVkaXJlY3QgcGFja2V0cywgZXRjLlxcbiA3MTE6XFx0XFxuIDcxMjpcXHRcXHQgIEEgcmVjZW50IHZlcnNpb24gb2YgdGhlIGlwcm91dGUyIHBhY2thZ2UgaXMgcmVxdWlyZWQgdG8gdXNlXFxuIDcxMzpcXHRcXHQgIGV4dGVuZGVkIG1hdGNoZXMuXFxuIDcxNDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDAuNzU3MzYyMzMzWiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNTk0MTI2MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aGlua2luZyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gYE5FVF9DTFNfQUNUYCBpcyBzaG93aW5nIHVwLCBhbmQgSSBub3RpY2UgaXQgZG9lc24ndCBoYXZlIGFuIGV4cGxpY2l0IGBkZXBlbmRzIG9uYCBlbnRyeSBpbiBpdHMgY29uZmlndXJhdGlvbi4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIEkgYWx3YXlzIGxvb2sgZm9yIHRob3NlLiBCdXQgdGhlbiBJIHNlZSB0aGF0IGl0J3MgbmVzdGVkIHdpdGhpbiB0aGUgYG1lbnVjb25maWcgTkVUX1NDSEVEYC4gQWxyaWdodCwgdGltZSB0byBnbyBjaGVjayBgTkVUX1NDSEVEYCdzIGNvbmZpZ3VyYXRpb24gYW5kIHNlZSB3aGF0J3MgY29udHJvbGxpbmcgaXRzIGluY2x1c2lvbiwgYW5kIHRoZXJlZm9yZSwgcG90ZW50aWFsbHksIGluZGlyZWN0bHksIHRoZSBpbmNsdXNpb24gb2YgYE5FVF9DTFNfQUNUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGxvZ2ljIGNoYWluIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjE3LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzowNC4xMTY3Nzc1MzRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3MTI5NTUxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW51Y29uZmlnIE5FVF9TQ0hFRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvS2NvbmZpZy01LVxcbm5ldC9zY2hlZC9LY29uZmlnOjY6bWVudWNvbmZpZyBORVRfU0NIRURcXG5uZXQvc2NoZWQvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFvUyBhbmQvb3IgZmFpciBxdWV1ZWluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDQuNDg4MDgwNDU2WiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4ODc4OTAyNzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyB0aGUgTkVUX1NDSEVEIEtjb25maWcgRW50cnkqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgYE5FVF9TQ0hFRGAgS2NvbmZpZyBlbnRyeSB3aXRoaW4gYG5ldC9zY2hlZC9gLiBGaXJzdCwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UncmUgb24gdGhlIHNhbWUgcGFnZSBhbmQga25vdyB3aGF0IHdlIGFyZSBkZWFsaW5nIHdpdGguIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIGNvbmZpZ3VyZWQgd2l0aGluIHRoZSBuZXR3b3JraW5nIHN0YWNrLiBXaGF0IGRlcGVuZGVuY2llcyBkb2VzIGl0IGhhdmU/IFdoYXQgZmVhdHVyZXMgZG9lcyBpdCBlbmFibGU/IERvZXMgaXQgbWFrZSB1c2Ugb2YgYW55IHNwZWNpZmljIGhhcmR3YXJlIG9yIHRlY2hub2xvZ2llcz8gSSdsbCBwcm9iYWJseSBiZSBmb2N1c2luZyBvbiB0aGUgbG9naWMgYmVoaW5kIGl0cyBkZWZhdWx0IHNldHRpbmcuIFdoYXQgY2lyY3Vtc3RhbmNlcyB3b3VsZCBtYWtlIHVzIHdhbnQgdG8gZW5hYmxlIG9yIGRpc2FibGUgaXQ/IEknbGwgd2FudCB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIHBhcnRpY3VsYXIgY29uZmlnIG9wdGlvbiBvbiBvdmVyYWxsIHN5c3RlbSBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXNhZ2UuIEtub3dpbmcgdGhlIGlucyBhbmQgb3V0cyBvZiB0aGlzIHNldHRpbmcgaXMgY3JpdGljYWwgZm9yIGZpbmUtdHVuaW5nIG91ciBuZXR3b3JrIGNvbmZpZ3VyYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODgxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MDguMzc1OTc0NzkyWiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxNzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIFRyYWZmaWMgY29udHJvbCBjb25maWd1cmF0aW9uLlxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIE5FVF9TQ0hFRFxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUW9TIGFuZC9vciBmYWlyIHF1ZXVlaW5nXFxcIlxcbiAgIDg6XFx0XFx0c2VsZWN0IE5FVF9TQ0hfRklGT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBXaGVuIHRoZSBrZXJuZWwgaGFzIHNldmVyYWwgcGFja2V0cyB0byBzZW5kIG91dCBvdmVyIGEgbmV0d29ya1xcbiAgMTE6XFx0XFx0ICBkZXZpY2UsIGl0IGhhcyB0byBkZWNpZGUgd2hpY2ggb25lcyB0byBzZW5kIGZpcnN0LCB3aGljaCBvbmVzIHRvXFxuICAxMjpcXHRcXHQgIGRlbGF5LCBhbmQgd2hpY2ggb25lcyB0byBkcm9wLiBUaGlzIGlzIHRoZSBqb2Igb2YgdGhlIHF1ZXVlaW5nXFxuICAxMzpcXHRcXHQgIGRpc2NpcGxpbmVzLCBzZXZlcmFsIGRpZmZlcmVudCBhbGdvcml0aG1zIGZvciBob3cgdG8gZG8gdGhpc1xcbiAgMTQ6XFx0XFx0ICBcXFwiZmFpcmx5XFxcIiBoYXZlIGJlZW4gcHJvcG9zZWQuXFxuICAxNTpcXHRcXG4gIDE2OlxcdFxcdCAgSWYgeW91IHNheSBOIGhlcmUsIHlvdSB3aWxsIGdldCB0aGUgc3RhbmRhcmQgcGFja2V0IHNjaGVkdWxlciwgd2hpY2hcXG4gIDE3OlxcdFxcdCAgaXMgYSBGSUZPIChmaXJzdCBjb21lLCBmaXJzdCBzZXJ2ZWQpLiBJZiB5b3Ugc2F5IFkgaGVyZSwgeW91IHdpbGwgYmVcXG4gIDE4OlxcdFxcdCAgYWJsZSB0byBjaG9vc2UgZnJvbSBhbW9uZyBzZXZlcmFsIGFsdGVybmF0aXZlIGFsZ29yaXRobXMgd2hpY2ggY2FuXFxuICAxOTpcXHRcXHQgIHRoZW4gYmUgYXR0YWNoZWQgdG8gZGlmZmVyZW50IG5ldHdvcmsgZGV2aWNlcy4gVGhpcyBpcyB1c2VmdWwgZm9yXFxuICAyMDpcXHRcXHQgIGV4YW1wbGUgaWYgc29tZSBvZiB5b3VyIG5ldHdvcmsgZGV2aWNlcyBhcmUgcmVhbCB0aW1lIGRldmljZXMgdGhhdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzowOC4zNzYwNjgzOTJaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQ5ODcxODIzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBORVRfU0NIRUQgS2VybmVsIENvbmZpZ3VyYXRpb24gT3B0aW9uKipcblxuT2theSwgc28gSSBzZWUgdGhhdCBgTkVUX1NDSEVEYCBpcyBhIHJlcXVpcmVkIGNvbXBvbmVudCBmb3Igd2hhdGV2ZXIgSSdtIHdvcmtpbmcgb24uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBsZXQncyBtYWtlIHN1cmUgaXQncyBwcm9wZXJseSBjb25maWd1cmVkLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgZGVwZW5kZW5jaWVzOyBub3RoaW5nIGlzIHdvcnNlIHRoYW4gaGF2aW5nIHNvbWV0aGluZyBmYWlsIGJlY2F1c2UgYSBwcmUtcmVxdWlzaXRlIGlzbid0IHNhdGlzZmllZC4gSG1tLCBpdCBzZWVtcyBzdHJhaWdodGZvcndhcmQsIG5vIGltbWVkaWF0ZSBkZXBlbmRlbmNpZXMuIEl0J3MganVzdCBhIHRvcC1sZXZlbCBgbWVudWNvbmZpZ2Agb3B0aW9uLiBXYWl0IGEgc2Vjb25kLCB3aGVyZSBpcyB0aGlzIGRlZmluZWQ/IEFoLCBpdCBsaXZlcyBpbiBgbmV0L0tjb25maWdgLiBSaWdodCwgbm93IEkgbmVlZCB0byBkaXZlIGludG8gdGhhdCBmaWxlIGFuZCBzZWUgd2hhdCBlbHNlIEkgY2FuIGdsZWFuIGZyb20gdGhlcmUuIEkgaGF2ZSB0byBzZWUgaG93IGBORVRfU0NIRURgIGlzIGNvbm5lY3RlZCB3aXRoaW4gdGhlIG5ldHdvcmsgY29uZmlndXJhdGlvbiBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDExLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoxMy44NzQ3OTAwMjJaIiwiU2VxIjozOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzNTg0MjExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNvdXJjZSBcXFwibmV0L3NjaGVkL0tjb25maWdcXFwiXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTI2OT1zb3VyY2UgXFxcIm5ldC9tYWM4MDIxNTQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZzoyNzA6c291cmNlIFxcXCJuZXQvc2NoZWQvS2NvbmZpZ1xcXCJcXG5uZXQvS2NvbmZpZy0yNzEtc291cmNlIFxcXCJuZXQvZGNiL0tjb25maWdcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjEzLjk2ODM4MTU5M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTA5NzExOTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsJ3MgTmV0d29yayBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYG5ldC9LY29uZmlnYCwgYW5kIHRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgbGluZSBgc291cmNlIFwibmV0L3NjaGVkL0tjb25maWdcImAuIFByZXR0eSBzdGFuZGFyZCBLY29uZmlnIHN0dWZmLCBidXQgY29udGV4dCBpcyBhbHdheXMga2V5LiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGVuc3VyZSBJJ3ZlIGdvdCB0aGUgb3ZlcmFsbCBhcmNoaXRlY3R1cmUgb2YgdGhlIG5ldHdvcmtpbmcgY29uZmlndXJhdGlvbiBpbiBtaW5kLiBXaGF0IGRlcGVuZGVuY2llcyBtaWdodCBgbmV0L3NjaGVkL0tjb25maWdgIGludHJvZHVjZSB3aXRoaW4gdGhlIGxhcmdlciBgbmV0L2Agc2NvcGU/IEkgbmVlZCB0byBxdWlja2x5IGdyYXNwIGhvdyB0aGlzIGluY2x1c2lvbiBhZmZlY3RzIHRoZSBidWlsZCBwcm9jZXNzIGFuZCB3aGF0IG9wdGlvbnMgaXQgcG90ZW50aWFsbHkgdW5sb2NrcyAob3IgcmVzdHJpY3RzKS5cblxuU28sIGxldCBtZSB6b29tIGluIG9uIGBuZXQvc2NoZWQvS2NvbmZpZ2AuIEknbGwgcXVpY2tseSBzY2FuIGZvciBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIEtjb25maWcgZmlsZXMsIG9yIGV4dGVybmFsIHZhcmlhYmxlcyB0aGF0IGNvdWxkIGluZmx1ZW5jZSB0aGlzIGluY2x1c2lvbiwgb3IgYW55IHBvdGVudGlhbCBjb25mbGljdHMuIERvZXMgYG5ldC9zY2hlZC9LY29uZmlnYCBpbnRyb2R1Y2UgbmV3IHN5bWJvbHMgb3IgcmVkZWZpbmUgZXhpc3Rpbmcgb25lcz8gQXJlIHRoZXJlIGFueSBjb25kaXRpb25hbCBpbmNsdWRlcyBvciBleGNsdXNpb25zIGRlcGVuZGVudCBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgbmV0d29yayBzdGFjayBjb25maWd1cmF0aW9uPyBUaGlzIGlzIGFsbCBhYm91dCBlZmZpY2llbnRseSBtYXBwaW5nIGRlcGVuZGVuY2llcyBhbmQgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBzcGVjaWZpYyBtb2R1bGUgaXMgaW50ZWdyYXRlZC4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1vZGVsIG9mIGhvdyBgbmV0L3NjaGVkL0tjb25maWdgIGV4cGFuZHMgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhdmFpbGFibGUgdG8gdGhlIHVzZXIgaW4gdGhlIGNvbnRleHQgb2YgbmV0d29yayBzY2hlZHVsaW5nLiBUaW1lIHRvIGdldCBkb3duIHRvIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNzU2LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MTcuODc4MDk2NDA1WiIsIlNlcSI6NDAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MDpcXHRzb3VyY2UgXFxcIm5ldC9icmlkZ2UvS2NvbmZpZ1xcXCJcXG4gMjYxOlxcdHNvdXJjZSBcXFwibmV0L2RzYS9LY29uZmlnXFxcIlxcbiAyNjI6XFx0c291cmNlIFxcXCJuZXQvODAyMXEvS2NvbmZpZ1xcXCJcXG4gMjYzOlxcdHNvdXJjZSBcXFwibmV0L2xsYy9LY29uZmlnXFxcIlxcbiAyNjQ6XFx0c291cmNlIFxcXCJuZXQveDI1L0tjb25maWdcXFwiXFxuIDI2NTpcXHRzb3VyY2UgXFxcIm5ldC9sYXBiL0tjb25maWdcXFwiXFxuIDI2NjpcXHRzb3VyY2UgXFxcIm5ldC9waG9uZXQvS2NvbmZpZ1xcXCJcXG4gMjY3OlxcdHNvdXJjZSBcXFwibmV0LzZsb3dwYW4vS2NvbmZpZ1xcXCJcXG4gMjY4OlxcdHNvdXJjZSBcXFwibmV0L2llZWU4MDIxNTQvS2NvbmZpZ1xcXCJcXG4gMjY5OlxcdHNvdXJjZSBcXFwibmV0L21hYzgwMjE1NC9LY29uZmlnXFxcIlxcbiAyNzA6XFx0c291cmNlIFxcXCJuZXQvc2NoZWQvS2NvbmZpZ1xcXCJcXG4gMjcxOlxcdHNvdXJjZSBcXFwibmV0L2RjYi9LY29uZmlnXFxcIlxcbiAyNzI6XFx0c291cmNlIFxcXCJuZXQvZG5zX3Jlc29sdmVyL0tjb25maWdcXFwiXFxuIDI3MzpcXHRzb3VyY2UgXFxcIm5ldC9iYXRtYW4tYWR2L0tjb25maWdcXFwiXFxuIDI3NDpcXHRzb3VyY2UgXFxcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnXFxcIlxcbiAyNzU6XFx0c291cmNlIFxcXCJuZXQvdm13X3Zzb2NrL0tjb25maWdcXFwiXFxuIDI3NjpcXHRzb3VyY2UgXFxcIm5ldC9uZXRsaW5rL0tjb25maWdcXFwiXFxuIDI3NzpcXHRzb3VyY2UgXFxcIm5ldC9tcGxzL0tjb25maWdcXFwiXFxuIDI3ODpcXHRzb3VyY2UgXFxcIm5ldC9uc2gvS2NvbmZpZ1xcXCJcXG4gMjc5OlxcdHNvdXJjZSBcXFwibmV0L2hzci9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoxNy44NzgxODU0NDVaIiwiU2VxIjo0MSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODY3OTcyNzEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBmb3IgRnV6emluZzogVGhlIHRjZl9nYXRlX2luaXQgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbmV0d29ya2luZyBjb2RlIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBhIGdvb2Qgc3BvdCBmb3IgZnV6emluZy4gSSBzZWUgdGhpcyBwYXRjaCBpcyByZWxhdGVkIHRvIHRoZSBgdGNmX2dhdGVfaW5pdGAgZnVuY3Rpb24sIGFuZCBpdCdzIGJ1cmllZCBpbnNpZGUgdGhlIGBtZW51IFwiTmV0d29ya2luZyBvcHRpb25zXCJgIHN0cnVjdHVyZSwgd2hpY2ggaXMgZGVwZW5kZW50IG9uIGBORVRgLiBUaGVyZWZvcmUsIGl04oCZcyByZWxhdGVkIHRvIGBORVRgLCBgTkVUX1NDSEVEYCwgYE5FVF9DTFNfQUNUYCwgYW5kIGBORVRfQUNUX0dBVEVgLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBgdGNmX2dhdGVfaW5pdGAuIE15IGZvY3VzIGhhZCBiZWVuIG9uIGZpbmRpbmcgYSBzdWl0YWJsZSBlbnRyeSBwb2ludCwgYW5kIHRoZSBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IG1lbnRpb24gcHJlZmVycmluZyBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMuIEF0IGZpcnN0LCBJIHdhcyBhIGJpdCBjb25jZXJuZWQgYmVjYXVzZSBgdGNmX2dhdGVfaW5pdGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBJIHdhcyB3b3JyaWVkIHRoaXMgbWlnaHQgbWVhbiBpdCB3b3VsZCBiZSBpbmxpbmVkIGFuZCB3b3VsZG4ndCBoYXZlIGEgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3MgaW4gdGhlIGtlcm5lbCBpbWFnZSwgd2hpY2ggd291bGQgbWFrZSBpdCBsZXNzIGlkZWFsIGZvciBmdXp6aW5nLiBCdXQgdGhlbiBJIHJlbWVtYmVyZWQsIHdhaXQgYSBtaW51dGUsIHRoZSBhZGRyZXNzIG9mIGB0Y2ZfZ2F0ZV9pbml0YCBpcyBhY3R1YWxseSB0YWtlbiEgSXQncyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIsIGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgLlxuXG5UaGlzIGlzIHRoZSBrZXkuIFNpbmNlIGEgc3RhdGljIGZ1bmN0aW9uIGhhcyBpdHMgYWRkcmVzcyB0YWtlbiwgdGhlIGNvbXBpbGVyICptdXN0KiBnZW5lcmF0ZSBhIGRpc3RpbmN0IGZ1bmN0aW9uIGZvciBpdC4gVGhhdCBtZWFucyBgdGNmX2dhdGVfaW5pdGAgKndpbGwqIGhhdmUgYSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzcywgbWFraW5nIGl0IGEgcGVyZmVjdGx5IHZhbGlkIGZvY3VzIHN5bWJvbCEgSSBzaG91bGQgZG91YmxlLWNoZWNrIHRoYXQgYXNzdW1wdGlvbiB0aG91Z2guIFllcywgY29uZmlybWVkLiBXaGVuIGEgc3RhdGljIGZ1bmN0aW9u4oCZcyBhZGRyZXNzIGlzIHVzZWQsIHRoZSBjb21waWxlciBtdXN0IGNyZWF0ZSBhIHNlcGFyYXRlIGZ1bmN0aW9uIHNvIHRoZXJlJ3MgYSBwb2ludGVyIHRvIGl0LlxuXG5UaGVyZWZvcmUsIEknbSBjb25maWRlbnQgaW4gYWRkaW5nIGB0Y2ZfZ2F0ZV9pbml0YCB0byBteSBgRm9jdXNTeW1ib2xzYCBsaXN0LlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHBhdGNoIGl0c2VsZi4gSXQncyBhZGRpbmcgdmFsaWRhdGlvbiB0byBgY3ljbGV0aW1lYCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGFuZCBpdCdzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG5ldGxpbmsgd2hlbiBjb25maWd1cmluZyB0aGUgVEMgYWN0aW9uLiBUaGlzIHNvdW5kcyBsaWtlIHByaW1lIGZ1enppbmcgdGVycml0b3J5LlxuXG5NeSBjb25maWcgcmVxdWlyZW1lbnRzIGFyZTogYE5FVGAsIGBORVRfU0NIRURgLCBgTkVUX0NMU19BQ1RgLCBhbmQgYE5FVF9BQ1RfR0FURWAuIE15IGBGb2N1c1N5bWJvbHNgIGlzIGB0Y2ZfZ2F0ZV9pbml0YC4gVGltZSB0byBkbyBhIHF1aWNrIHJldmlldyBvZiB0aGF0IGZ1bmN0aW9uIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NDYwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjAzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MjYuNTU3OTE2MjAyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MzM5NzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzoyNi42MTEzMTc5NjdaIiwiU2VxIjo0MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgzNDM1NjY3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aGF0IGAuaW5pdCA9IHRjZl9nYXRlX2luaXRgIGlzIGNvcnJlY3QuIE5vdywgSSBuZWVkIHRvIG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMgbHVya2luZyBhYm91dCB0aGF0IEkndmUgbWlzc2VkLiBMZXQncyB0cmFjZSB0aGVzZSBkZXBlbmRlbmNpZXMuIEkgc2VlIGBORVRfQUNUX0dBVEVgIGRlcGVuZHMgb24gYE5FVF9DTFNfQUNUYC4gQW5kIGxvb2tpbmcgZnVydGhlciwgYE5FVF9DTFNfQUNUYCBpcyBwYXJ0IG9mIGBORVRfU0NIRURgLiBGaW5hbGx5LCBgTkVUX1NDSEVEYCBiZWxvbmdzIHRvIGBORVRgLiBBbHJpZ2h0LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBlbnN1cmUgdGhhdCBgTkVUYCwgYE5FVF9TQ0hFRGAsIGBORVRfQ0xTX0FDVGAsIGFuZCBgTkVUX0FDVF9HQVRFYCBhcmUgYWxsIGNvcnJlY3RseSBjb25maWd1cmVkLiBJIHdpbGwgY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU4NTUsIk91dHB1dFRva2VucyI6MTM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjMxLjQ0NTY3NzcyNVoiLCJTZXEiOjQ0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgxMzAzODQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORVRcIixcbiAgICBcIk5FVF9TQ0hFRFwiLFxuICAgIFwiTkVUX0NMU19BQ1RcIixcbiAgICBcIk5FVF9BQ1RfR0FURVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRjZl9nYXRlX2luaXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgZnVuY3Rpb25hbCB2YWxpZGF0aW9uIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAsIHdoaWNoIGlzIHRoZSBpbml0aWFsaXphdGlvbiBjYWxsYmFjayBmb3IgdGhlIGBnYXRlYCBUQyBhY3Rpb24uIFRoaXMgY29kZSBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBuZXRsaW5rIHdoZW4gY29uZmlndXJpbmcgdHJhZmZpYyBjb250cm9sIGFjdGlvbnMsIGFuZCB0aGUgY2hhbmdlIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgYnkgcmVqZWN0aW5nIGludmFsaWQgY3ljbGUgdGltZXMuIFRoZXJlZm9yZSwgaXQgaXMgd29ydGggZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MzEuNTI2OTg3Nzk3WiIsIlNlcSI6NDUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDA5MTkyMzEwMDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzozMS41Mjc0NDA5MDdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTAwOTE4NzczODUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgYm91bmRzIGNoZWNrIGZvciBgY3ljbGV0aW1lYCBpbiBgdGNmX2dhdGVfaW5pdGAgdG8gZW5zdXJlIGl0IGRvZXMgbm90IGV4Y2VlZCBgSU5UX01BWGAuIFdpdGhvdXQgdGhpcyBjaGVjaywgYSB2ZXJ5IGxhcmdlIGBjeWNsZXRpbWVgIChlaXRoZXIgcHJvdmlkZWQgYnkgdGhlIHVzZXIgdmlhIG5ldGxpbmsgYXR0cmlidXRlcyBvciBjYWxjdWxhdGVkIGZyb20gZW50cnkgaW50ZXJ2YWxzKSBjYW4gY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSBuZXh0IHRpbWVyIGV4cGlyYXRpb24uIFRoaXMgb3ZlcmZsb3cgY2FuIHJlc3VsdCBpbiBhIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCwgY2F1c2luZyB0aGUgaHJ0aW1lciB0byBiZSBzZXQgaW4gdGhlIHBhc3QgYW5kIHRyaWdnZXJpbmcgYW4gaW5maW5pdGUgbG9vcCBvZiB0aW1lciBpbnRlcnJ1cHRzIChhIERlbmlhbCBvZiBTZXJ2aWNlIGJ1ZykuXFxuXFxuVGhpcyBpcyBhIGxvZ2ljIGFuZCBpbnRlZ2VyIG92ZXJmbG93IGJ1Zy4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCwgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgYHU2NCBjeWNsZXRpbWUgPSAwO2ApLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGJlaW5nIHJlYWQsIHVzZWQgaW4gY29udHJvbCBmbG93LCBvciBsZWFrZWQgdG8gdXNlciBzcGFjZS4gU3RhbmRhcmQgZnV6emluZyB3aXRoIEtBU0FOIGFuZCBsb2NrZGVwIGlzIHN1ZmZpY2llbnQgdG8gZGV0ZWN0IHN1Y2ggaGFuZ3MgYW5kIGxvZ2ljIGJ1Z3MuIEEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IG5lY2Vzc2FyeS5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0N2I5ZTBiYjVlZDRiNTQwYTQzMTQyOGMwMmNlNDQ4MzM3NGM5Y2M5XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBBdWcgMjMgMDQ6NTE6NTkgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvc2NoZWQvYWN0X2dhdGUuYyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG5pbmRleCBmZGJmY2FhM2UyYWI5Li4zMGJjZjE3MzI3NGNiIDEwMDY0NFxuLS0tIGEvbmV0L3NjaGVkL2FjdF9nYXRlLmNcbisrKyBiL25ldC9zY2hlZC9hY3RfZ2F0ZS5jXG5AQCAtNTAxLDYgKzUwMSwxNCBAQCBzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXG4gXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcbiBcdFx0Y3ljbGV0aW1lID0gY3ljbGU7XG4gXHR9XG4rXG4rXHRpZiAoY3ljbGV0aW1lIFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWCkge1xuK1x0XHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFwiJ2N5Y2xlX3RpbWUnIGlzIHRvbyBiaWdcIik7XG4rXHRcdGVyciA9IC1FSU5WQUw7XG4rXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNmdhY3QtXHUwMDNldGNmX2xvY2spO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1x0fVxuK1xuIFx0cC1cdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcbiBcdHAtXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0ID0gY3ljbGV0aW1lX2V4dDtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjMxLjUyNzQ0MTcxN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzAyMzEzOTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgQWN0X0dhdGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGFkZGluZyBhIGJvdW5kcyBjaGVjayB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGluIGBuZXQvc2NoZWQvYWN0X2dhdGUuY2AuIFNwZWNpZmljYWxseSwgaXQncyB2ZXJpZnlpbmcgaWYgYGN5Y2xldGltZWAgZmFsbHMgd2l0aGluIGEgcmVhc29uYWJsZSByYW5nZSAoMCB0byBgSU5UX01BWGApLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRoYXQgdGhpcyBpcyBsaWtlbHkgYWRkcmVzc2luZyBhIGxvZ2ljIG9yIHBvdGVudGlhbCBpbnRlZ2VyIG92ZXJmbG93IGlzc3VlLiBUaGUgY2hlY2sgaXRzZWxmIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZDogaWYgYGN5Y2xldGltZWAgaXMgbmVnYXRpdmUgb3IgZXhjZWVkcyBgSU5UX01BWGAsIGFuIGVycm9yIGlzIHRyaWdnZXJlZC5cblxuTXkgZmlyc3QgdGhvdWdodCBpcywgXCJXaGF0J3MgdGhlIGRhdGEgdHlwZSBvZiBgY3ljbGV0aW1lYD9cIiBJIHJlY2FsbCB0aGF0IGBrdGltZV9hZGRfbnNgIHJldHVybnMgYSBga3RpbWVfdGAsIHdoaWNoLCBJIGJlbGlldmUsIHJlc29sdmVzIHRvIGEgc2lnbmVkIDY0LWJpdCBpbnRlZ2VyLCBvciBwb3NzaWJseSBhbiB1bnNpZ25lZCBvbmUgaW4gc29tZSBjb250ZXh0cy4gU28sIGBjeWNsZXRpbWVgIGlzIGxpa2VseSBhbiBgczY0YCBvciBgdTY0YC4gVGhlIHBhdGNoJ3MgcHJpbWFyeSBjb25jZXJuIHNlZW1zIHRvIGJlIHByZXZlbnRpbmcgYGN5Y2xldGltZWAgZnJvbSB2ZW50dXJpbmcgYmV5b25kIHRoZXNlIGRlZmluZWQgYm91bmRzLlxuXG5HaXZlbiB0aGUgbmF0dXJlIG9mIHRoZSBwYXRjaCwgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWQgZmxhZ3MgcmVnYXJkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHNpbXBseSBhIHZhbGlkYXRpb24gc3RlcC4gSG93ZXZlciwgaXQncyBhbHdheXMgcHJ1ZGVudCB0byBkb3VibGUtY2hlY2sgZXJyb3IgaGFuZGxpbmcuIEknbGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhlIGBlcnJfZnJlZWAgcGF0aCB3aXRoaW4gYHRjZl9nYXRlX2luaXRgIGNvcnJlY3RseSBoYW5kbGVzIHRoZSBlcnJvciBzdGF0ZSBhbmQgZG9lc24ndCBpbnRyb2R1Y2UgYW55IEtNU0FOLXJlbGF0ZWQgY29uY2VybnMgaWYgdGhlIGNoZWNrIGZhaWxzLiBJdCdzIGEgZ29vZCBwcmFjdGljZSB0byBleGFtaW5lIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGVuc3VyZSB0aGlzIGNoZWNrIGRvZXNuJ3QgY3JlYXRlIG5ldyB2dWxuZXJhYmlsaXRpZXMsIGV2ZW4gaWYgaXQgYWltcyB0byBmaXggb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDU4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6MzcuMjI5NzU4NjkzWiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzgwNjM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZfZ2F0ZV9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTMzOT1zdGF0aWMgdm9pZCBnYXRlX3NldHVwX3RpbWVyKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCwgczMyIGNsb2NraWQsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MzQ3OnN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0zNDgtXFx0XFx0XFx0IHN0cnVjdCBubGF0dHIgKmVzdCwgc3RydWN0IHRjX2FjdGlvbiAqKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz03NDQ9c3RhdGljIHN0cnVjdCB0Y19hY3Rpb25fb3BzIGFjdF9nYXRlX29wcyA9IHtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc0OS1cXHQuZHVtcFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9kdW1wLFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjc1MDpcXHQuaW5pdFxcdFxcdD1cXHR0Y2ZfZ2F0ZV9pbml0LFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTc1MS1cXHQuY2xlYW51cFxcdD1cXHR0Y2ZfZ2F0ZV9jbGVhbnVwLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1MzozNy4yNzc1Njk2NDhaIiwiU2VxIjo0OSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg5MTAyNjE3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgcHJlc2VudGVkIGFzIGlmIGl0IHdlcmUgbXkgb3duIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipEaXZpbmcgaW50byB0aGUgYHRjZl9nYXRlX2luaXRgIEZ1bmN0aW9uKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCBhIHNvbGlkIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGNvbnRleHQuIEknbSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IGludG8gdGhlIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbi4gSXQncyB0aGUgc3RhcnRpbmcgcG9pbnQsIHRoZSBwbGFjZSB3aGVyZSBldmVyeXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGdhdGUgaW5pdGlhbGl6YXRpb24gYmVnaW5zLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbiDigJMgd2hhdCByZXNvdXJjZXMgYXJlIGJlaW5nIGFsbG9jYXRlZCwgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGJlaW5nIHNldCB1cCwgd2hhdCBkZXBlbmRlbmNpZXMgYXJlIGJlaW5nIHJlc29sdmVkLiBUaGlzIGluaXRpYWwgZnVuY3Rpb24gd2lsbCBnaXZlIG1lIHRoZSBiZXN0IGhpZ2gtbGV2ZWwgb3ZlcnZpZXcuIEZyb20gdGhlcmUsIEkgY2FuIGRyaWxsIGRvd24gZnVydGhlciBhbmQgc3RhcnQgZXhhbWluaW5nIHNwZWNpZmljIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBlcnJvciBoYW5kbGluZyBhbmQgcmVzb3VyY2UgYWxsb2NhdGlvbi4gSSB3YW50IHRvIHNlZSB3aGF0J3MgaGFwcGVuaW5nIGF0IHRoZSBvdXRzZXQsIHRvIGRldGVybWluZSBob3cgdGhlIGBnYXRlYCBpcyBiZWluZyBpbml0aWFsaXplZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2MSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjUzOjQwLjE2ODU5ODkyOFoiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDEyNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NjaGVkL2FjdF9nYXRlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzQ3LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM0NzpcXHRzdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuIDM0ODpcXHRcXHRcXHRcXHQgc3RydWN0IG5sYXR0ciAqZXN0LCBzdHJ1Y3QgdGNfYWN0aW9uICoqYSxcXG4gMzQ5OlxcdFxcdFxcdFxcdCBzdHJ1Y3QgdGNmX3Byb3RvICp0cCwgdTMyIGZsYWdzLFxcbiAzNTA6XFx0XFx0XFx0XFx0IHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMzUxOlxcdHtcXG4gMzUyOlxcdFxcdHN0cnVjdCB0Y19hY3Rpb25fbmV0ICp0biA9IG5ldF9nZW5lcmljKG5ldCwgYWN0X2dhdGVfb3BzLm5ldF9pZCk7XFxuIDM1MzpcXHRcXHR1NjQgY3ljbGV0aW1lID0gMCwgYmFzZXRpbWUgPSAwLCBjeWNsZXRpbWVfZXh0ID0gMDtcXG4gMzU0OlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnAgPSBOVUxMLCAqb2xkX3AgPSBOVUxMO1xcbiAzNTU6XFx0XFx0ZW51bSB0a19vZmZzZXRzIG9sZF90a19vZmZzZXQgPSBUS19PRkZTX1RBSTtcXG4gMzU2OlxcdFxcdGNvbnN0IHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKmN1cl9wID0gTlVMTDtcXG4gMzU3OlxcdFxcdGJvb2wgYmluZCA9IGZsYWdzIFxcdTAwMjYgVENBX0FDVF9GTEFHU19CSU5EO1xcbiAzNTg6XFx0XFx0c3RydWN0IG5sYXR0ciAqdGJbVENBX0dBVEVfTUFYICsgMV07XFxuIDM1OTpcXHRcXHRlbnVtIHRrX29mZnNldHMgdGtvID0gVEtfT0ZGU19UQUk7XFxuIDM2MDpcXHRcXHRzdHJ1Y3QgdGNmX2NoYWluICpnb3RvX2NoID0gTlVMTDtcXG4gMzYxOlxcdFxcdHMzMiB0aW1lcl9jbG9ja2lkID0gQ0xPQ0tfVEFJO1xcbiAzNjI6XFx0XFx0Ym9vbCB1c2Vfb2xkX2VudHJpZXMgPSBmYWxzZTtcXG4gMzYzOlxcdFxcdHMzMiBvbGRfY2xvY2tpZCA9IENMT0NLX1RBSTtcXG4gMzY0OlxcdFxcdGJvb2wgbmVlZF9jYW5jZWwgPSBmYWxzZTtcXG4gMzY1OlxcdFxcdHMzMiBjbG9ja2lkID0gQ0xPQ0tfVEFJO1xcbiAzNjY6XFx0XFx0c3RydWN0IHRjZl9nYXRlICpnYWN0O1xcbiAzNjc6XFx0XFx0c3RydWN0IHRjX2dhdGUgKnBhcm07XFxuIDM2ODpcXHRcXHR1NjQgb2xkX2Jhc2V0aW1lID0gMDtcXG4gMzY5OlxcdFxcdGludCByZXQgPSAwLCBlcnI7XFxuIDM3MDpcXHRcXHR1MzIgZ2ZsYWdzID0gMDtcXG4gMzcxOlxcdFxcdHMzMiBwcmlvID0gLTE7XFxuIDM3MjpcXHRcXHRrdGltZV90IHN0YXJ0O1xcbiAzNzM6XFx0XFx0dTMyIGluZGV4O1xcbiAzNzQ6XFx0XFxuIDM3NTpcXHRcXHRpZiAoIW5sYSlcXG4gMzc2OlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRlcnIgPSBubGFfcGFyc2VfbmVzdGVkKHRiLCBUQ0FfR0FURV9NQVgsIG5sYSwgZ2F0ZV9wb2xpY3ksIGV4dGFjayk7XFxuIDM3OTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gMzgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDM4MTpcXHRcXG4gMzgyOlxcdFxcdGlmICghdGJbVENBX0dBVEVfUEFSTVNdKVxcbiAzODM6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIDM4NDpcXHRcXG4gMzg1OlxcdFxcdGlmICh0YltUQ0FfR0FURV9DTE9DS0lEXSlcXG4gMzg2OlxcdFxcdFxcdGNsb2NraWQgPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9DTE9DS0lEXSk7XFxuIDM4NzpcXHRcXG4gMzg4OlxcdFxcdHBhcm0gPSBubGFfZGF0YSh0YltUQ0FfR0FURV9QQVJNU10pO1xcbiAzODk6XFx0XFx0aW5kZXggPSBwYXJtLVxcdTAwM2VpbmRleDtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0ZXJyID0gdGNmX2lkcl9jaGVja19hbGxvYyh0biwgXFx1MDAyNmluZGV4LCBhLCBiaW5kKTtcXG4gMzkyOlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiAzOTM6XFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gMzk0OlxcdFxcbiAzOTU6XFx0XFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBiaW5kKVxcbiAzOTY6XFx0XFx0XFx0cmV0dXJuIEFDVF9QX0JPVU5EO1xcbiAzOTc6XFx0XFxuIDM5ODpcXHRcXHRpZiAoIWVycikge1xcbiAzOTk6XFx0XFx0XFx0cmV0ID0gdGNmX2lkcl9jcmVhdGVfZnJvbV9mbGFncyh0biwgaW5kZXgsIGVzdCwgYSxcXG4gNDAwOlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZhY3RfZ2F0ZV9vcHMsIGJpbmQsIGZsYWdzKTtcXG4gNDAxOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gNDAyOlxcdFxcdFxcdFxcdHRjZl9pZHJfY2xlYW51cCh0biwgaW5kZXgpO1xcbiA0MDM6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA0OlxcdFxcdFxcdH1cXG4gNDA1OlxcdFxcbiA0MDY6XFx0XFx0XFx0cmV0ID0gQUNUX1BfQ1JFQVRFRDtcXG4gNDA3OlxcdFxcdH0gZWxzZSBpZiAoIShmbGFncyBcXHUwMDI2IFRDQV9BQ1RfRkxBR1NfUkVQTEFDRSkpIHtcXG4gNDA4OlxcdFxcdFxcdHRjZl9pZHJfcmVsZWFzZSgqYSwgYmluZCk7XFxuIDQwOTpcXHRcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4gNDEwOlxcdFxcdH1cXG4gNDExOlxcdFxcbiA0MTI6XFx0XFx0Z2FjdCA9IHRvX2dhdGUoKmEpO1xcbiA0MTM6XFx0XFxuIDQxNDpcXHRcXHRlcnIgPSB0Y2ZfYWN0aW9uX2NoZWNrX2N0cmxhY3QocGFybS1cXHUwMDNlYWN0aW9uLCB0cCwgXFx1MDAyNmdvdG9fY2gsIGV4dGFjayk7XFxuIDQxNTpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDE2OlxcdFxcdFxcdGdvdG8gcmVsZWFzZV9pZHI7XFxuIDQxNzpcXHRcXG4gNDE4OlxcdFxcdHAgPSBremFsbG9jKHNpemVvZigqcCksIEdGUF9LRVJORUwpO1xcbiA0MTk6XFx0XFx0aWYgKCFwKSB7XFxuIDQyMDpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA0MjE6XFx0XFx0XFx0Z290byBjaGFpbl9wdXQ7XFxuIDQyMjpcXHRcXHR9XFxuIDQyMzpcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cC1cXHUwMDNlZW50cmllcyk7XFxuIDQyNDpcXHRcXG4gNDI1OlxcdFxcdHVzZV9vbGRfZW50cmllcyA9ICF0YltUQ0FfR0FURV9FTlRSWV9MSVNUXTtcXG4gNDI2OlxcdFxcdGlmICghdXNlX29sZF9lbnRyaWVzKSB7XFxuIDQyNzpcXHRcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XFxuIDQyODpcXHRcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG4gNDI5OlxcdFxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDQzMDpcXHRcXHRcXHR1c2Vfb2xkX2VudHJpZXMgPSAhZXJyO1xcbiA0MzE6XFx0XFx0fVxcbiA0MzI6XFx0XFxuIDQzMzpcXHRcXHRpZiAocmV0ID09IEFDVF9QX0NSRUFURUQgXFx1MDAyNlxcdTAwMjYgdXNlX29sZF9lbnRyaWVzKSB7XFxuIDQzNDpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCJUaGUgZW50cnkgbGlzdCBpcyBlbXB0eVxcXCIpO1xcbiA0MzU6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNDM2OlxcdFxcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIDQzNzpcXHRcXHR9XFxuIDQzODpcXHRcXG4gNDM5OlxcdFxcdGlmIChyZXQgIT0gQUNUX1BfQ1JFQVRFRCkge1xcbiA0NDA6XFx0XFx0XFx0cmN1X3JlYWRfbG9jaygpO1xcbiA0NDE6XFx0XFx0XFx0Y3VyX3AgPSByY3VfZGVyZWZlcmVuY2UoZ2FjdC1cXHUwMDNlcGFyYW0pO1xcbiA0NDI6XFx0XFxuIDQ0MzpcXHRcXHRcXHRvbGRfYmFzZXRpbWUgID0gY3VyX3AtXFx1MDAzZXRjZmdfYmFzZXRpbWU7XFxuIDQ0NDpcXHRcXHRcXHRvbGRfY2xvY2tpZCAgID0gY3VyX3AtXFx1MDAzZXRjZmdfY2xvY2tpZDtcXG4gNDQ1OlxcdFxcdFxcdG9sZF90a19vZmZzZXQgPSBSRUFEX09OQ0UoZ2FjdC1cXHUwMDNldGtfb2Zmc2V0KTtcXG4gNDQ2OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo0MC4xNjg3MDIzNTlaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzAzMTExNTY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIHRoZSBzdW1tYXJ5LCByZW5kZXJlZCBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBJJ20gYW4gZXhwZXJ0IGFuZCB0YWtpbmcgdGhlIGxlYWQgb24gYW5hbHl6aW5nIHRoZSBmdW5jdGlvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIENvZGUqKlxuXG5BbHJpZ2h0LCBJJ3ZlIGdvdCB0aGUgaW5pdGlhbCBnbGltcHNlIG9mIHRoZSBmdW5jdGlvbi4gTm93LCBsZXQncyBub3QganVzdCBzdG9wIHRoZXJlLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nLiBJIG5lZWQgdG8gbW92ZSBwYXN0IHRoZSBpbml0aWFsIG92ZXJ2aWV3IGFuZCBzZWUgaG93IGl0IGFsbCB3b3JrcyBpbiBjb250ZXh0LiBJJ2xsIHJlYWQgdGhlIHJlc3Qgb2YgdGhpcyBmdW5jdGlvbiwgdW5kZXJzdGFuZGluZyB3aGF0IGl0cyBzcGVjaWZpYyBjb21wb25lbnRzIGFyZSBhbmQgdGhlIGxvZ2ljIHRoYXQgc3RpdGNoZXMgdGhlbSB0b2dldGhlciB0byBmaW5kIGl0cyBjb21wbGV0ZSBtZWFuaW5nLiBJdCdzIHRpbWUgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgYW5kIGFwcHJlY2lhdGUgdGhlIGJpZ2dlciBwaWN0dXJlIG9mIHRoaXMgY29kZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgyMSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NDMuMTk5ODIwNjE0WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3OTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ0NyxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NDc6XFx0XFx0XFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcXG4gNDQ4OlxcdFxcdFxcdGN5Y2xldGltZV9leHQgPSBjdXJfcC1cXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0O1xcbiA0NDk6XFx0XFx0XFx0cHJpbyAgICAgICAgICA9IGN1cl9wLVxcdTAwM2V0Y2ZnX3ByaW9yaXR5O1xcbiA0NTA6XFx0XFx0XFx0Z2ZsYWdzICAgICAgICA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2ZsYWdzO1xcbiA0NTE6XFx0XFxuIDQ1MjpcXHRcXHRcXHRpZiAoIXRiW1RDQV9HQVRFX0NMT0NLSURdKVxcbiA0NTM6XFx0XFx0XFx0XFx0Y2xvY2tpZCA9IG9sZF9jbG9ja2lkO1xcbiA0NTQ6XFx0XFxuIDQ1NTpcXHRcXHRcXHRlcnIgPSAwO1xcbiA0NTY6XFx0XFx0XFx0aWYgKHVzZV9vbGRfZW50cmllcykge1xcbiA0NTc6XFx0XFx0XFx0XFx0ZXJyID0gdGNmX2dhdGVfY29weV9lbnRyaWVzKHAsIGN1cl9wLCBleHRhY2spO1xcbiA0NTg6XFx0XFx0XFx0XFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgIXRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxcbiA0NTk6XFx0XFx0XFx0XFx0XFx0Y3ljbGV0aW1lID0gY3VyX3AtXFx1MDAzZXRjZmdfY3ljbGV0aW1lO1xcbiA0NjA6XFx0XFx0XFx0fVxcbiA0NjE6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDQ2MjpcXHRcXHRcXHRpZiAoZXJyKVxcbiA0NjM6XFx0XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gNDY0OlxcdFxcdH1cXG4gNDY1OlxcdFxcbiA0NjY6XFx0XFx0aWYgKHRiW1RDQV9HQVRFX1BSSU9SSVRZXSlcXG4gNDY3OlxcdFxcdFxcdHByaW8gPSBubGFfZ2V0X3MzMih0YltUQ0FfR0FURV9QUklPUklUWV0pO1xcbiA0Njg6XFx0XFxuIDQ2OTpcXHRcXHRpZiAodGJbVENBX0dBVEVfQkFTRV9USU1FXSlcXG4gNDcwOlxcdFxcdFxcdGJhc2V0aW1lID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQkFTRV9USU1FXSk7XFxuIDQ3MTpcXHRcXG4gNDcyOlxcdFxcdGlmICh0YltUQ0FfR0FURV9GTEFHU10pXFxuIDQ3MzpcXHRcXHRcXHRnZmxhZ3MgPSBubGFfZ2V0X3UzMih0YltUQ0FfR0FURV9GTEFHU10pO1xcbiA0NzQ6XFx0XFxuIDQ3NTpcXHRcXHRpZiAodGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXFxuIDQ3NjpcXHRcXHRcXHRjeWNsZXRpbWUgPSBubGFfZ2V0X3U2NCh0YltUQ0FfR0FURV9DWUNMRV9USU1FXSk7XFxuIDQ3NzpcXHRcXG4gNDc4OlxcdFxcdGlmICh0YltUQ0FfR0FURV9DWUNMRV9USU1FX0VYVF0pXFxuIDQ3OTpcXHRcXHRcXHRjeWNsZXRpbWVfZXh0ID0gbmxhX2dldF91NjQodGJbVENBX0dBVEVfQ1lDTEVfVElNRV9FWFRdKTtcXG4gNDgwOlxcdFxcbiA0ODE6XFx0XFx0ZXJyID0gZ2F0ZV9jbG9ja19yZXNvbHZlKGNsb2NraWQsIFxcdTAwMjZ0a28sIGV4dGFjayk7XFxuIDQ4MjpcXHRcXHRpZiAoZXJyKVxcbiA0ODM6XFx0XFx0XFx0Z290byBlcnJfZnJlZTtcXG4gNDg0OlxcdFxcdHRpbWVyX2Nsb2NraWQgPSBjbG9ja2lkO1xcbiA0ODU6XFx0XFxuIDQ4NjpcXHRcXHRuZWVkX2NhbmNlbCA9IHJldCAhPSBBQ1RfUF9DUkVBVEVEIFxcdTAwMjZcXHUwMDI2XFxuIDQ4NzpcXHRcXHRcXHQgICAgICBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbChiYXNldGltZSwgb2xkX2Jhc2V0aW1lLFxcbiA0ODg6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdGtvLCBvbGRfdGtfb2Zmc2V0LFxcbiA0ODk6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdGltZXJfY2xvY2tpZCwgb2xkX2Nsb2NraWQpO1xcbiA0OTA6XFx0XFxuIDQ5MTpcXHRcXHRpZiAobmVlZF9jYW5jZWwpXFxuIDQ5MjpcXHRcXHRcXHRocnRpbWVyX2NhbmNlbChcXHUwMDI2Z2FjdC1cXHUwMDNlaGl0aW1lcik7XFxuIDQ5MzpcXHRcXG4gNDk0OlxcdFxcdHNwaW5fbG9ja19iaChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiA0OTU6XFx0XFxuIDQ5NjpcXHRcXHRpZiAoIWN5Y2xldGltZSkge1xcbiA0OTc6XFx0XFx0XFx0c3RydWN0IHRjZmdfZ2F0ZV9lbnRyeSAqZW50cnk7XFxuIDQ5ODpcXHRcXHRcXHRrdGltZV90IGN5Y2xlID0gMDtcXG4gNDk5OlxcdFxcbiA1MDA6XFx0XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXFx1MDAyNnAtXFx1MDAzZWVudHJpZXMsIGxpc3QpXFxuIDUwMTpcXHRcXHRcXHRcXHRjeWNsZSA9IGt0aW1lX2FkZF9ucyhjeWNsZSwgZW50cnktXFx1MDAzZWludGVydmFsKTtcXG4gNTAyOlxcdFxcdFxcdGN5Y2xldGltZSA9IGN5Y2xlO1xcbiA1MDM6XFx0XFx0fVxcbiA1MDQ6XFx0XFxuIDUwNTpcXHRcXHRpZiAoY3ljbGV0aW1lIFxcdTAwM2MgMCB8fCBjeWNsZXRpbWUgXFx1MDAzZSBJTlRfTUFYKSB7XFxuIDUwNjpcXHRcXHRcXHROTF9TRVRfRVJSX01TRyhleHRhY2ssIFxcXCInY3ljbGVfdGltZScgaXMgdG9vIGJpZ1xcXCIpO1xcbiA1MDc6XFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gNTA4OlxcdFxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZnYWN0LVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDUwOTpcXHRcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiA1MTA6XFx0XFx0fVxcbiA1MTE6XFx0XFxuIDUxMjpcXHRcXHRwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcXG4gNTEzOlxcdFxcdHAtXFx1MDAzZXRjZmdfY3ljbGV0aW1lX2V4dCA9IGN5Y2xldGltZV9leHQ7XFxuIDUxNDpcXHRcXG4gNTE1OlxcdFxcdGlmIChuZWVkX2NhbmNlbCB8fCByZXQgPT0gQUNUX1BfQ1JFQVRFRClcXG4gNTE2OlxcdFxcdFxcdGdhdGVfc2V0dXBfdGltZXIoZ2FjdCwgdGltZXJfY2xvY2tpZCwgdGtvKTtcXG4gNTE3OlxcdFxcdHAtXFx1MDAzZXRjZmdfcHJpb3JpdHkgPSBwcmlvO1xcbiA1MTg6XFx0XFx0cC1cXHUwMDNldGNmZ19mbGFncyA9IGdmbGFncztcXG4gNTE5OlxcdFxcdHAtXFx1MDAzZXRjZmdfYmFzZXRpbWUgPSBiYXNldGltZTtcXG4gNTIwOlxcdFxcdHAtXFx1MDAzZXRjZmdfY2xvY2tpZCA9IHRpbWVyX2Nsb2NraWQ7XFxuIDUyMTpcXHRcXHRnYXRlX2dldF9zdGFydF90aW1lKGdhY3QsIHAsIFxcdTAwMjZzdGFydCk7XFxuIDUyMjpcXHRcXG4gNTIzOlxcdFxcdG9sZF9wID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYWN0LVxcdTAwM2VwYXJhbSwgcCxcXG4gNTI0OlxcdFxcdFxcdFxcdFxcdCAgICBsb2NrZGVwX2lzX2hlbGQoXFx1MDAyNmdhY3QtXFx1MDAzZXRjZl9sb2NrKSk7XFxuIDUyNTpcXHRcXG4gNTI2OlxcdFxcdGdhY3QtXFx1MDAzZWN1cnJlbnRfY2xvc2VfdGltZSA9IHN0YXJ0O1xcbiA1Mjc6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IEdBVEVfQUNUX0dBVEVfT1BFTiB8IEdBVEVfQUNUX1BFTkRJTkc7XFxuIDUyODpcXHRcXG4gNTI5OlxcdFxcdGdhY3QtXFx1MDAzZW5leHRfZW50cnkgPSBsaXN0X2ZpcnN0X2VudHJ5KFxcdTAwMjZwLVxcdTAwM2VlbnRyaWVzLFxcbiA1MzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xcbiA1MzE6XFx0XFxuIDUzMjpcXHRcXHRnb3RvX2NoID0gdGNmX2FjdGlvbl9zZXRfY3RybGFjdCgqYSwgcGFybS1cXHUwMDNlYWN0aW9uLCBnb3RvX2NoKTtcXG4gNTMzOlxcdFxcbiA1MzQ6XFx0XFx0Z2F0ZV9zdGFydF90aW1lcihnYWN0LCBzdGFydCk7XFxuIDUzNTpcXHRcXG4gNTM2OlxcdFxcdHNwaW5fdW5sb2NrX2JoKFxcdTAwMjZnYWN0LVxcdTAwM2V0Y2ZfbG9jayk7XFxuIDUzNzpcXHRcXG4gNTM4OlxcdFxcdGlmIChnb3RvX2NoKVxcbiA1Mzk6XFx0XFx0XFx0dGNmX2NoYWluX3B1dF9ieV9hY3QoZ290b19jaCk7XFxuIDU0MDpcXHRcXG4gNTQxOlxcdFxcdGlmIChvbGRfcClcXG4gNTQyOlxcdFxcdFxcdGNhbGxfcmN1KFxcdTAwMjZvbGRfcC1cXHUwMDNlcmN1LCB0Y2ZfZ2F0ZV9wYXJhbXNfZnJlZV9yY3UpO1xcbiA1NDM6XFx0XFxuIDU0NDpcXHRcXHRyZXR1cm4gcmV0O1xcbiA1NDU6XFx0XFxuIDU0NjpcXHRlcnJfZnJlZTpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NDMuMTk5OTE5ODA0WiIsIlNlcSI6NTMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcyNzM3NDQzNDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgY3ljbGV0aW1lYCBDaGVjayoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBhIGNoZWNrIGZvciBgY3ljbGV0aW1lIFx1MDAzYyAwIHx8IGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWGAuIE15IGltbWVkaWF0ZSByZWFjdGlvbiBpcywgaG9sZCBvbiwgYGN5Y2xldGltZWAgaXMgYSBgdTY0YCEgQSBgdTY0YCBjYW4gKm5ldmVyKiBiZSBsZXNzIHRoYW4gemVyby4gVGhhdCBwYXJ0IG9mIHRoZSBjaGVjayBpcyBhIG5vLW9wLCBhIHRhdXRvbG9neS4gXG5cblRoZW4gSSBzYXcgdGhlIGRlY2xhcmF0aW9uOiBgdTY0IGN5Y2xldGltZSA9IDA7YCBhdCBsaW5lIDM1My4gQnV0IHdhaXQsIHdoZXJlIGRvZXMgYGN5Y2xldGltZWAgYWN0dWFsbHkgZ2V0IGl0cyB2YWx1ZT8gQWgsIGhlcmUgaXQgaXM6IGBjeWNsZXRpbWUgPSBjeWNsZTtgIEFuZCBgY3ljbGVgIGlzIGEgYGt0aW1lX3RgLCB3aGljaCBpcyByZWFsbHkgYW4gYHM2NGAuIFNvIHdlJ3JlIGFzc2lnbmluZyBhIHNpZ25lZCA2NC1iaXQgaW50ZWdlciB0byBhbiAqdW5zaWduZWQqIDY0LWJpdCBpbnRlZ2VyLiBUaGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy5cblxuSWYgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgYGN5Y2xldGltZWAgd2lsbCBiZWNvbWUgYSAqdmVyeSogbGFyZ2UgcG9zaXRpdmUgbnVtYmVyIGR1ZSB0byB0aGUgd3JhcHBpbmcuIE5vdyB0aGUgYGN5Y2xldGltZSBcdTAwM2UgSU5UX01BWGAgY2hlY2sgbWFrZXMgc2Vuc2UuIElmIHRoZSBzaWduZWQgYGN5Y2xlYCBpcyBuZWdhdGl2ZSwgdGhlbiBgY3ljbGV0aW1lYCB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAsIGFuZCBpdCB3aWxsIGNhdGNoIHRoZSBvdmVyZmxvdy5cblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBhYm91dCBgY3ljbGV0aW1lIFx1MDAzYyAwYCBiZWluZyBtZWFuaW5nbGVzcyBpcyBjb3JyZWN0LCBidXQgaXQncyBub3QgYSBjb21wbGV0ZSBvdmVyc2lnaHQuIFRoZSBjb21iaW5hdGlvbiBvZiB0aGUgYXNzaWdubWVudCBhbmQgdGhlIGBJTlRfTUFYYCBjaGVjayBpcyBlZmZlY3RpdmVseSBhIHdheSB0byBoYW5kbGUgbmVnYXRpdmUgaW5wdXQgdmFsdWVzIG9mIGBjeWNsZWAuIEkgbmVlZCB0byByZW1lbWJlciB0aGlzIGluIHRoZSBmdXR1cmUhXG5cbkJ1dCwgd2hhdCdzIHRoZSBwb2ludCBvZiBjaGVja2luZyBgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYCBpbiB0aGUgZmlyc3QgcGxhY2U/IEkgYmV0IHRoaXMgaXMgYmVjYXVzZSBgY3ljbGV0aW1lYCBpcyB1c2VkIHNvbWV3aGVyZSBpbiBhIHRpbWVyIGNhbGN1bGF0aW9uLiBBIHZlcnkgbGFyZ2UgYGN5Y2xldGltZWAgY291bGQgY2F1c2UgYW4gaW50ZWdlciBvdmVyZmxvdyBvciBwb3RlbnRpYWxseSBsZWFkIHRvIGFuIGluZmluaXRlIGxvb3Agd2l0aGluIHRoZSBgZ2F0ZV90aW1lcl9mbmAgb3IgYW5vdGhlciBwYXJ0IG9mIHRoZSB0aW1lciBjb2RlLiBMZXQgbWUgY2hlY2sgd2hlcmUgYGN5Y2xldGltZWAgaXMgYWN0dWFsbHkgdXNlZC4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjQ0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NTAuNDczNjY3NTQ2WiIsIlNlcSI6NTQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODMxNTU2NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y2ZnX2N5Y2xldGltZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0zNz1zdGF0aWMgdm9pZCBnYXRlX2dldF9zdGFydF90aW1lKHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUyOlxcdGN5Y2xlID0gcGFyYW0tXFx1MDAzZXRjZmdfY3ljbGV0aW1lO1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTUzLVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9NzE9c3RhdGljIGVudW0gaHJ0aW1lcl9yZXN0YXJ0IGdhdGVfdGltZXJfZnVuYyhzdHJ1Y3QgaHJ0aW1lciAqdGltZXIpXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy0xMDYtXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6MTA3OlxcdFxcdGN5Y2xlID0gcC1cXHUwMDNldGNmZ19jeWNsZXRpbWU7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMTA4LVxcdFxcdGJhc2UgPSBuc190b19rdGltZShwLVxcdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jPTM0Nz1zdGF0aWMgaW50IHRjZl9nYXRlX2luaXQoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmxhdHRyICpubGEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy00NDctXFx0XFx0YmFzZXRpbWUgICAgICA9IG9sZF9iYXNldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo0NDg6XFx0XFx0Y3ljbGV0aW1lX2V4dCA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQ7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDQ5LVxcdFxcdHByaW8gICAgICAgICAgPSBjdXJfcC1cXHUwMDNldGNmZ19wcmlvcml0eTtcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQ1OC1cXHRcXHRcXHRpZiAoIWVyciBcXHUwMDI2XFx1MDAyNiAhdGJbVENBX0dBVEVfQ1lDTEVfVElNRV0pXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM6NDU5OlxcdFxcdFxcdFxcdGN5Y2xldGltZSA9IGN1cl9wLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy00NjAtXFx0XFx0fVxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNTExLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjUxMjpcXHRwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZSA9IGN5Y2xldGltZTtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo1MTM6XFx0cC1cXHUwMDNldGNmZ19jeWNsZXRpbWVfZXh0ID0gY3ljbGV0aW1lX2V4dDtcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy01MTQtXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYz02MTM9c3RhdGljIGludCB0Y2ZfZ2F0ZV9kdW1wKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCB0Y19hY3Rpb24gKmEsXFxuLS1cXG5uZXQvc2NoZWQvYWN0X2dhdGUuYy02MzktXFx0aWYgKG5sYV9wdXRfdTY0XzY0Yml0KHNrYiwgVENBX0dBVEVfQ1lDTEVfVElNRSxcXG5uZXQvc2NoZWQvYWN0X2dhdGUuYzo2NDA6XFx0XFx0XFx0ICAgICAgcC1cXHUwMDNldGNmZ19jeWNsZXRpbWUsIFRDQV9HQVRFX1BBRCkpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQxLVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQzLVxcdGlmIChubGFfcHV0X3U2NF82NGJpdChza2IsIFRDQV9HQVRFX0NZQ0xFX1RJTUVfRVhULFxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjY0NDpcXHRcXHRcXHQgICAgICBwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZV9leHQsIFRDQV9HQVRFX1BBRCkpXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNjQ1LVxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo1MC41MjE5ODcyMTFaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDM5MTkwNTMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIFRpbWVyIEluc3RhYmlsaXR5KipcblxuT2theSwgc28gSSdtIHN1c3BlY3RpbmcgdGhlIHByb2JsZW0gaXMgYSB0aW1lci1yZWxhdGVkIGluc3RhYmlsaXR5IHdoZW4gYGN5Y2xldGltZWAgZ2V0cyB0b28gYmlnLiBNeSBpbml0aWFsIGh1bmNoIGlzIHRoYXQgYSBsYXJnZSBgY3ljbGV0aW1lYCB2YWx1ZSBjb3VsZCBiZSBjYXVzaW5nIGFuIG92ZXJmbG93IHdpdGhpbiBga3RpbWVfYWRkX25zYCBvciBhIHNpbWlsYXIgZnVuY3Rpb24sIG9yIHBvc3NpYmx5IGxlYWRpbmcgdG8gYGdhdGVfdGltZXJfZnVuY2AgZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgdGhpcyBmdXJ0aGVyLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBjeWNsZXRpbWVgLCBhbmQgdGhhdCdzIHVzZWQgd2l0aGluIGBnYXRlX3RpbWVyX2Z1bmNgLCByaWdodD8gU28gdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgYGdhdGVfdGltZXJfZnVuY2AgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlIHdpdGggYGN5Y2xldGltZWAuIFRoYXQgZnVuY3Rpb24gaXMgcHJvYmFibHkgdGhlIHJvb3Qgb2YgdGhlIGlzc3VlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Mjk3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTM6NTQuOTEzODk0OTY0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwNjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3MSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA3MTpcXHRzdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgZ2F0ZV90aW1lcl9mdW5jKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4gIDcyOlxcdHtcXG4gIDczOlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZSAqZ2FjdCA9IGNvbnRhaW5lcl9vZih0aW1lciwgc3RydWN0IHRjZl9nYXRlLFxcbiAgNzQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICBoaXRpbWVyKTtcXG4gIDc1OlxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKm5leHQ7XFxuICA3NjpcXHRcXHRzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpwO1xcbiAgNzc6XFx0XFx0a3RpbWVfdCBjbG9zZV90aW1lLCBub3c7XFxuICA3ODpcXHRcXG4gIDc5OlxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiAgODA6XFx0XFxuICA4MTpcXHRcXHRwID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYWN0LVxcdTAwM2VwYXJhbSxcXG4gIDgyOlxcdFxcdFxcdFxcdFxcdCAgICAgIGxvY2tkZXBfaXNfaGVsZChcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spKTtcXG4gIDgzOlxcdFxcdG5leHQgPSBnYWN0LVxcdTAwM2VuZXh0X2VudHJ5O1xcbiAgODQ6XFx0XFxuICA4NTpcXHRcXHQvKiBjeWNsZSBzdGFydCwgY2xlYXIgcGVuZGluZyBiaXQsIGNsZWFyIHRvdGFsIG9jdGV0cyAqL1xcbiAgODY6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9nYXRlX3N0YXR1cyA9IG5leHQtXFx1MDAzZWdhdGVfc3RhdGUgPyBHQVRFX0FDVF9HQVRFX09QRU4gOiAwO1xcbiAgODc6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9lbnRyeV9vY3RldHMgPSAwO1xcbiAgODg6XFx0XFx0Z2FjdC1cXHUwMDNlY3VycmVudF9tYXhfb2N0ZXRzID0gbmV4dC1cXHUwMDNlbWF4b2N0ZXRzO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRnYWN0LVxcdTAwM2VjdXJyZW50X2Nsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoZ2FjdC1cXHUwMDNlY3VycmVudF9jbG9zZV90aW1lLFxcbiAgOTE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0bmV4dC1cXHUwMDNlaW50ZXJ2YWwpO1xcbiAgOTI6XFx0XFxuICA5MzpcXHRcXHRjbG9zZV90aW1lID0gZ2FjdC1cXHUwMDNlY3VycmVudF9jbG9zZV90aW1lO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRpZiAobGlzdF9pc19sYXN0KFxcdTAwMjZuZXh0LVxcdTAwM2VsaXN0LCBcXHUwMDI2cC1cXHUwMDNlZW50cmllcykpXFxuICA5NjpcXHRcXHRcXHRuZXh0ID0gbGlzdF9maXJzdF9lbnRyeShcXHUwMDI2cC1cXHUwMDNlZW50cmllcyxcXG4gIDk3OlxcdFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnksIGxpc3QpO1xcbiAgOTg6XFx0XFx0ZWxzZVxcbiAgOTk6XFx0XFx0XFx0bmV4dCA9IGxpc3RfbmV4dF9lbnRyeShuZXh0LCBsaXN0KTtcXG4gMTAwOlxcdFxcbiAxMDE6XFx0XFx0bm93ID0gZ2F0ZV9nZXRfdGltZShnYWN0KTtcXG4gMTAyOlxcdFxcbiAxMDM6XFx0XFx0aWYgKGt0aW1lX2FmdGVyKG5vdywgY2xvc2VfdGltZSkpIHtcXG4gMTA0OlxcdFxcdFxcdGt0aW1lX3QgY3ljbGUsIGJhc2U7XFxuIDEwNTpcXHRcXHRcXHR1NjQgbjtcXG4gMTA2OlxcdFxcbiAxMDc6XFx0XFx0XFx0Y3ljbGUgPSBwLVxcdTAwM2V0Y2ZnX2N5Y2xldGltZTtcXG4gMTA4OlxcdFxcdFxcdGJhc2UgPSBuc190b19rdGltZShwLVxcdTAwM2V0Y2ZnX2Jhc2V0aW1lKTtcXG4gMTA5OlxcdFxcdFxcdG4gPSBkaXY2NF91NjQoa3RpbWVfc3ViX25zKG5vdywgYmFzZSksIGN5Y2xlKTtcXG4gMTEwOlxcdFxcdFxcdGNsb3NlX3RpbWUgPSBrdGltZV9hZGRfbnMoYmFzZSwgKG4gKyAxKSAqIGN5Y2xlKTtcXG4gMTExOlxcdFxcdH1cXG4gMTEyOlxcdFxcbiAxMTM6XFx0XFx0Z2FjdC1cXHUwMDNlbmV4dF9lbnRyeSA9IG5leHQ7XFxuIDExNDpcXHRcXG4gMTE1OlxcdFxcdGhydGltZXJfc2V0X2V4cGlyZXMoXFx1MDAyNmdhY3QtXFx1MDAzZWhpdGltZXIsIGNsb3NlX3RpbWUpO1xcbiAxMTY6XFx0XFxuIDExNzpcXHRcXHRzcGluX3VubG9jayhcXHUwMDI2Z2FjdC1cXHUwMDNldGNmX2xvY2spO1xcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHRyZXR1cm4gSFJUSU1FUl9SRVNUQVJUO1xcbiAxMjA6XFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1Mzo1NC45MTQwMDI0ODRaIiwiU2VxIjo1NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjY1MzgzODc1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgRGl2aXNpb24gYnkgWmVybyBWdWxuZXJhYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZ2F0ZV90aW1lcl9mdW5jYCBhbmQgaXQncyBoaXR0aW5nIG1lOiBpZiB0aGUgYGN5Y2xlYCB2YWx1ZSBpcyB6ZXJvLCB3ZSd2ZSBnb3QgYSBwb3RlbnRpYWwgZGl2aWRlLWJ5LXplcm8gaXNzdWUgd2l0aCBgZGl2NjRfdTY0YC4gVGhhdCdzIGEgY2xhc3NpYyBidWcsIGVhc3kgdG8gb3Zlcmxvb2suIEJ1dCBob2xkIG9uLCB0aGUgY29kZSBzZWVtcyB0byBoYXZlIHNvbWUgY2hlY2tzIGluIGB0Y2ZfZ2F0ZV9pbml0YDpcblxuYGBgY1xuXHRpZiAoIWN5Y2xldGltZSkge1xuXHRcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xuXHRcdGt0aW1lX3QgY3ljbGUgPSAwO1xuXG5cdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgXHUwMDI2cC1cdTAwM2VlbnRyaWVzLCBsaXN0KVxuXHRcdFx0Y3ljbGUgPSBrdGltZV9hZGRfbnMoY3ljbGUsIGVudHJ5LVx1MDAzZWludGVydmFsKTtcblx0XHRjeWNsZXRpbWUgPSBjeWNsZTtcblx0fVxuYGBgXG5cbkl0IGNoZWNrcyBgIWN5Y2xldGltZWAsIHdoaWNoIG1ha2VzIGl0ICpzZWVtKiBsaWtlIGl0J3MgdGFraW5nIGNhcmUgb2YgYSB6ZXJvIGBjeWNsZXRpbWVgLiBJdCAqY2FsY3VsYXRlcyogYGN5Y2xldGltZWAgZnJvbSB0aGUgc3VtIG9mIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIE9rYXksIHNvIHdoYXQgaWYgdGhhdCBzdW0gKmlzKiB6ZXJvPyBUaGVuIGBjeWNsZXRpbWVgIGVuZHMgdXAgYmVpbmcgemVybyBhcyB3ZWxsLiBUaGVuLCBpbiB0aGUgcGF0Y2gsIHRoZXJlIGlzIHRoaXMgY2hlY2s6IGBjeWNsZXRpbWUgXHUwMDNjIDAgfHwgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYC5cblxuSG1tLCBub3cgbGV0IG1lIHRoaW5rLi4uIGBjeWNsZXRpbWVgIGlzIGEgYHU2NGAsIHNvIGBjeWNsZXRpbWUgXHUwMDNjIDBgIGlzICphbHdheXMqIGdvaW5nIHRvIGJlIGZhbHNlLiBUaGF0IHBhcnQgb2YgdGhlIGNoZWNrIGlzIHVzZWxlc3MuIEJ1dCB3aGF0IGFib3V0IGBjeWNsZXRpbWUgXHUwMDNlIElOVF9NQVhgPyBTaW5jZSBgY3ljbGV0aW1lYCBpcyBhIGB1NjRgLCBpdCdzIG5vdCBnb2luZyB0byB3cmFwIGFyb3VuZCBsaWtlIGEgc2lnbmVkIGludGVnZXIgbWlnaHQuIFNvLCBpZiBgY3ljbGV0aW1lYCBpcyB6ZXJvLCBpdCdzICpub3QqIGdyZWF0ZXIgdGhhbiBgSU5UX01BWGAuXG5cbkFuZCwgZm9yIHRoZSByZWNvcmQsIGBJTlRfTUFYYCBpcyAyMTQ3NDgzNjQ3LlxuXG5JZiBgY3ljbGV0aW1lYCAqaXMqIGxhcmdlciB0aGFuIGBJTlRfTUFYYCwgaXQgZXJyb3JzIG91dCwgd2hpY2ggaXMgZ29vZC4gQnV0IHdoeSBgSU5UX01BWGA/IEFoISBJIGJldCBpdCdzIGJlY2F1c2UgYGVudHJ5LVx1MDAzZWludGVydmFsYCBpcyBhIGB1MzJgIHdpdGhpbiBgc3RydWN0IHRjZmdfZ2F0ZV9lbnRyeWAuIEl0IGxvb2tzIGxpa2UgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGVudHJ5LCBub3cuIExldCdzIGNoZWNrIGBzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5YC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTM1MiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjAxLjU2Nzg0NDAwMVoiLCJTZXEiOjU4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMyMDk3MTQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IHRjZmdfZ2F0ZV9lbnRyeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmg9MTA9c3RydWN0IGFjdGlvbl9nYXRlX2VudHJ5IHtcXG4tLVxcbmluY2x1ZGUvbmV0L3RjX2FjdC90Y19nYXRlLmgtMTYtXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDoxNzpzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5IHtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTE4LVxcdGludFxcdFxcdFxcdGluZGV4O1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaD00MT1zdHJ1Y3QgdGNmX2dhdGUge1xcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00Ny1cXHRzMzJcXHRcXHRcXHRjdXJyZW50X21heF9vY3RldHM7XFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaDo0ODpcXHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5XFx0Km5leHRfZW50cnk7XFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC00OS1cXHRzdHJ1Y3QgaHJ0aW1lclxcdFxcdGhpdGltZXI7XFxuLS1cXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oPTExOD1zdGF0aWMgaW5saW5lIHN0cnVjdCBhY3Rpb25fZ2F0ZV9lbnRyeVxcbi0tXFxuaW5jbHVkZS9uZXQvdGNfYWN0L3RjX2dhdGUuaC0xMjItXFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqcDtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oOjEyMzpcXHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTtcXG5pbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oLTEyNC1cXHR1MzIgbnVtX2VudHJpZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjAxLjYyMTA2NjExNVoiLCJTZXEiOjU5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Njk1MjAzMzUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIGB0Y19nYXRlLmhgKipcblxuQWxyaWdodCwgbGV0J3MgY3JhY2sgb3BlbiBgdGNfZ2F0ZS5oYC4gSSdtIGltbWVkaWF0ZWx5IGludGVyZXN0ZWQgaW4gc2VlaW5nIGhvdyB0aGUgVHJhZmZpYyBDb250cm9sIChUQykgZ2F0aW5nIGZ1bmN0aW9uYWxpdHkgaXMgZGVmaW5lZCBoZXJlLiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGNvcmUgZGF0YSBzdHJ1Y3R1cmVzIHRoYXQgcmVwcmVzZW50IGdhdGUgY29uZmlndXJhdGlvbnM6IHRoZSBwYXJhbWV0ZXJzIGZvciBkZWZpbmluZyBnYXRlIHN0YXRlcyAob3Blbi9jbG9zZWQpIGJhc2VkIG9uIHZhcmlvdXMgY29uZGl0aW9ucywgcGVyaGFwcyBRb1MgbWFya2VycywgZmxvdyBJRHMsIG9yIHNwZWNpZmljIHBhY2tldCBoZWFkZXIgZmllbGRzLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBpbnRlcmZhY2UgbGV2ZXJhZ2VzIGV4aXN0aW5nIFRDIG1lY2hhbmlzbXMgb3IgaW50cm9kdWNlcyBlbnRpcmVseSBuZXcgZWxlbWVudHMgZm9yIHRoZSBnYXRlLXNwZWNpZmljIGxvZ2ljLlxuXG5JJ2xsIGJlIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhleSd2ZSBoYW5kbGVkIHRoZSBhdG9taWNpdHkgb2YgZ2F0ZSBzdGF0ZSB0cmFuc2l0aW9ucyBhbmQgY29uY3VycmVuY3kgaXNzdWVzLCBhc3N1bWluZyB0aGF0IHRoaXMgaGVhZGVyIGxpa2VseSBpbnRlcmFjdHMgd2l0aCBrZXJuZWwgc3BhY2UgYW5kIHBvdGVudGlhbGx5IGhhcmR3YXJlLiBBcmUgdGhlcmUgbXV0ZXhlcyBvciBvdGhlciBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcz8gQXJlIGF0b21pYyBvcGVyYXRpb25zIGJlaW5nIHVzZWQgZWZmZWN0aXZlbHk/XG5cblNwZWNpZmljYWxseSwgSSdtIGhvcGluZyB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBnYXRlIGNvbmZpZ3VyYXRpb24gYW5kIHRoZSB1bmRlcmx5aW5nIHBhY2tldCBjbGFzc2lmaWNhdGlvbiBhbmQgcXVldWluZyBkaXNjaXBsaW5lcy4gSG93IHNlYW1sZXNzbHkgZG9lcyB0aGUgZ2F0aW5nIGludGVncmF0ZSB3aXRoIG90aGVyIFRDIGNvbXBvbmVudHMgbGlrZSBjbGFzc2lmaWVycyAoZS5nLiwgYGNsc191MzJgLCBgY2xzX2JwZmApLCBzY2hlZHVsZXJzLCBhbmQgc2hhcGVycz8gRG9lcyB0aGUgZGVzaWduIGludHJvZHVjZSBhbnkgaW5lZmZpY2llbmNpZXMgb3IgYm90dGxlbmVja3MgaW4gdGhlIG92ZXJhbGwgcGFja2V0IHByb2Nlc3NpbmcgcGlwZWxpbmU/IEknbGwgYWxzbyBjaGVjayBmb3IgYW55IGhvb2tzIG9yIGNhbGwtYmFja3MgaW1wbGVtZW50ZWQuXG5cbkJleW9uZCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIHRoZW1zZWx2ZXMsIEknbGwgYmUgc2Nhbm5pbmcgZm9yIGFueSBtYWNyb3Mgb3IgaW5saW5lIGZ1bmN0aW9ucyB1c2VkIHRvIG1hbmlwdWxhdGUgdGhlc2UgZ2F0ZXMsIGFzIHRoZXkgb2Z0ZW4gZ2l2ZSB2YWx1YWJsZSBpbnNpZ2h0IGludG8gdGhlIGludGVuZGVkIHVzYWdlIHBhdHRlcm5zIGFuZCBwZXJmb3JtYW5jZSBjb25zaWRlcmF0aW9ucy4gSSdsbCBhbHNvIGJlIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgZm9yIG5ldHdvcmsgcGVyZm9ybWFuY2Ug4oCTIHRoZSB0cmFkZS1vZmZzIGJldHdlZW4gZ2F0aW5nIGdyYW51bGFyaXR5LCBjb250cm9sIG92ZXJoZWFkLCBhbmQgb3ZlcmFsbCBwYWNrZXQgbGF0ZW5jeS4gVWx0aW1hdGVseSwgSSB3YW50IHRvIGFzc2VzcyB3aGV0aGVyIHRoaXMgaW1wbGVtZW50YXRpb24gaXMgZWxlZ2FudCwgZWZmaWNpZW50LCBhbmQgd2VsbC1pbnRlZ3JhdGVkIGludG8gdGhlIGJyb2FkZXIgVEMgZnJhbWV3b3JrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0MCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjA3LjMxNjI3MTkwNVoiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTQ5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL25ldC90Y19hY3QvdGNfZ2F0ZS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE3LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDE3OlxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkge1xcbiAgMTg6XFx0XFx0aW50XFx0XFx0XFx0aW5kZXg7XFxuICAxOTpcXHRcXHR1OFxcdFxcdFxcdGdhdGVfc3RhdGU7XFxuICAyMDpcXHRcXHR1MzJcXHRcXHRcXHRpbnRlcnZhbDtcXG4gIDIxOlxcdFxcdHMzMlxcdFxcdFxcdGlwdjtcXG4gIDIyOlxcdFxcdHMzMlxcdFxcdFxcdG1heG9jdGV0cztcXG4gIDIzOlxcdFxcdHN0cnVjdCBsaXN0X2hlYWRcXHRsaXN0O1xcbiAgMjQ6XFx0fTtcXG4gIDI1OlxcdFxcbiAgMjY6XFx0c3RydWN0IHRjZl9nYXRlX3BhcmFtcyB7XFxuICAyNzpcXHRcXHRzMzJcXHRcXHRcXHR0Y2ZnX3ByaW9yaXR5O1xcbiAgMjg6XFx0XFx0dTY0XFx0XFx0XFx0dGNmZ19iYXNldGltZTtcXG4gIDI5OlxcdFxcdHU2NFxcdFxcdFxcdHRjZmdfY3ljbGV0aW1lO1xcbiAgMzA6XFx0XFx0dTY0XFx0XFx0XFx0dGNmZ19jeWNsZXRpbWVfZXh0O1xcbiAgMzE6XFx0XFx0dTMyXFx0XFx0XFx0dGNmZ19mbGFncztcXG4gIDMyOlxcdFxcdHMzMlxcdFxcdFxcdHRjZmdfY2xvY2tpZDtcXG4gIDMzOlxcdFxcdHNpemVfdFxcdFxcdFxcdG51bV9lbnRyaWVzO1xcbiAgMzQ6XFx0XFx0c3RydWN0IGxpc3RfaGVhZFxcdGVudHJpZXM7XFxuICAzNTpcXHRcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuICAzNjpcXHR9O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDowNy4zMTYzMzg2MjVaIiwiU2VxIjo2MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI2NzU4NTg2NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIERlbmlhbCBvZiBTZXJ2aWNlIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEdhdGUgUWRpc2MgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBjeWNsZXRpbWVgIHZhcmlhYmxlIGluIHRoZSBHYXRlIFFkaXNjLCBhbmQgSSdtIHNlZWluZyBhIHBvdGVudGlhbCBmbGF3LiBJbml0aWFsbHksIGBjeWNsZXRpbWVgIGlzIGRlZmluZWQgYXMgYSBgdTY0YC4gVGhlbiwgaW4gYHRjZl9nYXRlX2luaXRgLCBpdCdzIHN1YmplY3QgdG8gYSBib3VuZHMgY2hlY2suIFRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGF0IHRoZSBjaGVjayBgY3ljbGV0aW1lIFx1MDAzYyAwYCBpcyBhbHdheXMgZmFsc2UgYmVjYXVzZSBpdCBpcyBhbiB1bnNpZ25lZCBpbnRlZ2VyLiBIb3dldmVyLCB0aGUgc3Vic2VxdWVudCBjaGVjayBgY3ljbGV0aW1lIFx1MDAzZSBJTlRfTUFYYCBpcyBkZWZpbml0ZWx5IHNpZ25pZmljYW50LlxuXG5Jbml0aWFsbHkgSSB3YXMgd29uZGVyaW5nIGlmIHRoZXJlIHdhcyBhIGNhc3QgdG8gYSBzaWduZWQgaW50ZWdlci4gSG93ZXZlciwgdGhlcmUgaXNuJ3QuXG5cbkxvb2tpbmcgZGVlcGVyLCBgY3ljbGV0aW1lYCBjYW4gYmUgY2FsY3VsYXRlZCBmcm9tIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAuIEhvd2V2ZXIsIGBlbnRyeS1cdTAwM2VpbnRlcnZhbGAgaXMgYSBgdTMyYCwgc28gdGhlIGFjY3VtdWxhdGlvbiB0byBgY3ljbGVgIHNob3VsZCBhbHdheXMgYmUgcG9zaXRpdmUuIEhvd2V2ZXIsIEkgc2VlIGEgc2Vjb25kIHBhdGggd2hlcmUgdGhlIHVzZXIgY2FuIHByb3ZpZGUgYGN5Y2xldGltZWAgZGlyZWN0bHkgdmlhIGBubGFfZ2V0X3U2NGAuIFNvIG5vdyBJIHJlYWxpemUgdGhlcmUgYXJlIHR3byBzZXBhcmF0ZSBjb2RlIHBhdGhzLlxuXG5NeSBwcmltYXJ5IGNvbmNlcm4gaXMgdGhlIGBnYXRlX3RpbWVyX2Z1bmNgIGZ1bmN0aW9uLiBJZiB0aGUgcHJvdmlkZWQgYGN5Y2xldGltZWAgaXMgYSB2ZXJ5IGxhcmdlIHZhbHVlLCB0aGUgbXVsdGlwbGljYXRpb24gYChuICsgMSkgKiBjeWNsZWAgd2l0aGluIHRoYXQgZnVuY3Rpb24gY291bGQgb3ZlcmZsb3cgYSBgczY0YC4gQW4gb3ZlcmZsb3cgd291bGQgcmVzdWx0IGluIGEgbmVnYXRpdmUgYGNsb3NlX3RpbWVgLiBUaGlzIG5lZ2F0aXZlIGBjbG9zZV90aW1lYCB3b3VsZCBiZSBzZXQgYXMgdGhlIGV4cGlyYXRpb24gdGltZSBmb3IgdGhlIGhpZ2gtcmVzb2x1dGlvbiB0aW1lci4gIEEgbmVnYXRpdmUgdGltZSBjb3JyZXNwb25kcyB0byBhIHRpbWUgaW4gdGhlIHBhc3QuIFRoaXMgaW4gdHVybiB3aWxsIGNhdXNlIGBnYXRlX3RpbWVyX2Z1bmNgIHRvIGJlIGNhbGxlZCByZXBlYXRlZGx5IGFuZCBpbW1lZGlhdGVseS4gSXQncyBhbiBpbmZpbml0ZSBsb29wIHRyaWdnZXJlZCBieSBhIGxhcmdlIGBjeWNsZXRpbWVgIHZhbHVlLCBhbmQgaXQgY29tcGxldGVseSBoYW5ncyB0aGUgc3lzdGVtLiBUaGlzIGlzIGEgY2xhc3NpYyBkZW5pYWwtb2Ytc2VydmljZSB2dWxuZXJhYmlsaXR5IGNhdXNlZCBieSBhIGxvZ2ljIGJ1ZzogYW4gaW5maW5pdGUgbG9vcC5cblxuVGhlIGluaXRpYWwgcGF0Y2ggYWRkcmVzc2VzIHRoZSBib3VuZHMgY2hlY2ssIGJ1dCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGltcGxpY2F0aW9ucyBpZiB0aGUgY29kZSBnb2VzIHRvIGBlcnJfZnJlZWAuIFRoZXJlJ3MgYSBga2ZyZWUocClgIGNhbGwgdGhlcmUsIGJ1dCBpdCBhbHNvIGhhcyBgcC1cdTAwM2VlbnRyaWVzYCwgd2hpY2ggSSBuZWVkIHRvIGNoZWNrLiBBcmUgdGhlIGVsZW1lbnRzIGluIHRoZSBgcC1cdTAwM2VlbnRyaWVzYCBsaXN0cyBmcmVlZD8gSSBuZWVkIHRvIGFuYWx5emUgYHBhcnNlX2dhdGVfbGlzdGAgdG8gc2VlIGhvdyB0aG9zZSBlbnRyaWVzIGFyZSBtYW5hZ2VkIGFuZCBpZiB0aGVyZSdzIGEgcG90ZW50aWFsIG1lbW9yeSBsZWFrIG9yIHVzZS1hZnRlci1mcmVlIHNpdHVhdGlvbiBpbiBhZGRpdGlvbiB0byB0aGUgRG9TLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTMzNSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk2NywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjE5Ljk5MjIwMDYxOFoiLCJTZXEiOjYyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDIxMzgxMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBhcnNlX2dhdGVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuYz0yMzM9c3RhdGljIGludCB0Y2ZfZ2F0ZV9jb3B5X2VudHJpZXMoc3RydWN0IHRjZl9nYXRlX3BhcmFtcyAqZHN0LFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYxLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjI2MjpzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtMjYzLVxcdFxcdFxcdCAgIHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnNjaGVkLFxcbi0tXFxubmV0L3NjaGVkL2FjdF9nYXRlLmM9MzQ3PXN0YXRpYyBpbnQgdGNmX2dhdGVfaW5pdChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBubGF0dHIgKm5sYSxcXG4tLVxcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jLTQyNi1cXHRpZiAoIXVzZV9vbGRfZW50cmllcykge1xcbm5ldC9zY2hlZC9hY3RfZ2F0ZS5jOjQyNzpcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2xpc3QodGJbVENBX0dBVEVfRU5UUllfTElTVF0sIHAsIGV4dGFjayk7XFxubmV0L3NjaGVkL2FjdF9nYXRlLmMtNDI4LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDoyMC40MTM1ODkwMDVaIiwiU2VxIjo2MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwMDk5ODE3NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiBteSBkb21haW4gZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgKipcblxuQWxyaWdodCwgdGltZSB0byBjcmFjayBpbnRvIGBwYXJzZV9nYXRlX2xpc3RgLiBUaGlzIHByb2JhYmx5IG1lYW5zIHNvbWV0aGluZyBjcnVjaWFsIGlzIGhhcHBlbmluZyB3aXRoIGhvdyB3ZSdyZSBidWlsZGluZyB0aGUgY2lyY3VpdCByZXByZXNlbnRhdGlvbi4gQmFzZWQgb24gdGhlIG5hbWluZywgaXQncyBwcmV0dHkgY2xlYXIgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIGhhbmRsaW5nIHRoZSBwYXJzaW5nIG9mIGEgbGlzdCBvZiBcImdhdGVzXCIg4oCTIGFuZCB0aGF0J3MgdXN1YWxseSB3aGVyZSB0aGUgY29tcGxleGl0aWVzIHJlc2lkZSBpbiB0aGlzIGtpbmQgb2YgcHJvZ3JhbS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0OiB3aGF0J3MgdGhlIGlucHV0IGZvcm1hdD8gSXMgaXQgYSBzaW1wbGUgbGlzdCBvZiBzdHJpbmcgaWRlbnRpZmllcnM/IElzIGl0IGEgbW9yZSBjb21wbGV4IGRhdGEgc3RydWN0dXJlPyBBcmUgd2UgaGFuZGxpbmcgZGlmZmVyZW50IGdhdGUgdHlwZXMsIGFuZCBpZiBzbywgaG93IGFyZSB0aGV5IGRpc3Rpbmd1aXNoZWQ/IEFueSBlcnJvciBoYW5kbGluZyBJIG5lZWQgdG8gd2F0Y2ggb3V0IGZvciBhcyBJIHJldmlldz8gS25vd2luZyB0aGUgc291cmNlIGZvcm1hdCB3aWxsIGJlIGltcG9ydGFudC4gSXQgd2lsbCBkcml2ZSBob3cgdGhpcyBtZXRob2QgaXMgZGVzaWduZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTAwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTQ6MjMuODE0NTg5NTdaIiwiU2VxIjo2NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9zY2hlZC9hY3RfZ2F0ZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI2MixcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI2MjpcXHRzdGF0aWMgaW50IHBhcnNlX2dhdGVfbGlzdChzdHJ1Y3QgbmxhdHRyICpsaXN0X2F0dHIsXFxuIDI2MzpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgdGNmX2dhdGVfcGFyYW1zICpzY2hlZCxcXG4gMjY0OlxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gMjY1OlxcdHtcXG4gMjY2OlxcdFxcdHN0cnVjdCB0Y2ZnX2dhdGVfZW50cnkgKmVudHJ5O1xcbiAyNjc6XFx0XFx0c3RydWN0IG5sYXR0ciAqbjtcXG4gMjY4OlxcdFxcdGludCBlcnIsIHJlbTtcXG4gMjY5OlxcdFxcdGludCBpID0gMDtcXG4gMjcwOlxcdFxcbiAyNzE6XFx0XFx0aWYgKCFsaXN0X2F0dHIpXFxuIDI3MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjczOlxcdFxcbiAyNzQ6XFx0XFx0bmxhX2Zvcl9lYWNoX25lc3RlZChuLCBsaXN0X2F0dHIsIHJlbSkge1xcbiAyNzU6XFx0XFx0XFx0aWYgKG5sYV90eXBlKG4pICE9IFRDQV9HQVRFX09ORV9FTlRSWSkge1xcbiAyNzY6XFx0XFx0XFx0XFx0TkxfU0VUX0VSUl9NU0coZXh0YWNrLCBcXFwiQXR0cmlidXRlIGlzbid0IHR5cGUgJ2VudHJ5J1xcXCIpO1xcbiAyNzc6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDI3ODpcXHRcXHRcXHR9XFxuIDI3OTpcXHRcXG4gMjgwOlxcdFxcdFxcdGVudHJ5ID0ga3phbGxvY19vYmooKmVudHJ5LCBHRlBfQVRPTUlDKTtcXG4gMjgxOlxcdFxcdFxcdGlmICghZW50cnkpIHtcXG4gMjgyOlxcdFxcdFxcdFxcdE5MX1NFVF9FUlJfTVNHKGV4dGFjaywgXFxcIk5vdCBlbm91Z2ggbWVtb3J5IGZvciBlbnRyeVxcXCIpO1xcbiAyODM6XFx0XFx0XFx0XFx0ZXJyID0gLUVOT01FTTtcXG4gMjg0OlxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saXN0O1xcbiAyODU6XFx0XFx0XFx0fVxcbiAyODY6XFx0XFxuIDI4NzpcXHRcXHRcXHRlcnIgPSBwYXJzZV9nYXRlX2VudHJ5KG4sIGVudHJ5LCBpLCBleHRhY2spO1xcbiAyODg6XFx0XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gMjg5OlxcdFxcdFxcdFxcdGtmcmVlKGVudHJ5KTtcXG4gMjkwOlxcdFxcdFxcdFxcdGdvdG8gcmVsZWFzZV9saXN0O1xcbiAyOTE6XFx0XFx0XFx0fVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZlbnRyeS1cXHUwMDNlbGlzdCwgXFx1MDAyNnNjaGVkLVxcdTAwM2VlbnRyaWVzKTtcXG4gMjk0OlxcdFxcdFxcdGkrKztcXG4gMjk1OlxcdFxcdH1cXG4gMjk2OlxcdFxcbiAyOTc6XFx0XFx0c2NoZWQtXFx1MDAzZW51bV9lbnRyaWVzID0gaTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0XFx0cmV0dXJuIGk7XFxuIDMwMDpcXHRcXG4gMzAxOlxcdHJlbGVhc2VfbGlzdDpcXG4gMzAyOlxcdFxcdHJlbGVhc2VfZW50cnlfbGlzdChcXHUwMDI2c2NoZWQtXFx1MDAzZWVudHJpZXMpO1xcbiAzMDM6XFx0XFxuIDMwNDpcXHRcXHRyZXR1cm4gZXJyO1xcbiAzMDU6XFx0fVxcbiAzMDY6XFx0XFxuIDMwNzpcXHRzdGF0aWMgYm9vbCBnYXRlX3RpbWVyX25lZWRzX2NhbmNlbCh1NjQgYmFzZXRpbWUsIHU2NCBvbGRfYmFzZXRpbWUsXFxuIDMwODpcXHRcXHRcXHRcXHRcXHQgICAgZW51bSB0a19vZmZzZXRzIHRrbyxcXG4gMzA5OlxcdFxcdFxcdFxcdFxcdCAgICBlbnVtIHRrX29mZnNldHMgb2xkX3RrbyxcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdCAgICBzMzIgY2xvY2tpZCwgczMyIG9sZF9jbG9ja2lkKVxcbiAzMTE6XFx0e1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yM1QwNDo1NDoyMy44MTQ2OTcwOVoiLCJTZXEiOjY1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY4NDQ0ODY3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNZW1vcnkgTGVhayBEZXRlY3Rpb24gaW4gVENGIEdhdGUgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGB0Y2ZfZ2F0ZV9pbml0YCBmdW5jdGlvbiwgYW5kIHNvbWV0aGluZydzIGJ1Z2dpbmcgbWUuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGhvdyB0aGUgYHAtXHUwMDNlZW50cmllc2Agc3RydWN0dXJlLCB3aGljaCBJIHVuZGVyc3RhbmQgaXMgcG9wdWxhdGVkIGJ5IGBwYXJzZV9nYXRlX2xpc3RgLCBpbnRlcmFjdHMgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcuIEkgc2VlIHRoYXQgaWYgYHBhcnNlX2dhdGVfbGlzdGAgc3VjY2VlZHMsIGl0IHBvcHVsYXRlcyBgcC1cdTAwM2VlbnRyaWVzYCB3aXRoIGRhdGEuIEdyZWF0LCB0aGF0J3MgZXhwZWN0ZWQuXG5cbk5vdywgaWYgYGN5Y2xldGltZWAgaXMgaW52YWxpZCwgdGhlIGNvZGUganVtcHMgdG8gYGVycl9mcmVlYCwgYW5kIHRoYXQncyB3aGVyZSBteSBjb25jZXJuIGxpZXMuIExvb2tpbmcgYXQgdGhlIGBlcnJfZnJlZWAgbGFiZWwsIEkgc2VlIGBrZnJlZShwKWAsIHdoaWNoLCBvZiBjb3Vyc2UsIGZyZWVzIHRoZSBgcGAgc3RydWN0dXJlIGl0c2VsZi4gQnV0LCBjcnVjaWFsbHksIGBrZnJlZShwKWAgKmRvZXNuJ3QqIGF1dG9tYXRpY2FsbHkgZnJlZSB0aGUgaW5kaXZpZHVhbCBlbnRyaWVzIHdpdGhpbiBgcC1cdTAwM2VlbnRyaWVzYCEgTXkgc3BpZGV5IHNlbnNlIGlzIHRpbmdsaW5nLi4uIGlzIHRoaXMgYSBwb3RlbnRpYWwgbWVtb3J5IGxlYWs/IEkgbWVhbiwgdGhlc2UgZW50cmllcywgaWYgYWxsb2NhdGVkLCBhcmUganVzdCBzaXR0aW5nIHRoZXJlLCBvcnBoYW5lZCBhZnRlciBgcGAgaXMgZnJlZWQuIEkgbmVlZCB0byBjb25maXJtIGlmIHRoaXMgaXMgdHJ1ZSBhbmQgdGhhdCB0aGVyZSBpcyBhIGxlYWssIGFuZCBpZiBzbywgaG93IG11Y2ggbWVtb3J5IGlzIGxlYWtlZD8gSSBuZWVkIHRvIGFuYWx5emUgYGVycl9mcmVlYCBtb3JlIGNsb3NlbHkgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBmdW5jdGlvbiBhbmQgbWFrZSBzdXJlIHRoYXQgdGhpcyBpc24ndCBhIGZhbHNlIGFsYXJtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAyNCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU0OjU2LjQ5OTE0OTY5NFoiLCJTZXEiOjY2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzMwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvc2NoZWQvYWN0X2dhdGUuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDYsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDY6XFx0ZXJyX2ZyZWU6XFxuIDU0NzpcXHRcXHRyZWxlYXNlX2VudHJ5X2xpc3QoXFx1MDAyNnAtXFx1MDAzZWVudHJpZXMpO1xcbiA1NDg6XFx0XFx0a2ZyZWUocCk7XFxuIDU0OTpcXHRjaGFpbl9wdXQ6XFxuIDU1MDpcXHRcXHRpZiAoZ290b19jaClcXG4gNTUxOlxcdFxcdFxcdHRjZl9jaGFpbl9wdXRfYnlfYWN0KGdvdG9fY2gpO1xcbiA1NTI6XFx0cmVsZWFzZV9pZHI6XFxuIDU1MzpcXHRcXHQvKiBhY3Rpb24gaXMgbm90IGluc2VydGVkIGluIGFueSBsaXN0OiBpdCdzIHNhZmUgdG8gaW5pdCBoaXRpbWVyXFxuIDU1NDpcXHRcXHQgKiB3aXRob3V0IHRha2luZyB0Y2ZfbG9jay5cXG4gNTU1OlxcdFxcdCAqL1xcbiA1NTY6XFx0XFx0aWYgKHJldCA9PSBBQ1RfUF9DUkVBVEVEKVxcbiA1NTc6XFx0XFx0XFx0Z2F0ZV9zZXR1cF90aW1lcihnYWN0LCB0aW1lcl9jbG9ja2lkLCB0a28pO1xcbiA1NTg6XFx0XFxuIDU1OTpcXHRcXHR0Y2ZfaWRyX3JlbGVhc2UoKmEsIGJpbmQpO1xcbiA1NjA6XFx0XFx0cmV0dXJuIGVycjtcXG4gNTYxOlxcdH1cXG4gNTYyOlxcdFxcbiA1NjM6XFx0c3RhdGljIHZvaWQgdGNmX2dhdGVfcGFyYW1zX2ZyZWVfcmN1KHN0cnVjdCByY3VfaGVhZCAqaGVhZClcXG4gNTY0OlxcdHtcXG4gNTY1OlxcdFxcdHN0cnVjdCB0Y2ZfZ2F0ZV9wYXJhbXMgKnAgPSBjb250YWluZXJfb2YoaGVhZCwgc3RydWN0IHRjZl9nYXRlX3BhcmFtcywgcmN1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjNUMDQ6NTQ6NTYuNDk5MjQ5MTA0WiIsIlNlcSI6NjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1OTQ2OTQ1MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCdWcqKlxuXG5Pa2F5LCBzbyBgZXJyX2ZyZWVgIHByb3Blcmx5IGNsZWFucyB1cCB0aGUgbWVtb3J5IHdpdGggYHJlbGVhc2VfZW50cnlfbGlzdGAgYW5kIHRoZW4gYGtmcmVlYC4gTm8gbWVtb3J5IGxlYWssIHRoYXQncyBnb29kLiBUaGUgcHJvYmxlbSBzZWVtcyB0byBiZSB0aGUgbGFjayBvZiBhIGJvdW5kcyBjaGVjayBvbiBgY3ljbGV0aW1lYCwgd2hpY2ggbGV0cyBgZ2F0ZV90aW1lcl9mdW5jYCBnZXQgaW50byBhbiBpbmZpbml0ZSBsb29wIGFuZCB0cmlnZ2VyIGEgZGVuaWFsIG9mIHNlcnZpY2UuIEl0J3MgYSBsb2dpYyBidWcsIHBsYWluIGFuZCBzaW1wbGUsIGFuZCBzaG91bGQgYmUgZWFzaWx5IGZvdW5kIHRocm91Z2ggZnV6emluZyBvciBhIGRlY2VudCBjb2RlIHJldmlldy4gVGhlcmUncyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbnZvbHZlZCBoZXJlOyBLTVNBTiBpc24ndCByZWxldmFudC5cblxuTGV0J3MgcXVpY2tseSB2ZXJpZnkgdGhhdCBgY3ljbGV0aW1lYCAqaXMqIGluaXRpYWxpemVkLiBMb29raW5nIGF0IHRoZSBjb2RlOlxuXG5gYGBjXG5cdHU2NCBjeWNsZXRpbWUgPSAwLCBiYXNldGltZSA9IDAsIGN5Y2xldGltZV9leHQgPSAwO1xuYGBgXG5cbll1cCwgaW5pdGlhbGl6ZWQgdG8gemVyby4gQW5kIHRoZW46XG5cbmBgYGNcblx0aWYgKHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKVxuXHRcdGN5Y2xldGltZSA9IG5sYV9nZXRfdTY0KHRiW1RDQV9HQVRFX0NZQ0xFX1RJTUVdKTtcbmBgYFxuXG5JZiB0aGUgdmFsdWUgaXNuJ3QgcHJvdmlkZWQsIGl0IHN0YXlzIHplcm8uIEZpbmFsbHk6XG5cbmBgYGNcblx0aWYgKCFjeWNsZXRpbWUpIHtcblx0XHRzdHJ1Y3QgdGNmZ19nYXRlX2VudHJ5ICplbnRyeTtcblx0XHRrdGltZV90IGN5Y2xlID0gMDtcblxuXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksIFx1MDAyNnAtXHUwMDNlZW50cmllcywgbGlzdClcblx0XHRcdGN5Y2xlID0ga3RpbWVfYWRkX25zKGN5Y2xlLCBlbnRyeS1cdTAwM2VpbnRlcnZhbCk7XG5cdFx0Y3ljbGV0aW1lID0gY3ljbGU7XG5cdH1cbmBgYFxuXG5TbyBgY3ljbGV0aW1lYCBpcyBhbHdheXMgaW5pdGlhbGl6ZWQ7IGl0IGNhbiBiZSB6ZXJvLCBidXQgaXQncyBuZXZlciB1bmluaXRpYWxpemVkLiBUaGUgaXNzdWUgaXMgc2ltcGx5IHRoYXQgdGhlIHZhbHVlIG9mIGBjeWNsZXRpbWVgIG1pZ2h0IGJlIHRvbyBsYXJnZSwgd2hpY2ggdGhlbiBsZWFkcyB0byBhbiBpbnRlZ2VyIG92ZXJmbG93IGluIGBnYXRlX3RpbWVyX2Z1bmNgLiBUaGlzIHJlc3VsdHMgaW4gYSBEb1MgYmVjYXVzZSB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uIGJlY29tZXMgbmVnYXRpdmUsIGNhdXNpbmcgYW4gaW5maW5pdGUgbG9vcC4gS01TQU4gaXMgZm9yIGNhdGNoaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFjY2Vzc2VzLiBJdCdzIG5vdCBhcHBsaWNhYmxlIGhlcmUgYmVjYXVzZSBhbGwgdGhlIHZhcmlhYmxlcyBhcmUgaW5pdGlhbGl6ZWQuXG5cbkFscmlnaHQsIGxldCdzIGRvY3VtZW50IHRoaXMgY2xlYXJseS4gVGhlIHBhdGNoIGNvcnJlY3RseSBhZGRzIGEgYm91bmRzIGNoZWNrIGluIGB0Y2ZfZ2F0ZV9pbml0YCBmb3IgYGN5Y2xldGltZWAgdG8gcHJldmVudCBhbiBvdmVyc2l6ZWQgdmFsdWUuIFRoZSBjb3JlIG9mIHRoZSBwcm9ibGVtIGlzIHRoYXQgaWYgYGN5Y2xldGltZWAgaXMgdG9vIGxhcmdlIChncmVhdGVyIHRoYW4gYElOVF9NQVhgKSwgYW4gaW50ZWdlciBvdmVyZmxvdyB3aWxsIG9jY3VyIHdpdGhpbiBgZ2F0ZV90aW1lcl9mdW5jYCB3aGVuIGNhbGN1bGF0aW5nIHRoZSB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhdXNlcyBgY2xvc2VfdGltZWAgdG8gYmVjb21lIG5lZ2F0aXZlIGFuZCBsZWFkcyB0byBhIHRpbWVyIGludGVycnVwdCBsb29wLCBhbmQgdGhlIERvUy4gVGhpcyBpcyBhIGxvZ2ljL2ludGVnZXIgb3ZlcmZsb3cgYnVnLCBub3QgYSBjYXNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbGwgdGhlIGludm9sdmVkIHZhcmlhYmxlcywgaW5jbHVkaW5nIGBjeWNsZXRpbWVgLCBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCwgc28gS01TQU4gaXNuJ3QgdGhlIHJpZ2h0IHRvb2wgaGVyZS4gU3RhbmRhcmQgS0FTQU4gb3IgZnV6emluZyBzaG91bGQgYmUgZW5vdWdoIHRvIGNhdGNoIHRoZXNlIHNvcnRzIG9mIGxvZ2ljIGVycm9ycyBhbmQgaW5maW5pdGUgbG9vcHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTU4LCJPdXRwdXRUb2tlbnMiOjIzOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIzVDA0OjU1OjEyLjQ0NjE5Njk2OFoiLCJTZXEiOjY4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGJvdW5kcyBjaGVjayBmb3IgYGN5Y2xldGltZWAgaW4gYHRjZl9nYXRlX2luaXRgIHRvIGVuc3VyZSBpdCBkb2VzIG5vdCBleGNlZWQgYElOVF9NQVhgLiBXaXRob3V0IHRoaXMgY2hlY2ssIGEgdmVyeSBsYXJnZSBgY3ljbGV0aW1lYCAoZWl0aGVyIHByb3ZpZGVkIGJ5IHRoZSB1c2VyIHZpYSBuZXRsaW5rIGF0dHJpYnV0ZXMgb3IgY2FsY3VsYXRlZCBmcm9tIGVudHJ5IGludGVydmFscykgY2FuIGNhdXNlIGFuIGludGVnZXIgb3ZlcmZsb3cgaW4gYGdhdGVfdGltZXJfZnVuY2Agd2hlbiBjYWxjdWxhdGluZyB0aGUgbmV4dCB0aW1lciBleHBpcmF0aW9uLiBUaGlzIG92ZXJmbG93IGNhbiByZXN1bHQgaW4gYSBuZWdhdGl2ZSBgY2xvc2VfdGltZWAsIGNhdXNpbmcgdGhlIGhydGltZXIgdG8gYmUgc2V0IGluIHRoZSBwYXN0IGFuZCB0cmlnZ2VyaW5nIGFuIGluZmluaXRlIGxvb3Agb2YgdGltZXIgaW50ZXJydXB0cyAoYSBEZW5pYWwgb2YgU2VydmljZSBidWcpLlxcblxcblRoaXMgaXMgYSBsb2dpYyBhbmQgaW50ZWdlciBvdmVyZmxvdyBidWcuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQsIGluY2x1ZGluZyBgY3ljbGV0aW1lYCwgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIGB1NjQgY3ljbGV0aW1lID0gMDtgKS4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBiZWluZyByZWFkLCB1c2VkIGluIGNvbnRyb2wgZmxvdywgb3IgbGVha2VkIHRvIHVzZXIgc3BhY2UuIFN0YW5kYXJkIGZ1enppbmcgd2l0aCBLQVNBTiBhbmQgbG9ja2RlcCBpcyBzdWZmaWNpZW50IHRvIGRldGVjdCBzdWNoIGhhbmdzIGFuZCBsb2dpYyBidWdzLiBBIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCBuZWNlc3NhcnkuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[1] Phase: Succeeded StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 04:55:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2] Phase: Succeeded StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 04:55:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-23 04:55:23 +0000 UTC FinishedAt: 2026-08-23 04:55:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcq7q/series-workflowmcq7q-convert-artifact-4152330491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-23 04:55:33 +0000 UTC FinishedAt: 2026-08-23 05:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-23 04:55:33 +0000 UTC FinishedAt: 2026-08-23 05:11:56 +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:*f7b2505f-b899-4da4-b0c6-eb809efc5cbf,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-workflowmcq7q/series-workflowmcq7q-convert-artifact-4152330491/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": "aee28378-435e-4e93-badd-5f8806c3268c", "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-workflowmcq7q/series-workflowmcq7q-build-action-193083449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-23 04:55:33 +0000 UTC FinishedAt: 2026-08-23 05:11:46 +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:*f7b2505f-b899-4da4-b0c6-eb809efc5cbf,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-workflowmcq7q/series-workflowmcq7q-convert-artifact-4152330491/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": "aee28378-435e-4e93-badd-5f8806c3268c", "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-workflowmcq7q/series-workflowmcq7q-build-action-193083449/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-23 05:11:56 +0000 UTC FinishedAt: 2026-08-23 05:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-23 05:11:56 +0000 UTC FinishedAt: 2026-08-23 05:11:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-23 05:11:56 +0000 UTC FinishedAt: 2026-08-23 05:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-23 05:11:56 +0000 UTC FinishedAt: 2026-08-23 05:12:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmcq7q/series-workflowmcq7q-convert-artifact-180700498/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-23 05:12:06 +0000 UTC FinishedAt: 2026-08-23 05:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-23 05:12:06 +0000 UTC FinishedAt: 2026-08-23 05:13:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aee28378-435e-4e93-badd-5f8806c3268c,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-workflowmcq7q/series-workflowmcq7q-build-action-193083449/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-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-23 05:13:59 +0000 UTC FinishedAt: 2026-08-23 05:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-23 05:13:59 +0000 UTC FinishedAt: 2026-08-23 05:13:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-23 05:13:59 +0000 UTC FinishedAt: 2026-08-23 05:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-23 05:13:59 +0000 UTC FinishedAt: 2026-08-23 05:30:44 +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:*f7b2505f-b899-4da4-b0c6-eb809efc5cbf,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-workflowmcq7q/series-workflowmcq7q-convert-artifact-180700498/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": "a442bc5d-926a-4141-99a7-9527af25dd63", "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-workflowmcq7q/series-workflowmcq7q-build-action-1327743974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-23 05:13:59 +0000 UTC FinishedAt: 2026-08-23 05:30:34 +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:*f7b2505f-b899-4da4-b0c6-eb809efc5cbf,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-workflowmcq7q/series-workflowmcq7q-convert-artifact-180700498/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": "a442bc5d-926a-4141-99a7-9527af25dd63", "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-workflowmcq7q/series-workflowmcq7q-build-action-1327743974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-23 05:30:44 +0000 UTC FinishedAt: 2026-08-23 05:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-23 05:30:44 +0000 UTC FinishedAt: 2026-08-23 05:30:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-23 05:30:44 +0000 UTC FinishedAt: 2026-08-23 05:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-23 05:30:44 +0000 UTC FinishedAt: 2026-08-23 05:32:26 +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:*a442bc5d-926a-4141-99a7-9527af25dd63,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-workflowmcq7q/series-workflowmcq7q-build-action-1327743974/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-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"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:*aee28378-435e-4e93-badd-5f8806c3268c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a442bc5d-926a-4141-99a7-9527af25dd63,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-workflowmcq7q/series-workflowmcq7q-build-action-193083449/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-workflowmcq7q/series-workflowmcq7q-build-action-1327743974/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 05:32:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 05:32:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"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-workflowmcq7q/series-workflowmcq7q-convert-artifact-3918840231/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 05:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 05:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-23 05:32:36 +0000 UTC FinishedAt: 2026-08-23 05:32:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-23 05:32:46 +0000 UTC FinishedAt: 2026-08-23 08:35:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmcq7q[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["tcf_gate_init"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"91ec2035134982b98fab0609a9fd8480e8217dc1","config_name":"upstream-apparmor-kasan.config","enable_configs":["NET","NET_SCHED","NET_CLS_ACT","NET_ACT_GATE"],"series_id":"c3410d62-60c1-4eaa-8f92-6cf7bb7a7931","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-23 05:32:46 +0000 UTC FinishedAt: 2026-08-23 08:35:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*aee28378-435e-4e93-badd-5f8806c3268c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a442bc5d-926a-4141-99a7-9527af25dd63,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-workflowmcq7q/series-workflowmcq7q-build-action-193083449/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-workflowmcq7q/series-workflowmcq7q-build-action-1327743974/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-workflowmcq7q/series-workflowmcq7q-convert-artifact-3918840231/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,}