Name: series-workflowr2fmh Phase: Succeeded StartedAt: 2026-09-08 14:04:47 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[0] Phase: Succeeded StartedAt: 2026-09-08 14:04:47 +0000 UTC FinishedAt: 2026-09-08 14:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 14:04:47 +0000 UTC FinishedAt: 2026-09-08 14:27:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b485131995544741ba6dcc313d7eb573bca7bebc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b485131995544741ba6dcc313d7eb573bca7bebc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING", "NUMA" ], "series_id": "310399fa-75cc-4dd3-bce3-377a2ca758ae" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "task_numa_balancing_set_current", "task_numa_fault", "proc_pid_status" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cblxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcJiMzNDtlbmFibGVkXCYjMzQ7LCBcJiMzNDtkaXNhYmxlZFwmIzM0OywgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspIGludG8gdGhlIHNlcV9maWxlLlxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZkMGVhN2EzYjMzMTVjNzUyNjZmNGQwNmIyZjJjZDE4YmE4ODIyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTQ6MjU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5AQCAtNzU0LDYgJiM0Mzs3NTQsMjIgQEAgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAocmVwcmVzZW50ZWQgYXMgZGlmZmVyZW50IE5VTUEgbm9kZXMpIHRvXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXG4gdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby5cbiBcbiYjNDM7VGhlIGBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYGAgYW5kIGBgUFJfR0VUX05VTUFfQkFMQU5DSU5HYGAgcHJjdGwoMilcbiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmdcbiYjNDM7b3IgcmUtZW5hYmxlIHBhcnRpY2lwYXRpb24gZm9yIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAuICBBbnkgdGhyZWFkIGluIHRoZVxuJiM0Mzt0aHJlYWQgZ3JvdXAgbWF5IGNoYW5nZSB0aGUgcHJvY2VzcyBzZXR0aW5nLiAgVGhlIHNldHRpbmcgaXMgaW5oZXJpdGVkIGJ5XG4mIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpc1xuJiM0MztwcmVzZXJ2ZWQgYWNyb3NzIGV4ZWN2ZSgyKS4gIFRoZSBnbG9iYWwgYGBudW1hX2JhbGFuY2luZ2BgIHN5c2N0bCByZW1haW5zXG4mIzQzO3RoZSB0b3AtbGV2ZWwgY29udHJvbDogYSBwcm9jZXNzLWxldmVsIGVuYWJsZSBkb2VzIG5vdCB0dXJuIGF1dG9tYXRpYyBOVU1BXG4mIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLFxuJiM0MztzbyB0aGUgcHJvY2VzcyBzZXR0aW5nIGRvZXMgbm90IG1ha2UgVk1BcyBwYXJ0aWNpcGF0ZSB3aGVuIHRoZWlyIHBvbGljeVxuJiM0MztwcmV2ZW50cyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcuXG4mIzQzO1xuJiM0MztEaXNhYmxpbmcgdGhlIHByb2Nlc3Mgc2V0dGluZyBzdG9wcyBzY2hlZHVsaW5nIG5ldyBwZXJpb2RpYyBOVU1BIHNjYW5zIGZvclxuJiM0Mzt0aGF0IHByb2Nlc3MuIEV4aXN0aW5nIE5VTUEgaGludGluZyBQVEVzIGFuZCBhbHJlYWR5IHF1ZXVlZCB3b3JrIGFyZSBub3RcbiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXNcbiYjNDM7ZWZmZWN0LlxuJiM0MztcbiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwc1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbmluZGV4IGMxMDJiNjIwMjNjZGMuLmE0ZTkwMzdhMzE2MTIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5AQCAtMTg4LDYgJiM0MzsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxuICAgSHVnZXRsYlBhZ2VzOiAgICAgICAgICAwIGtCXG4gICBDb3JlRHVtcGluZzogICAgMFxuICAgVEhQX2VuYWJsZWQ6XHQgIDFcbiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZFxuICAgVGhyZWFkczogICAgICAgIDFcbiAgIFNpZ1E6ICAgMC8yODU3OFxuICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwXG5AQCAtMjc0LDYgJiM0MzsyNzUsMTEgQEAgSXQmIzM5O3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxuICBUSFBfZW5hYmxlZCAgICAgICAgICAgICAgICAgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHVzZSBUSFAgKHJldHVybnMgMCB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXG4mIzQzOyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2VcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5XG4gIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGhyZWFkc1xuICBTaWdRICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNpZ25hbHMgcXVldWVkL21heC4gbnVtYmVyIGZvciBxdWV1ZVxuICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuY1xuaW5kZXggZjZmNzVkMjA2NzYyYS4uYTI3YTZhNTdlOGIyMiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvYXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9hcnJheS5jXG5AQCAtNDI1LDYgJiM0Mzs0MjUsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdGhwX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c2VxX3ByaW50ZihtLCBcJiMzNDtUSFBfZW5hYmxlZDpcXHQlZFxcblwmIzM0OywgdGhwX2VuYWJsZWQpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuJiM0Mzt7XG4mIzQzO1x0c2VxX3ByaW50ZihtLCBcJiMzNDtOdW1hQl9tb2RlOlxcdCVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUodGFzaykpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4mIzQzO3tcbiYjNDM7XHRzZXFfcHV0cyhtLCBcJiMzNDtOdW1hQl9tb2RlOlxcdHVuc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHNlcV9wcmludGYobSwgXCYjMzQ7dW50YWdfbWFzazpcXHQlI2x4XFxuXCYjMzQ7LCBtbV91bnRhZ19tYXNrKG1tKSk7XG5AQCAtNDUzLDYgJiM0Mzs0NjgsNyBAQCBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLFxuIFx0XHR0YXNrX3VudGFnX21hc2sobSwgbW0pO1xuIFx0XHRtbXB1dChtbSk7XG4gXHR9XG4mIzQzO1x0dGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7XG4gXHR0YXNrX3NpZyhtLCB0YXNrKTtcbiBcdHRhc2tfY2FwKG0sIHRhc2spO1xuIFx0dGFza19zZWNjb21wKG0sIHRhc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uN2YxOTMyNjU4ZDI0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTM4Miw2ICYjNDM7MTM4MiwxMiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0c2hvcnRcdFx0XHRcdHByZWZfbm9kZV9mb3JrO1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNjaGVkdWxlciBzbmFwc2hvdCBvZiBzaWduYWxfc3RydWN0OjpudW1hX2JhbGFuY2luZ19lbmFibGVkLiBJdCBpc1xuJiM0MztcdCAqIHVwZGF0ZWQgd2l0aCBzY2hlZF9jaGFuZ2UgZm9yIHJ1bnF1ZXVlIE5VTUEgYWNjb3VudGluZzsgdGhlXG4mIzQzO1x0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2xcdFx0XHRcdG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdG51bWFfc2Nhbl9zZXE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRudW1hX3NjYW5fcGVyaW9kO1xuIFx0dW5zaWduZWQgaW50XHRcdFx0bnVtYV9zY2FuX3BlcmlvZF9tYXg7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG5pbmRleCA1MmIyMmM1YzM5NmRiLi42OWU3OTM1OWZhMjJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUTkZfTUlHUkFURURcdDB4MDFcbiAjZGVmaW5lIFRORl9OT19HUk9VUFx0MHgwMlxuQEAgLTMwLDYgJiM0MzszMSwyNyBAQCBleHRlcm4gdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKTtcbiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gZXh0ZXJuIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKTtcbiBleHRlcm4gdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKGN1cnJlbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnRhc2tfbnVtYV9iYWxhbmNpbmdfbW9kZV9uYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO31cbiBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSk7XG4gI2Vsc2VcbkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZClcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7XG4gXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVBcbiBcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRocmVhZC1ncm91cCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZSBjb25maWd1cmVkIHRocm91Z2ggcHJjdGwoKS5cbiYjNDM7XHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xuJiM0MztcdCAqIHRoZWlyIHBlci10YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgc25hcHNob3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIEN1bXVsYXRpdmUgcmVzb3VyY2UgY291bnRlcnMgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuaW5kZXggYjZlYzZmNjkzNzE5NS4uNWJjMGEyYTJhOTMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuQEAgLTQxNiw0ICYjNDM7NDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xuICMgZGVmaW5lIFBSX0NGSV9ESVNBQkxFXHRcdF9CSVRVTCgxKVxuICMgZGVmaW5lIFBSX0NGSV9MT0NLXHRcdF9CSVRVTCgyKVxuIFxuJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqL1xuJiM0MzsjZGVmaW5lIFBSX1NFVF9OVU1BX0JBTEFOQ0lOR1x0ODJcbiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkdcdDgzXG4mIzQzOyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEVcdDBcbiYjNDM7IyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFXHQxXG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xuZGlmZiAtLWdpdCBhL2luaXQvaW5pdF90YXNrLmMgYi9pbml0L2luaXRfdGFzay5jXG5pbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9pbml0X3Rhc2suY1xuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7XG4gXHQuY3B1dGltZXJcdFx0PSB7XG4gXHRcdC5jcHV0aW1lX2F0b21pY1x0PSBJTklUX0NQVVRJTUVfQVRPTUlDLFxuIFx0fSxcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQubnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9IHRydWUsXG4gI2VuZGlmXG4gXHRJTklUX0NQVV9USU1FUlMoaW5pdF9zaWduYWxzKVxuIFx0LnBpZHMgPSB7XG5AQCAtMjI0LDYgJiM0MzsyMjcsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XG4gXHQudnRpbWUuc3RhdGVcdD0gVlRJTUVfU1lTLFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsXG4gXHQubnVtYV9wcmVmZXJyZWRfbmlkID0gTlVNQV9OT19OT0RFLFxuIFx0Lm51bWFfZ3JvdXBcdD0gTlVMTCxcbiBcdC5udW1hX2ZhdWx0c1x0PSBOVUxMLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTI0OTYsNiAmIzQzOzI0OTYsMTQgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcbiBcdC8qIE5vIG1vcmUgZmFpbHVyZSBwYXRocyBhZnRlciB0aGlzIHBvaW50LiAqL1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4mIzQzO1x0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID1cbiYjNDM7XHRcdFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcbiYjNDM7XHRpZiAoIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKSlcbiYjNDM7XHRcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxuJiM0MztcdFx0XHRwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdC8qXG4gXHQgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWRcbiBcdCAqIGJlZm9yZSBob2xkaW5nIHNpZ2hhbmQgbG9jay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbG9hZGF2Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcdTAwM2VcbkBAIC02MDMsNiAmIzQzOzYwNCw4IEBAIGludCB0YXNrX2xsYyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gICpcdFx0XHRcdHAtXHUwMDNlc2UubG9hZCwgcC1cdTAwM2VydF9wcmlvcml0eSxcbiAgKlx0XHRcdFx0cC1cdTAwM2VkbC5kbF97cnVudGltZSwgZGVhZGxpbmUsIHBlcmlvZCwgZmxhZ3MsIGJ3LCBkZW5zaXR5fVxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcbiYjNDM7ICogIC0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudCgpOlx0cC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCxcbiYjNDM7ICpcdFx0XHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXG4gICogIC0gc2NoZWRfbW92ZV90YXNrKCk6XHRwLVx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcbiAgKiAgLSB1Y2xhbXBfdXBkYXRlX2FjdGl2ZSgpXHRwLVx1MDAzZXVjbGFtcCpcbiAgKlxuQEAgLTg0MDcsNiAmIzQzOzg0MTAsNDIgQEAgdm9pZCBzY2hlZF9zZXRudW1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZClcbiBcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXG4gXHRcdHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID0gbmlkO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBlbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQodGFza19ycV9sb2NrKShwKTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQgKHNjaGVkX2NoYW5nZSwgcCwgREVRVUVVRV9TQVZFKVxuJiM0MztcdFx0V1JJVEVfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgb2xkX2VuYWJsZWQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ0YXNrX251bWFfYmFsYW5jaW5nX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpKSlcbiYjNDM7XHRcdHJldHVybiAtRVNSQ0g7XG4mIzQzO1xuJiM0MztcdG9sZF9lbmFibGVkID0gY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbiYjNDM7XHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztcdHVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZCkge1xuJiM0MztcdFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soY3VycmVudCwgZW5hYmxlZCk7XG4mIzQzO1x0XHRyZWFkX2xvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4mIzQzO1x0XHRmb3Jfb3RoZXJfdGhyZWFkcyhjdXJyZW50LCB0KVxuJiM0MztcdFx0XHRzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTtcbiYjNDM7XHRcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG4gXG4gI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFx1MDAzZVxuQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS5cbiBcdFx0ICovXG4gXHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjcHVfdG9fbm9kZShtbV9zY2hlZF9jcHUpICE9IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkKVxuIFx0XHRcdG1tX3NjaGVkX2xsYyA9IC0xO1xuQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0Y3B1ID0gUkVBRF9PTkNFKHAtXHUwMDNlbW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xuIFx0aWYgKGNwdSAhPSAtMSlcbiBcdFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcbkBAIC0yMzg3LDE0ICYjNDM7MjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgJiM0Mzs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xuLVx0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgJiM0Mzs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuJiM0MztcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuJiM0MztcbiYjNDM7XHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgJiM0Mzs9IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcbiYjNDM7XHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyAtPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFKTtcbi1cdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuJiM0MztcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuJiM0MztcbiYjNDM7XHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgLT0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuJiM0MztcdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XG4gfVxuIFxuIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi9cbkBAIC0zMDg1LDYgJiM0MzszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKGN1cikpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LVx1MDAzZXNyY19jcHUsIGN1ci1cdTAwM2VjcHVzX3B0cikpXG4gXHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5OTIsNiAmIzQzOzQwMDgsOSBAQCB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LyogZm9yIGV4YW1wbGUsIGtzbWQgZmF1bHRpbmcgaW4gYSB1c2VyJiMzOTtzIG1tICovXG4gXHRpZiAoIXAtXHUwMDNlbW0pXG4gXHRcdHJldHVybjtcbkBAIC00NDM2LDYgJiM0Mzs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxuIFx0aWYgKCFjdXJyLVx1MDAzZW1tIHx8IChjdXJyLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfRVhJVElORyB8IFBGX0tUSFJFQUQpKSB8fCB3b3JrLVx1MDAzZW5leHQgIT0gd29yaylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VycikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0XG4gXHQgKiB3ZSAobW9zdGx5KSBkcml2ZSB0aGUgc2VsZWN0aW9uIGZyb20gYnVzeSB0aHJlYWRzIGFuZCB0aGF0IHRoZVxuQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoIXAtXHUwMDNlbW0gfHwgIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFwLVx1MDAzZW51bWFfZmF1bHRzIHx8ICEoZW52LVx1MDAzZXNkLVx1MDAzZWZsYWdzIFx1MDAyNiBTRF9OVU1BKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jXG5pbmRleCAzNWI1MzhiYTg0M2M3Li5mYjAxODQxYzBjZTkwIDEwMDY0NFxuLS0tIGEva2VybmVsL3N5cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmNcbkBAIC02MCw2ICYjNDM7NjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb3JlZHVtcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG5AQCAtMjkwNyw2ICYjNDM7MjkwOCwyMyBAQCBTWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuIFx0XHRpZiAoYXJnMyBcdTAwMjYgUFJfQ0ZJX0xPQ0sgXHUwMDI2XHUwMDI2ICEoYXJnMyBcdTAwMjYgUFJfQ0ZJX0RJU0FCTEUpKVxuIFx0XHRcdGVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUFJfU0VUX05VTUFfQkFMQU5DSU5HOlxuJiM0MztcdFx0aWYgKGFyZzMgfHwgYXJnNCB8fCBhcmc1KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cbiYjNDM7XHRcdFx0XHRcdFx0XHQgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUFJfR0VUX05VTUFfQkFMQU5DSU5HOlxuJiM0MztcdFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KCk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yID8gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFIDpcbiYjNDM7XHRcdFx0XHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTtcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QKaW5kZXggYjYzMjhjZDBmNDNlOS4uN2Y2NjVjMjg4MjhhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0CkBAIC03NTQsNiAmIzQzOzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG8KIHBsYWNlIHRoZSBob3QgcGFnZXMgaW4gdGhlIGZhc3QgbWVtb3J5LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbgogdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby4KIAomIzQzO1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpCiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcKJiM0MztvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlCiYjNDM7dGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieQomIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpcwomIzQzO3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnMKJiM0Mzt0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQQomIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLAomIzQzO3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5CiYjNDM7cHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLgomIzQzOwomIzQzO0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yCiYjNDM7dGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90CiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXMKJiM0MztlZmZlY3QuCiYjNDM7CiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CkBAIC0xODgsNiAmIzQzOzE4OCw3IEBAIHJlYWQgdGhlIGZpbGUgL3Byb2MvUElEL3N0YXR1czo6CiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQgogICBDb3JlRHVtcGluZzogICAgMAogICBUSFBfZW5hYmxlZDoJICAxCiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZAogICBUaHJlYWRzOiAgICAgICAgMQogICBTaWdROiAgIDAvMjg1NzgKICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwCkBAIC0yNzQsNiAmIzQzOzI3NSwxMSBAQCBJdCYjMzk7cyBzbG93IGJ1dCB2ZXJ5IHByZWNpc2UuCiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhQIGNvbXBsZXRlbHksIG5vdCBqdXN0IHBhcnRpYWxseSkKJiM0MzsgTnVtYUJfbW9kZSAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2UKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkOyB0aGUgZWZmZWN0aXZlIGJlaGF2aW9yIGFsc28gZGVwZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGdsb2JhbCBudW1hX2JhbGFuY2luZyBzeXNjdGwgYW5kIG1lbW9yeQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5CiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzCiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWUKICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTQyNSw2ICYjNDM7NDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzZXFfcHJpbnRmKG0sICYjMzQ7VEhQX2VuYWJsZWQ6XHQlZFxuJiMzNDssIHRocF9lbmFibGVkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQomIzQzO3sKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0O051bWFCX21vZGU6XHQlc1xuJiMzNDssCiYjNDM7CQkgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKG0sICYjMzQ7TnVtYUJfbW9kZTpcdHVuc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXNlcV9wcmludGYobSwgJiMzNDt1bnRhZ19tYXNrOlx0JSNseFxuJiMzNDssIG1tX3VudGFnX21hc2sobW0pKTsKQEAgLTQ1Myw2ICYjNDM7NDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJdGFza191bnRhZ19tYXNrKG0sIG1tKTsKIAkJbW1wdXQobW0pOwogCX0KJiM0MzsJdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7CiAJdGFza19zaWcobSwgdGFzayk7CiAJdGFza19jYXAobSwgdGFzayk7CiAJdGFza19zZWNjb21wKG0sIHRhc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEzODIsNiAmIzQzOzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAlzaG9ydAkJCQlwcmVmX25vZGVfZm9yazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkvKgomIzQzOwkgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXMKJiM0MzsJICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGUKJiM0MzsJICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LgomIzQzOwkgKi8KJiM0MzsJYm9vbAkJCQludW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkOwogCWludAkJCQludW1hX3NjYW5fc2VxOwogCXVuc2lnbmVkIGludAkJCW51bWFfc2Nhbl9wZXJpb2Q7CiAJdW5zaWduZWQgaW50CQkJbnVtYV9zY2FuX3BlcmlvZF9tYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgKaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCiAjZGVmaW5lIFRORl9NSUdSQVRFRAkweDAxCiAjZGVmaW5lIFRORl9OT19HUk9VUAkweDAyCkBAIC0zMCw2ICYjNDM7MzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7CiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHAtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHApID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7fQogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJaW50IHNyY19uaWQsIGludCBkc3RfY3B1KTsKICNlbHNlCkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCiAJc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLyoKJiM0MzsJICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLgomIzQzOwkgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhcwomIzQzOwkgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkOwogI2VuZGlmCiAJLyoKIAkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCBiNmVjNmY2OTM3MTk1Li41YmMwYTJhMmE5MzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAtNDE2LDQgJiM0Mzs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7CiAjIGRlZmluZSBQUl9DRklfRElTQUJMRQkJX0JJVFVMKDEpCiAjIGRlZmluZSBQUl9DRklfTE9DSwkJX0JJVFVMKDIpCiAKJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgUFJfU0VUX05VTUFfQkFMQU5DSU5HCTgyCiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcJODMKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFCTAKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUJMQomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suYwppbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NAotLS0gYS9pbml0L2luaXRfdGFzay5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvaW5pdF90YXNrLmMKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7CiAJLmNwdXRpbWVyCQk9IHsKIAkJLmNwdXRpbWVfYXRvbWljCT0gSU5JVF9DUFVUSU1FX0FUT01JQywKIAl9LAomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLAogI2VuZGlmCiAJSU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscykKIAkucGlkcyA9IHsKQEAgLTIyNCw2ICYjNDM7MjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0gewogCS52dGltZS5zdGF0ZQk9IFZUSU1FX1NZUywKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsCiAJLm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSwKIAkubnVtYV9ncm91cAk9IE5VTEwsCiAJLm51bWFfZmF1bHRzCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjQ5Niw2ICYjNDM7MjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCiAJLyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiYjNDM7CXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPQomIzQzOwkJUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7CWlmICghKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX1RIUkVBRCkpCiYjNDM7CQlwLSZndDtzaWduYWwtJmd0O251bWFfYmFsYW5jaW5nX2VuYWJsZWQgPQomIzQzOwkJCXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyoKIAkgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWQKIAkgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbG9hZGF2Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbm9oei5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3JzZXFfYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvcnQuaCZndDsKQEAgLTYwMyw2ICYjNDM7NjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICAqCQkJCXAtJmd0O3NlLmxvYWQsIHAtJmd0O3J0X3ByaW9yaXR5LAogICoJCQkJcC0mZ3Q7ZGwuZGxfe3J1bnRpbWUsIGRlYWRsaW5lLCBwZXJpb2QsIGZsYWdzLCBidywgZGVuc2l0eX0KICAqICAtIHNjaGVkX3NldG51bWEoKToJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZAomIzQzOyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKToJcC0mZ3Q7c2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkLAomIzQzOyAqCQkJCQlwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkCiAgKiAgLSBzY2hlZF9tb3ZlX3Rhc2soKToJcC0mZ3Q7c2NoZWRfdGFza19ncm91cAogICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKQlwLSZndDt1Y2xhbXAqCiAgKgpAQCAtODQwNyw2ICYjNDM7ODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQogCXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiAJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9IG5pZDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CWd1YXJkKHRhc2tfcnFfbG9jaykocCk7CiYjNDM7CXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiYjNDM7CQlXUklURV9PTkNFKHAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgb2xkX2VuYWJsZWQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Rhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCAmYW1wO2ZsYWdzKSkpCiYjNDM7CQlyZXR1cm4gLUVTUkNIOwomIzQzOwomIzQzOwlvbGRfZW5hYmxlZCA9IGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZDsKJiM0MzsJaWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpCiYjNDM7CQlXUklURV9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7CiYjNDM7CiYjNDM7CXVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7CiYjNDM7CQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO3Rhc2tsaXN0X2xvY2spOwomIzQzOwkJZm9yX290aGVyX3RocmVhZHMoY3VycmVudCwgdCkKJiM0MzsJCQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7dGFza2xpc3RfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL25vaHouaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9wcmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2NhbGwuaCZndDsKQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4KIAkJICovCiAJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3NjaGVkX251bWFfYmFsYW5jaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgJmFtcDsmYW1wOwogCQkgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICZndDs9IDAgJmFtcDsmYW1wOwogCQkgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLSZndDtudW1hX3ByZWZlcnJlZF9uaWQpCiAJCQltbV9zY2hlZF9sbGMgPSAtMTsKQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJY3B1ID0gUkVBRF9PTkNFKHAtJmd0O21tLSZndDtzY19zdGF0LmNwdSk7CiAJaWYgKGNwdSAhPSAtMSkKIAkJbmlkID0gY3B1X3RvX25vZGUoY3B1KTsKQEAgLTIzODcsMTQgJiM0MzsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAKIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7Ci0JcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSBlbmFibGVkICZhbXA7JmFtcDsKJiM0MzsJCQkJIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7CiYjNDM7CXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTsKIH0KIAogc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJxLSZndDtucl9udW1hX3J1bm5pbmcgLT0gKHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpOwotCXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTsKJiM0MzsJcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7CiB9CiAKIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi8KQEAgLTMwODUsNiAmIzQzOzMwOTgsOSBAQCBzdGF0aWMgYm9vbCB0YXNrX251bWFfY29tcGFyZShzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LAogCQkJZ290byB1bmxvY2s7CiAJfQogCiYjNDM7CWlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCS8qIFNraXAgdGhpcyBzd2FwIGNhbmRpZGF0ZSBpZiBjYW5ub3QgbW92ZSB0byB0aGUgc291cmNlIGNwdS4gKi8KIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LSZndDtzcmNfY3B1LCBjdXItJmd0O2NwdXNfcHRyKSkKIAkJZ290byB1bmxvY2s7CkBAIC0zOTkyLDYgJiM0Mzs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKQogCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtzY2hlZF9udW1hX2JhbGFuY2luZykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlciYjMzk7cyBtbSAqLwogCWlmICghcC0mZ3Q7bW0pCiAJCXJldHVybjsKQEAgLTQ0MzYsNiAmIzQzOzQ0NTUsOSBAQCBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfbnVtYShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiAJaWYgKCFjdXJyLSZndDttbSB8fCAoY3Vyci0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay0mZ3Q7bmV4dCAhPSB3b3JrKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0CiAJICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGUKQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXAtJmd0O21tIHx8ICFwLSZndDtudW1hX2ZhdWx0cyB8fCAocC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfRVhJVElORykpCiAJCXJldHVybjsKIApAQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwLSZndDtudW1hX2ZhdWx0cyB8fCAhKGVudi0mZ3Q7c2QtJmd0O2ZsYWdzICZhbXA7IFNEX05VTUEpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmMKQEAgLTYwLDYgJiM0Mzs2MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CkBAIC0yOTA3LDYgJiM0MzsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsCiAJCWlmIChhcmczICZhbXA7IFBSX0NGSV9MT0NLICZhbXA7JmFtcDsgIShhcmczICZhbXA7IFBSX0NGSV9ESVNBQkxFKSkKIAkJCWVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzoKJiM0MzsJCWlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT0KJiM0MzsJCQkJCQkJIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkc6CiYjNDM7CQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpOwomIzQzOwkJaWYgKGVycm9yICZndDs9IDApCiYjNDM7CQkJZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6CiYjNDM7CQkJCVBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEU7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQl0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmNvdWxkKiBiZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTlVNQSBiYWxhbmNpbmcgZW5oYW5jZW1lbnRzLiBTcGVjaWZpY2FsbHk6CgoxLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiBmaWxlcyDigJMgbm90IGluaGVyZW50bHkgZnV6emFibGUsIGJ1dCBjb3VsZCBleHBvc2UgbmV3IGNvZGUgcGF0aHMgb3Igc2V0dGluZ3MuIEkmIzM5O2xsIG5vdGUgaXQuCjIuICAqKi9wcm9jIEludGVyZmFjZToqKiBBIG5ldyBlbnRyeSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzYCwgaW4gYC9wcm9jL1BJRC9zdGF0dXNgLiBUaGlzIGlzIHByb21pc2luZy4gQW55IGNoYW5nZXMgdG8gcHJvY2ZzIGFyZSBnb29kIHRhcmdldHMsIGFuZCBgL3Byb2MvUElEL3N0YXR1c2AgaXMgaGVhdmlseSB1c2VkLgozLiAgKipIZWFkZXJzOioqIEhlYWRlciBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZC4gSW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCjQuICAqKkluaXRpYWxpemF0aW9uOioqIENoYW5nZXMgaW4gYGluaXRfdGFzay5jYCwgYWZmZWN0aW5nIGhvdyB0aGUgYGluaXRgIHByb2Nlc3MgaXMgc2V0IHVwLiBDb3VsZCBiZSBpbnRlcmVzdGluZy4KNS4gICoqRm9yayBMb2dpYzoqKiBNb2RpZmljYXRpb25zIHRvIGBjb3B5X3Byb2Nlc3NgIHdpdGhpbiBga2VybmVsL2ZvcmsuY2AsIHVwZGF0aW5nIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBUaGlzIGlzIEhVR0UuIEZvcmsgaXMgYSBjcml0aWNhbCwgYW5kIG9mdGVuIGZ1enplZCwgcGF0aC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLgo2LiAgKipTY2hlZHVsZXIgQ29yZToqKiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGp1aWN5LiBUaGUgaW1wbGVtZW50YXRpb24gb2YgYHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrYCBhbmQgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCBhcmUgdml0YWwuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgc2NoZWR1bGVyIGlzIGEga2V5IHRhcmdldC4KNy4gICoqRmFpciBTY2hlZHVsZXI6KiogRXZlbiBiZXR0ZXIg4oCTIHRoZSBmYWlyIHNjaGVkdWxlciAoYGtlcm5lbC9zY2hlZC9mYWlyLmNgKSBpcyBjaGVja2luZyBgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWRgIGluIGEgYnVuY2ggb2YgY3J1Y2lhbCBwbGFjZXM6IGBnZXRfcHJlZl9sbGNgLCBgZ2V0X3NjYW5fY3B1bWFza3NgLCBhbmQgb3RoZXIgc2NoZWR1bGVyIG9wZXJhdGlvbnMuIFRoaXMgaXMgZ29sZC4gQW55IGNoYW5nZXMgdG8gdGhlIHNjaGVkdWxlciYjMzk7cyBiZWhhdmlvciBpcyBsaWtlbHkgdG8gaW50cm9kdWNlIGVycm9ycyBhbmQgbWFrZSB0aGlzIGEgaGlnaCBwcmlvcml0eS4KOC4gICoqcHJjdGwgU3lzY2FsbDoqKiBUaGUgYWRkaXRpb24gb2YgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2AgYW5kIGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgIHRvIHRoZSBgcHJjdGxgIHN5c2NhbGwuIFRoaXMgaXMgYSB2ZXJ5IGdvb2QgaW5kaWNhdG9yIGZvciB1cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHJlYWNoYWJsZSBjb2RlIHBhdGgsIGJ1dCBzeXN0ZW0gY2FsbHMgYXJlIHBlcmZlY3QgZnV6emluZyBjYW5kaWRhdGVzLgoKTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCAqeWVzKiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGNvcmUgc2NoZWR1bGVyIGxvZ2ljLCBmb3JrIGxvZ2ljLCB0aGUgYHByY3RsYCBzeXNjYWxsIGhhbmRsZXIsIGFuZCB0aGUgYC9wcm9jYCBpbnRlcmZhY2UuIFRoaXMgaXMgYWxsIGhpZ2gtdmFsdWUgc3R1ZmYuIFRoZSBhZGRpdGlvbiBvZiBuZXcgYHByY3RsYCBvcHRpb25zIGlzIGEgbWFzc2l2ZSB3aW4uIEkgc2VlIGxvY2tpbmcgcHJpbWl0aXZlcyBldmVyeXdoZXJlOiBtdXRleGVzLCBgdGFza19ycV9sb2NrYCwgYHNjaGVkX2NoYW5nZWAsIGB0YXNrbGlzdF9sb2NrYCwgc2lnaGFuZCBsb2NrcywgdGhyZWFkIGl0ZXJhdGlvbiwgYWxsIG9mIHdoaWNoIGFyZSBnb29kIHNwb3RzIGZvciBmdXp6aW5nLiBMb2NraW5nIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgY29uY3VycmVuY3kgc3RhbmRwb2ludC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCB1c2UgdGhlIGdyZXBwZXIgYW5kIGNoZWNrIGZvciBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5IGdvaW5nIHRvIHRhcmdldCB1c2VmdWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9CQUxBTkNJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMTg9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4tLVxuaW5pdC9LY29uZmlnLTEwMjAtXG5pbml0L0tjb25maWc6MTAyMTpjb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDIyLVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwMzQ9Y29uZmlnIFNDSEVEX0NBQ0hFXG4tLVxuaW5pdC9LY29uZmlnLTEwNDQtXG5pbml0L0tjb25maWc6MTA0NTpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG5pbml0L0tjb25maWctMTA0Ni1cdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOVU1BIEJhbGFuY2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHJlcXVpcmVtZW50cyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIE15IGltbWVkaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDIxLCB3aGljaCBzaG91bGQgYmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW55IHByZXJlcXVpc2l0ZSBmZWF0dXJlcywgYW5kIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBJIGNhbiBldmVuICpzZWUqIHRoZSBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gYnVpbGQgYSBwcm9wZXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDE1Olx0IyBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IChhYil1c2UgTlVNQSB0byByZXByZXNlbnQgZGlmZmVyZW50IG1lbW9yeSByZWdpb25zXG4xMDE2Olx0IyBhbGwgY3B1LWxvY2FsIGJ1dCBvZiBkaWZmZXJlbnQgbGF0ZW5jaWVzLCBzdWNoIGFzIFN1cGVySC5cbjEwMTc6XHQjXG4xMDE4Olx0Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4xMDE5Olx0XHRib29sXG4xMDIwOlx0XG4xMDIxOlx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HXG4xMDIyOlx0XHRib29sIFwmIzM0O01lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcJiMzNDtcbjEwMjM6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xuMTAyNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QVEVfUFJPVE5PTkVcbjEwMjU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4xMDI2Olx0XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgTlVNQV9NSUdSQVRJT04gXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4xMDI3Olx0XHRoZWxwXG4xMDI4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgYXV0b21hdGljIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50LlxuMTAyOTpcdFx0ICBUaGUgbWVjaGFuaXNtIGlzIHF1aXRlIHByaW1pdGl2ZSBhbmQgaXMgYmFzZWQgb24gbWlncmF0aW5nIG1lbW9yeSB3aGVuXG4xMDMwOlx0XHQgIGl0IGhhcyByZWZlcmVuY2VzIHRvIHRoZSBub2RlIHRoZSB0YXNrIGlzIHJ1bm5pbmcgb24uXG4xMDMxOlx0XG4xMDMyOlx0XHQgIFRoaXMgc3lzdGVtIHdpbGwgYmUgaW5hY3RpdmUgb24gVU1BIHN5c3RlbXMuXG4xMDMzOlx0XG4xMDM0Olx0Y29uZmlnIFNDSEVEX0NBQ0hFXG4xMDM1Olx0XHRib29sIFwmIzM0O0NhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVwmIzM0O1xuMTAzNjpcdFx0ZGVmYXVsdCB5XG4xMDM3Olx0XHRkZXBlbmRzIG9uIFNNUFxuMTAzODpcdFx0aGVscFxuMTAzOTpcdFx0ICBXaGVuIGVuYWJsZWQsIHRoZSBzY2hlZHVsZXIgd2lsbCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0YXNrcyBmcm9tXG4xMDQwOlx0XHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXG4xMDQxOlx0XHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxuMTA0MjpcdFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxuMTA0MzpcdFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxuMTA0NDpcdFxuMTA0NTpcdGNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcbjEwNDY6XHRcdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbjEwNDc6XHRcdGRlZmF1bHQgeVxuMTA0ODpcdFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xuMTA0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE5VTUFfTUlHUkFUSU9OIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHByaW1hcnkgaXNzdWUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIFgsIFksIGFuZCBaLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBiZSB0aG9yb3VnaC4gVGhlIGBOVU1BX01JR1JBVElPTmAgZnVuY3Rpb25hbGl0eSBjYW4gaW50cm9kdWNlIHNvbWUgc3VidGxlLCB5ZXQgaW1wYWN0ZnVsLCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgZWFzaWx5IG92ZXJsb29rZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IG92ZXJsb29raW5nIHRoZXNlIGRldGFpbHMgY2FuIGxlYWQgdG8gc29tZSByZWFsbHkgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIHNlc3Npb25zIGRvd24gdGhlIGxpbmUuIEkgbmVlZCB0byB0YWtlIGEgbW9tZW50IGFuZCByZWZyZXNoIG15c2VsZiBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBiZWhhdmlvcnMgdGhhdCBtaWdodCBhcmlzZSBpZiBgTlVNQV9NSUdSQVRJT05gIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCBldmVuIGlmIGl0IHNlZW1zIHBlcmlwaGVyYWxseSByZWxhdGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkgaGVyZS4gSXQmIzM5O3MgYmVzdCB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIGF0IHRoaXMgc3RhZ2UuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSB0aW1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BX01JR1JBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY2NT1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY3Mi1cbm1tL0tjb25maWc6NjczOmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NzQtXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY3My4gTXkgbWVudGFsIG1vZGVsIGlzIGFscmVhZHkgcHJpbWVkIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgbWVtb3J5IGZlYXR1cmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIExpbmUgNjczPyBUaGF0IG51bWJlciBpcyBmYW1pbGlhcjsgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGdyYW51bGFyIHNldHRpbmcsIHBlcmhhcHMgcmVsYXRlZCB0byBOVU1BLCBtZW1vcnkgaG90cGx1Zywgb3IgYSBzcGVjaWZpYyBhbGxvY2F0b3IuIEkmIzM5O20gZm9jdXNpbmcgaW4gYmVjYXVzZSBJIHN1c3BlY3QgYSBzdWJ0bGV0eSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgb3IgbWFuYWdlcyB0aGVpciBhbGxvY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBzZWN0aW9uLCBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGBjb25maWdgIGJsb2NrcywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGJvb2xlYW4gZGVmaW5pdGlvbnMsIG9yIG1heWJlIGV2ZW4gYW4gYGlmYCBzdGF0ZW1lbnQgdGhhdCByZXZlYWxzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBCYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UsIEnigJltIGFudGljaXBhdGluZyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwb2ludCBiZXR3ZWVuIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBjZXJ0YWluIGRldGFpbCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxuIDY3MTpcdFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cbiA2NzI6XHRcbiA2NzM6XHRjb25maWcgTlVNQV9NSUdSQVRJT05cbiA2NzQ6XHRcdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuIDY3NTpcdFx0ZGVmYXVsdCB5XG4gNjc2Olx0XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxuIDY3NzpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY3ODpcdFx0aGVscFxuIDY3OTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjgwOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjgxOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2ODI6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY4MzpcdFxuIDY4NDpcdGNvbmZpZyBNSUdSQVRJT05cbiA2ODU6XHRcdGJvb2xcbiA2ODY6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjg3Olx0XG4gNjg4Olx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA2ODk6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlVNQSBCYWxhbmNpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBOVU1BX0JBTEFOQ0lOR2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgcmVsaWVzIG9uIHRoZSBicm9hZGVyIGBOVU1BYCBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggaXRzZWxmIG1lYW5zIGBOVU1BX01JR1JBVElPTmAgaXMgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwaWVjZXMgYXJlIGNyaXRpY2FsIGZvciBmdXp6aW5nIGZvY3VzLiBJJiMzOTttIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogY2xlYXJseSBgTlVNQV9CQUxBTkNJTkdgIGl0c2VsZiBpcyBrZXksIGFzIGlzIHRoZSBlbmFibGluZyBvZiBgTlVNQWAuCgpOb3csIHRoZSBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGludHJvZHVjZWQgYXJlIGltcG9ydGFudC4gSSYjMzk7dmUgZ290IGEgbGlzdDogYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIChrZXJuZWwvc2NoZWQvY29yZS5jLCBhbmQgY2FsbGVkIGZyb20gYHByY3RsYCksIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgKHN0YXRpYyksIGB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50YCAoc3RhdGljIGlubGluZSksIGB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1c2AgKHN0YXRpYyBpbmxpbmUpLCBgcHJvY19waWRfc3RhdHVzYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IHRyeWluZyB0byBwaWNrIG91dCAqbm9uLXViaXF1aXRvdXMqIGZ1bmN0aW9ucy4gSSYjMzk7bSBhdm9pZGluZyBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzaW5jZSBsaXN0aW5nIHRob3NlIHdvdWxkIGRpbHV0ZSB0aGUgZm9jdXMuIEkgd2FudCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyBhcmUgdHJpY2t5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluIHRoZSAuYyBmaWxlcy4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YC4gQ2hlY2tpbmcgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIGFuZCBpdCYjMzk7cyBhbiBgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKWAuIEl0JiMzOTtzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50ISBJdCYjMzk7cyBjYWxsZWQgYnkgYHN5c19wcmN0bGAgd2l0aCBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYC4gVGhhdCYjMzk7cyBhIGdvb2Qgb25lIHRvIHN0YXJ0IHdpdGgsIHZlcnkgc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHRhc2tfbnVtYV9mYXVsdGA/IFRoYXQgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBhIGZhdWx0IGhhbmRsZXIsIGJ1dCBsZXQmIzM5O3MgY2hlY2sgaXQmIzM5O3MgY29tbW9uYWxpdHk7IGl0JiMzOTtzIHNwZWNpZmljIHRvIE5VTUEgaGludGluZy4KCmBzY2hlZF9zZXRudW1hYCBpc24mIzM5O3QgdG91Y2hlZCwganVzdCBhIGNvbW1lbnQgdXBkYXRlLiBgdGFza190aWNrX251bWFgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIGFuZCBgcHJvY19waWRfc3RhdHVzYCBjYWxscyBgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZnJvbSBgZnMvcHJvYy9hcnJheS5jYC4gQW5kIG9mIGNvdXJzZSBgcHJjdGxgIGl0c2VsZiBpcyBhIHN5c2NhbGwgZW50cnlwb2ludCwgYnV0IGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpcyB0aGUgcHJlY2lzZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhpcyBmZWF0dXJlIQoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZToKLSBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAKLSBgcHJvY19waWRfc3RhdHVzYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFza19udW1hX2ZhdWx0YCBpcyB1YmlxdWl0b3VzIG9yIHNwZWNpZmljLiBUaGUgc2lnbmF0dXJlIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gTlVNQSBoaW50aW5nIHBhZ2UgZmF1bHRzICggYGRvX251bWFfcGFnZWAgaXMgcHJvYmFibHkgYSBrZXkgY2FsbCBwYXRoKSwgbWFraW5nIGl0IGxlc3MgbGlrZWx5IHRvIGJlIGEgZ2VuZXJhbCwgaGlnaC1mcmVxdWVuY3kgZnVuY3Rpb24sIHRodXMgYWxzbyB1c2VmdWwuIEkgc2hvdWxkIGNoZWNrIHdoYXQgY2FsbHMgaXQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX251bWFfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oPTE5PWVudW0gbnVtYV92bWFza2lwX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oLTI5LSNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaDozMDpleHRlcm4gdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0zMS1leHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oPTU1PWJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01Ny0jZWxzZVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oOjU4OnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcyxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01OS1cdFx0XHRcdCAgIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM5NjM9dm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTk4LSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzozOTk5OnZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDAwMC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMjc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjMyOC1cdFx0bmlkID0gdGFyZ2V0X25pZDtcbm1tL2h1Z2VfbWVtb3J5LmM6MjMyOTpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIEhQQUdFX1BNRF9OUiwgZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMzMwLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzNDktXHRpZiAobmlkICE9IE5VTUFfTk9fTk9ERSlcbm1tL2h1Z2VfbWVtb3J5LmM6MjM1MDpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIEhQQUdFX1BNRF9OUiwgZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMzUxLVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtb3J5LmM9NjI4OD1zdGF0aWMgdm1fZmF1bHRfdCBkb19udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjM0Ny1cdFx0ZmxhZ3MgfD0gVE5GX01JR1JBVEVEO1xubW0vbWVtb3J5LmM6NjM0ODpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIG5yX3BhZ2VzLCBmbGFncyk7XG5tbS9tZW1vcnkuYy02MzQ5LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnkuYy02Mzc0LVx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXG5tbS9tZW1vcnkuYzo2Mzc1Olx0XHR0YXNrX251bWFfZmF1bHQobGFzdF9jcHVwaWQsIG5pZCwgbnJfcGFnZXMsIGZsYWdzKTtcbm1tL21lbW9yeS5jLTYzNzYtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzMKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5VTUEgQmFsYW5jaW5nIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBOVU1BIGJhbGFuY2luZyBmdW5jdGlvbmFsaXR5LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIG5ldyBzeW1ib2wgaW50cm9kdWNlZCBpcyBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYHByb2NfcGlkX3N0YXR1c2AgaW4gYGZzL3Byb2MvYXJyYXkuY2AgYW5kIGB0YXNrX251bWFfZmF1bHRgIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBDbGVhcmx5LCBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUsIGFuZCBgTlVNQV9CQUxBTkNJTkdgIGl0c2VsZiBpcyB0aGUgY3J1Y2lhbCBlbmFibGluZyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IGAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBndWFyZHMgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIHN0cnVjdHVyZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6IGBmcy9wcm9jL2FycmF5LmNgLCBgaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oYCwgYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgLCBga2VybmVsL3NjaGVkL2NvcmUuY2AsIGBpbml0L2luaXRfdGFzay5jYCwgYW5kIGBrZXJuZWwvZm9yay5jYC4gU28gaXQmIzM5O3MgY29uZmlybWVkLCBlbmFibGluZyBgTlVNQV9CQUxBTkNJTkdgIGFuZCBieSBhc3NvY2lhdGlvbiwgYE5VTUFgIGlzIHRoZSByaWdodCBwYXRoIHRvIHRha2UuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZzogdGhlIGNvcmUgc2NoZWR1bGVyIGlzIGludm9sdmVkLCBhbmQgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gYHByY3RsYCwgaW5jbHVkaW5nIG5ldyBvcGVyYXRpb25zIChgUFJfU0VUX05VTUFfQkFMQU5DSU5HYCwgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2ApLiBQbHVzLCB0aGVyZSYjMzk7cyBpbnRyaWNhdGUgdGhyZWFkIGdyb3VwIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBsb2dpYyB1c2luZyBgdGFza19ycV9sb2NrYCwgYHNjaGVkX2NoYW5nZWAsIGB0YXNrbGlzdF9sb2NrYCwgYW5kIGBmb3Jfb3RoZXJfdGhyZWFkc2AuIFRoZXJlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRhc2sgZW5xdWV1ZS9kZXF1ZXVlIGFjY291bnRpbmcsIGhhbmRsaW5nIG9mIE5VTUEgaGludGluZyBmYXVsdHMsIHNjYW5uaW5nLCBhbmQgbWlncmF0aW9uIGRlY2lzaW9ucy4gVGhpcyBpcyByaWNoIHRlcnJpdG9yeSBmb3IgcG90ZW50aWFsIGZ1enppbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gc2FuaXR5LWNoZWNrIG15IEZvY3VzU3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAsIGB0YXNrX251bWFfZmF1bHRgLCBhbmQgYHByb2NfcGlkX3N0YXR1c2AuIEkmIzM5O2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWxseSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3Byb2Nlc3NgIGFuZCBgcHJjdGxgLCBidXQgaW4gdGhpcyBjYXNlLCBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAgaXMgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0LCBhbHRob3VnaCBgcHJjdGxgIGRvZXMgd2FycmFudCBhdHRlbnRpb24uCgpBbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQV9CQUxBTkNJTkcmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQmIzM0OywKICAgICYjMzQ7dGFza19udW1hX2ZhdWx0JiMzNDssCiAgICAmIzM0O3Byb2NfcGlkX3N0YXR1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXG5cbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXCYjMzQ7ZW5hYmxlZFwmIzM0OywgXCYjMzQ7ZGlzYWJsZWRcJiMzNDssIFwmIzM0O3Vuc3VwcG9ydGVkXCYjMzQ7KSBpbnRvIHRoZSBzZXFfZmlsZS5cbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QKaW5kZXggYjYzMjhjZDBmNDNlOS4uN2Y2NjVjMjg4MjhhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0CkBAIC03NTQsNiAmIzQzOzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG8KIHBsYWNlIHRoZSBob3QgcGFnZXMgaW4gdGhlIGZhc3QgbWVtb3J5LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbgogdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby4KIAomIzQzO1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpCiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcKJiM0MztvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlCiYjNDM7dGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieQomIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpcwomIzQzO3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnMKJiM0Mzt0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQQomIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLAomIzQzO3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5CiYjNDM7cHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLgomIzQzOwomIzQzO0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yCiYjNDM7dGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90CiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXMKJiM0MztlZmZlY3QuCiYjNDM7CiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CkBAIC0xODgsNiAmIzQzOzE4OCw3IEBAIHJlYWQgdGhlIGZpbGUgL3Byb2MvUElEL3N0YXR1czo6CiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQgogICBDb3JlRHVtcGluZzogICAgMAogICBUSFBfZW5hYmxlZDoJICAxCiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZAogICBUaHJlYWRzOiAgICAgICAgMQogICBTaWdROiAgIDAvMjg1NzgKICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwCkBAIC0yNzQsNiAmIzQzOzI3NSwxMSBAQCBJdCYjMzk7cyBzbG93IGJ1dCB2ZXJ5IHByZWNpc2UuCiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhQIGNvbXBsZXRlbHksIG5vdCBqdXN0IHBhcnRpYWxseSkKJiM0MzsgTnVtYUJfbW9kZSAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2UKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkOyB0aGUgZWZmZWN0aXZlIGJlaGF2aW9yIGFsc28gZGVwZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGdsb2JhbCBudW1hX2JhbGFuY2luZyBzeXNjdGwgYW5kIG1lbW9yeQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5CiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzCiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWUKICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTQyNSw2ICYjNDM7NDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzZXFfcHJpbnRmKG0sICYjMzQ7VEhQX2VuYWJsZWQ6XHQlZFxuJiMzNDssIHRocF9lbmFibGVkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQomIzQzO3sKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0O051bWFCX21vZGU6XHQlc1xuJiMzNDssCiYjNDM7CQkgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKG0sICYjMzQ7TnVtYUJfbW9kZTpcdHVuc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXNlcV9wcmludGYobSwgJiMzNDt1bnRhZ19tYXNrOlx0JSNseFxuJiMzNDssIG1tX3VudGFnX21hc2sobW0pKTsKQEAgLTQ1Myw2ICYjNDM7NDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJdGFza191bnRhZ19tYXNrKG0sIG1tKTsKIAkJbW1wdXQobW0pOwogCX0KJiM0MzsJdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7CiAJdGFza19zaWcobSwgdGFzayk7CiAJdGFza19jYXAobSwgdGFzayk7CiAJdGFza19zZWNjb21wKG0sIHRhc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEzODIsNiAmIzQzOzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAlzaG9ydAkJCQlwcmVmX25vZGVfZm9yazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkvKgomIzQzOwkgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXMKJiM0MzsJICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGUKJiM0MzsJICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LgomIzQzOwkgKi8KJiM0MzsJYm9vbAkJCQludW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkOwogCWludAkJCQludW1hX3NjYW5fc2VxOwogCXVuc2lnbmVkIGludAkJCW51bWFfc2Nhbl9wZXJpb2Q7CiAJdW5zaWduZWQgaW50CQkJbnVtYV9zY2FuX3BlcmlvZF9tYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgKaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCiAjZGVmaW5lIFRORl9NSUdSQVRFRAkweDAxCiAjZGVmaW5lIFRORl9OT19HUk9VUAkweDAyCkBAIC0zMCw2ICYjNDM7MzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7CiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHAtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHApID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7fQogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJaW50IHNyY19uaWQsIGludCBkc3RfY3B1KTsKICNlbHNlCkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCiAJc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLyoKJiM0MzsJICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLgomIzQzOwkgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhcwomIzQzOwkgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkOwogI2VuZGlmCiAJLyoKIAkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCBiNmVjNmY2OTM3MTk1Li41YmMwYTJhMmE5MzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAtNDE2LDQgJiM0Mzs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7CiAjIGRlZmluZSBQUl9DRklfRElTQUJMRQkJX0JJVFVMKDEpCiAjIGRlZmluZSBQUl9DRklfTE9DSwkJX0JJVFVMKDIpCiAKJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgUFJfU0VUX05VTUFfQkFMQU5DSU5HCTgyCiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcJODMKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFCTAKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUJMQomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suYwppbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NAotLS0gYS9pbml0L2luaXRfdGFzay5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvaW5pdF90YXNrLmMKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7CiAJLmNwdXRpbWVyCQk9IHsKIAkJLmNwdXRpbWVfYXRvbWljCT0gSU5JVF9DUFVUSU1FX0FUT01JQywKIAl9LAomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLAogI2VuZGlmCiAJSU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscykKIAkucGlkcyA9IHsKQEAgLTIyNCw2ICYjNDM7MjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0gewogCS52dGltZS5zdGF0ZQk9IFZUSU1FX1NZUywKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsCiAJLm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSwKIAkubnVtYV9ncm91cAk9IE5VTEwsCiAJLm51bWFfZmF1bHRzCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjQ5Niw2ICYjNDM7MjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCiAJLyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiYjNDM7CXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPQomIzQzOwkJUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7CWlmICghKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX1RIUkVBRCkpCiYjNDM7CQlwLSZndDtzaWduYWwtJmd0O251bWFfYmFsYW5jaW5nX2VuYWJsZWQgPQomIzQzOwkJCXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyoKIAkgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWQKIAkgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbG9hZGF2Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbm9oei5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3JzZXFfYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvcnQuaCZndDsKQEAgLTYwMyw2ICYjNDM7NjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICAqCQkJCXAtJmd0O3NlLmxvYWQsIHAtJmd0O3J0X3ByaW9yaXR5LAogICoJCQkJcC0mZ3Q7ZGwuZGxfe3J1bnRpbWUsIGRlYWRsaW5lLCBwZXJpb2QsIGZsYWdzLCBidywgZGVuc2l0eX0KICAqICAtIHNjaGVkX3NldG51bWEoKToJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZAomIzQzOyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKToJcC0mZ3Q7c2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkLAomIzQzOyAqCQkJCQlwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkCiAgKiAgLSBzY2hlZF9tb3ZlX3Rhc2soKToJcC0mZ3Q7c2NoZWRfdGFza19ncm91cAogICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKQlwLSZndDt1Y2xhbXAqCiAgKgpAQCAtODQwNyw2ICYjNDM7ODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQogCXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiAJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9IG5pZDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CWd1YXJkKHRhc2tfcnFfbG9jaykocCk7CiYjNDM7CXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiYjNDM7CQlXUklURV9PTkNFKHAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgb2xkX2VuYWJsZWQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Rhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCAmYW1wO2ZsYWdzKSkpCiYjNDM7CQlyZXR1cm4gLUVTUkNIOwomIzQzOwomIzQzOwlvbGRfZW5hYmxlZCA9IGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZDsKJiM0MzsJaWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpCiYjNDM7CQlXUklURV9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7CiYjNDM7CiYjNDM7CXVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7CiYjNDM7CQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO3Rhc2tsaXN0X2xvY2spOwomIzQzOwkJZm9yX290aGVyX3RocmVhZHMoY3VycmVudCwgdCkKJiM0MzsJCQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7dGFza2xpc3RfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL25vaHouaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9wcmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2NhbGwuaCZndDsKQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4KIAkJICovCiAJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3NjaGVkX251bWFfYmFsYW5jaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgJmFtcDsmYW1wOwogCQkgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICZndDs9IDAgJmFtcDsmYW1wOwogCQkgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLSZndDtudW1hX3ByZWZlcnJlZF9uaWQpCiAJCQltbV9zY2hlZF9sbGMgPSAtMTsKQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJY3B1ID0gUkVBRF9PTkNFKHAtJmd0O21tLSZndDtzY19zdGF0LmNwdSk7CiAJaWYgKGNwdSAhPSAtMSkKIAkJbmlkID0gY3B1X3RvX25vZGUoY3B1KTsKQEAgLTIzODcsMTQgJiM0MzsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAKIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7Ci0JcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSBlbmFibGVkICZhbXA7JmFtcDsKJiM0MzsJCQkJIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7CiYjNDM7CXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTsKIH0KIAogc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJxLSZndDtucl9udW1hX3J1bm5pbmcgLT0gKHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpOwotCXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTsKJiM0MzsJcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7CiB9CiAKIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi8KQEAgLTMwODUsNiAmIzQzOzMwOTgsOSBAQCBzdGF0aWMgYm9vbCB0YXNrX251bWFfY29tcGFyZShzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LAogCQkJZ290byB1bmxvY2s7CiAJfQogCiYjNDM7CWlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCS8qIFNraXAgdGhpcyBzd2FwIGNhbmRpZGF0ZSBpZiBjYW5ub3QgbW92ZSB0byB0aGUgc291cmNlIGNwdS4gKi8KIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LSZndDtzcmNfY3B1LCBjdXItJmd0O2NwdXNfcHRyKSkKIAkJZ290byB1bmxvY2s7CkBAIC0zOTkyLDYgJiM0Mzs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKQogCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtzY2hlZF9udW1hX2JhbGFuY2luZykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlciYjMzk7cyBtbSAqLwogCWlmICghcC0mZ3Q7bW0pCiAJCXJldHVybjsKQEAgLTQ0MzYsNiAmIzQzOzQ0NTUsOSBAQCBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfbnVtYShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiAJaWYgKCFjdXJyLSZndDttbSB8fCAoY3Vyci0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay0mZ3Q7bmV4dCAhPSB3b3JrKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0CiAJICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGUKQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXAtJmd0O21tIHx8ICFwLSZndDtudW1hX2ZhdWx0cyB8fCAocC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfRVhJVElORykpCiAJCXJldHVybjsKIApAQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwLSZndDtudW1hX2ZhdWx0cyB8fCAhKGVudi0mZ3Q7c2QtJmd0O2ZsYWdzICZhbXA7IFNEX05VTUEpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmMKQEAgLTYwLDYgJiM0Mzs2MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CkBAIC0yOTA3LDYgJiM0MzsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsCiAJCWlmIChhcmczICZhbXA7IFBSX0NGSV9MT0NLICZhbXA7JmFtcDsgIShhcmczICZhbXA7IFBSX0NGSV9ESVNBQkxFKSkKIAkJCWVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzoKJiM0MzsJCWlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT0KJiM0MzsJCQkJCQkJIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkc6CiYjNDM7CQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpOwomIzQzOwkJaWYgKGVycm9yICZndDs9IDApCiYjNDM7CQkJZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6CiYjNDM7CQkJCVBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEU7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQl0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIE5VTUEgQmFsYW5jaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyB0aGUgcmlzay4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLiBUaGF0JiMzOTtzIHVzdWFsbHkgbG93IHJpc2ssIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aG9zZSB1cGRhdGVzIGZvciBhbnkgY29kZSBzbmlwcGV0cyBvciBpbmRpcmVjdGx5IHJlbGF0ZWQgY2hhbmdlcy4KCk5leHQsIEkgc2VlIGFkZGl0aW9ucyB0byBgL3Byb2MvW3BpZF0vc3RhdHVzYCB3aXRoIGBOdW1hQl9tb2RlYC4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBuZXcgZXhwb3NlZCBzdGF0ZS4gVGhlIGNvZGUgZm9ybWF0dGluZyB0aGF0IHJlbGllcyBvbiB1c2VyLXZpc2libGUgc3RhdGUgY291bGQgYmUgYW4gYXJlYSBmb3IgZnV6emluZy4KCkkmIzM5O20gc2VlaW5nIG5ldyBmaWVsZHMgYWRkZWQgdG8gYHRhc2tfc3RydWN0YCBhbmQgYHNpZ25hbF9zdHJ1Y3RgIHVuZGVyIGAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HYC4gVGhlc2UgYXJlIGtleSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZXNlIGZpZWxkcyBhcmUgKnVzZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiBUaGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgaW4gYG51bWFfYmFsYW5jaW5nLmhgIGFsc28gZGVtYW5kIGF0dGVudGlvbjsgdGhleSYjMzk7cmUgbGlrZWx5IGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZXNlIG5ldyBmaWVsZHMsIGFuZCB0aGF0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVGhlbiwgdGhlcmUgYXJlIHRoZSBhZGRpdGlvbnMgdG8gYHByY3RsLmhgLCB3aGljaCBkZWZpbmUgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIGEgbmV3IHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggaXMgYW4gb2J2aW91cyBhcmVhIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIHRyYW5zbGF0ZSB0byBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2VzLgoKVGhlIGluaXRpYWxpemF0aW9uIG9mIGBudW1hX2JhbGFuY2luZ19lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWRgIGluIGBpbml0X3Rhc2suY2AgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHN0YXRlIGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGUgYGZvcmsuY2AgY2hhbmdlcyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiAgSSYjMzk7bSBsb29raW5nIGNsb3NlbHkgYXQgaG93IHRoZSBuZXcgZmllbGRzIGFyZSBjb3BpZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIFRoZSBgUkVBRF9PTkNFYCBhbmQgY29uZGl0aW9uYWwgYXNzaWdubWVudCBsb29rIHNhZmUgZW5vdWdoIGJ1dCBuZWVkIGZ1cnRoZXIgZXhhbWluYXRpb24uICBJdCYjMzk7cyBjcml0aWNhbCB0aGF0IHRoZSBuZXcgc3RhdGUgaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZHVyaW5nIGBmb3JrYCBhbmQgdGhyZWFkaW5nLgoKRmluYWxseSwgdGhlIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzaygpYCBpbXBsZW1lbnRhdGlvbiBhbmQgYWxsIG9mIHRoZSB1c2VzIHdpdGhpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AgYXJlIGhpZ2gtcHJpb3JpdHkuICBUaGlzIHBhdGNoIGlzICpmdW5kYW1lbnRhbGx5KiBhbHRlcmluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLCBhbmQgdGhlIHZhcmlvdXMgTlVNQS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBhY2NvdW50X251bWFfZW5xdWV1ZWAsIGB0YXNrX251bWFfZmF1bHRgLCBldGMuLCBhcmUgdGhlIGNvcmUgb2YgdGhlIG5ldyBsb2dpYy4gQW55IGVycm9ycyBoZXJlIGNvdWxkIGxlYWQgdG8gaGFyZC10by1kZWJ1ZyBzY2hlZHVsaW5nIGFub21hbGllcy4gIFRoZSBzeXMuYyBoYW5kbGluZyBvZiB0aGUgYHByY3RsYCBjYWxscyBjb25maXJtcyBhIHN5c3RlbSBjYWxsIGludGVyZmFjZSB3aGljaCBpcyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgdGFza19zdHJ1Y3RgIGFuZCBgc2lnbmFsX3N0cnVjdGAgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYGZvcmtgLiBJJiMzOTttIGdvaW5nIHRvIHVzZSBteSBncmVwcGVyIHRvb2wgdG8gdHJhY2UgaG93IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgaW4gYGZvcmsuY2AgdG8gY2xhcmlmeSB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aG9zZSBhbGxvY2F0aW9uIGFuZCBjb3B5IHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NpZ25hbF9zdHJ1Y3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNvcHlfc2lnbmFsYCBpbiBga2VybmVsL2ZvcmsuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmFscyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGBmb3JrKClgIG9wZXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgY29weV9zaWduYWxgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBrZXJuZWwvZm9yay5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGlzc2VjdCBob3cgc2lnbmFsIGRpc3Bvc2l0aW9ucyBhcmUgY29waWVkIG9yLCBtb3JlIGFjY3VyYXRlbHksICpub3QqIGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBjaGlsZC4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBzdWJ0bGUgc2hpZnRzIGluIHNpZ25hbCBzZW1hbnRpY3Mgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gc2lnbmFsIG1hc2tpbmcgYW5kIHRoZSBoYW5kbGluZyBvZiByZWFsLXRpbWUgc2lnbmFscywgc28gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBzaWduYWxzIGFyZSBpbmhlcml0ZWQgd2l0aCB0aGVpciBkZWZhdWx0IGFjdGlvbnMgdmVyc3VzIHRob3NlIHRoYXQgbWF5IGJlIHJlc2V0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBjbG9uZSgpYCBmbGFncyBhbmQgcG90ZW50aWFsIHRocmVhZC1zcGVjaWZpYyBzaWduYWwgaGFuZGxpbmcuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHdpdGggdGhlIGBzaWdwZW5kaW5nYCBzdHJ1Y3R1cmUgYXMgd2VsbCwgYW5kIEkgd2FudCB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbiBpcyBkb25lIHRvIGF2b2lkIGNvcHlpbmcgdW5uZWNlc3Nhcnkgc2lnbmFsIGRhdGEuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHNpZ25hbCBoYW5kbGVyIGR1cGxpY2F0aW9uIG9jY3VycyBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgY29weSBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9zaWduYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTczMD1zdGF0aWMgdm9pZCBwb3NpeF9jcHVfdGltZXJzX2luaXRfZ3JvdXAoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZylcbi0tXG5rZXJuZWwvZm9yay5jLTE3MzgtXG5rZXJuZWwvZm9yay5jOjE3Mzk6c3RhdGljIGludCBjb3B5X3NpZ25hbCh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xNzQwLXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5Njc9c3RhdGljIHZvaWQgY29weV9vb21fc2NvcmVfYWRqKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc5LVx0bW1fZmxhZ3Nfc2V0KE1NRl9NVUxUSVBST0NFU1MsIHRzay1cdTAwM2VtbSk7XG5rZXJuZWwvZm9yay5jOjE5ODA6XHQvKiBVcGRhdGUgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgd2VyZSBjaGFuZ2VkIGFmdGVyIGNvcHlfc2lnbmFsICovXG5rZXJuZWwvZm9yay5jLTE5ODEtXHR0c2stXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGogPSBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fc2NvcmVfYWRqO1xuLS1cbmtlcm5lbC9mb3JrLmM9MjAxMj1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjMwMy1cdFx0Z290byBiYWRfZm9ya19jbGVhbnVwX2ZzO1xua2VybmVsL2ZvcmsuYzoyMzA0Olx0cmV0dmFsID0gY29weV9zaWduYWwoY2xvbmVfZmxhZ3MsIHApO1xua2VybmVsL2ZvcmsuYy0yMzA1LVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBjb3B5X3NpZ25hbGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc2lnbmFscyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGBmb3JrYCBwcm9jZXNzLCBhbmQgdGhhdCBtZWFucyBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyBvciBtYW5hZ2VzIHNpZ25hbHMgZnJvbSB0aGUgcGFyZW50LiBUaGUgYGtlcm5lbC9mb3JrLmNgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIGJlLCBzbyBJJiMzOTttIG5hdmlnYXRpbmcgdGhlcmUgbm93IGFuZCB0YXJnZXRpbmcgdGhlIGBjb3B5X3NpZ25hbGAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGxvZ2ljLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHNpZ25hbCBtYXNrcyBvciBoYW5kbGVycyBtaWdodCBiZSBjb3BpZWQsIGNsZWFyZWQsIG9yIG90aGVyd2lzZSBtYW5pcHVsYXRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgc2lnbmFsLXNwZWNpZmljIGluZm9ybWF0aW9uIGlzIGR1cGxpY2F0ZWQsIGluaGVyaXRlZCwgb3IgaWYgdGhlIGNoaWxkIHN0YXJ0cyB3aXRoIGEgZnJlc2ggc2xhdGUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIG9mIHRoZSBmb3JrIHN5c3RlbSBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Mzk6XHRzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4xNzQwOlx0e1xuMTc0MTpcdFx0c3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZztcbjE3NDI6XHRcbjE3NDM6XHRcdGlmIChjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKVxuMTc0NDpcdFx0XHRyZXR1cm4gMDtcbjE3NDU6XHRcbjE3NDY6XHRcdHNpZyA9IGttZW1fY2FjaGVfemFsbG9jKHNpZ25hbF9jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTc0NzpcdFx0dHNrLVx1MDAzZXNpZ25hbCA9IHNpZztcbjE3NDg6XHRcdGlmICghc2lnKVxuMTc0OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NTA6XHRcbjE3NTE6XHRcdHNpZy1cdTAwM2Vucl90aHJlYWRzID0gMTtcbjE3NTI6XHRcdHNpZy1cdTAwM2VxdWlja190aHJlYWRzID0gMTtcbjE3NTM6XHRcdGF0b21pY19zZXQoXHUwMDI2c2lnLVx1MDAzZWxpdmUsIDEpO1xuMTc1NDpcdFx0cmVmY291bnRfc2V0KFx1MDAyNnNpZy1cdTAwM2VzaWdjbnQsIDEpO1xuMTc1NTpcdFxuMTc1NjpcdFx0LyogbGlzdF9hZGQodGhyZWFkX25vZGUsIHRocmVhZF9oZWFkKSB3aXRob3V0IElOSVRfTElTVF9IRUFEKCkgKi9cbjE3NTc6XHRcdHNpZy1cdTAwM2V0aHJlYWRfaGVhZCA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHRzay1cdTAwM2V0aHJlYWRfbm9kZSk7XG4xNzU4Olx0XHR0c2stXHUwMDNldGhyZWFkX25vZGUgPSAoc3RydWN0IGxpc3RfaGVhZClMSVNUX0hFQURfSU5JVChzaWctXHUwMDNldGhyZWFkX2hlYWQpO1xuMTc1OTpcdFxuMTc2MDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzaWctXHUwMDNld2FpdF9jaGxkZXhpdCk7XG4xNzYxOlx0XHRzaWctXHUwMDNlY3Vycl90YXJnZXQgPSB0c2s7XG4xNzYyOlx0XHRpbml0X3NpZ3BlbmRpbmcoXHUwMDI2c2lnLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbjE3NjM6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZzaWctXHUwMDNlbXVsdGlwcm9jZXNzKTtcbjE3NjQ6XHRcdHNlcWxvY2tfaW5pdChcdTAwMjZzaWctXHUwMDNlc3RhdHNfbG9jayk7XG4xNzY1Olx0XHRwcmV2X2NwdXRpbWVfaW5pdChcdTAwMjZzaWctXHUwMDNlcHJldl9jcHV0aW1lKTtcbjE3NjY6XHRcbjE3Njc6XHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xuMTc2ODpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNpZy1cdTAwM2Vwb3NpeF90aW1lcnMpO1xuMTc2OTpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNpZy1cdTAwM2VpZ25vcmVkX3Bvc2l4X3RpbWVycyk7XG4xNzcwOlx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnNpZy1cdTAwM2VyZWFsX3RpbWVyLCBpdF9yZWFsX2ZuLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuMTc3MTpcdCNlbmRpZlxuMTc3MjpcdFxuMTc3MzpcdFx0dGFza19sb2NrKGN1cnJlbnQtXHUwMDNlZ3JvdXBfbGVhZGVyKTtcbjE3NzQ6XHRcdG1lbWNweShzaWctXHUwMDNlcmxpbSwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlcmxpbSwgc2l6ZW9mIHNpZy1cdTAwM2VybGltKTtcbjE3NzU6XHRcdHRhc2tfdW5sb2NrKGN1cnJlbnQtXHUwMDNlZ3JvdXBfbGVhZGVyKTtcbjE3NzY6XHRcbjE3Nzc6XHRcdHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpO1xuMTc3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwOAoJCQkJCQkJb3V0cHV0OiAzNDIKCQkJCQkJCXRob3VnaHRzOiA2ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBOVU1BIEJhbGFuY2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHNpZ25hbF9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gV2UgYWxzbyBzZWUgdGhpcyBzdHJ1Y3R1cmUgc3RhdGljYWxseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBhbmQgYWdhaW4sIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24gdmlhIGBjb3B5X3Byb2Nlc3NgLgoKTm93LCB0aGUgbWFpbiBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlLi4uCgpGaXJzdCwgYXJlIHdlIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlcnNwYWNlPyBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBkZWFsaW5nIHdpdGggYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBMb29raW5nIGF0IGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgLCBpdCBzaW1wbHkgcmV0dXJucyBhIHZhbHVlIGRpcmVjdGx5LCBubyBkYXRhIGNvcHlpbmcuIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHByaW50cyBzdHJpbmcgbGl0ZXJhbHMuIE5vIHVzZXItc3BhY2UgbGVha3MuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCk5leHQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxvZ2ljIGZsYXdzIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gYGluaXRfdGFza2Agc2VlbXMgdG8gaW5pdGlhbGl6ZSBgLm51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWRgICphbmQqIGBpbml0X3NpZ25hbHMubnVtYV9iYWxhbmNpbmdfZW5hYmxlZGAuIEV2ZXJ5IHByb2Nlc3MgZm9yayAqZXhwbGljaXRseSogc2V0cyBib3RoIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCAqYW5kKiBgc2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkYC4gYGttZW1fY2FjaGVfemFsbG9jYCBpcyBhbHJlYWR5IHplcm9pbmcgaXQgYW55d2F5LiBFdmVuIHdpdGggbm9uLU5VTUEgY29uZmlncywgc3R1YiBmdW5jdGlvbnMgcHJldmVudCBhbnkgaXNzdWVzLiBObyBsb2dpY2FsIGhvbGVzIGRldGVjdGVkLgoKTm93LCBkbyB3ZSBoYXZlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBub3QgaGVyZS4KCkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgoKU28sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBaZXJvLiBUaGlzIGlzIGdyZWF0LgoKTm93LCBjb25jZXJuaW5nIEtBU0FOIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuLi4gVGhlIGNvZGUgdXNlcyBjb21tb24gbG9ja2luZyBwcmltaXRpdmVzIGxpa2UgYHRhc2tfcnFfbG9ja2AsIGBzY29wZWRfZ3VhcmQoc2NoZWRfY2hhbmdlKWAsIGBsb2NrX3Rhc2tfc2lnaGFuZGAsIGBtdXRleGAsIGFuZCBgdGFza2xpc3RfbG9ja2AuIEFueSBsb2NraW5nIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuIEtBU0FOIGlzIGluIHBsYWNlIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcy4gQmVjYXVzZSB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuCgpJbiBzdW1tYXJ5LCBJIGFtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZSwgYW5kIHRoZXJlIGlzIGEgY2xlYXIgY29udHJhc3QgdG8gS0FTQU4mIzM5O3MgYXBwbGljYWJpbGl0eS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgbXkgYXNzZXNzbWVudC4gVGltZSB0byBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cblxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcJiMzNDtlbmFibGVkXCYjMzQ7LCBcJiMzNDtkaXNhYmxlZFwmIzM0OywgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspIGludG8gdGhlIHNlcV9maWxlLlxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXG5cbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXCYjMzQ7ZW5hYmxlZFwmIzM0OywgXCYjMzQ7ZGlzYWJsZWRcJiMzNDssIFwmIzM0O3Vuc3VwcG9ydGVkXCYjMzQ7KSBpbnRvIHRoZSBzZXFfZmlsZS5cbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTguODk2MTkxNDM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNzM3NzE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQV9CQUxBTkNJTkdcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50XCIsXG4gICAgXCJ0YXNrX251bWFfZmF1bHRcIixcbiAgICBcInByb2NfcGlkX3N0YXR1c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXFxuXFxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XFxuICAgLSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcgcmV0dXJucyBhbiBpbnRlZ2VyIHN0YXR1cyBkaXJlY3RseSBhcyB0aGUgc3lzY2FsbCByZXR1cm4gdmFsdWU7IG5vIHVzZXIgbWVtb3J5IGJ1ZmZlciBpcyB3cml0dGVuLlxcbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcXFwiZW5hYmxlZFxcXCIsIFxcXCJkaXNhYmxlZFxcXCIsIFxcXCJ1bnN1cHBvcnRlZFxcXCIpIGludG8gdGhlIHNlcV9maWxlLlxcbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxcbiAgIC0gRmllbGRzIGFkZGVkIHRvIGBzdHJ1Y3QgdGFza19zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKSBhbmQgYHN0cnVjdCBzaWduYWxfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfZW5hYmxlZCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYGluaXRfdGFzay5jYCwgYGNvcHlfcHJvY2VzcygpYCwgYW5kIGZhbGxiYWNrIHN0dWIgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB3aGVuIENPTkZJR19OVU1BX0JBTEFOQ0lORyBpcyBkaXNhYmxlZC5cXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxcbiAgIC0gQW55IGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBzY2hlZHVsZXIgc3RhdGUgdHJhbnNpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIHN1YmplY3QgdG8gTE9DS0RFUCBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNTo1OC44OTYxOTgwOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjE5OTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDoyNTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcXG5AQCAtNzU0LDYgKzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG9cXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXFxuIHVubWFwcGluZyBhbmQgcGFnZSBmYXVsdCB0b28uXFxuIFxcbitUaGUgYGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgYCBhbmQgYGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgYCBwcmN0bCgyKVxcbitvcGVyYXRpb25zIGNhbiBiZSB1c2VkIGJ5IGEgcHJvY2VzcyB0byBvcHQgb3V0IG9mIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZ1xcbitvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlXFxuK3RocmVhZCBncm91cCBtYXkgY2hhbmdlIHRoZSBwcm9jZXNzIHNldHRpbmcuICBUaGUgc2V0dGluZyBpcyBpbmhlcml0ZWQgYnlcXG4rZm9yaygyKSwgaXMgc2hhcmVkIGJ5IHRocmVhZHMgY3JlYXRlZCB3aXRoIGNsb25lKDIpIGBgQ0xPTkVfVEhSRUFEYGAgYW5kIGlzXFxuK3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnNcXG4rdGhlIHRvcC1sZXZlbCBjb250cm9sOiBhIHByb2Nlc3MtbGV2ZWwgZW5hYmxlIGRvZXMgbm90IHR1cm4gYXV0b21hdGljIE5VTUFcXG4rYmFsYW5jaW5nIG9uIHdoZW4gaXQgaXMgZGlzYWJsZWQgc3lzdGVtLXdpZGUuICBNZW1vcnkgcG9saWN5IHN0aWxsIGFwcGxpZXMsXFxuK3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5XFxuK3ByZXZlbnRzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZy5cXG4rXFxuK0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yXFxuK3RoYXQgcHJvY2Vzcy4gRXhpc3RpbmcgTlVNQSBoaW50aW5nIFBURXMgYW5kIGFscmVhZHkgcXVldWVkIHdvcmsgYXJlIG5vdFxcbithY3RpdmVseSBjbGVhcmVkIGFuZCBtYXkgc3RpbGwgZHJhaW4gbmF0dXJhbGx5IGFzIHRoZSBkaXNhYmxlZCBzdGF0ZSB0YWtlc1xcbitlZmZlY3QuXFxuK1xcbiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwc1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG5pbmRleCBjMTAyYjYyMDIzY2RjLi5hNGU5MDM3YTMxNjEyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XFxuQEAgLTE4OCw2ICsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxcbiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQlxcbiAgIENvcmVEdW1waW5nOiAgICAwXFxuICAgVEhQX2VuYWJsZWQ6XFx0ICAxXFxuKyAgTnVtYUJfbW9kZTogICAgIGVuYWJsZWRcXG4gICBUaHJlYWRzOiAgICAgICAgMVxcbiAgIFNpZ1E6ICAgMC8yODU3OFxcbiAgIFNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMFxcbkBAIC0yNzQsNiArMjc1LDExIEBAIEl0J3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxcbiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSX1NFVF9USFBfRElTQUJMRSBpcyBzZXQgb24gdGhlIHByb2Nlc3MgdG8gZGlzYWJsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXFxuKyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2VcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5XFxuICBUaHJlYWRzICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRocmVhZHNcXG4gIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlXFxuICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZFxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmNcXG5pbmRleCBmNmY3NWQyMDY3NjJhLi5hMjdhNmE1N2U4YjIyIDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvYXJyYXkuY1xcbisrKyBiL2ZzL3Byb2MvYXJyYXkuY1xcbkBAIC00MjUsNiArNDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwiVEhQX2VuYWJsZWQ6XFxcXHQlZFxcXFxuXFxcIiwgdGhwX2VuYWJsZWQpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4re1xcbitcXHRzZXFfcHJpbnRmKG0sIFxcXCJOdW1hQl9tb2RlOlxcXFx0JXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIHRhc2tfbnVtYV9iYWxhbmNpbmdfbW9kZV9uYW1lKHRhc2spKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuK3tcXG4rXFx0c2VxX3B1dHMobSwgXFxcIk51bWFCX21vZGU6XFxcXHR1bnN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza191bnRhZ19tYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwidW50YWdfbWFzazpcXFxcdCUjbHhcXFxcblxcXCIsIG1tX3VudGFnX21hc2sobW0pKTtcXG5AQCAtNDUzLDYgKzQ2OCw3IEBAIGludCBwcm9jX3BpZF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXFxuIFxcdFxcdHRhc2tfdW50YWdfbWFzayhtLCBtbSk7XFxuIFxcdFxcdG1tcHV0KG1tKTtcXG4gXFx0fVxcbitcXHR0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhtLCB0YXNrKTtcXG4gXFx0dGFza19zaWcobSwgdGFzayk7XFxuIFxcdHRhc2tfY2FwKG0sIHRhc2spO1xcbiBcXHR0YXNrX3NlY2NvbXAobSwgdGFzayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTEzODIsNiArMTM4MiwxMiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHRzaG9ydFxcdFxcdFxcdFxcdHByZWZfbm9kZV9mb3JrO1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbitcXHQvKlxcbitcXHQgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXNcXG4rXFx0ICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGVcXG4rXFx0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XFxuIFxcdGludFxcdFxcdFxcdFxcdG51bWFfc2Nhbl9zZXE7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdG51bWFfc2Nhbl9wZXJpb2Q7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdG51bWFfc2Nhbl9wZXJpb2RfbWF4O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcXG5pbmRleCA1MmIyMmM1YzM5NmRiLi42OWU3OTM1OWZhMjJlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxcbkBAIC04LDYgKzgsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFRORl9NSUdSQVRFRFxcdDB4MDFcXG4gI2RlZmluZSBUTkZfTk9fR1JPVVBcXHQweDAyXFxuQEAgLTMwLDYgKzMxLDI3IEBAIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xcbiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuIGV4dGVybiB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCk7XFxuIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaW5hbCk7XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShwLVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQpO1xcbit9XFxuK1xcbitpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoY3VycmVudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbit7XFxuK1xcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiO1xcbit9XFxuIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRpbnQgc3JjX25pZCwgaW50IGRzdF9jcHUpO1xcbiAjZWxzZVxcbkBAIC00Nyw2ICs2OSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxcbiB7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4gc3RhdGljIGlubGluZSBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxcbkBAIC0xNzksNiArMTc5LDE0IEBAIHN0cnVjdCBzaWduYWxfc3RydWN0IHtcXG4gXFxuICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQXFxuIFxcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4rXFx0LypcXG4rXFx0ICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLlxcbitcXHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xcbitcXHQgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xcbiAjZW5kaWZcXG4gXFx0LypcXG4gXFx0ICogQ3VtdWxhdGl2ZSByZXNvdXJjZSBjb3VudGVycyBmb3IgZGVhZCB0aHJlYWRzIGluIHRoZSBncm91cCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxcbmluZGV4IGI2ZWM2ZjY5MzcxOTUuLjViYzBhMmEyYTkzMGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxcbkBAIC00MTYsNCArNDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xcbiAjIGRlZmluZSBQUl9DRklfRElTQUJMRVxcdFxcdF9CSVRVTCgxKVxcbiAjIGRlZmluZSBQUl9DRklfTE9DS1xcdFxcdF9CSVRVTCgyKVxcbiBcXG4rLyogUGVyLXByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIGNvbnRyb2wgKi9cXG4rI2RlZmluZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkdcXHQ4MlxcbisjZGVmaW5lIFBSX0dFVF9OVU1BX0JBTEFOQ0lOR1xcdDgzXFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEVcXHQwXFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRVxcdDFcXG4rXFxuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xcbmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suY1xcbmluZGV4IGFkYjIwN2NkOTg3YzUuLjgzNWJiM2Y3YTE3ZWIgMTAwNjQ0XFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xcbisrKyBiL2luaXQvaW5pdF90YXNrLmNcXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0ge1xcbiBcXHQuY3B1dGltZXJcXHRcXHQ9IHtcXG4gXFx0XFx0LmNwdXRpbWVfYXRvbWljXFx0PSBJTklUX0NQVVRJTUVfQVRPTUlDLFxcbiBcXHR9LFxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbitcXHQubnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9IHRydWUsXFxuICNlbmRpZlxcbiBcXHRJTklUX0NQVV9USU1FUlMoaW5pdF9zaWduYWxzKVxcbiBcXHQucGlkcyA9IHtcXG5AQCAtMjI0LDYgKzIyNyw3IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCBpbml0X3Rhc2sgX19hbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSA9IHtcXG4gXFx0LnZ0aW1lLnN0YXRlXFx0PSBWVElNRV9TWVMsXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK1xcdC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID0gdHJ1ZSxcXG4gXFx0Lm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSxcXG4gXFx0Lm51bWFfZ3JvdXBcXHQ9IE5VTEwsXFxuIFxcdC5udW1hX2ZhdWx0c1xcdD0gTlVMTCxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTI0OTYsNiArMjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXG4gXFx0LyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovXFxuIFxcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK1xcdHAtXFx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPVxcbitcXHRcXHRSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcXG4rXFx0aWYgKCEoY2xvbmVfZmxhZ3MgXFx1MDAyNiBDTE9ORV9USFJFQUQpKVxcbitcXHRcXHRwLVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxcbitcXHRcXHRcXHRwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xcbisjZW5kaWZcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgc2VjY29tcCBkZXRhaWxzIGV4cGxpY2l0bHkgaGVyZSwgaW4gY2FzZSB0aGV5IHdlcmUgY2hhbmdlZFxcbiBcXHQgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0zNiw2ICszNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2xvYWRhdmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcXHUwMDNlXFxuQEAgLTYwMyw2ICs2MDQsOCBAQCBpbnQgdGFza19sbGMoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiAgKlxcdFxcdFxcdFxcdHAtXFx1MDAzZXNlLmxvYWQsIHAtXFx1MDAzZXJ0X3ByaW9yaXR5LFxcbiAgKlxcdFxcdFxcdFxcdHAtXFx1MDAzZWRsLmRsX3tydW50aW1lLCBkZWFkbGluZSwgcGVyaW9kLCBmbGFncywgYncsIGRlbnNpdHl9XFxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcXHRcXHRwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcXG4rICogIC0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudCgpOlxcdHAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCxcXG4rICpcXHRcXHRcXHRcXHRcXHRwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXFxuICAqICAtIHNjaGVkX21vdmVfdGFzaygpOlxcdHAtXFx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcXG4gICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKVxcdHAtXFx1MDAzZXVjbGFtcCpcXG4gICpcXG5AQCAtODQwNyw2ICs4NDEwLDQyIEBAIHZvaWQgc2NoZWRfc2V0bnVtYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpXFxuIFxcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXFxuIFxcdFxcdHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9IG5pZDtcXG4gfVxcbitcXG4rc3RhdGljIHZvaWQgc2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGVuYWJsZWQpXFxuK3tcXG4rXFx0Z3VhcmQodGFza19ycV9sb2NrKShwKTtcXG4rXFx0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcXG4rXFx0XFx0V1JJVEVfT05DRShwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkLCBlbmFibGVkKTtcXG4rfVxcbitcXG4raW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHN0YXRpYyBERUZJTkVfTVVURVgodGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0Ym9vbCBvbGRfZW5hYmxlZDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcXHUwMDI2ZmxhZ3MpKSlcXG4rXFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4rXFxuK1xcdG9sZF9lbmFibGVkID0gY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkO1xcbitcXHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZClcXG4rXFx0XFx0V1JJVEVfT05DRShjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsIGVuYWJsZWQpO1xcbitcXG4rXFx0dW5sb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0aWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpIHtcXG4rXFx0XFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soY3VycmVudCwgZW5hYmxlZCk7XFxuK1xcdFxcdHJlYWRfbG9jayhcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuK1xcdFxcdGZvcl9vdGhlcl90aHJlYWRzKGN1cnJlbnQsIHQpXFxuK1xcdFxcdFxcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHQsIGVuYWJsZWQpO1xcbitcXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFVcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuQEAgLTM4LDYgKzM4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2NvbmRfcmVzY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFxcdTAwM2VcXG5AQCAtMTcxMiw2ICsxNzEzLDcgQEAgc3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0XFx0ICogY29uZmxpY3Qgb25seSBleGlzdHMgZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBjcHVfdG9fbm9kZShtbV9zY2hlZF9jcHUpICE9IHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZClcXG4gXFx0XFx0XFx0bW1fc2NoZWRfbGxjID0gLTE7XFxuQEAgLTE4MDgsNiArMTgxMCw5IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NwdW1hc2tzKGNwdW1hc2tfdmFyX3QgY3B1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRjcHUgPSBSRUFEX09OQ0UocC1cXHUwMDNlbW0tXFx1MDAzZXNjX3N0YXQuY3B1KTtcXG4gXFx0aWYgKGNwdSAhPSAtMSlcXG4gXFx0XFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcXG5AQCAtMjM4NywxNCArMjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2VucXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuLVxcdHJxLVxcdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gKHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xcbi1cXHRycS1cXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgKz0gKHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xcbitcXHRib29sIGVuYWJsZWQgPSB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKTtcXG4rXFxuK1xcdHJxLVxcdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcXG4rXFx0cnEtXFx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nICs9IGVuYWJsZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBhY2NvdW50X251bWFfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4tXFx0cnEtXFx1MDAzZW5yX251bWFfcnVubmluZyAtPSAocC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XFxuLVxcdHJxLVxcdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7XFxuK1xcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xcbitcXG4rXFx0cnEtXFx1MDAzZW5yX251bWFfcnVubmluZyAtPSBlbmFibGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCBwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xcbitcXHRycS1cXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XFxuIH1cXG4gXFxuIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi9cXG5AQCAtMzA4NSw2ICszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbiBcXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXFxuIFxcdGlmICghY3B1bWFza190ZXN0X2NwdShlbnYtXFx1MDAzZXNyY19jcHUsIGN1ci1cXHUwMDNlY3B1c19wdHIpKVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzk5Miw2ICs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKVxcbiBcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlcidzIG1tICovXFxuIFxcdGlmICghcC1cXHUwMDNlbW0pXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNDQzNiw2ICs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxcbiBcXHRpZiAoIWN1cnItXFx1MDAzZW1tIHx8IChjdXJyLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9FWElUSU5HIHwgUEZfS1RIUkVBRCkpIHx8IHdvcmstXFx1MDAzZW5leHQgIT0gd29yaylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVXNpbmcgcnVudGltZSByYXRoZXIgdGhhbiB3YWxsdGltZSBoYXMgdGhlIGR1YWwgYWR2YW50YWdlIHRoYXRcXG4gXFx0ICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGVcXG5AQCAtNDQ2Myw2ICs0NDg1LDkgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCFwLVxcdTAwM2VtbSB8fCAhcC1cXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfRVhJVElORykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNDc1LDYgKzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4gXFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKCFwLVxcdTAwM2VudW1hX2ZhdWx0cyB8fCAhKGVudi1cXHUwMDNlc2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0RfTlVNQSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jXFxuaW5kZXggMzViNTM4YmE4NDNjNy4uZmIwMTg0MWMwY2U5MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc3lzLmNcXG4rKysgYi9rZXJuZWwvc3lzLmNcXG5AQCAtNjAsNiArNjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2NvcmVkdW1wLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGUuaFxcdTAwM2VcXG5AQCAtMjkwNyw2ICsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuIFxcdFxcdGlmIChhcmczIFxcdTAwMjYgUFJfQ0ZJX0xPQ0sgXFx1MDAyNlxcdTAwMjYgIShhcmczIFxcdTAwMjYgUFJfQ0ZJX0RJU0FCTEUpKVxcbiBcXHRcXHRcXHRlcnJvciA9IGFyY2hfcHJjdGxfbG9ja19icmFuY2hfbGFuZGluZ19wYWRfc3RhdGUobWUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkc6XFxuK1xcdFxcdGlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBSX0dFVF9OVU1BX0JBTEFOQ0lORzpcXG4rXFx0XFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRlcnJvciA9IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQoKTtcXG4rXFx0XFx0aWYgKGVycm9yIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGVycm9yID0gZXJyb3IgPyBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUgOlxcbitcXHRcXHRcXHRcXHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0dHJhY2VfdGFza19wcmN0bF91bmtub3duKG9wdGlvbiwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7XFxuIFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTkuNDk5MjM1NTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDkyMzE5NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmQwZWE3YTNiMzMxNWM3NTI2NmY0ZDA2YjJmMmNkMThiYTg4MjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDoyNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5pbmRleCBiNjMyOGNkMGY0M2U5Li43ZjY2NWMyODgyOGE4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxuQEAgLTc1NCw2ICs3NTQsMjIgQEAgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAocmVwcmVzZW50ZWQgYXMgZGlmZmVyZW50IE5VTUEgbm9kZXMpIHRvXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXG4gdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby5cbiBcbitUaGUgYGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgYCBhbmQgYGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgYCBwcmN0bCgyKVxuK29wZXJhdGlvbnMgY2FuIGJlIHVzZWQgYnkgYSBwcm9jZXNzIHRvIG9wdCBvdXQgb2YgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nXG4rb3IgcmUtZW5hYmxlIHBhcnRpY2lwYXRpb24gZm9yIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAuICBBbnkgdGhyZWFkIGluIHRoZVxuK3RocmVhZCBncm91cCBtYXkgY2hhbmdlIHRoZSBwcm9jZXNzIHNldHRpbmcuICBUaGUgc2V0dGluZyBpcyBpbmhlcml0ZWQgYnlcbitmb3JrKDIpLCBpcyBzaGFyZWQgYnkgdGhyZWFkcyBjcmVhdGVkIHdpdGggY2xvbmUoMikgYGBDTE9ORV9USFJFQURgYCBhbmQgaXNcbitwcmVzZXJ2ZWQgYWNyb3NzIGV4ZWN2ZSgyKS4gIFRoZSBnbG9iYWwgYGBudW1hX2JhbGFuY2luZ2BgIHN5c2N0bCByZW1haW5zXG4rdGhlIHRvcC1sZXZlbCBjb250cm9sOiBhIHByb2Nlc3MtbGV2ZWwgZW5hYmxlIGRvZXMgbm90IHR1cm4gYXV0b21hdGljIE5VTUFcbitiYWxhbmNpbmcgb24gd2hlbiBpdCBpcyBkaXNhYmxlZCBzeXN0ZW0td2lkZS4gIE1lbW9yeSBwb2xpY3kgc3RpbGwgYXBwbGllcyxcbitzbyB0aGUgcHJvY2VzcyBzZXR0aW5nIGRvZXMgbm90IG1ha2UgVk1BcyBwYXJ0aWNpcGF0ZSB3aGVuIHRoZWlyIHBvbGljeVxuK3ByZXZlbnRzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZy5cbitcbitEaXNhYmxpbmcgdGhlIHByb2Nlc3Mgc2V0dGluZyBzdG9wcyBzY2hlZHVsaW5nIG5ldyBwZXJpb2RpYyBOVU1BIHNjYW5zIGZvclxuK3RoYXQgcHJvY2Vzcy4gRXhpc3RpbmcgTlVNQSBoaW50aW5nIFBURXMgYW5kIGFscmVhZHkgcXVldWVkIHdvcmsgYXJlIG5vdFxuK2FjdGl2ZWx5IGNsZWFyZWQgYW5kIG1heSBzdGlsbCBkcmFpbiBuYXR1cmFsbHkgYXMgdGhlIGRpc2FibGVkIHN0YXRlIHRha2VzXG4rZWZmZWN0LlxuK1xuIG51bWFfYmFsYW5jaW5nX3Byb21vdGVfcmF0ZV9saW1pdF9NQnBzXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbkBAIC0xODgsNiArMTg4LDcgQEAgcmVhZCB0aGUgZmlsZSAvcHJvYy9QSUQvc3RhdHVzOjpcbiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQlxuICAgQ29yZUR1bXBpbmc6ICAgIDBcbiAgIFRIUF9lbmFibGVkOlx0ICAxXG4rICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZFxuICAgVGhyZWFkczogICAgICAgIDFcbiAgIFNpZ1E6ICAgMC8yODU3OFxuICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwXG5AQCAtMjc0LDYgKzI3NSwxMSBAQCBJdCdzIHNsb3cgYnV0IHZlcnkgcHJlY2lzZS5cbiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJfU0VUX1RIUF9ESVNBQkxFIGlzIHNldCBvbiB0aGUgcHJvY2VzcyB0byBkaXNhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSFAgY29tcGxldGVseSwgbm90IGp1c3QgcGFydGlhbGx5KVxuKyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2hlbiBzdXBwb3J0ZWQsIG90aGVyd2lzZVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQ7IHRoZSBlZmZlY3RpdmUgYmVoYXZpb3IgYWxzbyBkZXBlbmRzXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lcbiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzXG4gIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlXG4gIFNpZ1BuZCAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgb2YgcGVuZGluZyBzaWduYWxzIGZvciB0aGUgdGhyZWFkXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jXG5pbmRleCBmNmY3NWQyMDY3NjJhLi5hMjdhNmE1N2U4YjIyIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9hcnJheS5jXG4rKysgYi9mcy9wcm9jL2FycmF5LmNcbkBAIC00MjUsNiArNDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHNlcV9wcmludGYobSwgXCJUSFBfZW5hYmxlZDpcXHQlZFxcblwiLCB0aHBfZW5hYmxlZCk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4re1xuK1x0c2VxX3ByaW50ZihtLCBcIk51bWFCX21vZGU6XFx0JXNcXG5cIixcbitcdFx0ICAgdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUodGFzaykpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbit7XG4rXHRzZXFfcHV0cyhtLCBcIk51bWFCX21vZGU6XFx0dW5zdXBwb3J0ZWRcXG5cIik7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3VudGFnX21hc2soc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzZXFfcHJpbnRmKG0sIFwidW50YWdfbWFzazpcXHQlI2x4XFxuXCIsIG1tX3VudGFnX21hc2sobW0pKTtcbkBAIC00NTMsNiArNDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcbiBcdFx0dGFza191bnRhZ19tYXNrKG0sIG1tKTtcbiBcdFx0bW1wdXQobW0pO1xuIFx0fVxuK1x0dGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7XG4gXHR0YXNrX3NpZyhtLCB0YXNrKTtcbiBcdHRhc2tfY2FwKG0sIHRhc2spO1xuIFx0dGFza19zZWNjb21wKG0sIHRhc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uN2YxOTMyNjU4ZDI0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTM4Miw2ICsxMzgyLDEyIEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XG4gXHRzaG9ydFx0XHRcdFx0cHJlZl9ub2RlX2Zvcms7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0LypcbitcdCAqIFNjaGVkdWxlciBzbmFwc2hvdCBvZiBzaWduYWxfc3RydWN0OjpudW1hX2JhbGFuY2luZ19lbmFibGVkLiBJdCBpc1xuK1x0ICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGVcbitcdCAqIHVzZXItdmlzaWJsZSBwcm9jZXNzIG1vZGUgbGl2ZXMgaW4gc2lnbmFsX3N0cnVjdC5cbitcdCAqL1xuK1x0Ym9vbFx0XHRcdFx0bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZDtcbiBcdGludFx0XHRcdFx0bnVtYV9zY2FuX3NlcTtcbiBcdHVuc2lnbmVkIGludFx0XHRcdG51bWFfc2Nhbl9wZXJpb2Q7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRudW1hX3NjYW5fcGVyaW9kX21heDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbmluZGV4IDUyYjIyYzVjMzk2ZGIuLjY5ZTc5MzU5ZmEyMmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuQEAgLTgsNiArOCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUTkZfTUlHUkFURURcdDB4MDFcbiAjZGVmaW5lIFRORl9OT19HUk9VUFx0MHgwMlxuQEAgLTMwLDYgKzMxLDI3IEBAIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBwaWRfdCB0YXNrX251bWFfZ3JvdXBfaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpO1xuIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaW5hbCk7XG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4rfVxuK1xuK2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuK3tcbitcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoY3VycmVudCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIjtcbit9XG4gYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRpbnQgc3JjX25pZCwgaW50IGRzdF9jcHUpO1xuICNlbHNlXG5AQCAtNDcsNiArNjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZClcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxuIHtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4re1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZClcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4gc3RhdGljIGlubGluZSBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLmZkYzAzYzAxNmNmZWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMTc5LDYgKzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7XG4gXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVBcbiBcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQvKlxuK1x0ICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLlxuK1x0ICogU2NoZWR1bGVyIGhvdCBwYXRocyB1c2UgdGFza19zdHJ1Y3Q6Om51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgYXNcbitcdCAqIHRoZWlyIHBlci10YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgc25hcHNob3QuXG4rXHQgKi9cbitcdGJvb2wgbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbiAjZW5kaWZcbiBcdC8qXG4gXHQgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcbmluZGV4IGI2ZWM2ZjY5MzcxOTUuLjViYzBhMmEyYTkzMGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcbkBAIC00MTYsNCArNDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xuICMgZGVmaW5lIFBSX0NGSV9ESVNBQkxFXHRcdF9CSVRVTCgxKVxuICMgZGVmaW5lIFBSX0NGSV9MT0NLXHRcdF9CSVRVTCgyKVxuIFxuKy8qIFBlci1wcm9jZXNzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBjb250cm9sICovXG4rI2RlZmluZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkdcdDgyXG4rI2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkdcdDgzXG4rIyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRElTQUJMRVx0MFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRVx0MVxuK1xuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xuZGlmZiAtLWdpdCBhL2luaXQvaW5pdF90YXNrLmMgYi9pbml0L2luaXRfdGFzay5jXG5pbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xuKysrIGIvaW5pdC9pbml0X3Rhc2suY1xuQEAgLTQwLDYgKzQwLDkgQEAgc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IHtcbiBcdC5jcHV0aW1lclx0XHQ9IHtcbiBcdFx0LmNwdXRpbWVfYXRvbWljXHQ9IElOSVRfQ1BVVElNRV9BVE9NSUMsXG4gXHR9LFxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC5udW1hX2JhbGFuY2luZ19lbmFibGVkID0gdHJ1ZSxcbiAjZW5kaWZcbiBcdElOSVRfQ1BVX1RJTUVSUyhpbml0X3NpZ25hbHMpXG4gXHQucGlkcyA9IHtcbkBAIC0yMjQsNiArMjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0ge1xuIFx0LnZ0aW1lLnN0YXRlXHQ9IFZUSU1FX1NZUyxcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsXG4gXHQubnVtYV9wcmVmZXJyZWRfbmlkID0gTlVNQV9OT19OT0RFLFxuIFx0Lm51bWFfZ3JvdXBcdD0gTlVMTCxcbiBcdC5udW1hX2ZhdWx0c1x0PSBOVUxMLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTI0OTYsNiArMjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFxuIFx0LyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovXG4gXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID1cbitcdFx0UkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQpO1xuK1x0aWYgKCEoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX1RIUkVBRCkpXG4rXHRcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxuK1x0XHRcdHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZDtcbisjZW5kaWZcbitcbiBcdC8qXG4gXHQgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWRcbiBcdCAqIGJlZm9yZSBob2xkaW5nIHNpZ2hhbmQgbG9jay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0zNiw2ICszNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9sb2FkYXZnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL25vaHouaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3JzZXFfYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9ydC5oXHUwMDNlXG5AQCAtNjAzLDYgKzYwNCw4IEBAIGludCB0YXNrX2xsYyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gICpcdFx0XHRcdHAtXHUwMDNlc2UubG9hZCwgcC1cdTAwM2VydF9wcmlvcml0eSxcbiAgKlx0XHRcdFx0cC1cdTAwM2VkbC5kbF97cnVudGltZSwgZGVhZGxpbmUsIHBlcmlvZCwgZmxhZ3MsIGJ3LCBkZW5zaXR5fVxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcbisgKiAgLSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KCk6XHRwLVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkLFxuKyAqXHRcdFx0XHRcdHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZFxuICAqICAtIHNjaGVkX21vdmVfdGFzaygpOlx0cC1cdTAwM2VzY2hlZF90YXNrX2dyb3VwXG4gICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKVx0cC1cdTAwM2V1Y2xhbXAqXG4gICpcbkBAIC04NDA3LDYgKzg0MTAsNDIgQEAgdm9pZCBzY2hlZF9zZXRudW1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZClcbiBcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXG4gXHRcdHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID0gbmlkO1xuIH1cbitcbitzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZClcbit7XG4rXHRndWFyZCh0YXNrX3JxX2xvY2spKHApO1xuK1x0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcbitcdFx0V1JJVEVfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpO1xuK31cbitcbitpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4re1xuK1x0c3RhdGljIERFRklORV9NVVRFWCh0YXNrX251bWFfYmFsYW5jaW5nX211dGV4KTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIG9sZF9lbmFibGVkO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghbG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpKSlcbitcdFx0cmV0dXJuIC1FU1JDSDtcbitcbitcdG9sZF9lbmFibGVkID0gY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbitcdGlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKVxuK1x0XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsIGVuYWJsZWQpO1xuK1xuK1x0dW5sb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcdTAwMjZmbGFncyk7XG4rXG4rXHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZCkge1xuK1x0XHRzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTtcbitcdFx0cmVhZF9sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuK1x0XHRmb3Jfb3RoZXJfdGhyZWFkcyhjdXJyZW50LCB0KVxuK1x0XHRcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHQsIGVuYWJsZWQpO1xuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG4gXG4gI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTM4LDYgKzM4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb25kX3Jlc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NwdXRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL25vaHouaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3ByaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19jYWxsLmhcdTAwM2VcbkBAIC0xNzEyLDYgKzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS5cbiBcdFx0ICovXG4gXHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGNwdV90b19ub2RlKG1tX3NjaGVkX2NwdSkgIT0gcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQpXG4gXHRcdFx0bW1fc2NoZWRfbGxjID0gLTE7XG5AQCAtMTgwOCw2ICsxODEwLDkgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY3B1bWFza3MoY3B1bWFza192YXJfdCBjcHVzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGNwdSA9IFJFQURfT05DRShwLVx1MDAzZW1tLVx1MDAzZXNjX3N0YXQuY3B1KTtcbiBcdGlmIChjcHUgIT0gLTEpXG4gXHRcdG5pZCA9IGNwdV90b19ub2RlKGNwdSk7XG5AQCAtMjM4NywxNCArMjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XG4tXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyArPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApKTtcbitcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuK1xuK1x0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nICs9IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuK1x0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgKz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhY2NvdW50X251bWFfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nIC09IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xuLVx0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7XG4rXHRib29sIGVuYWJsZWQgPSB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKTtcbitcbitcdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyAtPSBlbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcbitcdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTtcbiB9XG4gXG4gLyogU2hhcmVkIG9yIHByaXZhdGUgZmF1bHRzLiAqL1xuQEAgLTMwODUsNiArMzA5OCw5IEBAIHN0YXRpYyBib29sIHRhc2tfbnVtYV9jb21wYXJlKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKGN1cikpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0LyogU2tpcCB0aGlzIHN3YXAgY2FuZGlkYXRlIGlmIGNhbm5vdCBtb3ZlIHRvIHRoZSBzb3VyY2UgY3B1LiAqL1xuIFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGVudi1cdTAwM2VzcmNfY3B1LCBjdXItXHUwMDNlY3B1c19wdHIpKVxuIFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTkyLDYgKzQwMDgsOSBAQCB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogZm9yIGV4YW1wbGUsIGtzbWQgZmF1bHRpbmcgaW4gYSB1c2VyJ3MgbW0gKi9cbiBcdGlmICghcC1cdTAwM2VtbSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ0MzYsNiArNDQ1NSw5IEBAIHN0YXRpYyB2b2lkIHRhc2tfdGlja19udW1hKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycilcbiBcdGlmICghY3Vyci1cdTAwM2VtbSB8fCAoY3Vyci1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay1cdTAwM2VuZXh0ICE9IHdvcmspXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VycikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qXG4gXHQgKiBVc2luZyBydW50aW1lIHJhdGhlciB0aGFuIHdhbGx0aW1lIGhhcyB0aGUgZHVhbCBhZHZhbnRhZ2UgdGhhdFxuIFx0ICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGVcbkBAIC00NDYzLDYgKzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXAtXHUwMDNlbW0gfHwgIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA0NzUsNiArMTA1MDAsOSBAQCBzdGF0aWMgbG9uZyBtaWdyYXRlX2RlZ3JhZGVzX2xvY2FsaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgIShlbnYtXHUwMDNlc2QtXHUwMDNlZmxhZ3MgXHUwMDI2IFNEX05VTUEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmNcbmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc3lzLmNcbisrKyBiL2tlcm5lbC9zeXMuY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY29yZWR1bXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG5AQCAtMjkwNyw2ICsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4gXHRcdGlmIChhcmczIFx1MDAyNiBQUl9DRklfTE9DSyBcdTAwMjZcdTAwMjYgIShhcmczIFx1MDAyNiBQUl9DRklfRElTQUJMRSkpXG4gXHRcdFx0ZXJyb3IgPSBhcmNoX3ByY3RsX2xvY2tfYnJhbmNoX2xhbmRpbmdfcGFkX3N0YXRlKG1lKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzpcbitcdFx0aWYgKGFyZzMgfHwgYXJnNCB8fCBhcmc1KVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRpZiAoYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChhcmcyID09XG4rXHRcdFx0XHRcdFx0XHQgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBSX0dFVF9OVU1BX0JBTEFOQ0lORzpcbitcdFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpO1xuK1x0XHRpZiAoZXJyb3IgXHUwMDNlPSAwKVxuK1x0XHRcdGVycm9yID0gZXJyb3IgPyBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUgOlxuK1x0XHRcdFx0UFJfTlVNQV9CQUxBTkNJTkdfRElTQUJMRTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTtcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTkuNDk5MjM3MzIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MDQ1NjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqY291bGQqIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIE5VTUEgYmFsYW5jaW5nIGVuaGFuY2VtZW50cy4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiBmaWxlcyDigJMgbm90IGluaGVyZW50bHkgZnV6emFibGUsIGJ1dCBjb3VsZCBleHBvc2UgbmV3IGNvZGUgcGF0aHMgb3Igc2V0dGluZ3MuIEknbGwgbm90ZSBpdC5cbjIuICAqKi9wcm9jIEludGVyZmFjZToqKiBBIG5ldyBlbnRyeSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzYCwgaW4gYC9wcm9jL1BJRC9zdGF0dXNgLiBUaGlzIGlzIHByb21pc2luZy4gQW55IGNoYW5nZXMgdG8gcHJvY2ZzIGFyZSBnb29kIHRhcmdldHMsIGFuZCBgL3Byb2MvUElEL3N0YXR1c2AgaXMgaGVhdmlseSB1c2VkLlxuMy4gICoqSGVhZGVyczoqKiBIZWFkZXIgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQuIEltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuNC4gICoqSW5pdGlhbGl6YXRpb246KiogQ2hhbmdlcyBpbiBgaW5pdF90YXNrLmNgLCBhZmZlY3RpbmcgaG93IHRoZSBgaW5pdGAgcHJvY2VzcyBpcyBzZXQgdXAuIENvdWxkIGJlIGludGVyZXN0aW5nLlxuNS4gICoqRm9yayBMb2dpYzoqKiBNb2RpZmljYXRpb25zIHRvIGBjb3B5X3Byb2Nlc3NgIHdpdGhpbiBga2VybmVsL2ZvcmsuY2AsIHVwZGF0aW5nIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBUaGlzIGlzIEhVR0UuIEZvcmsgaXMgYSBjcml0aWNhbCwgYW5kIG9mdGVuIGZ1enplZCwgcGF0aC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLlxuNi4gICoqU2NoZWR1bGVyIENvcmU6KiogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHJlYWxseSBqdWljeS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgYW5kIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHZpdGFsLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcy4gVGhlIHNjaGVkdWxlciBpcyBhIGtleSB0YXJnZXQuXG43LiAgKipGYWlyIFNjaGVkdWxlcjoqKiBFdmVuIGJldHRlciDigJMgdGhlIGZhaXIgc2NoZWR1bGVyIChga2VybmVsL3NjaGVkL2ZhaXIuY2ApIGlzIGNoZWNraW5nIGB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZGAgaW4gYSBidW5jaCBvZiBjcnVjaWFsIHBsYWNlczogYGdldF9wcmVmX2xsY2AsIGBnZXRfc2Nhbl9jcHVtYXNrc2AsIGFuZCBvdGhlciBzY2hlZHVsZXIgb3BlcmF0aW9ucy4gVGhpcyBpcyBnb2xkLiBBbnkgY2hhbmdlcyB0byB0aGUgc2NoZWR1bGVyJ3MgYmVoYXZpb3IgaXMgbGlrZWx5IHRvIGludHJvZHVjZSBlcnJvcnMgYW5kIG1ha2UgdGhpcyBhIGhpZ2ggcHJpb3JpdHkuXG44LiAgKipwcmN0bCBTeXNjYWxsOioqIFRoZSBhZGRpdGlvbiBvZiBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYCBhbmQgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2AgdG8gdGhlIGBwcmN0bGAgc3lzY2FsbC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpbmRpY2F0b3IgZm9yIHVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFjaGFibGUgY29kZSBwYXRoLCBidXQgc3lzdGVtIGNhbGxzIGFyZSBwZXJmZWN0IGZ1enppbmcgY2FuZGlkYXRlcy5cblxuTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCAqeWVzKiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gY29yZSBzY2hlZHVsZXIgbG9naWMsIGZvcmsgbG9naWMsIHRoZSBgcHJjdGxgIHN5c2NhbGwgaGFuZGxlciwgYW5kIHRoZSBgL3Byb2NgIGludGVyZmFjZS4gVGhpcyBpcyBhbGwgaGlnaC12YWx1ZSBzdHVmZi4gVGhlIGFkZGl0aW9uIG9mIG5ldyBgcHJjdGxgIG9wdGlvbnMgaXMgYSBtYXNzaXZlIHdpbi4gSSBzZWUgbG9ja2luZyBwcmltaXRpdmVzIGV2ZXJ5d2hlcmU6IG11dGV4ZXMsIGB0YXNrX3JxX2xvY2tgLCBgc2NoZWRfY2hhbmdlYCwgYHRhc2tsaXN0X2xvY2tgLCBzaWdoYW5kIGxvY2tzLCB0aHJlYWQgaXRlcmF0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGdvb2Qgc3BvdHMgZm9yIGZ1enppbmcuIExvY2tpbmcgaXMgYWx3YXlzIGludGVyZXN0aW5nIGZyb20gYSBjb25jdXJyZW5jeSBzdGFuZHBvaW50LlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJ2xsIHVzZSB0aGUgZ3JlcHBlciBhbmQgY2hlY2sgZm9yIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3R1YWxseSBnb2luZyB0byB0YXJnZXQgdXNlZnVsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjowNS4zNzk2OTU5NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NDIyNjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQV9CQUxBTkNJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwMTg9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXFxuLS1cXG5pbml0L0tjb25maWctMTAyMC1cXG5pbml0L0tjb25maWc6MTAyMTpjb25maWcgTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWctMTAyMi1cXHRib29sIFxcXCJNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMzQ9Y29uZmlnIFNDSEVEX0NBQ0hFXFxuLS1cXG5pbml0L0tjb25maWctMTA0NC1cXG5pbml0L0tjb25maWc6MTA0NTpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuaW5pdC9LY29uZmlnLTEwNDYtXFx0Ym9vbCBcXFwiQXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjA3LjU3MzkyODI5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTU4NjMzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOVU1BIEJhbGFuY2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSByZXF1aXJlbWVudHMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRldGVybWluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBNeSBpbW1lZGlhdGUgY291cnNlIG9mIGFjdGlvbiBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDIxLCB3aGljaCBzaG91bGQgYmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW55IHByZXJlcXVpc2l0ZSBmZWF0dXJlcywgYW5kIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBJIGNhbiBldmVuICpzZWUqIHRoZSBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBidWlsZCBhIHByb3BlciBtZW50YWwgbW9kZWwgb2YgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTAuMDI5Nzk0NTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDE1OlxcdCMgRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCAoYWIpdXNlIE5VTUEgdG8gcmVwcmVzZW50IGRpZmZlcmVudCBtZW1vcnkgcmVnaW9uc1xcbjEwMTY6XFx0IyBhbGwgY3B1LWxvY2FsIGJ1dCBvZiBkaWZmZXJlbnQgbGF0ZW5jaWVzLCBzdWNoIGFzIFN1cGVySC5cXG4xMDE3OlxcdCNcXG4xMDE4OlxcdGNvbmZpZyBBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMTk6XFx0XFx0Ym9vbFxcbjEwMjA6XFx0XFxuMTAyMTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdcXG4xMDIyOlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuMTAyMzpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG4xMDI0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFRFX1BST1ROT05FXFxuMTAyNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMjY6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgTlVNQV9NSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xMDI3OlxcdFxcdGhlbHBcXG4xMDI4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBhdXRvbWF0aWMgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnQuXFxuMTAyOTpcXHRcXHQgIFRoZSBtZWNoYW5pc20gaXMgcXVpdGUgcHJpbWl0aXZlIGFuZCBpcyBiYXNlZCBvbiBtaWdyYXRpbmcgbWVtb3J5IHdoZW5cXG4xMDMwOlxcdFxcdCAgaXQgaGFzIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgdGhlIHRhc2sgaXMgcnVubmluZyBvbi5cXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxcbjEwMzM6XFx0XFxuMTAzNDpcXHRjb25maWcgU0NIRURfQ0FDSEVcXG4xMDM1OlxcdFxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG4xMDM2OlxcdFxcdGRlZmF1bHQgeVxcbjEwMzc6XFx0XFx0ZGVwZW5kcyBvbiBTTVBcXG4xMDM4OlxcdFxcdGhlbHBcXG4xMDM5OlxcdFxcdCAgV2hlbiBlbmFibGVkLCB0aGUgc2NoZWR1bGVyIHdpbGwgYXR0ZW1wdCB0byBhZ2dyZWdhdGUgdGFza3MgZnJvbVxcbjEwNDA6XFx0XFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxcbjEwNDE6XFx0XFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcXG4xMDQyOlxcdFxcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcXG4xMDQzOlxcdFxcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cXG4xMDQ0OlxcdFxcbjEwNDU6XFx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxcbjEwNDY6XFx0XFx0Ym9vbCBcXFwiQXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcXFwiXFxuMTA0NzpcXHRcXHRkZWZhdWx0IHlcXG4xMDQ4OlxcdFxcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcXG4xMDQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTAuMDI5OTE2MjM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNDY2OTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQV9NSUdSQVRJT04gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBwcmltYXJ5IGlzc3VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBUaGUgYE5VTUFfTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5IGNhbiBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUsIHlldCBpbXBhY3RmdWwsIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBlYXNpbHkgb3Zlcmxvb2tlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgb3Zlcmxvb2tpbmcgdGhlc2UgZGV0YWlscyBjYW4gbGVhZCB0byBzb21lIHJlYWxseSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHRha2UgYSBtb21lbnQgYW5kIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIGJlaGF2aW9ycyB0aGF0IG1pZ2h0IGFyaXNlIGlmIGBOVU1BX01JR1JBVElPTmAgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgYWNyb3NzIHRoZSBib2FyZCwgZXZlbiBpZiBpdCBzZWVtcyBwZXJpcGhlcmFsbHkgcmVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5IGhlcmUuIEl0J3MgYmVzdCB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIGF0IHRoaXMgc3RhZ2UuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSB0aW1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTIuNDQ0NTg4ODE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYwNTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjY1PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02NzItXFxubW0vS2NvbmZpZzo2NzM6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NzQtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTQuNDMwNjQ4NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTYyMjI1MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjczLiBNeSBtZW50YWwgbW9kZWwgaXMgYWxyZWFkeSBwcmltZWQgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGRlZmluaXRpb24gb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBhIHNwZWNpZmljIG1lbW9yeSBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMaW5lIDY3Mz8gVGhhdCBudW1iZXIgaXMgZmFtaWxpYXI7IGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGdyYW51bGFyIHNldHRpbmcsIHBlcmhhcHMgcmVsYXRlZCB0byBOVU1BLCBtZW1vcnkgaG90cGx1Zywgb3IgYSBzcGVjaWZpYyBhbGxvY2F0b3IuIEknbSBmb2N1c2luZyBpbiBiZWNhdXNlIEkgc3VzcGVjdCBhIHN1YnRsZXR5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBvciBtYW5hZ2VzIHRoZWlyIGFsbG9jYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoYXQgc2VjdGlvbiwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBgY29uZmlnYCBibG9ja3MsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBib29sZWFuIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIGFuIGBpZmAgc3RhdGVtZW50IHRoYXQgcmV2ZWFscyB0aGUgdW5kZXJseWluZyBsb2dpYy4gQmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlLCBJ4oCZbSBhbnRpY2lwYXRpbmcgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnQgYmV0d2VlbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBmZWF0dXJlLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBjZXJ0YWluIGRldGFpbCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI5NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjE2Ljk5Mjg3NjE5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ICB0aG9zZSBwYWdlcyB0byBhbm90aGVyIGVudGl0eSwgc3VjaCBhcyBhIGh5cGVydmlzb3IsIHNvIHRoYXQgdGhlXFxuIDY3MTpcXHRcXHQgIG1lbW9yeSBjYW4gYmUgZnJlZWQgd2l0aGluIHRoZSBob3N0IGZvciBvdGhlciB1c2VzLlxcbiA2NzI6XFx0XFxuIDY3MzpcXHRjb25maWcgTlVNQV9NSUdSQVRJT05cXG4gNjc0OlxcdFxcdGJvb2wgXFxcIk5VTUEgcGFnZSBtaWdyYXRpb25cXFwiXFxuIDY3NTpcXHRcXHRkZWZhdWx0IHlcXG4gNjc2OlxcdFxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gNjc3OlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNjc4OlxcdFxcdGhlbHBcXG4gNjc5OlxcdFxcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xcbiA2ODA6XFx0XFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxcbiA2ODE6XFx0XFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXFxuIDY4MjpcXHRcXHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cXG4gNjgzOlxcdFxcbiA2ODQ6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2ODU6XFx0XFx0Ym9vbFxcbiA2ODY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjg3OlxcdFxcbiA2ODg6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNjg5OlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjoxNi45OTI5ODEzNDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3NTY5Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBOVU1BIEJhbGFuY2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBOVU1BX0JBTEFOQ0lOR2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgcmVsaWVzIG9uIHRoZSBicm9hZGVyIGBOVU1BYCBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggaXRzZWxmIG1lYW5zIGBOVU1BX01JR1JBVElPTmAgaXMgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwaWVjZXMgYXJlIGNyaXRpY2FsIGZvciBmdXp6aW5nIGZvY3VzLiBJJ20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBjbGVhcmx5IGBOVU1BX0JBTEFOQ0lOR2AgaXRzZWxmIGlzIGtleSwgYXMgaXMgdGhlIGVuYWJsaW5nIG9mIGBOVU1BYC5cblxuTm93LCB0aGUgc3ltYm9scyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGFyZSBpbXBvcnRhbnQuIEkndmUgZ290IGEgbGlzdDogYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIChrZXJuZWwvc2NoZWQvY29yZS5jLCBhbmQgY2FsbGVkIGZyb20gYHByY3RsYCksIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgKHN0YXRpYyksIGB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50YCAoc3RhdGljIGlubGluZSksIGB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1c2AgKHN0YXRpYyBpbmxpbmUpLCBgcHJvY19waWRfc3RhdHVzYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC5cblxuSSdtIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gcGljayBvdXQgKm5vbi11YmlxdWl0b3VzKiBmdW5jdGlvbnMuIEknbSBhdm9pZGluZyBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzaW5jZSBsaXN0aW5nIHRob3NlIHdvdWxkIGRpbHV0ZSB0aGUgZm9jdXMuIEkgd2FudCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyBhcmUgdHJpY2t5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluIHRoZSAuYyBmaWxlcy5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAuIENoZWNraW5nIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgaXQncyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGFuIGBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpYC4gSXQncyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCEgSXQncyBjYWxsZWQgYnkgYHN5c19wcmN0bGAgd2l0aCBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYC4gVGhhdCdzIGEgZ29vZCBvbmUgdG8gc3RhcnQgd2l0aCwgdmVyeSBzcGVjaWZpYy4gV2hhdCBhYm91dCBgdGFza19udW1hX2ZhdWx0YD8gVGhhdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZmF1bHQgaGFuZGxlciwgYnV0IGxldCdzIGNoZWNrIGl0J3MgY29tbW9uYWxpdHk7IGl0J3Mgc3BlY2lmaWMgdG8gTlVNQSBoaW50aW5nLlxuXG5gc2NoZWRfc2V0bnVtYWAgaXNuJ3QgdG91Y2hlZCwganVzdCBhIGNvbW1lbnQgdXBkYXRlLiBgdGFza190aWNrX251bWFgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIGFuZCBgcHJvY19waWRfc3RhdHVzYCBjYWxscyBgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZnJvbSBgZnMvcHJvYy9hcnJheS5jYC4gQW5kIG9mIGNvdXJzZSBgcHJjdGxgIGl0c2VsZiBpcyBhIHN5c2NhbGwgZW50cnlwb2ludCwgYnV0IGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpcyB0aGUgcHJlY2lzZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhpcyBmZWF0dXJlIVxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlOlxuLSBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGBcbi0gYHByb2NfcGlkX3N0YXR1c2BcblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFza19udW1hX2ZhdWx0YCBpcyB1YmlxdWl0b3VzIG9yIHNwZWNpZmljLiBUaGUgc2lnbmF0dXJlIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBOVU1BIGhpbnRpbmcgcGFnZSBmYXVsdHMgKCBgZG9fbnVtYV9wYWdlYCBpcyBwcm9iYWJseSBhIGtleSBjYWxsIHBhdGgpLCBtYWtpbmcgaXQgbGVzcyBsaWtlbHkgdG8gYmUgYSBnZW5lcmFsLCBoaWdoLWZyZXF1ZW5jeSBmdW5jdGlvbiwgdGh1cyBhbHNvIHVzZWZ1bC4gSSBzaG91bGQgY2hlY2sgd2hhdCBjYWxscyBpdCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MjMuMjY4Njc2Mzg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY1NjgzNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhc2tfbnVtYV9mYXVsdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg9MTk9ZW51bSBudW1hX3ZtYXNraXBfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0yOS0jaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oOjMwOmV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0zMS1leHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg9NTU9Ym9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgtNTctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg6NTg6c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLFxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01OS1cXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM5NjM9dm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM5OTgtICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozOTk5OnZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQwMDAte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzI4LVxcdFxcdG5pZCA9IHRhcmdldF9uaWQ7XFxubW0vaHVnZV9tZW1vcnkuYzoyMzI5OlxcdFxcdHRhc2tfbnVtYV9mYXVsdChsYXN0X2NwdXBpZCwgbmlkLCBIUEFHRV9QTURfTlIsIGZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzNDktXFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxubW0vaHVnZV9tZW1vcnkuYzoyMzUwOlxcdFxcdHRhc2tfbnVtYV9mYXVsdChsYXN0X2NwdXBpZCwgbmlkLCBIUEFHRV9QTURfTlIsIGZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzNTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9tZW1vcnkuYz02Mjg4PXN0YXRpYyB2bV9mYXVsdF90IGRvX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTYzNDctXFx0XFx0ZmxhZ3MgfD0gVE5GX01JR1JBVEVEO1xcbm1tL21lbW9yeS5jOjYzNDg6XFx0XFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIG5yX3BhZ2VzLCBmbGFncyk7XFxubW0vbWVtb3J5LmMtNjM0OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeS5jLTYzNzQtXFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxubW0vbWVtb3J5LmM6NjM3NTpcXHRcXHR0YXNrX251bWFfZmF1bHQobGFzdF9jcHVwaWQsIG5pZCwgbnJfcGFnZXMsIGZsYWdzKTtcXG5tbS9tZW1vcnkuYy02Mzc2LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjoyNS4yMzQzNjc3NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MzkwMTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOVU1BIEJhbGFuY2luZyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIE5VTUEgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbmV3IHN5bWJvbCBpbnRyb2R1Y2VkIGlzIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgcHJvY19waWRfc3RhdHVzYCBpbiBgZnMvcHJvYy9hcnJheS5jYCBhbmQgYHRhc2tfbnVtYV9mYXVsdGAgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gQ2xlYXJseSwgYE5VTUFgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgYE5VTUFfQkFMQU5DSU5HYCBpdHNlbGYgaXMgdGhlIGNydWNpYWwgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSByZXZlYWxzIHRoYXQgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGd1YXJkcyB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgc3RydWN0dXJlcyBhY3Jvc3MgdmFyaW91cyBmaWxlczogYGZzL3Byb2MvYXJyYXkuY2AsIGBpbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhgLCBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGAsIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgYGluaXQvaW5pdF90YXNrLmNgLCBhbmQgYGtlcm5lbC9mb3JrLmNgLiBTbyBpdCdzIGNvbmZpcm1lZCwgZW5hYmxpbmcgYE5VTUFfQkFMQU5DSU5HYCBhbmQgYnkgYXNzb2NpYXRpb24sIGBOVU1BYCBpcyB0aGUgcmlnaHQgcGF0aCB0byB0YWtlLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgd29ydGh3aGlsZSBmdXp6aW5nIHRhcmdldC4gWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIGlzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nOiB0aGUgY29yZSBzY2hlZHVsZXIgaXMgaW52b2x2ZWQsIGFuZCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgcHJjdGxgLCBpbmNsdWRpbmcgbmV3IG9wZXJhdGlvbnMgKGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgLCBgUFJfR0VUX05VTUFfQkFMQU5DSU5HYCkuIFBsdXMsIHRoZXJlJ3MgaW50cmljYXRlIHRocmVhZCBncm91cCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbG9naWMgdXNpbmcgYHRhc2tfcnFfbG9ja2AsIGBzY2hlZF9jaGFuZ2VgLCBgdGFza2xpc3RfbG9ja2AsIGFuZCBgZm9yX290aGVyX3RocmVhZHNgLiBUaGVyZSBhcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0YXNrIGVucXVldWUvZGVxdWV1ZSBhY2NvdW50aW5nLCBoYW5kbGluZyBvZiBOVU1BIGhpbnRpbmcgZmF1bHRzLCBzY2FubmluZywgYW5kIG1pZ3JhdGlvbiBkZWNpc2lvbnMuIFRoaXMgaXMgcmljaCB0ZXJyaXRvcnkgZm9yIHBvdGVudGlhbCBmdXp6aW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2FuaXR5LWNoZWNrIG15IEZvY3VzU3ltYm9scy4gSSdtIGZvY3VzaW5nIG9uIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCwgYHRhc2tfbnVtYV9mYXVsdGAsIGFuZCBgcHJvY19waWRfc3RhdHVzYC4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsbHkgdWJpcXVpdG91cyBmdW5jdGlvbnMgbGlrZSBgY29weV9wcm9jZXNzYCBhbmQgYHByY3RsYCwgYnV0IGluIHRoaXMgY2FzZSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIGlzIHRoZSBtb3JlIHNwZWNpZmljIHRhcmdldCwgYWx0aG91Z2ggYHByY3RsYCBkb2VzIHdhcnJhbnQgYXR0ZW50aW9uLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzMsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjMwLjMyODI3Mjk0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTU1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzAuNDIyNDM3OTE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0NzUxNDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjMwLjQyMzMwMjI2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NjQ2NjQ1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cXG5cXG5FdmFsdWF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIChLTVNBTiB2cyBLQVNBTik6XFxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcXG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXFxuICAgLSBUaGUgL3Byb2MvUElEL3N0YXR1cyBlbnRyeSBmb3JtYXRzIHN0YXRpYyBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbHMgKFxcXCJlbmFibGVkXFxcIiwgXFxcImRpc2FibGVkXFxcIiwgXFxcInVuc3VwcG9ydGVkXFxcIikgaW50byB0aGUgc2VxX2ZpbGUuXFxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XFxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxcbiAgIC0gYHN0cnVjdCBzaWduYWxfc3RydWN0YCBhbGxvY2F0aW9ucyBpbiBgZm9yay5jYCB1c2UgYGttZW1fY2FjaGVfemFsbG9jKClgLlxcbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XFxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5AQCAtNzU0LDYgKzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG9cbiBwbGFjZSB0aGUgaG90IHBhZ2VzIGluIHRoZSBmYXN0IG1lbW9yeS4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb25cbiB1bm1hcHBpbmcgYW5kIHBhZ2UgZmF1bHQgdG9vLlxuIFxuK1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpXG4rb3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmdcbitvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlXG4rdGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieVxuK2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpc1xuK3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnNcbit0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQVxuK2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLFxuK3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5XG4rcHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLlxuK1xuK0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yXG4rdGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90XG4rYWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXNcbitlZmZlY3QuXG4rXG4gbnVtYV9iYWxhbmNpbmdfcHJvbW90ZV9yYXRlX2xpbWl0X01CcHNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCBjMTAyYjYyMDIzY2RjLi5hNGU5MDM3YTMxNjEyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE4OCw2ICsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxuICAgSHVnZXRsYlBhZ2VzOiAgICAgICAgICAwIGtCXG4gICBDb3JlRHVtcGluZzogICAgMFxuICAgVEhQX2VuYWJsZWQ6XHQgIDFcbisgIE51bWFCX21vZGU6ICAgICBlbmFibGVkXG4gICBUaHJlYWRzOiAgICAgICAgMVxuICAgU2lnUTogICAwLzI4NTc4XG4gICBTaWdQbmQ6IDAwMDAwMDAwMDAwMDAwMDBcbkBAIC0yNzQsNiArMjc1LDExIEBAIEl0J3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxuICBUSFBfZW5hYmxlZCAgICAgICAgICAgICAgICAgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHVzZSBUSFAgKHJldHVybnMgMCB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXG4rIE51bWFCX21vZGUgICAgICAgICAgICAgICAgICBwcm9jZXNzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlOlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBvciBkaXNhYmxlZCB3aGVuIHN1cHBvcnRlZCwgb3RoZXJ3aXNlXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBnbG9iYWwgbnVtYV9iYWxhbmNpbmcgc3lzY3RsIGFuZCBtZW1vcnlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVxuICBUaHJlYWRzICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRocmVhZHNcbiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWVcbiAgU2lnUG5kICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBwZW5kaW5nIHNpZ25hbHMgZm9yIHRoZSB0aHJlYWRcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmNcbmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2FycmF5LmNcbisrKyBiL2ZzL3Byb2MvYXJyYXkuY1xuQEAgLTQyNSw2ICs0MjUsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdGhwX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c2VxX3ByaW50ZihtLCBcIlRIUF9lbmFibGVkOlxcdCVkXFxuXCIsIHRocF9lbmFibGVkKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbit7XG4rXHRzZXFfcHJpbnRmKG0sIFwiTnVtYUJfbW9kZTpcXHQlc1xcblwiLFxuK1x0XHQgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuK3tcbitcdHNlcV9wdXRzKG0sIFwiTnVtYUJfbW9kZTpcXHR1bnN1cHBvcnRlZFxcblwiKTtcbit9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHNlcV9wcmludGYobSwgXCJ1bnRhZ19tYXNrOlxcdCUjbHhcXG5cIiwgbW1fdW50YWdfbWFzayhtbSkpO1xuQEAgLTQ1Myw2ICs0NjgsNyBAQCBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLFxuIFx0XHR0YXNrX3VudGFnX21hc2sobSwgbW0pO1xuIFx0XHRtbXB1dChtbSk7XG4gXHR9XG4rXHR0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhtLCB0YXNrKTtcbiBcdHRhc2tfc2lnKG0sIHRhc2spO1xuIFx0dGFza19jYXAobSwgdGFzayk7XG4gXHR0YXNrX3NlY2NvbXAobSwgdGFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi43ZjE5MzI2NThkMjRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMzgyLDYgKzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdHNob3J0XHRcdFx0XHRwcmVmX25vZGVfZm9yaztcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQvKlxuK1x0ICogU2NoZWR1bGVyIHNuYXBzaG90IG9mIHNpZ25hbF9zdHJ1Y3Q6Om51bWFfYmFsYW5jaW5nX2VuYWJsZWQuIEl0IGlzXG4rXHQgKiB1cGRhdGVkIHdpdGggc2NoZWRfY2hhbmdlIGZvciBydW5xdWV1ZSBOVU1BIGFjY291bnRpbmc7IHRoZVxuK1x0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxuK1x0ICovXG4rXHRib29sXHRcdFx0XHRudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xuIFx0aW50XHRcdFx0XHRudW1hX3NjYW5fc2VxO1xuIFx0dW5zaWduZWQgaW50XHRcdFx0bnVtYV9zY2FuX3BlcmlvZDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdG51bWFfc2Nhbl9wZXJpb2RfbWF4O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG5AQCAtOCw2ICs4LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFRORl9NSUdSQVRFRFx0MHgwMVxuICNkZWZpbmUgVE5GX05PX0dST1VQXHQweDAyXG5AQCAtMzAsNiArMzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7XG4gZXh0ZXJuIHBpZF90IHRhc2tfbnVtYV9ncm91cF9pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuIGV4dGVybiB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCk7XG4gZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTtcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShwLVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcbit9XG4rXG4raW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKTtcbitcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXG4re1xuK1x0cmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChwKSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwiO1xuK31cbiBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSk7XG4gI2Vsc2VcbkBAIC00Nyw2ICs2OSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXG4ge1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZClcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuK3tcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbkBAIC0xNzksNiArMTc5LDE0IEBAIHN0cnVjdCBzaWduYWxfc3RydWN0IHtcbiBcbiAjaWZkZWYgQ09ORklHX1NDSEVEX0FVVE9HUk9VUFxuIFx0c3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC8qXG4rXHQgKiBUaHJlYWQtZ3JvdXAgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGUgY29uZmlndXJlZCB0aHJvdWdoIHByY3RsKCkuXG4rXHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xuK1x0ICogdGhlaXIgcGVyLXRhc2sgcnVucXVldWUgYWNjb3VudGluZyBzbmFwc2hvdC5cbitcdCAqL1xuK1x0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIEN1bXVsYXRpdmUgcmVzb3VyY2UgY291bnRlcnMgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuaW5kZXggYjZlYzZmNjkzNzE5NS4uNWJjMGEyYTJhOTMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuQEAgLTQxNiw0ICs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7XG4gIyBkZWZpbmUgUFJfQ0ZJX0RJU0FCTEVcdFx0X0JJVFVMKDEpXG4gIyBkZWZpbmUgUFJfQ0ZJX0xPQ0tcdFx0X0JJVFVMKDIpXG4gXG4rLyogUGVyLXByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIGNvbnRyb2wgKi9cbisjZGVmaW5lIFBSX1NFVF9OVU1BX0JBTEFOQ0lOR1x0ODJcbisjZGVmaW5lIFBSX0dFVF9OVU1BX0JBTEFOQ0lOR1x0ODNcbisjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFXHQwXG4rIyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFXHQxXG4rXG4gI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovXG5kaWZmIC0tZ2l0IGEvaW5pdC9pbml0X3Rhc2suYyBiL2luaXQvaW5pdF90YXNrLmNcbmluZGV4IGFkYjIwN2NkOTg3YzUuLjgzNWJiM2Y3YTE3ZWIgMTAwNjQ0XG4tLS0gYS9pbml0L2luaXRfdGFzay5jXG4rKysgYi9pbml0L2luaXRfdGFzay5jXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0ge1xuIFx0LmNwdXRpbWVyXHRcdD0ge1xuIFx0XHQuY3B1dGltZV9hdG9taWNcdD0gSU5JVF9DUFVUSU1FX0FUT01JQyxcbiBcdH0sXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0Lm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLFxuICNlbmRpZlxuIFx0SU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscylcbiBcdC5waWRzID0ge1xuQEAgLTIyNCw2ICsyMjcsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XG4gXHQudnRpbWUuc3RhdGVcdD0gVlRJTUVfU1lTLFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID0gdHJ1ZSxcbiBcdC5udW1hX3ByZWZlcnJlZF9uaWQgPSBOVU1BX05PX05PREUsXG4gXHQubnVtYV9ncm91cFx0PSBOVUxMLFxuIFx0Lm51bWFfZmF1bHRzXHQ9IE5VTEwsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjQ5Niw2ICsyNDk2LDE0IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXG4gXHQvKiBObyBtb3JlIGZhaWx1cmUgcGF0aHMgYWZ0ZXIgdGhpcyBwb2ludC4gKi9cbiBcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHRwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPVxuK1x0XHRSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4rXHRpZiAoIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKSlcbitcdFx0cC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9XG4rXHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xuKyNlbmRpZlxuK1xuIFx0LypcbiBcdCAqIENvcHkgc2VjY29tcCBkZXRhaWxzIGV4cGxpY2l0bHkgaGVyZSwgaW4gY2FzZSB0aGV5IHdlcmUgY2hhbmdlZFxuIFx0ICogYmVmb3JlIGhvbGRpbmcgc2lnaGFuZCBsb2NrLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTM2LDYgKzM2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2xvYWRhdmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcdTAwM2VcbkBAIC02MDMsNiArNjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiAgKlx0XHRcdFx0cC1cdTAwM2VzZS5sb2FkLCBwLVx1MDAzZXJ0X3ByaW9yaXR5LFxuICAqXHRcdFx0XHRwLVx1MDAzZWRsLmRsX3tydW50aW1lLCBkZWFkbGluZSwgcGVyaW9kLCBmbGFncywgYncsIGRlbnNpdHl9XG4gICogIC0gc2NoZWRfc2V0bnVtYSgpOlx0XHRwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZFxuKyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKTpcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsXG4rICpcdFx0XHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXG4gICogIC0gc2NoZWRfbW92ZV90YXNrKCk6XHRwLVx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcbiAgKiAgLSB1Y2xhbXBfdXBkYXRlX2FjdGl2ZSgpXHRwLVx1MDAzZXVjbGFtcCpcbiAgKlxuQEAgLTg0MDcsNiArODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKVxuIFx0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcbiBcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPSBuaWQ7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBlbmFibGVkKVxuK3tcbitcdGd1YXJkKHRhc2tfcnFfbG9jaykocCk7XG4rXHRzY29wZWRfZ3VhcmQgKHNjaGVkX2NoYW5nZSwgcCwgREVRVUVVRV9TQVZFKVxuK1x0XHRXUklURV9PTkNFKHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCwgZW5hYmxlZCk7XG4rfVxuK1xuK2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZClcbit7XG4rXHRzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgb2xkX2VuYWJsZWQ7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcdTAwMjZmbGFncykpKVxuK1x0XHRyZXR1cm4gLUVTUkNIO1xuK1xuK1x0b2xkX2VuYWJsZWQgPSBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuK1x0aWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpXG4rXHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7XG4rXG4rXHR1bmxvY2tfdGFza19zaWdoYW5kKGN1cnJlbnQsIFx1MDAyNmZsYWdzKTtcbitcbitcdGlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7XG4rXHRcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKGN1cnJlbnQsIGVuYWJsZWQpO1xuK1x0XHRyZWFkX2xvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4rXHRcdGZvcl9vdGhlcl90aHJlYWRzKGN1cnJlbnQsIHQpXG4rXHRcdFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2sodCwgZW5hYmxlZCk7XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cbiBcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbmluZGV4IDhkZmYzNzA1OWZhZjcuLjdkZmUyNzVhNGJjNDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5AQCAtMzgsNiArMzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NvbmRfcmVzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFx1MDAzZVxuQEAgLTE3MTIsNiArMTcxMyw3IEBAIHN0YXRpYyBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdCAqIGNvbmZsaWN0IG9ubHkgZXhpc3RzIGZvciBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZClcbiBcdFx0XHRtbV9zY2hlZF9sbGMgPSAtMTtcbkBAIC0xODA4LDYgKzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0Y3B1ID0gUkVBRF9PTkNFKHAtXHUwMDNlbW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xuIFx0aWYgKGNwdSAhPSAtMSlcbiBcdFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcbkBAIC0yMzg3LDE0ICsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2VucXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyArPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFKTtcbi1cdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nICs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuK1x0Ym9vbCBlbmFibGVkID0gdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCk7XG4rXG4rXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7XG4rXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyArPSBlbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9kZXF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgLT0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XG4tXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApKTtcbitcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuK1xuK1x0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuK1x0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xuIH1cbiBcbiAvKiBTaGFyZWQgb3IgcHJpdmF0ZSBmYXVsdHMuICovXG5AQCAtMzA4NSw2ICszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSlcbitcdFx0Z290byB1bmxvY2s7XG4rXG4gXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LVx1MDAzZXNyY19jcHUsIGN1ci1cdTAwM2VjcHVzX3B0cikpXG4gXHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5OTIsNiArNDAwOCw5IEBAIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBmb3IgZXhhbXBsZSwga3NtZCBmYXVsdGluZyBpbiBhIHVzZXIncyBtbSAqL1xuIFx0aWYgKCFwLVx1MDAzZW1tKVxuIFx0XHRyZXR1cm47XG5AQCAtNDQzNiw2ICs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxuIFx0aWYgKCFjdXJyLVx1MDAzZW1tIHx8IChjdXJyLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfRVhJVElORyB8IFBGX0tUSFJFQUQpKSB8fCB3b3JrLVx1MDAzZW5leHQgIT0gd29yaylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0XG4gXHQgKiB3ZSAobW9zdGx5KSBkcml2ZSB0aGUgc2VsZWN0aW9uIGZyb20gYnVzeSB0aHJlYWRzIGFuZCB0aGF0IHRoZVxuQEAgLTQ0NjMsNiArNDQ4NSw5IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FuX3BlcmlvZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuZXdfY3B1KVxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghcC1cdTAwM2VtbSB8fCAhcC1cdTAwM2VudW1hX2ZhdWx0cyB8fCAocC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfRVhJVElORykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMDQ3NSw2ICsxMDUwMCw5IEBAIHN0YXRpYyBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghcC1cdTAwM2VudW1hX2ZhdWx0cyB8fCAhKGVudi1cdTAwM2VzZC1cdTAwM2VmbGFncyBcdTAwMjYgU0RfTlVNQSkpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuY1xuaW5kZXggMzViNTM4YmE4NDNjNy4uZmIwMTg0MWMwY2U5MCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zeXMuY1xuKysrIGIva2VybmVsL3N5cy5jXG5AQCAtNjAsNiArNjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb3JlZHVtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NwdXRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbkBAIC0yOTA3LDYgKzI5MDgsMjMgQEAgU1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbiBcdFx0aWYgKGFyZzMgXHUwMDI2IFBSX0NGSV9MT0NLIFx1MDAyNlx1MDAyNiAhKGFyZzMgXHUwMDI2IFBSX0NGSV9ESVNBQkxFKSlcbiBcdFx0XHRlcnJvciA9IGFyY2hfcHJjdGxfbG9ja19icmFuY2hfbGFuZGluZ19wYWRfc3RhdGUobWUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUFJfU0VUX05VTUFfQkFMQU5DSU5HOlxuK1x0XHRpZiAoYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cbitcdFx0XHRcdFx0XHRcdCBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUFJfR0VUX05VTUFfQkFMQU5DSU5HOlxuK1x0XHRpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KCk7XG4rXHRcdGlmIChlcnJvciBcdTAwM2U9IDApXG4rXHRcdFx0ZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6XG4rXHRcdFx0XHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHRyYWNlX3Rhc2tfcHJjdGxfdW5rbm93bihvcHRpb24sIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjozMC40MjMzMDQ1NjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMjM1MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIE5VTUEgQmFsYW5jaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyB0aGUgcmlzay5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIFRoYXQncyB1c3VhbGx5IGxvdyByaXNrLCBidXQgSSdsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aG9zZSB1cGRhdGVzIGZvciBhbnkgY29kZSBzbmlwcGV0cyBvciBpbmRpcmVjdGx5IHJlbGF0ZWQgY2hhbmdlcy5cblxuTmV4dCwgSSBzZWUgYWRkaXRpb25zIHRvIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHdpdGggYE51bWFCX21vZGVgLiBUaGlzIG1lYW5zIHRoZXJlJ3MgbmV3IGV4cG9zZWQgc3RhdGUuIFRoZSBjb2RlIGZvcm1hdHRpbmcgdGhhdCByZWxpZXMgb24gdXNlci12aXNpYmxlIHN0YXRlIGNvdWxkIGJlIGFuIGFyZWEgZm9yIGZ1enppbmcuXG5cbkknbSBzZWVpbmcgbmV3IGZpZWxkcyBhZGRlZCB0byBgdGFza19zdHJ1Y3RgIGFuZCBgc2lnbmFsX3N0cnVjdGAgdW5kZXIgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGVzZSBhcmUga2V5LCBhbmQgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGVzZSBmaWVsZHMgYXJlICp1c2VkKiBhbmQgKmluaXRpYWxpemVkKi4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGluIGBudW1hX2JhbGFuY2luZy5oYCBhbHNvIGRlbWFuZCBhdHRlbnRpb247IHRoZXkncmUgbGlrZWx5IGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZXNlIG5ldyBmaWVsZHMsIGFuZCB0aGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgYWRkaXRpb25zIHRvIGBwcmN0bC5oYCwgd2hpY2ggZGVmaW5lIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGhpcyBtZWFucyB0aGVyZSdzIGEgbmV3IHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggaXMgYW4gb2J2aW91cyBhcmVhIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIHRyYW5zbGF0ZSB0byBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2VzLlxuXG5UaGUgaW5pdGlhbGl6YXRpb24gb2YgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgIGFuZCBgbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZGAgaW4gYGluaXRfdGFzay5jYCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgc3RhdGUgYW5kIHRoZSBjb250cm9sIGZsb3cuIFRoZSBgZm9yay5jYCBjaGFuZ2VzIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuICBJJ20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgbmV3IGZpZWxkcyBhcmUgY29waWVkIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGUgYFJFQURfT05DRWAgYW5kIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgbG9vayBzYWZlIGVub3VnaCBidXQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiAgSXQncyBjcml0aWNhbCB0aGF0IHRoZSBuZXcgc3RhdGUgaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZHVyaW5nIGBmb3JrYCBhbmQgdGhyZWFkaW5nLlxuXG5GaW5hbGx5LCB0aGUgYHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKClgIGltcGxlbWVudGF0aW9uIGFuZCBhbGwgb2YgdGhlIHVzZXMgd2l0aGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhcmUgaGlnaC1wcmlvcml0eS4gIFRoaXMgcGF0Y2ggaXMgKmZ1bmRhbWVudGFsbHkqIGFsdGVyaW5nIHNjaGVkdWxpbmcgYmVoYXZpb3IsIGFuZCB0aGUgdmFyaW91cyBOVU1BLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGFyZSB0aGUgY29yZSBvZiB0aGUgbmV3IGxvZ2ljLiBBbnkgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBoYXJkLXRvLWRlYnVnIHNjaGVkdWxpbmcgYW5vbWFsaWVzLiAgVGhlIHN5cy5jIGhhbmRsaW5nIG9mIHRoZSBgcHJjdGxgIGNhbGxzIGNvbmZpcm1zIGEgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHdoaWNoIGlzIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYHRhc2tfc3RydWN0YCBhbmQgYHNpZ25hbF9zdHJ1Y3RgIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGBmb3JrYC4gSSdtIGdvaW5nIHRvIHVzZSBteSBncmVwcGVyIHRvb2wgdG8gdHJhY2UgaG93IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgaW4gYGZvcmsuY2AgdG8gY2xhcmlmeSB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aG9zZSBhbGxvY2F0aW9uIGFuZCBjb3B5IHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzYuNTI1NjYwODY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyMzc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2lnbmFsX3N0cnVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjozNi41NzUwOTUyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2Mzg3ODA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY29weV9zaWduYWxgIGluIGBrZXJuZWwvZm9yay5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNpZ25hbHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBgZm9yaygpYCBvcGVyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgY29weV9zaWduYWxgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBrZXJuZWwvZm9yay5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGlzc2VjdCBob3cgc2lnbmFsIGRpc3Bvc2l0aW9ucyBhcmUgY29waWVkIG9yLCBtb3JlIGFjY3VyYXRlbHksICpub3QqIGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBjaGlsZC4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBzdWJ0bGUgc2hpZnRzIGluIHNpZ25hbCBzZW1hbnRpY3Mgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gc2lnbmFsIG1hc2tpbmcgYW5kIHRoZSBoYW5kbGluZyBvZiByZWFsLXRpbWUgc2lnbmFscywgc28gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoaWNoIHNpZ25hbHMgYXJlIGluaGVyaXRlZCB3aXRoIHRoZWlyIGRlZmF1bHQgYWN0aW9ucyB2ZXJzdXMgdGhvc2UgdGhhdCBtYXkgYmUgcmVzZXQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGNsb25lKClgIGZsYWdzIGFuZCBwb3RlbnRpYWwgdGhyZWFkLXNwZWNpZmljIHNpZ25hbCBoYW5kbGluZy4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgd2l0aCB0aGUgYHNpZ3BlbmRpbmdgIHN0cnVjdHVyZSBhcyB3ZWxsLCBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgb3B0aW1pemF0aW9uIGlzIGRvbmUgdG8gYXZvaWQgY29weWluZyB1bm5lY2Vzc2FyeSBzaWduYWwgZGF0YS4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBhbnkgc2lnbmFsIGhhbmRsZXIgZHVwbGljYXRpb24gb2NjdXJzIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBjb3B5IHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTU4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzkuMDM4OTc3MTY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwOTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3NpZ25hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MTczMD1zdGF0aWMgdm9pZCBwb3NpeF9jcHVfdGltZXJzX2luaXRfZ3JvdXAoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTczOC1cXG5rZXJuZWwvZm9yay5jOjE3Mzk6c3RhdGljIGludCBjb3B5X3NpZ25hbCh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9mb3JrLmMtMTc0MC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njc9c3RhdGljIHZvaWQgY29weV9vb21fc2NvcmVfYWRqKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NzktXFx0bW1fZmxhZ3Nfc2V0KE1NRl9NVUxUSVBST0NFU1MsIHRzay1cXHUwMDNlbW0pO1xcbmtlcm5lbC9mb3JrLmM6MTk4MDpcXHQvKiBVcGRhdGUgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgd2VyZSBjaGFuZ2VkIGFmdGVyIGNvcHlfc2lnbmFsICovXFxua2VybmVsL2ZvcmsuYy0xOTgxLVxcdHRzay1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqID0gY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDEyPV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIzMDMtXFx0XFx0Z290byBiYWRfZm9ya19jbGVhbnVwX2ZzO1xcbmtlcm5lbC9mb3JrLmM6MjMwNDpcXHRyZXR2YWwgPSBjb3B5X3NpZ25hbChjbG9uZV9mbGFncywgcCk7XFxua2VybmVsL2ZvcmsuYy0yMzA1LVxcdGlmIChyZXR2YWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjM5LjA4NTg5MzAzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTExMzYyMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBjb3B5X3NpZ25hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNpZ25hbHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBgZm9ya2AgcHJvY2VzcywgYW5kIHRoYXQgbWVhbnMgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoaWxkIHByb2Nlc3MgaW5oZXJpdHMgb3IgbWFuYWdlcyBzaWduYWxzIGZyb20gdGhlIHBhcmVudC4gVGhlIGBrZXJuZWwvZm9yay5jYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBiZSwgc28gSSdtIG5hdmlnYXRpbmcgdGhlcmUgbm93IGFuZCB0YXJnZXRpbmcgdGhlIGBjb3B5X3NpZ25hbGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgc2lnbmFsIG1hc2tzIG9yIGhhbmRsZXJzIG1pZ2h0IGJlIGNvcGllZCwgY2xlYXJlZCwgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHNpZ25hbC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyBkdXBsaWNhdGVkLCBpbmhlcml0ZWQsIG9yIGlmIHRoZSBjaGlsZCBzdGFydHMgd2l0aCBhIGZyZXNoIHNsYXRlLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byB0aGUgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvZiB0aGUgZm9yayBzeXN0ZW0gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjo0My4xOTcyNTg3NTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mb3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTczOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTczOTpcXHRzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuMTc0MDpcXHR7XFxuMTc0MTpcXHRcXHRzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnO1xcbjE3NDI6XFx0XFxuMTc0MzpcXHRcXHRpZiAoY2xvbmVfZmxhZ3MgXFx1MDAyNiBDTE9ORV9USFJFQUQpXFxuMTc0NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzQ1OlxcdFxcbjE3NDY6XFx0XFx0c2lnID0ga21lbV9jYWNoZV96YWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTc0NzpcXHRcXHR0c2stXFx1MDAzZXNpZ25hbCA9IHNpZztcXG4xNzQ4OlxcdFxcdGlmICghc2lnKVxcbjE3NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdHNpZy1cXHUwMDNlbnJfdGhyZWFkcyA9IDE7XFxuMTc1MjpcXHRcXHRzaWctXFx1MDAzZXF1aWNrX3RocmVhZHMgPSAxO1xcbjE3NTM6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2lnLVxcdTAwM2VsaXZlLCAxKTtcXG4xNzU0OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2lnLVxcdTAwM2VzaWdjbnQsIDEpO1xcbjE3NTU6XFx0XFxuMTc1NjpcXHRcXHQvKiBsaXN0X2FkZCh0aHJlYWRfbm9kZSwgdGhyZWFkX2hlYWQpIHdpdGhvdXQgSU5JVF9MSVNUX0hFQUQoKSAqL1xcbjE3NTc6XFx0XFx0c2lnLVxcdTAwM2V0aHJlYWRfaGVhZCA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHRzay1cXHUwMDNldGhyZWFkX25vZGUpO1xcbjE3NTg6XFx0XFx0dHNrLVxcdTAwM2V0aHJlYWRfbm9kZSA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHNpZy1cXHUwMDNldGhyZWFkX2hlYWQpO1xcbjE3NTk6XFx0XFxuMTc2MDpcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzaWctXFx1MDAzZXdhaXRfY2hsZGV4aXQpO1xcbjE3NjE6XFx0XFx0c2lnLVxcdTAwM2VjdXJyX3RhcmdldCA9IHRzaztcXG4xNzYyOlxcdFxcdGluaXRfc2lncGVuZGluZyhcXHUwMDI2c2lnLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuMTc2MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNpZy1cXHUwMDNlbXVsdGlwcm9jZXNzKTtcXG4xNzY0OlxcdFxcdHNlcWxvY2tfaW5pdChcXHUwMDI2c2lnLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4xNzY1OlxcdFxcdHByZXZfY3B1dGltZV9pbml0KFxcdTAwMjZzaWctXFx1MDAzZXByZXZfY3B1dGltZSk7XFxuMTc2NjpcXHRcXG4xNzY3OlxcdCNpZmRlZiBDT05GSUdfUE9TSVhfVElNRVJTXFxuMTc2ODpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNpZy1cXHUwMDNlcG9zaXhfdGltZXJzKTtcXG4xNzY5OlxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2c2lnLVxcdTAwM2VpZ25vcmVkX3Bvc2l4X3RpbWVycyk7XFxuMTc3MDpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZzaWctXFx1MDAzZXJlYWxfdGltZXIsIGl0X3JlYWxfZm4sIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuMTc3MTpcXHQjZW5kaWZcXG4xNzcyOlxcdFxcbjE3NzM6XFx0XFx0dGFza19sb2NrKGN1cnJlbnQtXFx1MDAzZWdyb3VwX2xlYWRlcik7XFxuMTc3NDpcXHRcXHRtZW1jcHkoc2lnLVxcdTAwM2VybGltLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXJsaW0sIHNpemVvZiBzaWctXFx1MDAzZXJsaW0pO1xcbjE3NzU6XFx0XFx0dGFza191bmxvY2soY3VycmVudC1cXHUwMDNlZ3JvdXBfbGVhZGVyKTtcXG4xNzc2OlxcdFxcbjE3Nzc6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHNpZyk7XFxuMTc3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6NDMuMTk3NDI0NTAzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzI0OTY0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBOVU1BIEJhbGFuY2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gV2UgYWxzbyBzZWUgdGhpcyBzdHJ1Y3R1cmUgc3RhdGljYWxseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBhbmQgYWdhaW4sIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24gdmlhIGBjb3B5X3Byb2Nlc3NgLlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLlxuXG5GaXJzdCwgYXJlIHdlIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlcnNwYWNlPyBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBkZWFsaW5nIHdpdGggYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBMb29raW5nIGF0IGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgLCBpdCBzaW1wbHkgcmV0dXJucyBhIHZhbHVlIGRpcmVjdGx5LCBubyBkYXRhIGNvcHlpbmcuIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHByaW50cyBzdHJpbmcgbGl0ZXJhbHMuIE5vIHVzZXItc3BhY2UgbGVha3MuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5OZXh0LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsb2dpYyBmbGF3cyBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IGBpbml0X3Rhc2tgIHNlZW1zIHRvIGluaXRpYWxpemUgYC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCAqYW5kKiBgaW5pdF9zaWduYWxzLm51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBFdmVyeSBwcm9jZXNzIGZvcmsgKmV4cGxpY2l0bHkqIHNldHMgYm90aCBgbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZGAgKmFuZCogYHNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkYC4gYGttZW1fY2FjaGVfemFsbG9jYCBpcyBhbHJlYWR5IHplcm9pbmcgaXQgYW55d2F5LiBFdmVuIHdpdGggbm9uLU5VTUEgY29uZmlncywgc3R1YiBmdW5jdGlvbnMgcHJldmVudCBhbnkgaXNzdWVzLiBObyBsb2dpY2FsIGhvbGVzIGRldGVjdGVkLlxuXG5Ob3csIGRvIHdlIGhhdmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBoZXJlLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVjayBvciBsZW5ndGggaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby5cblxuU28sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBaZXJvLiBUaGlzIGlzIGdyZWF0LlxuXG5Ob3csIGNvbmNlcm5pbmcgS0FTQU4gYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4uLiBUaGUgY29kZSB1c2VzIGNvbW1vbiBsb2NraW5nIHByaW1pdGl2ZXMgbGlrZSBgdGFza19ycV9sb2NrYCwgYHNjb3BlZF9ndWFyZChzY2hlZF9jaGFuZ2UpYCwgYGxvY2tfdGFza19zaWdoYW5kYCwgYG11dGV4YCwgYW5kIGB0YXNrbGlzdF9sb2NrYC4gQW55IGxvY2tpbmcgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUC4gS0FTQU4gaXMgaW4gcGxhY2UgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS5cblxuSW4gc3VtbWFyeSwgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UsIGFuZCB0aGVyZSBpcyBhIGNsZWFyIGNvbnRyYXN0IHRvIEtBU0FOJ3MgYXBwbGljYWJpbGl0eS5cblxuQWxyaWdodCwgdGhhdCdzIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gZm9ybXVsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDgsIk91dHB1dFRva2VucyI6MzQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6NTAuMDY5OTI1MDE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cXG5cXG5FdmFsdWF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIChLTVNBTiB2cyBLQVNBTik6XFxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcXG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXFxuICAgLSBUaGUgL3Byb2MvUElEL3N0YXR1cyBlbnRyeSBmb3JtYXRzIHN0YXRpYyBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbHMgKFxcXCJlbmFibGVkXFxcIiwgXFxcImRpc2FibGVkXFxcIiwgXFxcInVuc3VwcG9ydGVkXFxcIikgaW50byB0aGUgc2VxX2ZpbGUuXFxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XFxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxcbiAgIC0gYHN0cnVjdCBzaWduYWxfc3RydWN0YCBhbGxvY2F0aW9ucyBpbiBgZm9yay5jYCB1c2UgYGttZW1fY2FjaGVfemFsbG9jKClgLlxcbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XFxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgcGVyLXByb2Nlc3MgTlVNQSBiYWxhbmNpbmcgdG9nZ2xlIGNvbnRyb2xsZWQgdmlhIHByY3RsKFBSX1NFVF9OVU1BX0JBTEFOQ0lORyAvIFBSX0dFVF9OVU1BX0JBTEFOQ0lORykgYW5kIHJlcG9ydGVkIHZpYSAvcHJvYy9QSUQvc3RhdHVzLlxcblxcbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcXG4xLiBLZXJuZWwtdG8tdXNlciBjb3BpZXMgLyBpbmZvLWxlYWtzOlxcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXFxcImVuYWJsZWRcXFwiLCBcXFwiZGlzYWJsZWRcXFwiLCBcXFwidW5zdXBwb3J0ZWRcXFwiKSBpbnRvIHRoZSBzZXFfZmlsZS5cXG4yLiBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAvIGJyYW5jaGluZzpcXG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXFxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXFxuMy4gT3RoZXIgcG90ZW50aWFsIGlzc3VlczpcXG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm8tbGVhayB2ZWN0b3JzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr2fmh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 14:04:47 +0000 UTC FinishedAt: 2026-09-08 14:26:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b485131995544741ba6dcc313d7eb573bca7bebc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING", "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "b485131995544741ba6dcc313d7eb573bca7bebc", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA_BALANCING", "NUMA" ], "series_id": "310399fa-75cc-4dd3-bce3-377a2ca758ae" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "task_numa_balancing_set_current", "task_numa_fault", "proc_pid_status" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cblxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcJiMzNDtlbmFibGVkXCYjMzQ7LCBcJiMzNDtkaXNhYmxlZFwmIzM0OywgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspIGludG8gdGhlIHNlcV9maWxlLlxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODZkMGVhN2EzYjMzMTVjNzUyNjZmNGQwNmIyZjJjZDE4YmE4ODIyZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTQ6MjU6NTggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5AQCAtNzU0LDYgJiM0Mzs3NTQsMjIgQEAgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAocmVwcmVzZW50ZWQgYXMgZGlmZmVyZW50IE5VTUEgbm9kZXMpIHRvXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXG4gdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby5cbiBcbiYjNDM7VGhlIGBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYGAgYW5kIGBgUFJfR0VUX05VTUFfQkFMQU5DSU5HYGAgcHJjdGwoMilcbiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmdcbiYjNDM7b3IgcmUtZW5hYmxlIHBhcnRpY2lwYXRpb24gZm9yIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAuICBBbnkgdGhyZWFkIGluIHRoZVxuJiM0Mzt0aHJlYWQgZ3JvdXAgbWF5IGNoYW5nZSB0aGUgcHJvY2VzcyBzZXR0aW5nLiAgVGhlIHNldHRpbmcgaXMgaW5oZXJpdGVkIGJ5XG4mIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpc1xuJiM0MztwcmVzZXJ2ZWQgYWNyb3NzIGV4ZWN2ZSgyKS4gIFRoZSBnbG9iYWwgYGBudW1hX2JhbGFuY2luZ2BgIHN5c2N0bCByZW1haW5zXG4mIzQzO3RoZSB0b3AtbGV2ZWwgY29udHJvbDogYSBwcm9jZXNzLWxldmVsIGVuYWJsZSBkb2VzIG5vdCB0dXJuIGF1dG9tYXRpYyBOVU1BXG4mIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLFxuJiM0MztzbyB0aGUgcHJvY2VzcyBzZXR0aW5nIGRvZXMgbm90IG1ha2UgVk1BcyBwYXJ0aWNpcGF0ZSB3aGVuIHRoZWlyIHBvbGljeVxuJiM0MztwcmV2ZW50cyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcuXG4mIzQzO1xuJiM0MztEaXNhYmxpbmcgdGhlIHByb2Nlc3Mgc2V0dGluZyBzdG9wcyBzY2hlZHVsaW5nIG5ldyBwZXJpb2RpYyBOVU1BIHNjYW5zIGZvclxuJiM0Mzt0aGF0IHByb2Nlc3MuIEV4aXN0aW5nIE5VTUEgaGludGluZyBQVEVzIGFuZCBhbHJlYWR5IHF1ZXVlZCB3b3JrIGFyZSBub3RcbiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXNcbiYjNDM7ZWZmZWN0LlxuJiM0MztcbiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwc1xuID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbmluZGV4IGMxMDJiNjIwMjNjZGMuLmE0ZTkwMzdhMzE2MTIgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5AQCAtMTg4LDYgJiM0MzsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxuICAgSHVnZXRsYlBhZ2VzOiAgICAgICAgICAwIGtCXG4gICBDb3JlRHVtcGluZzogICAgMFxuICAgVEhQX2VuYWJsZWQ6XHQgIDFcbiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZFxuICAgVGhyZWFkczogICAgICAgIDFcbiAgIFNpZ1E6ICAgMC8yODU3OFxuICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwXG5AQCAtMjc0LDYgJiM0MzsyNzUsMTEgQEAgSXQmIzM5O3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxuICBUSFBfZW5hYmxlZCAgICAgICAgICAgICAgICAgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHVzZSBUSFAgKHJldHVybnMgMCB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXG4mIzQzOyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2VcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5XG4gIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2YgdGhyZWFkc1xuICBTaWdRICAgICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHNpZ25hbHMgcXVldWVkL21heC4gbnVtYmVyIGZvciBxdWV1ZVxuICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvYXJyYXkuYyBiL2ZzL3Byb2MvYXJyYXkuY1xuaW5kZXggZjZmNzVkMjA2NzYyYS4uYTI3YTZhNTdlOGIyMiAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvYXJyYXkuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvcHJvYy9hcnJheS5jXG5AQCAtNDI1LDYgJiM0Mzs0MjUsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdGhwX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c2VxX3ByaW50ZihtLCBcJiMzNDtUSFBfZW5hYmxlZDpcXHQlZFxcblwmIzM0OywgdGhwX2VuYWJsZWQpO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuJiM0Mzt7XG4mIzQzO1x0c2VxX3ByaW50ZihtLCBcJiMzNDtOdW1hQl9tb2RlOlxcdCVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0ICAgdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUodGFzaykpO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4mIzQzO3tcbiYjNDM7XHRzZXFfcHV0cyhtLCBcJiMzNDtOdW1hQl9tb2RlOlxcdHVuc3VwcG9ydGVkXFxuXCYjMzQ7KTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHNlcV9wcmludGYobSwgXCYjMzQ7dW50YWdfbWFzazpcXHQlI2x4XFxuXCYjMzQ7LCBtbV91bnRhZ19tYXNrKG1tKSk7XG5AQCAtNDUzLDYgJiM0Mzs0NjgsNyBAQCBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLFxuIFx0XHR0YXNrX3VudGFnX21hc2sobSwgbW0pO1xuIFx0XHRtbXB1dChtbSk7XG4gXHR9XG4mIzQzO1x0dGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7XG4gXHR0YXNrX3NpZyhtLCB0YXNrKTtcbiBcdHRhc2tfY2FwKG0sIHRhc2spO1xuIFx0dGFza19zZWNjb21wKG0sIHRhc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uN2YxOTMyNjU4ZDI0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTM4Miw2ICYjNDM7MTM4MiwxMiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xuIFx0c2hvcnRcdFx0XHRcdHByZWZfbm9kZV9mb3JrO1xuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNjaGVkdWxlciBzbmFwc2hvdCBvZiBzaWduYWxfc3RydWN0OjpudW1hX2JhbGFuY2luZ19lbmFibGVkLiBJdCBpc1xuJiM0MztcdCAqIHVwZGF0ZWQgd2l0aCBzY2hlZF9jaGFuZ2UgZm9yIHJ1bnF1ZXVlIE5VTUEgYWNjb3VudGluZzsgdGhlXG4mIzQzO1x0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2xcdFx0XHRcdG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdG51bWFfc2Nhbl9zZXE7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRudW1hX3NjYW5fcGVyaW9kO1xuIFx0dW5zaWduZWQgaW50XHRcdFx0bnVtYV9zY2FuX3BlcmlvZF9tYXg7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG5pbmRleCA1MmIyMmM1YzM5NmRiLi42OWU3OTM1OWZhMjJlIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbkBAIC04LDYgJiM0Mzs4LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUTkZfTUlHUkFURURcdDB4MDFcbiAjZGVmaW5lIFRORl9OT19HUk9VUFx0MHgwMlxuQEAgLTMwLDYgJiM0MzszMSwyNyBAQCBleHRlcm4gdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKTtcbiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4gZXh0ZXJuIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKTtcbiBleHRlcm4gdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFJFQURfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKGN1cnJlbnQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnRhc2tfbnVtYV9iYWxhbmNpbmdfbW9kZV9uYW1lKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcJiMzNDtlbmFibGVkXCYjMzQ7IDogXCYjMzQ7ZGlzYWJsZWRcJiMzNDs7XG4mIzQzO31cbiBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSk7XG4gI2Vsc2VcbkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZClcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxuIHtcbiB9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGZhbHNlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO31cbiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7XG4gXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVBcbiBcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRocmVhZC1ncm91cCBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZSBjb25maWd1cmVkIHRocm91Z2ggcHJjdGwoKS5cbiYjNDM7XHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xuJiM0MztcdCAqIHRoZWlyIHBlci10YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgc25hcHNob3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIEN1bXVsYXRpdmUgcmVzb3VyY2UgY291bnRlcnMgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuaW5kZXggYjZlYzZmNjkzNzE5NS4uNWJjMGEyYTJhOTMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuQEAgLTQxNiw0ICYjNDM7NDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xuICMgZGVmaW5lIFBSX0NGSV9ESVNBQkxFXHRcdF9CSVRVTCgxKVxuICMgZGVmaW5lIFBSX0NGSV9MT0NLXHRcdF9CSVRVTCgyKVxuIFxuJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqL1xuJiM0MzsjZGVmaW5lIFBSX1NFVF9OVU1BX0JBTEFOQ0lOR1x0ODJcbiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkdcdDgzXG4mIzQzOyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEVcdDBcbiYjNDM7IyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFXHQxXG4mIzQzO1xuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xuZGlmZiAtLWdpdCBhL2luaXQvaW5pdF90YXNrLmMgYi9pbml0L2luaXRfdGFzay5jXG5pbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xuJiM0MzsmIzQzOyYjNDM7IGIvaW5pdC9pbml0X3Rhc2suY1xuQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7XG4gXHQuY3B1dGltZXJcdFx0PSB7XG4gXHRcdC5jcHV0aW1lX2F0b21pY1x0PSBJTklUX0NQVVRJTUVfQVRPTUlDLFxuIFx0fSxcbiYjNDM7I2VuZGlmXG4mIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQubnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9IHRydWUsXG4gI2VuZGlmXG4gXHRJTklUX0NQVV9USU1FUlMoaW5pdF9zaWduYWxzKVxuIFx0LnBpZHMgPSB7XG5AQCAtMjI0LDYgJiM0MzsyMjcsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XG4gXHQudnRpbWUuc3RhdGVcdD0gVlRJTUVfU1lTLFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbiYjNDM7XHQubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsXG4gXHQubnVtYV9wcmVmZXJyZWRfbmlkID0gTlVNQV9OT19OT0RFLFxuIFx0Lm51bWFfZ3JvdXBcdD0gTlVMTCxcbiBcdC5udW1hX2ZhdWx0c1x0PSBOVUxMLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuY1xuQEAgLTI0OTYsNiAmIzQzOzI0OTYsMTQgQEAgX19sYXRlbnRfZW50cm9weSBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmNvcHlfcHJvY2VzcyhcbiBcbiBcdC8qIE5vIG1vcmUgZmFpbHVyZSBwYXRocyBhZnRlciB0aGlzIHBvaW50LiAqL1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4mIzQzO1x0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID1cbiYjNDM7XHRcdFJFQURfT05DRShjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcbiYjNDM7XHRpZiAoIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKSlcbiYjNDM7XHRcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxuJiM0MztcdFx0XHRwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XG4mIzQzOyNlbmRpZlxuJiM0MztcbiBcdC8qXG4gXHQgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWRcbiBcdCAqIGJlZm9yZSBob2xkaW5nIHNpZ2hhbmQgbG9jay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbG9hZGF2Zy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbW0uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcdTAwM2VcbkBAIC02MDMsNiAmIzQzOzYwNCw4IEBAIGludCB0YXNrX2xsYyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gICpcdFx0XHRcdHAtXHUwMDNlc2UubG9hZCwgcC1cdTAwM2VydF9wcmlvcml0eSxcbiAgKlx0XHRcdFx0cC1cdTAwM2VkbC5kbF97cnVudGltZSwgZGVhZGxpbmUsIHBlcmlvZCwgZmxhZ3MsIGJ3LCBkZW5zaXR5fVxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcbiYjNDM7ICogIC0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudCgpOlx0cC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCxcbiYjNDM7ICpcdFx0XHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXG4gICogIC0gc2NoZWRfbW92ZV90YXNrKCk6XHRwLVx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcbiAgKiAgLSB1Y2xhbXBfdXBkYXRlX2FjdGl2ZSgpXHRwLVx1MDAzZXVjbGFtcCpcbiAgKlxuQEAgLTg0MDcsNiAmIzQzOzg0MTAsNDIgQEAgdm9pZCBzY2hlZF9zZXRudW1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZClcbiBcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXG4gXHRcdHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID0gbmlkO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBlbmFibGVkKVxuJiM0Mzt7XG4mIzQzO1x0Z3VhcmQodGFza19ycV9sb2NrKShwKTtcbiYjNDM7XHRzY29wZWRfZ3VhcmQgKHNjaGVkX2NoYW5nZSwgcCwgREVRVUVVRV9TQVZFKVxuJiM0MztcdFx0V1JJVEVfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4mIzQzO3tcbiYjNDM7XHRzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuJiM0MztcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdGJvb2wgb2xkX2VuYWJsZWQ7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZ0YXNrX251bWFfYmFsYW5jaW5nX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0aWYgKFdBUk5fT05fT05DRSghbG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpKSlcbiYjNDM7XHRcdHJldHVybiAtRVNSQ0g7XG4mIzQzO1xuJiM0MztcdG9sZF9lbmFibGVkID0gY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbiYjNDM7XHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZClcbiYjNDM7XHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7XG4mIzQzO1xuJiM0MztcdHVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZCkge1xuJiM0MztcdFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soY3VycmVudCwgZW5hYmxlZCk7XG4mIzQzO1x0XHRyZWFkX2xvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4mIzQzO1x0XHRmb3Jfb3RoZXJfdGhyZWFkcyhjdXJyZW50LCB0KVxuJiM0MztcdFx0XHRzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTtcbiYjNDM7XHRcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG4gXG4gI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTM4LDYgJiM0MzszOCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFx1MDAzZVxuQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS5cbiBcdFx0ICovXG4gXHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCBcdTAwM2U9IDAgXHUwMDI2XHUwMDI2XG4gXHRcdCAgICBjcHVfdG9fbm9kZShtbV9zY2hlZF9jcHUpICE9IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkKVxuIFx0XHRcdG1tX3NjaGVkX2xsYyA9IC0xO1xuQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRnb3RvIG91dDtcbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0Y3B1ID0gUkVBRF9PTkNFKHAtXHUwMDNlbW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xuIFx0aWYgKGNwdSAhPSAtMSlcbiBcdFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcbkBAIC0yMzg3LDE0ICYjNDM7MjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgJiM0Mzs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xuLVx0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgJiM0Mzs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuJiM0MztcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuJiM0MztcbiYjNDM7XHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgJiM0Mzs9IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcbiYjNDM7XHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyAtPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFKTtcbi1cdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuJiM0MztcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuJiM0MztcbiYjNDM7XHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgLT0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuJiM0MztcdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdFx0ICAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XG4gfVxuIFxuIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi9cbkBAIC0zMDg1LDYgJiM0MzszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKGN1cikpXG4mIzQzO1x0XHRnb3RvIHVubG9jaztcbiYjNDM7XG4gXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LVx1MDAzZXNyY19jcHUsIGN1ci1cdTAwM2VjcHVzX3B0cikpXG4gXHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5OTIsNiAmIzQzOzQwMDgsOSBAQCB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LyogZm9yIGV4YW1wbGUsIGtzbWQgZmF1bHRpbmcgaW4gYSB1c2VyJiMzOTtzIG1tICovXG4gXHRpZiAoIXAtXHUwMDNlbW0pXG4gXHRcdHJldHVybjtcbkBAIC00NDM2LDYgJiM0Mzs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxuIFx0aWYgKCFjdXJyLVx1MDAzZW1tIHx8IChjdXJyLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfRVhJVElORyB8IFBGX0tUSFJFQUQpKSB8fCB3b3JrLVx1MDAzZW5leHQgIT0gd29yaylcbiBcdFx0cmV0dXJuO1xuIFxuJiM0MztcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VycikpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuIFx0LypcbiBcdCAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0XG4gXHQgKiB3ZSAobW9zdGx5KSBkcml2ZSB0aGUgc2VsZWN0aW9uIGZyb20gYnVzeSB0aHJlYWRzIGFuZCB0aGF0IHRoZVxuQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4mIzQzO1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAoIXAtXHUwMDNlbW0gfHwgIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0aWYgKCFwLVx1MDAzZW51bWFfZmF1bHRzIHx8ICEoZW52LVx1MDAzZXNkLVx1MDAzZWZsYWdzIFx1MDAyNiBTRF9OVU1BKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jXG5pbmRleCAzNWI1MzhiYTg0M2M3Li5mYjAxODQxYzBjZTkwIDEwMDY0NFxuLS0tIGEva2VybmVsL3N5cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmNcbkBAIC02MCw2ICYjNDM7NjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb3JlZHVtcC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG5AQCAtMjkwNyw2ICYjNDM7MjkwOCwyMyBAQCBTWVNDQUxMX0RFRklORTUocHJjdGwsIGludCwgb3B0aW9uLCB1bnNpZ25lZCBsb25nLCBhcmcyLCB1bnNpZ25lZCBsb25nLCBhcmczLFxuIFx0XHRpZiAoYXJnMyBcdTAwMjYgUFJfQ0ZJX0xPQ0sgXHUwMDI2XHUwMDI2ICEoYXJnMyBcdTAwMjYgUFJfQ0ZJX0RJU0FCTEUpKVxuIFx0XHRcdGVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUFJfU0VUX05VTUFfQkFMQU5DSU5HOlxuJiM0MztcdFx0aWYgKGFyZzMgfHwgYXJnNCB8fCBhcmc1KVxuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cbiYjNDM7XHRcdFx0XHRcdFx0XHQgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgUFJfR0VUX05VTUFfQkFMQU5DSU5HOlxuJiM0MztcdFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KCk7XG4mIzQzO1x0XHRpZiAoZXJyb3IgXHUwMDNlPSAwKVxuJiM0MztcdFx0XHRlcnJvciA9IGVycm9yID8gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFIDpcbiYjNDM7XHRcdFx0XHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTtcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QKaW5kZXggYjYzMjhjZDBmNDNlOS4uN2Y2NjVjMjg4MjhhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0CkBAIC03NTQsNiAmIzQzOzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG8KIHBsYWNlIHRoZSBob3QgcGFnZXMgaW4gdGhlIGZhc3QgbWVtb3J5LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbgogdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby4KIAomIzQzO1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpCiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcKJiM0MztvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlCiYjNDM7dGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieQomIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpcwomIzQzO3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnMKJiM0Mzt0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQQomIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLAomIzQzO3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5CiYjNDM7cHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLgomIzQzOwomIzQzO0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yCiYjNDM7dGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90CiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXMKJiM0MztlZmZlY3QuCiYjNDM7CiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CkBAIC0xODgsNiAmIzQzOzE4OCw3IEBAIHJlYWQgdGhlIGZpbGUgL3Byb2MvUElEL3N0YXR1czo6CiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQgogICBDb3JlRHVtcGluZzogICAgMAogICBUSFBfZW5hYmxlZDoJICAxCiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZAogICBUaHJlYWRzOiAgICAgICAgMQogICBTaWdROiAgIDAvMjg1NzgKICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwCkBAIC0yNzQsNiAmIzQzOzI3NSwxMSBAQCBJdCYjMzk7cyBzbG93IGJ1dCB2ZXJ5IHByZWNpc2UuCiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhQIGNvbXBsZXRlbHksIG5vdCBqdXN0IHBhcnRpYWxseSkKJiM0MzsgTnVtYUJfbW9kZSAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2UKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkOyB0aGUgZWZmZWN0aXZlIGJlaGF2aW9yIGFsc28gZGVwZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGdsb2JhbCBudW1hX2JhbGFuY2luZyBzeXNjdGwgYW5kIG1lbW9yeQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5CiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzCiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWUKICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTQyNSw2ICYjNDM7NDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzZXFfcHJpbnRmKG0sICYjMzQ7VEhQX2VuYWJsZWQ6XHQlZFxuJiMzNDssIHRocF9lbmFibGVkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQomIzQzO3sKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0O051bWFCX21vZGU6XHQlc1xuJiMzNDssCiYjNDM7CQkgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKG0sICYjMzQ7TnVtYUJfbW9kZTpcdHVuc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXNlcV9wcmludGYobSwgJiMzNDt1bnRhZ19tYXNrOlx0JSNseFxuJiMzNDssIG1tX3VudGFnX21hc2sobW0pKTsKQEAgLTQ1Myw2ICYjNDM7NDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJdGFza191bnRhZ19tYXNrKG0sIG1tKTsKIAkJbW1wdXQobW0pOwogCX0KJiM0MzsJdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7CiAJdGFza19zaWcobSwgdGFzayk7CiAJdGFza19jYXAobSwgdGFzayk7CiAJdGFza19zZWNjb21wKG0sIHRhc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEzODIsNiAmIzQzOzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAlzaG9ydAkJCQlwcmVmX25vZGVfZm9yazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkvKgomIzQzOwkgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXMKJiM0MzsJICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGUKJiM0MzsJICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LgomIzQzOwkgKi8KJiM0MzsJYm9vbAkJCQludW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkOwogCWludAkJCQludW1hX3NjYW5fc2VxOwogCXVuc2lnbmVkIGludAkJCW51bWFfc2Nhbl9wZXJpb2Q7CiAJdW5zaWduZWQgaW50CQkJbnVtYV9zY2FuX3BlcmlvZF9tYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgKaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCiAjZGVmaW5lIFRORl9NSUdSQVRFRAkweDAxCiAjZGVmaW5lIFRORl9OT19HUk9VUAkweDAyCkBAIC0zMCw2ICYjNDM7MzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7CiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHAtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHApID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7fQogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJaW50IHNyY19uaWQsIGludCBkc3RfY3B1KTsKICNlbHNlCkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCiAJc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLyoKJiM0MzsJICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLgomIzQzOwkgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhcwomIzQzOwkgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkOwogI2VuZGlmCiAJLyoKIAkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCBiNmVjNmY2OTM3MTk1Li41YmMwYTJhMmE5MzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAtNDE2LDQgJiM0Mzs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7CiAjIGRlZmluZSBQUl9DRklfRElTQUJMRQkJX0JJVFVMKDEpCiAjIGRlZmluZSBQUl9DRklfTE9DSwkJX0JJVFVMKDIpCiAKJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgUFJfU0VUX05VTUFfQkFMQU5DSU5HCTgyCiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcJODMKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFCTAKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUJMQomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suYwppbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NAotLS0gYS9pbml0L2luaXRfdGFzay5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvaW5pdF90YXNrLmMKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7CiAJLmNwdXRpbWVyCQk9IHsKIAkJLmNwdXRpbWVfYXRvbWljCT0gSU5JVF9DUFVUSU1FX0FUT01JQywKIAl9LAomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLAogI2VuZGlmCiAJSU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscykKIAkucGlkcyA9IHsKQEAgLTIyNCw2ICYjNDM7MjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0gewogCS52dGltZS5zdGF0ZQk9IFZUSU1FX1NZUywKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsCiAJLm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSwKIAkubnVtYV9ncm91cAk9IE5VTEwsCiAJLm51bWFfZmF1bHRzCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjQ5Niw2ICYjNDM7MjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCiAJLyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiYjNDM7CXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPQomIzQzOwkJUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7CWlmICghKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX1RIUkVBRCkpCiYjNDM7CQlwLSZndDtzaWduYWwtJmd0O251bWFfYmFsYW5jaW5nX2VuYWJsZWQgPQomIzQzOwkJCXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyoKIAkgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWQKIAkgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbG9hZGF2Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbm9oei5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3JzZXFfYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvcnQuaCZndDsKQEAgLTYwMyw2ICYjNDM7NjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICAqCQkJCXAtJmd0O3NlLmxvYWQsIHAtJmd0O3J0X3ByaW9yaXR5LAogICoJCQkJcC0mZ3Q7ZGwuZGxfe3J1bnRpbWUsIGRlYWRsaW5lLCBwZXJpb2QsIGZsYWdzLCBidywgZGVuc2l0eX0KICAqICAtIHNjaGVkX3NldG51bWEoKToJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZAomIzQzOyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKToJcC0mZ3Q7c2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkLAomIzQzOyAqCQkJCQlwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkCiAgKiAgLSBzY2hlZF9tb3ZlX3Rhc2soKToJcC0mZ3Q7c2NoZWRfdGFza19ncm91cAogICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKQlwLSZndDt1Y2xhbXAqCiAgKgpAQCAtODQwNyw2ICYjNDM7ODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQogCXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiAJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9IG5pZDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CWd1YXJkKHRhc2tfcnFfbG9jaykocCk7CiYjNDM7CXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiYjNDM7CQlXUklURV9PTkNFKHAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgb2xkX2VuYWJsZWQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Rhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCAmYW1wO2ZsYWdzKSkpCiYjNDM7CQlyZXR1cm4gLUVTUkNIOwomIzQzOwomIzQzOwlvbGRfZW5hYmxlZCA9IGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZDsKJiM0MzsJaWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpCiYjNDM7CQlXUklURV9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7CiYjNDM7CiYjNDM7CXVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7CiYjNDM7CQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO3Rhc2tsaXN0X2xvY2spOwomIzQzOwkJZm9yX290aGVyX3RocmVhZHMoY3VycmVudCwgdCkKJiM0MzsJCQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7dGFza2xpc3RfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL25vaHouaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9wcmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2NhbGwuaCZndDsKQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4KIAkJICovCiAJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3NjaGVkX251bWFfYmFsYW5jaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgJmFtcDsmYW1wOwogCQkgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICZndDs9IDAgJmFtcDsmYW1wOwogCQkgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLSZndDtudW1hX3ByZWZlcnJlZF9uaWQpCiAJCQltbV9zY2hlZF9sbGMgPSAtMTsKQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJY3B1ID0gUkVBRF9PTkNFKHAtJmd0O21tLSZndDtzY19zdGF0LmNwdSk7CiAJaWYgKGNwdSAhPSAtMSkKIAkJbmlkID0gY3B1X3RvX25vZGUoY3B1KTsKQEAgLTIzODcsMTQgJiM0MzsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAKIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7Ci0JcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSBlbmFibGVkICZhbXA7JmFtcDsKJiM0MzsJCQkJIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7CiYjNDM7CXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTsKIH0KIAogc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJxLSZndDtucl9udW1hX3J1bm5pbmcgLT0gKHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpOwotCXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTsKJiM0MzsJcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7CiB9CiAKIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi8KQEAgLTMwODUsNiAmIzQzOzMwOTgsOSBAQCBzdGF0aWMgYm9vbCB0YXNrX251bWFfY29tcGFyZShzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LAogCQkJZ290byB1bmxvY2s7CiAJfQogCiYjNDM7CWlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCS8qIFNraXAgdGhpcyBzd2FwIGNhbmRpZGF0ZSBpZiBjYW5ub3QgbW92ZSB0byB0aGUgc291cmNlIGNwdS4gKi8KIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LSZndDtzcmNfY3B1LCBjdXItJmd0O2NwdXNfcHRyKSkKIAkJZ290byB1bmxvY2s7CkBAIC0zOTkyLDYgJiM0Mzs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKQogCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtzY2hlZF9udW1hX2JhbGFuY2luZykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlciYjMzk7cyBtbSAqLwogCWlmICghcC0mZ3Q7bW0pCiAJCXJldHVybjsKQEAgLTQ0MzYsNiAmIzQzOzQ0NTUsOSBAQCBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfbnVtYShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiAJaWYgKCFjdXJyLSZndDttbSB8fCAoY3Vyci0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay0mZ3Q7bmV4dCAhPSB3b3JrKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0CiAJICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGUKQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXAtJmd0O21tIHx8ICFwLSZndDtudW1hX2ZhdWx0cyB8fCAocC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfRVhJVElORykpCiAJCXJldHVybjsKIApAQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwLSZndDtudW1hX2ZhdWx0cyB8fCAhKGVudi0mZ3Q7c2QtJmd0O2ZsYWdzICZhbXA7IFNEX05VTUEpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmMKQEAgLTYwLDYgJiM0Mzs2MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CkBAIC0yOTA3LDYgJiM0MzsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsCiAJCWlmIChhcmczICZhbXA7IFBSX0NGSV9MT0NLICZhbXA7JmFtcDsgIShhcmczICZhbXA7IFBSX0NGSV9ESVNBQkxFKSkKIAkJCWVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzoKJiM0MzsJCWlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT0KJiM0MzsJCQkJCQkJIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkc6CiYjNDM7CQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpOwomIzQzOwkJaWYgKGVycm9yICZndDs9IDApCiYjNDM7CQkJZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6CiYjNDM7CQkJCVBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEU7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQl0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzM5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNTczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggU2VyaWVzIGZvciBTeXprYWxsZXIgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBzZXJpZXMgKmNvdWxkKiBiZSBhIGdvb2QgY2FuZGlkYXRlIGZvciBTeXprYWxsZXIgZnV6emluZy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgc2VlIGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQuCgpGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlLiBJdCBsb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggTlVNQSBiYWxhbmNpbmcgZW5oYW5jZW1lbnRzLiBTcGVjaWZpY2FsbHk6CgoxLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiBmaWxlcyDigJMgbm90IGluaGVyZW50bHkgZnV6emFibGUsIGJ1dCBjb3VsZCBleHBvc2UgbmV3IGNvZGUgcGF0aHMgb3Igc2V0dGluZ3MuIEkmIzM5O2xsIG5vdGUgaXQuCjIuICAqKi9wcm9jIEludGVyZmFjZToqKiBBIG5ldyBlbnRyeSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzYCwgaW4gYC9wcm9jL1BJRC9zdGF0dXNgLiBUaGlzIGlzIHByb21pc2luZy4gQW55IGNoYW5nZXMgdG8gcHJvY2ZzIGFyZSBnb29kIHRhcmdldHMsIGFuZCBgL3Byb2MvUElEL3N0YXR1c2AgaXMgaGVhdmlseSB1c2VkLgozLiAgKipIZWFkZXJzOioqIEhlYWRlciBmaWxlcyBhcmUgYmVpbmcgdXBkYXRlZC4gSW1wb3J0YW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCjQuICAqKkluaXRpYWxpemF0aW9uOioqIENoYW5nZXMgaW4gYGluaXRfdGFzay5jYCwgYWZmZWN0aW5nIGhvdyB0aGUgYGluaXRgIHByb2Nlc3MgaXMgc2V0IHVwLiBDb3VsZCBiZSBpbnRlcmVzdGluZy4KNS4gICoqRm9yayBMb2dpYzoqKiBNb2RpZmljYXRpb25zIHRvIGBjb3B5X3Byb2Nlc3NgIHdpdGhpbiBga2VybmVsL2ZvcmsuY2AsIHVwZGF0aW5nIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBUaGlzIGlzIEhVR0UuIEZvcmsgaXMgYSBjcml0aWNhbCwgYW5kIG9mdGVuIGZ1enplZCwgcGF0aC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLgo2LiAgKipTY2hlZHVsZXIgQ29yZToqKiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgcmVhbGx5IGp1aWN5LiBUaGUgaW1wbGVtZW50YXRpb24gb2YgYHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrYCBhbmQgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIGluIGBrZXJuZWwvc2NoZWQvY29yZS5jYCBhcmUgdml0YWwuIFRoaXMgaXMgdGhlIGhlYXJ0IG9mIHRoZSBjaGFuZ2VzLiBUaGUgc2NoZWR1bGVyIGlzIGEga2V5IHRhcmdldC4KNy4gICoqRmFpciBTY2hlZHVsZXI6KiogRXZlbiBiZXR0ZXIg4oCTIHRoZSBmYWlyIHNjaGVkdWxlciAoYGtlcm5lbC9zY2hlZC9mYWlyLmNgKSBpcyBjaGVja2luZyBgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWRgIGluIGEgYnVuY2ggb2YgY3J1Y2lhbCBwbGFjZXM6IGBnZXRfcHJlZl9sbGNgLCBgZ2V0X3NjYW5fY3B1bWFza3NgLCBhbmQgb3RoZXIgc2NoZWR1bGVyIG9wZXJhdGlvbnMuIFRoaXMgaXMgZ29sZC4gQW55IGNoYW5nZXMgdG8gdGhlIHNjaGVkdWxlciYjMzk7cyBiZWhhdmlvciBpcyBsaWtlbHkgdG8gaW50cm9kdWNlIGVycm9ycyBhbmQgbWFrZSB0aGlzIGEgaGlnaCBwcmlvcml0eS4KOC4gICoqcHJjdGwgU3lzY2FsbDoqKiBUaGUgYWRkaXRpb24gb2YgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2AgYW5kIGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgIHRvIHRoZSBgcHJjdGxgIHN5c2NhbGwuIFRoaXMgaXMgYSB2ZXJ5IGdvb2QgaW5kaWNhdG9yIGZvciB1cy4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgdGhpcyBpcyBhIHJlYWNoYWJsZSBjb2RlIHBhdGgsIGJ1dCBzeXN0ZW0gY2FsbHMgYXJlIHBlcmZlY3QgZnV6emluZyBjYW5kaWRhdGVzLgoKTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCAqeWVzKiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBjaGFuZ2VzIHRvIGNvcmUgc2NoZWR1bGVyIGxvZ2ljLCBmb3JrIGxvZ2ljLCB0aGUgYHByY3RsYCBzeXNjYWxsIGhhbmRsZXIsIGFuZCB0aGUgYC9wcm9jYCBpbnRlcmZhY2UuIFRoaXMgaXMgYWxsIGhpZ2gtdmFsdWUgc3R1ZmYuIFRoZSBhZGRpdGlvbiBvZiBuZXcgYHByY3RsYCBvcHRpb25zIGlzIGEgbWFzc2l2ZSB3aW4uIEkgc2VlIGxvY2tpbmcgcHJpbWl0aXZlcyBldmVyeXdoZXJlOiBtdXRleGVzLCBgdGFza19ycV9sb2NrYCwgYHNjaGVkX2NoYW5nZWAsIGB0YXNrbGlzdF9sb2NrYCwgc2lnaGFuZCBsb2NrcywgdGhyZWFkIGl0ZXJhdGlvbiwgYWxsIG9mIHdoaWNoIGFyZSBnb29kIHNwb3RzIGZvciBmdXp6aW5nLiBMb2NraW5nIGlzIGFsd2F5cyBpbnRlcmVzdGluZyBmcm9tIGEgY29uY3VycmVuY3kgc3RhbmRwb2ludC4KCk5vdywgbGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCB1c2UgdGhlIGdyZXBwZXIgYW5kIGNoZWNrIGZvciBgQ09ORklHX05VTUFfQkFMQU5DSU5HYCB0byBtYWtlIHN1cmUgd2UmIzM5O3JlIGFjdHVhbGx5IGdvaW5nIHRvIHRhcmdldCB1c2VmdWwgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlVNQV9CQUxBTkNJTkcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTEwMTg9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4tLVxuaW5pdC9LY29uZmlnLTEwMjAtXG5pbml0L0tjb25maWc6MTAyMTpjb25maWcgTlVNQV9CQUxBTkNJTkdcbmluaXQvS2NvbmZpZy0xMDIyLVx0Ym9vbCBcJiMzNDtNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnPTEwMzQ9Y29uZmlnIFNDSEVEX0NBQ0hFXG4tLVxuaW5pdC9LY29uZmlnLTEwNDQtXG5pbml0L0tjb25maWc6MTA0NTpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG5pbml0L0tjb25maWctMTA0Ni1cdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE5NQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOVU1BIEJhbGFuY2luZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwcmVjaXNlIHJlcXVpcmVtZW50cyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGV0ZXJtaW5lIHRoZSBhdmFpbGFiaWxpdHkgb2YgYENPTkZJR19OVU1BX0JBTEFOQ0lOR2AuIE15IGltbWVkaWF0ZSBjb3Vyc2Ugb2YgYWN0aW9uIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2Ug4oCTIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLiBJJiMzOTttIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDIxLCB3aGljaCBzaG91bGQgYmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW55IHByZXJlcXVpc2l0ZSBmZWF0dXJlcywgYW5kIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBJIGNhbiBldmVuICpzZWUqIHRoZSBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQuIEZyb20gdGhlcmUsIEkmIzM5O2xsIGJlIGFibGUgdG8gYnVpbGQgYSBwcm9wZXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgYnJvYWRlciBrZXJuZWwgZWNvc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDE1Olx0IyBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IChhYil1c2UgTlVNQSB0byByZXByZXNlbnQgZGlmZmVyZW50IG1lbW9yeSByZWdpb25zXG4xMDE2Olx0IyBhbGwgY3B1LWxvY2FsIGJ1dCBvZiBkaWZmZXJlbnQgbGF0ZW5jaWVzLCBzdWNoIGFzIFN1cGVySC5cbjEwMTc6XHQjXG4xMDE4Olx0Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4xMDE5Olx0XHRib29sXG4xMDIwOlx0XG4xMDIxOlx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HXG4xMDIyOlx0XHRib29sIFwmIzM0O01lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcJiMzNDtcbjEwMjM6XHRcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19OVU1BX0JBTEFOQ0lOR1xuMTAyNDpcdFx0ZGVwZW5kcyBvbiBBUkNIX0hBU19QVEVfUFJPVE5PTkVcbjEwMjU6XHRcdGRlcGVuZHMgb24gIUFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXG4xMDI2Olx0XHRkZXBlbmRzIG9uIFNNUCBcdTAwMjZcdTAwMjYgTlVNQV9NSUdSQVRJT04gXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4xMDI3Olx0XHRoZWxwXG4xMDI4Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgYXV0b21hdGljIE5VTUEgYXdhcmUgbWVtb3J5L3Rhc2sgcGxhY2VtZW50LlxuMTAyOTpcdFx0ICBUaGUgbWVjaGFuaXNtIGlzIHF1aXRlIHByaW1pdGl2ZSBhbmQgaXMgYmFzZWQgb24gbWlncmF0aW5nIG1lbW9yeSB3aGVuXG4xMDMwOlx0XHQgIGl0IGhhcyByZWZlcmVuY2VzIHRvIHRoZSBub2RlIHRoZSB0YXNrIGlzIHJ1bm5pbmcgb24uXG4xMDMxOlx0XG4xMDMyOlx0XHQgIFRoaXMgc3lzdGVtIHdpbGwgYmUgaW5hY3RpdmUgb24gVU1BIHN5c3RlbXMuXG4xMDMzOlx0XG4xMDM0Olx0Y29uZmlnIFNDSEVEX0NBQ0hFXG4xMDM1Olx0XHRib29sIFwmIzM0O0NhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVwmIzM0O1xuMTAzNjpcdFx0ZGVmYXVsdCB5XG4xMDM3Olx0XHRkZXBlbmRzIG9uIFNNUFxuMTAzODpcdFx0aGVscFxuMTAzOTpcdFx0ICBXaGVuIGVuYWJsZWQsIHRoZSBzY2hlZHVsZXIgd2lsbCBhdHRlbXB0IHRvIGFnZ3JlZ2F0ZSB0YXNrcyBmcm9tXG4xMDQwOlx0XHQgIHRoZSBzYW1lIHByb2Nlc3Mgb250byBhIHNpbmdsZSBMYXN0IExldmVsIENhY2hlIChMTEMpIGRvbWFpbiB3aGVuXG4xMDQxOlx0XHQgIHBvc3NpYmxlLiBUaGlzIGltcHJvdmVzIGNhY2hlIGxvY2FsaXR5IGJ5IGtlZXBpbmcgdGFza3MgdGhhdCBzaGFyZVxuMTA0MjpcdFx0ICByZXNvdXJjZXMgd2l0aGluIHRoZSBzYW1lIGNhY2hlIGRvbWFpbiwgcmVkdWNpbmcgY2FjaGUgbWlzc2VzIGFuZFxuMTA0MzpcdFx0ICBsb3dlcmluZyBkYXRhIGFjY2VzcyBsYXRlbmN5LlxuMTA0NDpcdFxuMTA0NTpcdGNvbmZpZyBOVU1BX0JBTEFOQ0lOR19ERUZBVUxUX0VOQUJMRURcbjEwNDY6XHRcdGJvb2wgXCYjMzQ7QXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcJiMzNDtcbjEwNDc6XHRcdGRlZmF1bHQgeVxuMTA0ODpcdFx0ZGVwZW5kcyBvbiBOVU1BX0JBTEFOQ0lOR1xuMTA0OTpcdFx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTY5CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2Vzcywga2VlcGluZyBpbiBtaW5kIEkmIzM5O20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIE5VTUFfTUlHUkFUSU9OIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIHRvbyBkZWVwIGludG8gdGhlIHByaW1hcnkgaXNzdWUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbiYjMzk7dCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIFgsIFksIGFuZCBaLCBidXQgaXQmIzM5O3MgY3J1Y2lhbCB0byBiZSB0aG9yb3VnaC4gVGhlIGBOVU1BX01JR1JBVElPTmAgZnVuY3Rpb25hbGl0eSBjYW4gaW50cm9kdWNlIHNvbWUgc3VidGxlLCB5ZXQgaW1wYWN0ZnVsLCBkZXBlbmRlbmNpZXMgdGhhdCBhcmUgZWFzaWx5IG92ZXJsb29rZWQuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkga25vdyB0aGF0IG92ZXJsb29raW5nIHRoZXNlIGRldGFpbHMgY2FuIGxlYWQgdG8gc29tZSByZWFsbHkgZnJ1c3RyYXRpbmcgZGVidWdnaW5nIHNlc3Npb25zIGRvd24gdGhlIGxpbmUuIEkgbmVlZCB0byB0YWtlIGEgbW9tZW50IGFuZCByZWZyZXNoIG15c2VsZiBvbiB0aGUgcG90ZW50aWFsIGZvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucyBvciBiZWhhdmlvcnMgdGhhdCBtaWdodCBhcmlzZSBpZiBgTlVNQV9NSUdSQVRJT05gIGlzbiYjMzk7dCBoYW5kbGVkIGNvcnJlY3RseSBhY3Jvc3MgdGhlIGJvYXJkLCBldmVuIGlmIGl0IHNlZW1zIHBlcmlwaGVyYWxseSByZWxhdGVkLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIGFueSBvZiB0aG9zZSBkZXBlbmRlbmNpZXMgYXJlIGluIHBsYXkgaGVyZS4gSXQmIzM5O3MgYmVzdCB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIGF0IHRoaXMgc3RhZ2UuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSB0aW1lIGxhdGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBOVU1BX01JR1JBVElPTiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTY2NT1jb25maWcgUEFHRV9SRVBPUlRJTkdcbi0tXG5tbS9LY29uZmlnLTY3Mi1cbm1tL0tjb25maWc6NjczOmNvbmZpZyBOVU1BX01JR1JBVElPTlxubW0vS2NvbmZpZy02NzQtXHRib29sIFwmIzM0O05VTUEgcGFnZSBtaWdyYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI5NQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIGBtbS9LY29uZmlnYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDY3My4gTXkgbWVudGFsIG1vZGVsIGlzIGFscmVhZHkgcHJpbWVkIGZvciB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiBvciBwZXJoYXBzIGEgZGVwZW5kZW5jeSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgbWVtb3J5IGZlYXR1cmUgb3IgY29uZmlndXJhdGlvbiBvcHRpb24uIExpbmUgNjczPyBUaGF0IG51bWJlciBpcyBmYW1pbGlhcjsgaXQmIzM5O3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGdyYW51bGFyIHNldHRpbmcsIHBlcmhhcHMgcmVsYXRlZCB0byBOVU1BLCBtZW1vcnkgaG90cGx1Zywgb3IgYSBzcGVjaWZpYyBhbGxvY2F0b3IuIEkmIzM5O20gZm9jdXNpbmcgaW4gYmVjYXVzZSBJIHN1c3BlY3QgYSBzdWJ0bGV0eSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgcGh5c2ljYWwgbWVtb3J5IHJlZ2lvbnMgb3IgbWFuYWdlcyB0aGVpciBhbGxvY2F0aW9uLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcGFyc2UgdGhhdCBzZWN0aW9uLCBsb29raW5nIGZvciB0aGUgdXN1YWwgc3VzcGVjdHM6IGBjb25maWdgIGJsb2NrcywgYGRlcGVuZHMgb25gIGNsYXVzZXMsIGJvb2xlYW4gZGVmaW5pdGlvbnMsIG9yIG1heWJlIGV2ZW4gYW4gYGlmYCBzdGF0ZW1lbnQgdGhhdCByZXZlYWxzIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBCYXNlZCBvbiBteSBwYXN0IGV4cGVyaWVuY2UsIEnigJltIGFudGljaXBhdGluZyBhIHBvdGVudGlhbCBpbnRlcmFjdGlvbiBwb2ludCBiZXR3ZWVuIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIG9yIGZlYXR1cmUuIEkmIzM5O20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBjZXJ0YWluIGRldGFpbCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gTGV0JiMzOTtzIGdldCB0byBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjcwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA2NzA6XHRcdCAgdGhvc2UgcGFnZXMgdG8gYW5vdGhlciBlbnRpdHksIHN1Y2ggYXMgYSBoeXBlcnZpc29yLCBzbyB0aGF0IHRoZVxuIDY3MTpcdFx0ICBtZW1vcnkgY2FuIGJlIGZyZWVkIHdpdGhpbiB0aGUgaG9zdCBmb3Igb3RoZXIgdXNlcy5cbiA2NzI6XHRcbiA2NzM6XHRjb25maWcgTlVNQV9NSUdSQVRJT05cbiA2NzQ6XHRcdGJvb2wgXCYjMzQ7TlVNQSBwYWdlIG1pZ3JhdGlvblwmIzM0O1xuIDY3NTpcdFx0ZGVmYXVsdCB5XG4gNjc2Olx0XHRkZXBlbmRzIG9uIE5VTUEgXHUwMDI2XHUwMDI2IE1NVVxuIDY3NzpcdFx0c2VsZWN0IE1JR1JBVElPTlxuIDY3ODpcdFx0aGVscFxuIDY3OTpcdFx0ICBTdXBwb3J0IHRoZSBtaWdyYXRpb24gb2YgcGFnZXMgdG8gb3RoZXIgTlVNQSBub2RlcywgYXZhaWxhYmxlIHRvXG4gNjgwOlx0XHQgIHVzZXIgc3BhY2UgdGhyb3VnaCBpbnRlcmZhY2VzIGxpa2UgbWlncmF0ZV9wYWdlcygpLCBtb3ZlX3BhZ2VzKCksXG4gNjgxOlx0XHQgIGFuZCBtYmluZCgpLiBTZWxlY3RpbmcgdGhpcyBvcHRpb24gYWxzbyBlbmFibGVzIHN1cHBvcnQgZm9yIHBhZ2VcbiA2ODI6XHRcdCAgZGVtb3Rpb24gZm9yIG1lbW9yeSB0aWVyaW5nLlxuIDY4MzpcdFxuIDY4NDpcdGNvbmZpZyBNSUdSQVRJT05cbiA2ODU6XHRcdGJvb2xcbiA2ODY6XHRcdGRlcGVuZHMgb24gTU1VXG4gNjg3Olx0XG4gNjg4Olx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cbiA2ODk6XHRcdGRlZl9ib29sIE1JR1JBVElPTiBcdTAwMjZcdTAwMjYgWk9ORV9ERVZJQ0VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE4NjgKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA5NDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gTlVNQSBCYWxhbmNpbmcgSW1wbGVtZW50YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBOVU1BX0JBTEFOQ0lOR2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgcmVsaWVzIG9uIHRoZSBicm9hZGVyIGBOVU1BYCBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggaXRzZWxmIG1lYW5zIGBOVU1BX01JR1JBVElPTmAgaXMgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwaWVjZXMgYXJlIGNyaXRpY2FsIGZvciBmdXp6aW5nIGZvY3VzLiBJJiMzOTttIHN0YXJ0aW5nIGJ5IGxvb2tpbmcgYXQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogY2xlYXJseSBgTlVNQV9CQUxBTkNJTkdgIGl0c2VsZiBpcyBrZXksIGFzIGlzIHRoZSBlbmFibGluZyBvZiBgTlVNQWAuCgpOb3csIHRoZSBzeW1ib2xzIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIG9yIGludHJvZHVjZWQgYXJlIGltcG9ydGFudC4gSSYjMzk7dmUgZ290IGEgbGlzdDogYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIChrZXJuZWwvc2NoZWQvY29yZS5jLCBhbmQgY2FsbGVkIGZyb20gYHByY3RsYCksIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgKHN0YXRpYyksIGB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50YCAoc3RhdGljIGlubGluZSksIGB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1c2AgKHN0YXRpYyBpbmxpbmUpLCBgcHJvY19waWRfc3RhdHVzYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4KCkkmIzM5O20gc3BlY2lmaWNhbGx5IHRyeWluZyB0byBwaWNrIG91dCAqbm9uLXViaXF1aXRvdXMqIGZ1bmN0aW9ucy4gSSYjMzk7bSBhdm9pZGluZyBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzaW5jZSBsaXN0aW5nIHRob3NlIHdvdWxkIGRpbHV0ZSB0aGUgZm9jdXMuIEkgd2FudCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyBhcmUgdHJpY2t5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluIHRoZSAuYyBmaWxlcy4KCkxldCYjMzk7cyBzdGFydCB3aXRoIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YC4gQ2hlY2tpbmcgYGtlcm5lbC9zY2hlZC9jb3JlLmNgLCBpdCYjMzk7cyAqbm90KiBzdGF0aWMsIGFuZCBpdCYjMzk7cyBhbiBgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKWAuIEl0JiMzOTtzIGEgZGlyZWN0IEFQSSBlbnRyeXBvaW50ISBJdCYjMzk7cyBjYWxsZWQgYnkgYHN5c19wcmN0bGAgd2l0aCBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYC4gVGhhdCYjMzk7cyBhIGdvb2Qgb25lIHRvIHN0YXJ0IHdpdGgsIHZlcnkgc3BlY2lmaWMuIFdoYXQgYWJvdXQgYHRhc2tfbnVtYV9mYXVsdGA/IFRoYXQgbG9va3MgbGlrZSBpdCBtaWdodCBiZSBhIGZhdWx0IGhhbmRsZXIsIGJ1dCBsZXQmIzM5O3MgY2hlY2sgaXQmIzM5O3MgY29tbW9uYWxpdHk7IGl0JiMzOTtzIHNwZWNpZmljIHRvIE5VTUEgaGludGluZy4KCmBzY2hlZF9zZXRudW1hYCBpc24mIzM5O3QgdG91Y2hlZCwganVzdCBhIGNvbW1lbnQgdXBkYXRlLiBgdGFza190aWNrX251bWFgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIGFuZCBgcHJvY19waWRfc3RhdHVzYCBjYWxscyBgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZnJvbSBgZnMvcHJvYy9hcnJheS5jYC4gQW5kIG9mIGNvdXJzZSBgcHJjdGxgIGl0c2VsZiBpcyBhIHN5c2NhbGwgZW50cnlwb2ludCwgYnV0IGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpcyB0aGUgcHJlY2lzZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhpcyBmZWF0dXJlIQoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIHRoYXQgc3RhbmQgb3V0IGFyZToKLSBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAKLSBgcHJvY19waWRfc3RhdHVzYAoKSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFza19udW1hX2ZhdWx0YCBpcyB1YmlxdWl0b3VzIG9yIHNwZWNpZmljLiBUaGUgc2lnbmF0dXJlIHN1Z2dlc3RzIGl0JiMzOTtzIHJlbGF0ZWQgdG8gTlVNQSBoaW50aW5nIHBhZ2UgZmF1bHRzICggYGRvX251bWFfcGFnZWAgaXMgcHJvYmFibHkgYSBrZXkgY2FsbCBwYXRoKSwgbWFraW5nIGl0IGxlc3MgbGlrZWx5IHRvIGJlIGEgZ2VuZXJhbCwgaGlnaC1mcmVxdWVuY3kgZnVuY3Rpb24sIHRodXMgYWxzbyB1c2VmdWwuIEkgc2hvdWxkIGNoZWNrIHdoYXQgY2FsbHMgaXQsIHRob3VnaCwganVzdCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0YXNrX251bWFfZmF1bHQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oPTE5PWVudW0gbnVtYV92bWFza2lwX3JlYXNvbiB7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oLTI5LSNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaDozMDpleHRlcm4gdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKTtcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0zMS1leHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XG4tLVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oPTU1PWJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxuLS1cbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01Ny0jZWxzZVxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oOjU4OnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3Rfbm9kZSwgaW50IG5vZGUsIGludCBwYWdlcyxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01OS1cdFx0XHRcdCAgIGludCBmbGFncylcbi0tXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM5NjM9dm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXG4tLVxua2VybmVsL3NjaGVkL2ZhaXIuYy0zOTk4LSAqL1xua2VybmVsL3NjaGVkL2ZhaXIuYzozOTk5OnZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcbmtlcm5lbC9zY2hlZC9mYWlyLmMtNDAwMC17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yMjc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjMyOC1cdFx0bmlkID0gdGFyZ2V0X25pZDtcbm1tL2h1Z2VfbWVtb3J5LmM6MjMyOTpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIEhQQUdFX1BNRF9OUiwgZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMzMwLVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTIzNDktXHRpZiAobmlkICE9IE5VTUFfTk9fTk9ERSlcbm1tL2h1Z2VfbWVtb3J5LmM6MjM1MDpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIEhQQUdFX1BNRF9OUiwgZmxhZ3MpO1xubW0vaHVnZV9tZW1vcnkuYy0yMzUxLVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtb3J5LmM9NjI4OD1zdGF0aWMgdm1fZmF1bHRfdCBkb19udW1hX3BhZ2Uoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXG4tLVxubW0vbWVtb3J5LmMtNjM0Ny1cdFx0ZmxhZ3MgfD0gVE5GX01JR1JBVEVEO1xubW0vbWVtb3J5LmM6NjM0ODpcdFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIG5yX3BhZ2VzLCBmbGFncyk7XG5tbS9tZW1vcnkuYy02MzQ5LVx0XHRyZXR1cm4gMDtcbi0tXG5tbS9tZW1vcnkuYy02Mzc0LVx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXG5tbS9tZW1vcnkuYzo2Mzc1Olx0XHR0YXNrX251bWFfZmF1bHQobGFzdF9jcHVwaWQsIG5pZCwgbnJfcGFnZXMsIGZsYWdzKTtcbm1tL21lbW9yeS5jLTYzNzYtXHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNzMKCQkJCQkJCW91dHB1dDogMTUxCgkJCQkJCQl0aG91Z2h0czogNTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5VTUEgQmFsYW5jaW5nIFN5bWJvbHMgYW5kIENvbmZpZ3VyYXRpb25zKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGtleSBzeW1ib2xzIHJlbGF0ZWQgdG8gdGhpcyBOVU1BIGJhbGFuY2luZyBmdW5jdGlvbmFsaXR5LiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIG5ldyBzeW1ib2wgaW50cm9kdWNlZCBpcyBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAuIEkgc2hvdWxkIGFsc28ga2VlcCBhbiBleWUgb24gYHByb2NfcGlkX3N0YXR1c2AgaW4gYGZzL3Byb2MvYXJyYXkuY2AgYW5kIGB0YXNrX251bWFfZmF1bHRgIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC4KCk5leHQsIEkgbmVlZCB0byBwaW5wb2ludCB0aGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb25zLiBDbGVhcmx5LCBgTlVNQWAgaXMgYSBwcmVyZXF1aXNpdGUsIGFuZCBgTlVNQV9CQUxBTkNJTkdgIGl0c2VsZiBpcyB0aGUgY3J1Y2lhbCBlbmFibGluZyBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3MgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLiBBIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgcmV2ZWFscyB0aGF0IGAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HYCBndWFyZHMgdGhlIHJlbGV2YW50IHN5bWJvbHMgYW5kIHN0cnVjdHVyZXMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6IGBmcy9wcm9jL2FycmF5LmNgLCBgaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oYCwgYGluY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhgLCBga2VybmVsL3NjaGVkL2NvcmUuY2AsIGBpbml0L2luaXRfdGFzay5jYCwgYW5kIGBrZXJuZWwvZm9yay5jYC4gU28gaXQmIzM5O3MgY29uZmlybWVkLCBlbmFibGluZyBgTlVNQV9CQUxBTkNJTkdgIGFuZCBieSBhc3NvY2lhdGlvbiwgYE5VTUFgIGlzIHRoZSByaWdodCBwYXRoIHRvIHRha2UuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHdoZXRoZXIgdGhpcyBpcyBhIHdvcnRod2hpbGUgZnV6emluZyB0YXJnZXQuIFllcywgYWJzb2x1dGVseS4gVGhpcyBpcyBkZWZpbml0ZWx5IFdvcnRoRnV6emluZzogdGhlIGNvcmUgc2NoZWR1bGVyIGlzIGludm9sdmVkLCBhbmQgdGhlcmUgYXJlIG1vZGlmaWNhdGlvbnMgdG8gYHByY3RsYCwgaW5jbHVkaW5nIG5ldyBvcGVyYXRpb25zIChgUFJfU0VUX05VTUFfQkFMQU5DSU5HYCwgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2ApLiBQbHVzLCB0aGVyZSYjMzk7cyBpbnRyaWNhdGUgdGhyZWFkIGdyb3VwIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBsb2dpYyB1c2luZyBgdGFza19ycV9sb2NrYCwgYHNjaGVkX2NoYW5nZWAsIGB0YXNrbGlzdF9sb2NrYCwgYW5kIGBmb3Jfb3RoZXJfdGhyZWFkc2AuIFRoZXJlIGFyZSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIHRhc2sgZW5xdWV1ZS9kZXF1ZXVlIGFjY291bnRpbmcsIGhhbmRsaW5nIG9mIE5VTUEgaGludGluZyBmYXVsdHMsIHNjYW5uaW5nLCBhbmQgbWlncmF0aW9uIGRlY2lzaW9ucy4gVGhpcyBpcyByaWNoIHRlcnJpdG9yeSBmb3IgcG90ZW50aWFsIGZ1enppbmcuCgpGaW5hbGx5LCBJIG5lZWQgdG8gc2FuaXR5LWNoZWNrIG15IEZvY3VzU3ltYm9scy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAsIGB0YXNrX251bWFfZmF1bHRgLCBhbmQgYHByb2NfcGlkX3N0YXR1c2AuIEkmIzM5O2xsIG5lZWQgdG8gYmUgbWluZGZ1bCBvZiBwb3RlbnRpYWxseSB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBsaWtlIGBjb3B5X3Byb2Nlc3NgIGFuZCBgcHJjdGxgLCBidXQgaW4gdGhpcyBjYXNlLCBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAgaXMgdGhlIG1vcmUgc3BlY2lmaWMgdGFyZ2V0LCBhbHRob3VnaCBgcHJjdGxgIGRvZXMgd2FycmFudCBhdHRlbnRpb24uCgpBbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUFfQkFMQU5DSU5HJiMzNDssCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50JiMzNDssCiAgICAmIzM0O3Rhc2tfbnVtYV9mYXVsdCYjMzQ7LAogICAgJiMzNDtwcm9jX3BpZF9zdGF0dXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQV9CQUxBTkNJTkcmIzM0OywKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Rhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQmIzM0OywKICAgICYjMzQ7dGFza19udW1hX2ZhdWx0JiMzNDssCiAgICAmIzM0O3Byb2NfcGlkX3N0YXR1cyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE0OjI2PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXG5cbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXCYjMzQ7ZW5hYmxlZFwmIzM0OywgXCYjMzQ7ZGlzYWJsZWRcJiMzNDssIFwmIzM0O3Vuc3VwcG9ydGVkXCYjMzQ7KSBpbnRvIHRoZSBzZXFfZmlsZS5cbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QKaW5kZXggYjYzMjhjZDBmNDNlOS4uN2Y2NjVjMjg4MjhhOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0CkBAIC03NTQsNiAmIzQzOzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG8KIHBsYWNlIHRoZSBob3QgcGFnZXMgaW4gdGhlIGZhc3QgbWVtb3J5LiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBiYXNlZCBvbgogdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby4KIAomIzQzO1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpCiYjNDM7b3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcKJiM0MztvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlCiYjNDM7dGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieQomIzQzO2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpcwomIzQzO3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnMKJiM0Mzt0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQQomIzQzO2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLAomIzQzO3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5CiYjNDM7cHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLgomIzQzOwomIzQzO0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yCiYjNDM7dGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90CiYjNDM7YWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXMKJiM0MztlZmZlY3QuCiYjNDM7CiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwcwogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIApkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QKaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0CkBAIC0xODgsNiAmIzQzOzE4OCw3IEBAIHJlYWQgdGhlIGZpbGUgL3Byb2MvUElEL3N0YXR1czo6CiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQgogICBDb3JlRHVtcGluZzogICAgMAogICBUSFBfZW5hYmxlZDoJICAxCiYjNDM7ICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZAogICBUaHJlYWRzOiAgICAgICAgMQogICBTaWdROiAgIDAvMjg1NzgKICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwCkBAIC0yNzQsNiAmIzQzOzI3NSwxMSBAQCBJdCYjMzk7cyBzbG93IGJ1dCB2ZXJ5IHByZWNpc2UuCiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhQIGNvbXBsZXRlbHksIG5vdCBqdXN0IHBhcnRpYWxseSkKJiM0MzsgTnVtYUJfbW9kZSAgICAgICAgICAgICAgICAgIHByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2UKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc3VwcG9ydGVkOyB0aGUgZWZmZWN0aXZlIGJlaGF2aW9yIGFsc28gZGVwZW5kcwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb24gdGhlIGdsb2JhbCBudW1hX2JhbGFuY2luZyBzeXNjdGwgYW5kIG1lbW9yeQomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5CiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzCiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWUKICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZApkaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jCmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvYXJyYXkuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL2FycmF5LmMKQEAgLTQyNSw2ICYjNDM7NDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSkKIAlzZXFfcHJpbnRmKG0sICYjMzQ7VEhQX2VuYWJsZWQ6XHQlZFxuJiMzNDssIHRocF9lbmFibGVkKTsKIH0KIAomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLAomIzQzOwkJCQkJICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKQomIzQzO3sKJiM0MzsJc2VxX3ByaW50ZihtLCAmIzM0O051bWFCX21vZGU6XHQlc1xuJiMzNDssCiYjNDM7CQkgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7CiYjNDM7fQomIzQzOyNlbHNlCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwKJiM0MzsJCQkJCSAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaykKJiM0Mzt7CiYjNDM7CXNlcV9wdXRzKG0sICYjMzQ7TnVtYUJfbW9kZTpcdHVuc3VwcG9ydGVkXG4mIzM0Oyk7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogewogCXNlcV9wcmludGYobSwgJiMzNDt1bnRhZ19tYXNrOlx0JSNseFxuJiMzNDssIG1tX3VudGFnX21hc2sobW0pKTsKQEAgLTQ1Myw2ICYjNDM7NDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucywKIAkJdGFza191bnRhZ19tYXNrKG0sIG1tKTsKIAkJbW1wdXQobW0pOwogCX0KJiM0MzsJdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7CiAJdGFza19zaWcobSwgdGFzayk7CiAJdGFza19jYXAobSwgdGFzayk7CiAJdGFza19zZWNjb21wKG0sIHRhc2spOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTEzODIsNiAmIzQzOzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHsKIAlzaG9ydAkJCQlwcmVmX25vZGVfZm9yazsKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkvKgomIzQzOwkgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXMKJiM0MzsJICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGUKJiM0MzsJICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LgomIzQzOwkgKi8KJiM0MzsJYm9vbAkJCQludW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkOwogCWludAkJCQludW1hX3NjYW5fc2VxOwogCXVuc2lnbmVkIGludAkJCW51bWFfc2Nhbl9wZXJpb2Q7CiAJdW5zaWduZWQgaW50CQkJbnVtYV9zY2FuX3BlcmlvZF9tYXg7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgKaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaApAQCAtOCw2ICYjNDM7OCw3IEBACiAgKi8KIAogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCiAjZGVmaW5lIFRORl9NSUdSQVRFRAkweDAxCiAjZGVmaW5lIFRORl9OT19HUk9VUAkweDAyCkBAIC0zMCw2ICYjNDM7MzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7CiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7CiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpOwogZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKQomIzQzO3sKJiM0MzsJcmV0dXJuIFJFQURfT05DRShwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gUkVBRF9PTkNFKHAtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7fQomIzQzOwomIzQzO2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHApID8gJiMzNDtlbmFibGVkJiMzNDsgOiAmIzM0O2Rpc2FibGVkJiMzNDs7CiYjNDM7fQogYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCQkJaW50IHNyY19uaWQsIGludCBkc3RfY3B1KTsKICNlbHNlCkBAIC00Nyw2ICYjNDM7NjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCkKIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpCiB7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKQomIzQzO3sKJiM0MzsJcmV0dXJuIC1FSU5WQUw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiAtRUlOVkFMOwomIzQzO30KIHN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsCiAJCQkJc3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmgKaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oCkBAIC0xNzksNiAmIzQzOzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7CiAKICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQCiAJc3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwOwomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLyoKJiM0MzsJICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLgomIzQzOwkgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhcwomIzQzOwkgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LgomIzQzOwkgKi8KJiM0MzsJYm9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkOwogI2VuZGlmCiAJLyoKIAkgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAppbmRleCBiNmVjNmY2OTM3MTk1Li41YmMwYTJhMmE5MzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaApAQCAtNDE2LDQgJiM0Mzs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7CiAjIGRlZmluZSBQUl9DRklfRElTQUJMRQkJX0JJVFVMKDEpCiAjIGRlZmluZSBQUl9DRklfTE9DSwkJX0JJVFVMKDIpCiAKJiM0MzsvKiBQZXItcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgY29udHJvbCAqLwomIzQzOyNkZWZpbmUgUFJfU0VUX05VTUFfQkFMQU5DSU5HCTgyCiYjNDM7I2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcJODMKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFCTAKJiM0MzsjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUJMQomIzQzOwogI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovCmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suYwppbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NAotLS0gYS9pbml0L2luaXRfdGFzay5jCiYjNDM7JiM0MzsmIzQzOyBiL2luaXQvaW5pdF90YXNrLmMKQEAgLTQwLDYgJiM0Mzs0MCw5IEBAIHN0YXRpYyBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCBpbml0X3NpZ25hbHMgPSB7CiAJLmNwdXRpbWVyCQk9IHsKIAkJLmNwdXRpbWVfYXRvbWljCT0gSU5JVF9DUFVUSU1FX0FUT01JQywKIAl9LAomIzQzOyNlbmRpZgomIzQzOyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkcKJiM0MzsJLm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLAogI2VuZGlmCiAJSU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscykKIAkucGlkcyA9IHsKQEAgLTIyNCw2ICYjNDM7MjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0gewogCS52dGltZS5zdGF0ZQk9IFZUSU1FX1NZUywKICNlbmRpZgogI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lORwomIzQzOwkubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsCiAJLm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSwKIAkubnVtYV9ncm91cAk9IE5VTEwsCiAJLm51bWFfZmF1bHRzCT0gTlVMTCwKZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jCmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9mb3JrLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2ZvcmsuYwpAQCAtMjQ5Niw2ICYjNDM7MjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKAogCiAJLyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovCiAKJiM0MzsjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HCiYjNDM7CXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPQomIzQzOwkJUkVBRF9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7CiYjNDM7CWlmICghKGNsb25lX2ZsYWdzICZhbXA7IENMT05FX1RIUkVBRCkpCiYjNDM7CQlwLSZndDtzaWduYWwtJmd0O251bWFfYmFsYW5jaW5nX2VuYWJsZWQgPQomIzQzOwkJCXAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7CiYjNDM7I2VuZGlmCiYjNDM7CiAJLyoKIAkgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWQKIAkgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuYwppbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9jb3JlLmMKQEAgLTM2LDYgJiM0MzszNiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvaXNvbGF0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbG9hZGF2Zy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbm9oei5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3JzZXFfYXBpLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvcnQuaCZndDsKQEAgLTYwMyw2ICYjNDM7NjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKICAqCQkJCXAtJmd0O3NlLmxvYWQsIHAtJmd0O3J0X3ByaW9yaXR5LAogICoJCQkJcC0mZ3Q7ZGwuZGxfe3J1bnRpbWUsIGRlYWRsaW5lLCBwZXJpb2QsIGZsYWdzLCBidywgZGVuc2l0eX0KICAqICAtIHNjaGVkX3NldG51bWEoKToJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZAomIzQzOyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKToJcC0mZ3Q7c2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkLAomIzQzOyAqCQkJCQlwLSZndDtudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkCiAgKiAgLSBzY2hlZF9tb3ZlX3Rhc2soKToJcC0mZ3Q7c2NoZWRfdGFza19ncm91cAogICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKQlwLSZndDt1Y2xhbXAqCiAgKgpAQCAtODQwNyw2ICYjNDM7ODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKQogCXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiAJCXAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9IG5pZDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZCkKJiM0Mzt7CiYjNDM7CWd1YXJkKHRhc2tfcnFfbG9jaykocCk7CiYjNDM7CXNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpCiYjNDM7CQlXUklURV9PTkNFKHAtJmd0O251bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpOwomIzQzO30KJiM0MzsKJiM0MztpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpCiYjNDM7ewomIzQzOwlzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnQ7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWJvb2wgb2xkX2VuYWJsZWQ7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO3Rhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCAmYW1wO2ZsYWdzKSkpCiYjNDM7CQlyZXR1cm4gLUVTUkNIOwomIzQzOwomIzQzOwlvbGRfZW5hYmxlZCA9IGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZDsKJiM0MzsJaWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpCiYjNDM7CQlXUklURV9PTkNFKGN1cnJlbnQtJmd0O3NpZ25hbC0mZ3Q7bnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7CiYjNDM7CiYjNDM7CXVubG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgJmFtcDtmbGFncyk7CiYjNDM7CiYjNDM7CWlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7CiYjNDM7CQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfbG9jaygmYW1wO3Rhc2tsaXN0X2xvY2spOwomIzQzOwkJZm9yX290aGVyX3RocmVhZHMoY3VycmVudCwgdCkKJiM0MzsJCQlzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayh0LCBlbmFibGVkKTsKJiM0MzsJCXJlYWRfdW5sb2NrKCZhbXA7dGFza2xpc3RfbG9jayk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19OVU1BX0JBTEFOQ0lORyAqLwogCiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvZmFpci5jIGIva2VybmVsL3NjaGVkL2ZhaXIuYwppbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9zY2hlZC9mYWlyLmMKQEAgLTM4LDYgJiM0MzszOCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29uZF9yZXNjaGVkLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL25vaHouaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9wcmlvLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RhdGljX2NhbGwuaCZndDsKQEAgLTE3MTIsNiAmIzQzOzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQogCQkgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS4KIAkJICovCiAJCWlmIChzdGF0aWNfYnJhbmNoX2xpa2VseSgmYW1wO3NjaGVkX251bWFfYmFsYW5jaW5nKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgJmFtcDsmYW1wOwogCQkgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICZndDs9IDAgJmFtcDsmYW1wOwogCQkgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLSZndDtudW1hX3ByZWZlcnJlZF9uaWQpCiAJCQltbV9zY2hlZF9sbGMgPSAtMTsKQEAgLTE4MDgsNiAmIzQzOzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlnb3RvIG91dDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJY3B1ID0gUkVBRF9PTkNFKHAtJmd0O21tLSZndDtzY19zdGF0LmNwdSk7CiAJaWYgKGNwdSAhPSAtMSkKIAkJbmlkID0gY3B1X3RvX25vZGUoY3B1KTsKQEAgLTIzODcsMTQgJiM0MzsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCiAKIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKIHsKLQlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7Ci0JcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nICYjNDM7PSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nICYjNDM7PSBlbmFibGVkICZhbXA7JmFtcDsKJiM0MzsJCQkJIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7CiYjNDM7CXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAmIzQzOz0gZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkJCSAgICAgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTsKIH0KIAogc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2RlcXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQogewotCXJxLSZndDtucl9udW1hX3J1bm5pbmcgLT0gKHAtJmd0O251bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpOwotCXJxLSZndDtucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7CiYjNDM7CWJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApOwomIzQzOwomIzQzOwlycS0mZ3Q7bnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgcC0mZ3Q7bnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTsKJiM0MzsJcnEtJmd0O25yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJCQkgICAgIHAtJmd0O251bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7CiB9CiAKIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi8KQEAgLTMwODUsNiAmIzQzOzMwOTgsOSBAQCBzdGF0aWMgYm9vbCB0YXNrX251bWFfY29tcGFyZShzdHJ1Y3QgdGFza19udW1hX2VudiAqZW52LAogCQkJZ290byB1bmxvY2s7CiAJfQogCiYjNDM7CWlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSkKJiM0MzsJCWdvdG8gdW5sb2NrOwomIzQzOwogCS8qIFNraXAgdGhpcyBzd2FwIGNhbmRpZGF0ZSBpZiBjYW5ub3QgbW92ZSB0byB0aGUgc291cmNlIGNwdS4gKi8KIAlpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LSZndDtzcmNfY3B1LCBjdXItJmd0O2NwdXNfcHRyKSkKIAkJZ290byB1bmxvY2s7CkBAIC0zOTkyLDYgJiM0Mzs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKQogCWlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoJmFtcDtzY2hlZF9udW1hX2JhbGFuY2luZykpCiAJCXJldHVybjsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuOwomIzQzOwogCS8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlciYjMzk7cyBtbSAqLwogCWlmICghcC0mZ3Q7bW0pCiAJCXJldHVybjsKQEAgLTQ0MzYsNiAmIzQzOzQ0NTUsOSBAQCBzdGF0aWMgdm9pZCB0YXNrX3RpY2tfbnVtYShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIpCiAJaWYgKCFjdXJyLSZndDttbSB8fCAoY3Vyci0mZ3Q7ZmxhZ3MgJmFtcDsgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay0mZ3Q7bmV4dCAhPSB3b3JrKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAkvKgogCSAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0CiAJICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGUKQEAgLTQ0NjMsNiAmIzQzOzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSkKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm47CiAKJiM0MzsJaWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAoIXAtJmd0O21tIHx8ICFwLSZndDtudW1hX2ZhdWx0cyB8fCAocC0mZ3Q7ZmxhZ3MgJmFtcDsgUEZfRVhJVElORykpCiAJCXJldHVybjsKIApAQCAtMTA0NzUsNiAmIzQzOzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudikKIAlpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KCZhbXA7c2NoZWRfbnVtYV9iYWxhbmNpbmcpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiAJaWYgKCFwLSZndDtudW1hX2ZhdWx0cyB8fCAhKGVudi0mZ3Q7c2QtJmd0O2ZsYWdzICZhbXA7IFNEX05VTUEpKQogCQlyZXR1cm4gMDsKIApkaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jCmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9zeXMuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvc3lzLmMKQEAgLTYwLDYgJiM0Mzs2MCw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvc3RhdC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY29yZWR1bXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC90YXNrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2NoZWQvY3B1dGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3JjdXBkYXRlLmgmZ3Q7CkBAIC0yOTA3LDYgJiM0MzsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsCiAJCWlmIChhcmczICZhbXA7IFBSX0NGSV9MT0NLICZhbXA7JmFtcDsgIShhcmczICZhbXA7IFBSX0NGSV9ESVNBQkxFKSkKIAkJCWVycm9yID0gYXJjaF9wcmN0bF9sb2NrX2JyYW5jaF9sYW5kaW5nX3BhZF9zdGF0ZShtZSk7CiAJCWJyZWFrOwomIzQzOwljYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzoKJiM0MzsJCWlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgJmFtcDsmYW1wOwomIzQzOwkJICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKQomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT0KJiM0MzsJCQkJCQkJIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkc6CiYjNDM7CQlpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpOwomIzQzOwkJaWYgKGVycm9yICZndDs9IDApCiYjNDM7CQkJZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6CiYjNDM7CQkJCVBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEU7CiYjNDM7CQlicmVhazsKIAlkZWZhdWx0OgogCQl0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTsKIAkJZXJyb3IgPSAtRUlOVkFMOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzk1MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIE5VTUEgQmFsYW5jaW5nIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgcGF0Y2ggbmVjZXNzaXRhdGVzIGEgS01TQU4gZnV6emluZyBzZXNzaW9uLiBJJiMzOTttIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyB0aGUgcmlzay4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggaW5jbHVkZXMgZG9jdW1lbnRhdGlvbiB1cGRhdGVzLiBUaGF0JiMzOTtzIHVzdWFsbHkgbG93IHJpc2ssIGJ1dCBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aG9zZSB1cGRhdGVzIGZvciBhbnkgY29kZSBzbmlwcGV0cyBvciBpbmRpcmVjdGx5IHJlbGF0ZWQgY2hhbmdlcy4KCk5leHQsIEkgc2VlIGFkZGl0aW9ucyB0byBgL3Byb2MvW3BpZF0vc3RhdHVzYCB3aXRoIGBOdW1hQl9tb2RlYC4gVGhpcyBtZWFucyB0aGVyZSYjMzk7cyBuZXcgZXhwb3NlZCBzdGF0ZS4gVGhlIGNvZGUgZm9ybWF0dGluZyB0aGF0IHJlbGllcyBvbiB1c2VyLXZpc2libGUgc3RhdGUgY291bGQgYmUgYW4gYXJlYSBmb3IgZnV6emluZy4KCkkmIzM5O20gc2VlaW5nIG5ldyBmaWVsZHMgYWRkZWQgdG8gYHRhc2tfc3RydWN0YCBhbmQgYHNpZ25hbF9zdHJ1Y3RgIHVuZGVyIGAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HYC4gVGhlc2UgYXJlIGtleSwgYW5kIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gaG93IHRoZXNlIGZpZWxkcyBhcmUgKnVzZWQqIGFuZCAqaW5pdGlhbGl6ZWQqLiBUaGUgbmV3IGhlbHBlciBmdW5jdGlvbnMgaW4gYG51bWFfYmFsYW5jaW5nLmhgIGFsc28gZGVtYW5kIGF0dGVudGlvbjsgdGhleSYjMzk7cmUgbGlrZWx5IGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZXNlIG5ldyBmaWVsZHMsIGFuZCB0aGF0JiMzOTtzIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLgoKVGhlbiwgdGhlcmUgYXJlIHRoZSBhZGRpdGlvbnMgdG8gYHByY3RsLmhgLCB3aGljaCBkZWZpbmUgdGhlIHVzZXItc3BhY2UgaW50ZXJmYWNlLiBUaGlzIG1lYW5zIHRoZXJlJiMzOTtzIGEgbmV3IHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggaXMgYW4gb2J2aW91cyBhcmVhIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIHRyYW5zbGF0ZSB0byBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2VzLgoKVGhlIGluaXRpYWxpemF0aW9uIG9mIGBudW1hX2JhbGFuY2luZ19lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWRgIGluIGBpbml0X3Rhc2suY2AgaXMgaW1wb3J0YW50IGZvciB1bmRlcnN0YW5kaW5nIHRoZSBkZWZhdWx0IHN0YXRlIGFuZCB0aGUgY29udHJvbCBmbG93LiBUaGUgYGZvcmsuY2AgY2hhbmdlcyBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nLiAgSSYjMzk7bSBsb29raW5nIGNsb3NlbHkgYXQgaG93IHRoZSBuZXcgZmllbGRzIGFyZSBjb3BpZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24uIFRoZSBgUkVBRF9PTkNFYCBhbmQgY29uZGl0aW9uYWwgYXNzaWdubWVudCBsb29rIHNhZmUgZW5vdWdoIGJ1dCBuZWVkIGZ1cnRoZXIgZXhhbWluYXRpb24uICBJdCYjMzk7cyBjcml0aWNhbCB0aGF0IHRoZSBuZXcgc3RhdGUgaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZHVyaW5nIGBmb3JrYCBhbmQgdGhyZWFkaW5nLgoKRmluYWxseSwgdGhlIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzaygpYCBpbXBsZW1lbnRhdGlvbiBhbmQgYWxsIG9mIHRoZSB1c2VzIHdpdGhpbiBga2VybmVsL3NjaGVkL2ZhaXIuY2AgYXJlIGhpZ2gtcHJpb3JpdHkuICBUaGlzIHBhdGNoIGlzICpmdW5kYW1lbnRhbGx5KiBhbHRlcmluZyBzY2hlZHVsaW5nIGJlaGF2aW9yLCBhbmQgdGhlIHZhcmlvdXMgTlVNQS1yZWxhdGVkIGZ1bmN0aW9ucyBsaWtlIGBhY2NvdW50X251bWFfZW5xdWV1ZWAsIGB0YXNrX251bWFfZmF1bHRgLCBldGMuLCBhcmUgdGhlIGNvcmUgb2YgdGhlIG5ldyBsb2dpYy4gQW55IGVycm9ycyBoZXJlIGNvdWxkIGxlYWQgdG8gaGFyZC10by1kZWJ1ZyBzY2hlZHVsaW5nIGFub21hbGllcy4gIFRoZSBzeXMuYyBoYW5kbGluZyBvZiB0aGUgYHByY3RsYCBjYWxscyBjb25maXJtcyBhIHN5c3RlbSBjYWxsIGludGVyZmFjZSB3aGljaCBpcyBhbHdheXMgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gbm93IGlzIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBgdGFza19zdHJ1Y3RgIGFuZCBgc2lnbmFsX3N0cnVjdGAgYXJlIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQsIGVzcGVjaWFsbHkgaW4gcmVsYXRpb24gdG8gYGZvcmtgLiBJJiMzOTttIGdvaW5nIHRvIHVzZSBteSBncmVwcGVyIHRvb2wgdG8gdHJhY2UgaG93IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgaW4gYGZvcmsuY2AgdG8gY2xhcmlmeSB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aG9zZSBhbGxvY2F0aW9uIGFuZCBjb3B5IHBhdGhzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2FsbG9jX3NpZ25hbF9zdHJ1Y3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTU1OAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gYGNvcHlfc2lnbmFsYCBpbiBga2VybmVsL2ZvcmsuY2AqKgoKT2theSwgc28gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgc2lnbmFscyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGBmb3JrKClgIG9wZXJhdGlvbi4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgY29weV9zaWduYWxgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBrZXJuZWwvZm9yay5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGlzc2VjdCBob3cgc2lnbmFsIGRpc3Bvc2l0aW9ucyBhcmUgY29waWVkIG9yLCBtb3JlIGFjY3VyYXRlbHksICpub3QqIGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBjaGlsZC4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBzdWJ0bGUgc2hpZnRzIGluIHNpZ25hbCBzZW1hbnRpY3Mgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gc2lnbmFsIG1hc2tpbmcgYW5kIHRoZSBoYW5kbGluZyBvZiByZWFsLXRpbWUgc2lnbmFscywgc28gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB3aGljaCBzaWduYWxzIGFyZSBpbmhlcml0ZWQgd2l0aCB0aGVpciBkZWZhdWx0IGFjdGlvbnMgdmVyc3VzIHRob3NlIHRoYXQgbWF5IGJlIHJlc2V0LCBlc3BlY2lhbGx5IGluIHRoZSBjb250ZXh0IG9mIGBjbG9uZSgpYCBmbGFncyBhbmQgcG90ZW50aWFsIHRocmVhZC1zcGVjaWZpYyBzaWduYWwgaGFuZGxpbmcuIEkgc3VzcGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJwbGF5IHdpdGggdGhlIGBzaWdwZW5kaW5nYCBzdHJ1Y3R1cmUgYXMgd2VsbCwgYW5kIEkgd2FudCB0byBzZWUgaWYgYW55IG9wdGltaXphdGlvbiBpcyBkb25lIHRvIGF2b2lkIGNvcHlpbmcgdW5uZWNlc3Nhcnkgc2lnbmFsIGRhdGEuIEkgc2hvdWxkIGFsc28gY2hlY2sgaWYgYW55IHNpZ25hbCBoYW5kbGVyIGR1cGxpY2F0aW9uIG9jY3VycyBhbmQgdGhlIG92ZXJhbGwgZWZmaWNpZW5jeSBvZiB0aGUgY29weSBwcm9jZXNzLiBUaW1lIHRvIGRpZyBpbiEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29weV9zaWduYWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvZm9yay5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmM9MTczMD1zdGF0aWMgdm9pZCBwb3NpeF9jcHVfdGltZXJzX2luaXRfZ3JvdXAoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZylcbi0tXG5rZXJuZWwvZm9yay5jLTE3MzgtXG5rZXJuZWwvZm9yay5jOjE3Mzk6c3RhdGljIGludCBjb3B5X3NpZ25hbCh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxua2VybmVsL2ZvcmsuYy0xNzQwLXtcbi0tXG5rZXJuZWwvZm9yay5jPTE5Njc9c3RhdGljIHZvaWQgY29weV9vb21fc2NvcmVfYWRqKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4tLVxua2VybmVsL2ZvcmsuYy0xOTc5LVx0bW1fZmxhZ3Nfc2V0KE1NRl9NVUxUSVBST0NFU1MsIHRzay1cdTAwM2VtbSk7XG5rZXJuZWwvZm9yay5jOjE5ODA6XHQvKiBVcGRhdGUgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgd2VyZSBjaGFuZ2VkIGFmdGVyIGNvcHlfc2lnbmFsICovXG5rZXJuZWwvZm9yay5jLTE5ODEtXHR0c2stXHUwMDNlc2lnbmFsLVx1MDAzZW9vbV9zY29yZV9hZGogPSBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2Vvb21fc2NvcmVfYWRqO1xuLS1cbmtlcm5lbC9mb3JrLmM9MjAxMj1fX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuLS1cbmtlcm5lbC9mb3JrLmMtMjMwMy1cdFx0Z290byBiYWRfZm9ya19jbGVhbnVwX2ZzO1xua2VybmVsL2ZvcmsuYzoyMzA0Olx0cmV0dmFsID0gY29weV9zaWduYWwoY2xvbmVfZmxhZ3MsIHApO1xua2VybmVsL2ZvcmsuYy0yMzA1LVx0aWYgKHJldHZhbClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTQ6MjY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAxODEKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCB0YWlsb3JlZCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBjb3B5X3NpZ25hbGAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgc2lnbmFscyBhcmUgaGFuZGxlZCBkdXJpbmcgdGhlIGBmb3JrYCBwcm9jZXNzLCBhbmQgdGhhdCBtZWFucyBnb2luZyBzdHJhaWdodCB0byB0aGUgc291cmNlLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY2hpbGQgcHJvY2VzcyBpbmhlcml0cyBvciBtYW5hZ2VzIHNpZ25hbHMgZnJvbSB0aGUgcGFyZW50LiBUaGUgYGtlcm5lbC9mb3JrLmNgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIGJlLCBzbyBJJiMzOTttIG5hdmlnYXRpbmcgdGhlcmUgbm93IGFuZCB0YXJnZXRpbmcgdGhlIGBjb3B5X3NpZ25hbGAgZnVuY3Rpb24uIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IGRpc3NlY3QgaXRzIGxvZ2ljLCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGRhdGEgc3RydWN0dXJlcyBhbmQgaG93IHNpZ25hbCBtYXNrcyBvciBoYW5kbGVycyBtaWdodCBiZSBjb3BpZWQsIGNsZWFyZWQsIG9yIG90aGVyd2lzZSBtYW5pcHVsYXRlZC4gSSYjMzk7bSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBhbnkgc2lnbmFsLXNwZWNpZmljIGluZm9ybWF0aW9uIGlzIGR1cGxpY2F0ZWQsIGluaGVyaXRlZCwgb3IgaWYgdGhlIGNoaWxkIHN0YXJ0cyB3aXRoIGEgZnJlc2ggc2xhdGUuIE15IGV4cGVydCBpbnR1aXRpb24gaXMgdGVsbGluZyBtZSB0aGF0IHRoaXMgd2lsbCBwcm92aWRlIGNydWNpYWwgaW5zaWdodCBpbnRvIHRoZSBzeW5jaHJvbml6YXRpb24gaXNzdWVzIG9mIHRoZSBmb3JrIHN5c3RlbSBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC9mb3JrLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNzM5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE3Mzk6XHRzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXG4xNzQwOlx0e1xuMTc0MTpcdFx0c3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZztcbjE3NDI6XHRcbjE3NDM6XHRcdGlmIChjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKVxuMTc0NDpcdFx0XHRyZXR1cm4gMDtcbjE3NDU6XHRcbjE3NDY6XHRcdHNpZyA9IGttZW1fY2FjaGVfemFsbG9jKHNpZ25hbF9jYWNoZXAsIEdGUF9LRVJORUwpO1xuMTc0NzpcdFx0dHNrLVx1MDAzZXNpZ25hbCA9IHNpZztcbjE3NDg6XHRcdGlmICghc2lnKVxuMTc0OTpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjE3NTA6XHRcbjE3NTE6XHRcdHNpZy1cdTAwM2Vucl90aHJlYWRzID0gMTtcbjE3NTI6XHRcdHNpZy1cdTAwM2VxdWlja190aHJlYWRzID0gMTtcbjE3NTM6XHRcdGF0b21pY19zZXQoXHUwMDI2c2lnLVx1MDAzZWxpdmUsIDEpO1xuMTc1NDpcdFx0cmVmY291bnRfc2V0KFx1MDAyNnNpZy1cdTAwM2VzaWdjbnQsIDEpO1xuMTc1NTpcdFxuMTc1NjpcdFx0LyogbGlzdF9hZGQodGhyZWFkX25vZGUsIHRocmVhZF9oZWFkKSB3aXRob3V0IElOSVRfTElTVF9IRUFEKCkgKi9cbjE3NTc6XHRcdHNpZy1cdTAwM2V0aHJlYWRfaGVhZCA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHRzay1cdTAwM2V0aHJlYWRfbm9kZSk7XG4xNzU4Olx0XHR0c2stXHUwMDNldGhyZWFkX25vZGUgPSAoc3RydWN0IGxpc3RfaGVhZClMSVNUX0hFQURfSU5JVChzaWctXHUwMDNldGhyZWFkX2hlYWQpO1xuMTc1OTpcdFxuMTc2MDpcdFx0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZzaWctXHUwMDNld2FpdF9jaGxkZXhpdCk7XG4xNzYxOlx0XHRzaWctXHUwMDNlY3Vycl90YXJnZXQgPSB0c2s7XG4xNzYyOlx0XHRpbml0X3NpZ3BlbmRpbmcoXHUwMDI2c2lnLVx1MDAzZXNoYXJlZF9wZW5kaW5nKTtcbjE3NjM6XHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZzaWctXHUwMDNlbXVsdGlwcm9jZXNzKTtcbjE3NjQ6XHRcdHNlcWxvY2tfaW5pdChcdTAwMjZzaWctXHUwMDNlc3RhdHNfbG9jayk7XG4xNzY1Olx0XHRwcmV2X2NwdXRpbWVfaW5pdChcdTAwMjZzaWctXHUwMDNlcHJldl9jcHV0aW1lKTtcbjE3NjY6XHRcbjE3Njc6XHQjaWZkZWYgQ09ORklHX1BPU0lYX1RJTUVSU1xuMTc2ODpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNpZy1cdTAwM2Vwb3NpeF90aW1lcnMpO1xuMTc2OTpcdFx0SU5JVF9ITElTVF9IRUFEKFx1MDAyNnNpZy1cdTAwM2VpZ25vcmVkX3Bvc2l4X3RpbWVycyk7XG4xNzcwOlx0XHRocnRpbWVyX3NldHVwKFx1MDAyNnNpZy1cdTAwM2VyZWFsX3RpbWVyLCBpdF9yZWFsX2ZuLCBDTE9DS19NT05PVE9OSUMsIEhSVElNRVJfTU9ERV9SRUwpO1xuMTc3MTpcdCNlbmRpZlxuMTc3MjpcdFxuMTc3MzpcdFx0dGFza19sb2NrKGN1cnJlbnQtXHUwMDNlZ3JvdXBfbGVhZGVyKTtcbjE3NzQ6XHRcdG1lbWNweShzaWctXHUwMDNlcmxpbSwgY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlcmxpbSwgc2l6ZW9mIHNpZy1cdTAwM2VybGltKTtcbjE3NzU6XHRcdHRhc2tfdW5sb2NrKGN1cnJlbnQtXHUwMDNlZ3JvdXBfbGVhZGVyKTtcbjE3NzY6XHRcbjE3Nzc6XHRcdHBvc2l4X2NwdV90aW1lcnNfaW5pdF9ncm91cChzaWcpO1xuMTc3ODpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTEwOAoJCQkJCQkJb3V0cHV0OiAzNDIKCQkJCQkJCXRob3VnaHRzOiA2ODIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBOVU1BIEJhbGFuY2luZyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYHNpZ25hbF9zdHJ1Y3RgIGlzIGFsbG9jYXRlZCB1c2luZyBga21lbV9jYWNoZV96YWxsb2NgLCBtZWFuaW5nIGl0JiMzOTtzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gV2UgYWxzbyBzZWUgdGhpcyBzdHJ1Y3R1cmUgc3RhdGljYWxseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBhbmQgYWdhaW4sIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24gdmlhIGBjb3B5X3Byb2Nlc3NgLgoKTm93LCB0aGUgbWFpbiBjb25jZXJuIGlzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBMZXQmIzM5O3Mgc2VlLi4uCgpGaXJzdCwgYXJlIHdlIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlcnNwYWNlPyBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBkZWFsaW5nIHdpdGggYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBMb29raW5nIGF0IGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgLCBpdCBzaW1wbHkgcmV0dXJucyBhIHZhbHVlIGRpcmVjdGx5LCBubyBkYXRhIGNvcHlpbmcuIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHByaW50cyBzdHJpbmcgbGl0ZXJhbHMuIE5vIHVzZXItc3BhY2UgbGVha3MuIFRoYXQmIzM5O3MgYSBodWdlIHJlbGllZi4KCk5leHQsIGFyZSB0aGVyZSBhbnkgcG90ZW50aWFsIGxvZ2ljIGZsYXdzIGR1ZSB0byB1bmluaXRpYWxpemVkIHZhcmlhYmxlcz8gYGluaXRfdGFza2Agc2VlbXMgdG8gaW5pdGlhbGl6ZSBgLm51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWRgICphbmQqIGBpbml0X3NpZ25hbHMubnVtYV9iYWxhbmNpbmdfZW5hYmxlZGAuIEV2ZXJ5IHByb2Nlc3MgZm9yayAqZXhwbGljaXRseSogc2V0cyBib3RoIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCAqYW5kKiBgc2lnbmFsLSZndDtudW1hX2JhbGFuY2luZ19lbmFibGVkYC4gYGttZW1fY2FjaGVfemFsbG9jYCBpcyBhbHJlYWR5IHplcm9pbmcgaXQgYW55d2F5LiBFdmVuIHdpdGggbm9uLU5VTUEgY29uZmlncywgc3R1YiBmdW5jdGlvbnMgcHJldmVudCBhbnkgaXNzdWVzLiBObyBsb2dpY2FsIGhvbGVzIGRldGVjdGVkLgoKTm93LCBkbyB3ZSBoYXZlIGFueSBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBOb3BlLCBub3QgaGVyZS4KCkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgYm91bmRzIGNoZWNrIG9yIGxlbmd0aCBpc3N1ZXMgdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnk/IE5vLgoKU28sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBaZXJvLiBUaGlzIGlzIGdyZWF0LgoKTm93LCBjb25jZXJuaW5nIEtBU0FOIGFuZCBjb25jdXJyZW5jeSBpc3N1ZXMuLi4gVGhlIGNvZGUgdXNlcyBjb21tb24gbG9ja2luZyBwcmltaXRpdmVzIGxpa2UgYHRhc2tfcnFfbG9ja2AsIGBzY29wZWRfZ3VhcmQoc2NoZWRfY2hhbmdlKWAsIGBsb2NrX3Rhc2tfc2lnaGFuZGAsIGBtdXRleGAsIGFuZCBgdGFza2xpc3RfbG9ja2AuIEFueSBsb2NraW5nIGJ1Z3Mgd291bGQgYmUgY2F1Z2h0IGJ5IExPQ0tERVAuIEtBU0FOIGlzIGluIHBsYWNlIHRvIGNhdGNoIGFueSB1c2UtYWZ0ZXItZnJlZSBvciBvdXQtb2YtYm91bmRzIGlzc3Vlcy4gQmVjYXVzZSB0aGVyZSBpcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrLCBLTVNBTiBpcyBub3QgbmVlZGVkIGhlcmUuCgpJbiBzdW1tYXJ5LCBJIGFtIGNvbmZpZGVudCB0aGF0IGBOZWVkc0tNU0FOYCBpcyBmYWxzZSwgYW5kIHRoZXJlIGlzIGEgY2xlYXIgY29udHJhc3QgdG8gS0FTQU4mIzM5O3MgYXBwbGljYWJpbGl0eS4KCkFscmlnaHQsIHRoYXQmIzM5O3MgbXkgYXNzZXNzbWVudC4gVGltZSB0byBmb3JtdWxhdGUgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBjYWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNDoyNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cblxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcJiMzNDtlbmFibGVkXCYjMzQ7LCBcJiMzNDtkaXNhYmxlZFwmIzM0OywgXCYjMzQ7dW5zdXBwb3J0ZWRcJiMzNDspIGludG8gdGhlIHNlcV9maWxlLlxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXG5cbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXCYjMzQ7ZW5hYmxlZFwmIzM0OywgXCYjMzQ7ZGlzYWJsZWRcJiMzNDssIFwmIzM0O3Vuc3VwcG9ydGVkXCYjMzQ7KSBpbnRvIHRoZSBzZXFfZmlsZS5cbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTguODk2MTkxNDM5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTExNzM3NzE2NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTlVNQV9CQUxBTkNJTkdcIixcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50XCIsXG4gICAgXCJ0YXNrX251bWFfZmF1bHRcIixcbiAgICBcInByb2NfcGlkX3N0YXR1c1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBwZXItcHJvY2VzcyBOVU1BIGJhbGFuY2luZyB0b2dnbGUgY29udHJvbGxlZCB2aWEgcHJjdGwoUFJfU0VUX05VTUFfQkFMQU5DSU5HIC8gUFJfR0VUX05VTUFfQkFMQU5DSU5HKSBhbmQgcmVwb3J0ZWQgdmlhIC9wcm9jL1BJRC9zdGF0dXMuXFxuXFxuRXZhbHVhdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyAoS01TQU4gdnMgS0FTQU4pOlxcbjEuIEtlcm5lbC10by11c2VyIGNvcGllcyAvIGluZm8tbGVha3M6XFxuICAgLSBQUl9HRVRfTlVNQV9CQUxBTkNJTkcgcmV0dXJucyBhbiBpbnRlZ2VyIHN0YXR1cyBkaXJlY3RseSBhcyB0aGUgc3lzY2FsbCByZXR1cm4gdmFsdWU7IG5vIHVzZXIgbWVtb3J5IGJ1ZmZlciBpcyB3cml0dGVuLlxcbiAgIC0gVGhlIC9wcm9jL1BJRC9zdGF0dXMgZW50cnkgZm9ybWF0cyBzdGF0aWMgY29uc3RhbnQgc3RyaW5nIGxpdGVyYWxzIChcXFwiZW5hYmxlZFxcXCIsIFxcXCJkaXNhYmxlZFxcXCIsIFxcXCJ1bnN1cHBvcnRlZFxcXCIpIGludG8gdGhlIHNlcV9maWxlLlxcbjIuIFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIC8gYnJhbmNoaW5nOlxcbiAgIC0gRmllbGRzIGFkZGVkIHRvIGBzdHJ1Y3QgdGFza19zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKSBhbmQgYHN0cnVjdCBzaWduYWxfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfZW5hYmxlZCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgaW4gYGluaXRfdGFzay5jYCwgYGNvcHlfcHJvY2VzcygpYCwgYW5kIGZhbGxiYWNrIHN0dWIgZnVuY3Rpb25zIGFyZSBwcm92aWRlZCB3aGVuIENPTkZJR19OVU1BX0JBTEFOQ0lORyBpcyBkaXNhYmxlZC5cXG4gICAtIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgYWxsb2NhdGlvbnMgaW4gYGZvcmsuY2AgdXNlIGBrbWVtX2NhY2hlX3phbGxvYygpYC5cXG4zLiBPdGhlciBwb3RlbnRpYWwgaXNzdWVzOlxcbiAgIC0gQW55IGNvbmN1cnJlbmN5LCBsb2NraW5nLCBvciBzY2hlZHVsZXIgc3RhdGUgdHJhbnNpdGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIHN1YmplY3QgdG8gTE9DS0RFUCBvciBzdGFuZGFyZCBrZXJuZWwgYXNzZXJ0aW9ucywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGhhemFyZHMgb3IgaW5mby1sZWFrIHZlY3RvcnMgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHBlci1wcm9jZXNzIGNvbnRyb2xzIGZvciBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgdmlhIHByY3RsIChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgYW5kIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyksIC9wcm9jL1BJRC9zdGF0dXMgZXhwb3N1cmUsIGFuZCBzY2hlZHVsZXIgZmFpci9jb3JlIHVwZGF0ZXMgaW5jbHVkaW5nIHRhc2sgcnVucXVldWUgYWNjb3VudGluZyBhbmQgdGhyZWFkLWdyb3VwIHN5bmNocm9uaXphdGlvbi4gVGhlc2UgY2hhbmdlcyB0b3VjaCByZWFjaGFibGUgY29yZSBzY2hlZHVsZXIgYW5kIHByb2Nlc3MgbWFuYWdlbWVudCBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNTo1OC44OTYxOTgwOTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMjE5OTgzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDoyNTo1OCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxcbisrKyBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcXG5AQCAtNzU0LDYgKzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG9cXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXFxuIHVubWFwcGluZyBhbmQgcGFnZSBmYXVsdCB0b28uXFxuIFxcbitUaGUgYGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgYCBhbmQgYGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgYCBwcmN0bCgyKVxcbitvcGVyYXRpb25zIGNhbiBiZSB1c2VkIGJ5IGEgcHJvY2VzcyB0byBvcHQgb3V0IG9mIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZ1xcbitvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlXFxuK3RocmVhZCBncm91cCBtYXkgY2hhbmdlIHRoZSBwcm9jZXNzIHNldHRpbmcuICBUaGUgc2V0dGluZyBpcyBpbmhlcml0ZWQgYnlcXG4rZm9yaygyKSwgaXMgc2hhcmVkIGJ5IHRocmVhZHMgY3JlYXRlZCB3aXRoIGNsb25lKDIpIGBgQ0xPTkVfVEhSRUFEYGAgYW5kIGlzXFxuK3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnNcXG4rdGhlIHRvcC1sZXZlbCBjb250cm9sOiBhIHByb2Nlc3MtbGV2ZWwgZW5hYmxlIGRvZXMgbm90IHR1cm4gYXV0b21hdGljIE5VTUFcXG4rYmFsYW5jaW5nIG9uIHdoZW4gaXQgaXMgZGlzYWJsZWQgc3lzdGVtLXdpZGUuICBNZW1vcnkgcG9saWN5IHN0aWxsIGFwcGxpZXMsXFxuK3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5XFxuK3ByZXZlbnRzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZy5cXG4rXFxuK0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yXFxuK3RoYXQgcHJvY2Vzcy4gRXhpc3RpbmcgTlVNQSBoaW50aW5nIFBURXMgYW5kIGFscmVhZHkgcXVldWVkIHdvcmsgYXJlIG5vdFxcbithY3RpdmVseSBjbGVhcmVkIGFuZCBtYXkgc3RpbGwgZHJhaW4gbmF0dXJhbGx5IGFzIHRoZSBkaXNhYmxlZCBzdGF0ZSB0YWtlc1xcbitlZmZlY3QuXFxuK1xcbiBudW1hX2JhbGFuY2luZ19wcm9tb3RlX3JhdGVfbGltaXRfTUJwc1xcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbiBcXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdCBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG5pbmRleCBjMTAyYjYyMDIzY2RjLi5hNGU5MDM3YTMxNjEyIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XFxuQEAgLTE4OCw2ICsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxcbiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQlxcbiAgIENvcmVEdW1waW5nOiAgICAwXFxuICAgVEhQX2VuYWJsZWQ6XFx0ICAxXFxuKyAgTnVtYUJfbW9kZTogICAgIGVuYWJsZWRcXG4gICBUaHJlYWRzOiAgICAgICAgMVxcbiAgIFNpZ1E6ICAgMC8yODU3OFxcbiAgIFNpZ1BuZDogMDAwMDAwMDAwMDAwMDAwMFxcbkBAIC0yNzQsNiArMjc1LDExIEBAIEl0J3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxcbiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBSX1NFVF9USFBfRElTQUJMRSBpcyBzZXQgb24gdGhlIHByb2Nlc3MgdG8gZGlzYWJsZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXFxuKyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmFibGVkIG9yIGRpc2FibGVkIHdoZW4gc3VwcG9ydGVkLCBvdGhlcndpc2VcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9saWN5XFxuICBUaHJlYWRzICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRocmVhZHNcXG4gIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlXFxuICBTaWdQbmQgICAgICAgICAgICAgICAgICAgICAgYml0bWFwIG9mIHBlbmRpbmcgc2lnbmFscyBmb3IgdGhlIHRocmVhZFxcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmNcXG5pbmRleCBmNmY3NWQyMDY3NjJhLi5hMjdhNmE1N2U4YjIyIDEwMDY0NFxcbi0tLSBhL2ZzL3Byb2MvYXJyYXkuY1xcbisrKyBiL2ZzL3Byb2MvYXJyYXkuY1xcbkBAIC00MjUsNiArNDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwiVEhQX2VuYWJsZWQ6XFxcXHQlZFxcXFxuXFxcIiwgdGhwX2VuYWJsZWQpO1xcbiB9XFxuIFxcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcXG4re1xcbitcXHRzZXFfcHJpbnRmKG0sIFxcXCJOdW1hQl9tb2RlOlxcXFx0JXNcXFxcblxcXCIsXFxuK1xcdFxcdCAgIHRhc2tfbnVtYV9iYWxhbmNpbmdfbW9kZV9uYW1lKHRhc2spKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXFxuK3tcXG4rXFx0c2VxX3B1dHMobSwgXFxcIk51bWFCX21vZGU6XFxcXHR1bnN1cHBvcnRlZFxcXFxuXFxcIik7XFxuK31cXG4rI2VuZGlmXFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza191bnRhZ19tYXNrKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxuIHtcXG4gXFx0c2VxX3ByaW50ZihtLCBcXFwidW50YWdfbWFzazpcXFxcdCUjbHhcXFxcblxcXCIsIG1tX3VudGFnX21hc2sobW0pKTtcXG5AQCAtNDUzLDYgKzQ2OCw3IEBAIGludCBwcm9jX3BpZF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgcGlkX25hbWVzcGFjZSAqbnMsXFxuIFxcdFxcdHRhc2tfdW50YWdfbWFzayhtLCBtbSk7XFxuIFxcdFxcdG1tcHV0KG1tKTtcXG4gXFx0fVxcbitcXHR0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhtLCB0YXNrKTtcXG4gXFx0dGFza19zaWcobSwgdGFzayk7XFxuIFxcdHRhc2tfY2FwKG0sIHRhc2spO1xcbiBcXHR0YXNrX3NlY2NvbXAobSwgdGFzayk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxcbmluZGV4IDhiM2Q0N2EzMjVjY2EuLjdmMTkzMjY1OGQyNGMgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXFxuQEAgLTEzODIsNiArMTM4MiwxMiBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3Qge1xcbiBcXHRzaG9ydFxcdFxcdFxcdFxcdHByZWZfbm9kZV9mb3JrO1xcbiAjZW5kaWZcXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbitcXHQvKlxcbitcXHQgKiBTY2hlZHVsZXIgc25hcHNob3Qgb2Ygc2lnbmFsX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfZW5hYmxlZC4gSXQgaXNcXG4rXFx0ICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGVcXG4rXFx0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxcbitcXHQgKi9cXG4rXFx0Ym9vbFxcdFxcdFxcdFxcdG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQ7XFxuIFxcdGludFxcdFxcdFxcdFxcdG51bWFfc2Nhbl9zZXE7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdG51bWFfc2Nhbl9wZXJpb2Q7XFxuIFxcdHVuc2lnbmVkIGludFxcdFxcdFxcdG51bWFfc2Nhbl9wZXJpb2RfbWF4O1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcXG5pbmRleCA1MmIyMmM1YzM5NmRiLi42OWU3OTM1OWZhMjJlIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxcbkBAIC04LDYgKzgsNyBAQFxcbiAgKi9cXG4gXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcXHUwMDNlXFxuIFxcbiAjZGVmaW5lIFRORl9NSUdSQVRFRFxcdDB4MDFcXG4gI2RlZmluZSBUTkZfTk9fR1JPVVBcXHQweDAyXFxuQEAgLTMwLDYgKzMxLDI3IEBAIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xcbiBleHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuIGV4dGVybiB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCk7XFxuIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaW5hbCk7XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIFJFQURfT05DRShwLVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQpO1xcbit9XFxuK1xcbitpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpO1xcbitcXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxcbit7XFxuK1xcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoY3VycmVudCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbit7XFxuK1xcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcXFwiZW5hYmxlZFxcXCIgOiBcXFwiZGlzYWJsZWRcXFwiO1xcbit9XFxuIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbiBcXHRcXHRcXHRcXHRpbnQgc3JjX25pZCwgaW50IGRzdF9jcHUpO1xcbiAjZWxzZVxcbkBAIC00Nyw2ICs2OSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxcbiB7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3Byb2Nlc3NfbW9kZV9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcXG4re1xcbitcXHRyZXR1cm4gZmFsc2U7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHJldHVybiAtRUlOVkFMO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIC1FSU5WQUw7XFxuK31cXG4gc3RhdGljIGlubGluZSBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxcbiB7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxcbkBAIC0xNzksNiArMTc5LDE0IEBAIHN0cnVjdCBzaWduYWxfc3RydWN0IHtcXG4gXFxuICNpZmRlZiBDT05GSUdfU0NIRURfQVVUT0dST1VQXFxuIFxcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcXG4rI2VuZGlmXFxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcXG4rXFx0LypcXG4rXFx0ICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLlxcbitcXHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xcbitcXHQgKiB0aGVpciBwZXItdGFzayBydW5xdWV1ZSBhY2NvdW50aW5nIHNuYXBzaG90LlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xcbiAjZW5kaWZcXG4gXFx0LypcXG4gXFx0ICogQ3VtdWxhdGl2ZSByZXNvdXJjZSBjb3VudGVycyBmb3IgZGVhZCB0aHJlYWRzIGluIHRoZSBncm91cCxcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxcbmluZGV4IGI2ZWM2ZjY5MzcxOTUuLjViYzBhMmEyYTkzMGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxcbkBAIC00MTYsNCArNDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xcbiAjIGRlZmluZSBQUl9DRklfRElTQUJMRVxcdFxcdF9CSVRVTCgxKVxcbiAjIGRlZmluZSBQUl9DRklfTE9DS1xcdFxcdF9CSVRVTCgyKVxcbiBcXG4rLyogUGVyLXByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIGNvbnRyb2wgKi9cXG4rI2RlZmluZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkdcXHQ4MlxcbisjZGVmaW5lIFBSX0dFVF9OVU1BX0JBTEFOQ0lOR1xcdDgzXFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEVcXHQwXFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRVxcdDFcXG4rXFxuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xcbmRpZmYgLS1naXQgYS9pbml0L2luaXRfdGFzay5jIGIvaW5pdC9pbml0X3Rhc2suY1xcbmluZGV4IGFkYjIwN2NkOTg3YzUuLjgzNWJiM2Y3YTE3ZWIgMTAwNjQ0XFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xcbisrKyBiL2luaXQvaW5pdF90YXNrLmNcXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0ge1xcbiBcXHQuY3B1dGltZXJcXHRcXHQ9IHtcXG4gXFx0XFx0LmNwdXRpbWVfYXRvbWljXFx0PSBJTklUX0NQVVRJTUVfQVRPTUlDLFxcbiBcXHR9LFxcbisjZW5kaWZcXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xcbitcXHQubnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9IHRydWUsXFxuICNlbmRpZlxcbiBcXHRJTklUX0NQVV9USU1FUlMoaW5pdF9zaWduYWxzKVxcbiBcXHQucGlkcyA9IHtcXG5AQCAtMjI0LDYgKzIyNyw3IEBAIHN0cnVjdCB0YXNrX3N0cnVjdCBpbml0X3Rhc2sgX19hbGlnbmVkKEwxX0NBQ0hFX0JZVEVTKSA9IHtcXG4gXFx0LnZ0aW1lLnN0YXRlXFx0PSBWVElNRV9TWVMsXFxuICNlbmRpZlxcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK1xcdC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID0gdHJ1ZSxcXG4gXFx0Lm51bWFfcHJlZmVycmVkX25pZCA9IE5VTUFfTk9fTk9ERSxcXG4gXFx0Lm51bWFfZ3JvdXBcXHQ9IE5VTEwsXFxuIFxcdC5udW1hX2ZhdWx0c1xcdD0gTlVMTCxcXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9mb3JrLmNcXG4rKysgYi9rZXJuZWwvZm9yay5jXFxuQEAgLTI0OTYsNiArMjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxcbiBcXG4gXFx0LyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovXFxuIFxcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuK1xcdHAtXFx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPVxcbitcXHRcXHRSRUFEX09OQ0UoY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcXG4rXFx0aWYgKCEoY2xvbmVfZmxhZ3MgXFx1MDAyNiBDTE9ORV9USFJFQUQpKVxcbitcXHRcXHRwLVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxcbitcXHRcXHRcXHRwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xcbisjZW5kaWZcXG4rXFxuIFxcdC8qXFxuIFxcdCAqIENvcHkgc2VjY29tcCBkZXRhaWxzIGV4cGxpY2l0bHkgaGVyZSwgaW4gY2FzZSB0aGV5IHdlcmUgY2hhbmdlZFxcbiBcXHQgKiBiZWZvcmUgaG9sZGluZyBzaWdoYW5kIGxvY2suXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXFxuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc2NoZWQvY29yZS5jXFxuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xcbkBAIC0zNiw2ICszNiw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2xvYWRhdmcuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcXHUwMDNlXFxuQEAgLTYwMyw2ICs2MDQsOCBAQCBpbnQgdGFza19sbGMoY29uc3Qgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiAgKlxcdFxcdFxcdFxcdHAtXFx1MDAzZXNlLmxvYWQsIHAtXFx1MDAzZXJ0X3ByaW9yaXR5LFxcbiAgKlxcdFxcdFxcdFxcdHAtXFx1MDAzZWRsLmRsX3tydW50aW1lLCBkZWFkbGluZSwgcGVyaW9kLCBmbGFncywgYncsIGRlbnNpdHl9XFxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcXHRcXHRwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcXG4rICogIC0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudCgpOlxcdHAtXFx1MDAzZXNpZ25hbC1cXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCxcXG4rICpcXHRcXHRcXHRcXHRcXHRwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXFxuICAqICAtIHNjaGVkX21vdmVfdGFzaygpOlxcdHAtXFx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcXG4gICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKVxcdHAtXFx1MDAzZXVjbGFtcCpcXG4gICpcXG5AQCAtODQwNyw2ICs4NDEwLDQyIEBAIHZvaWQgc2NoZWRfc2V0bnVtYShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuaWQpXFxuIFxcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXFxuIFxcdFxcdHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9IG5pZDtcXG4gfVxcbitcXG4rc3RhdGljIHZvaWQgc2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGVuYWJsZWQpXFxuK3tcXG4rXFx0Z3VhcmQodGFza19ycV9sb2NrKShwKTtcXG4rXFx0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcXG4rXFx0XFx0V1JJVEVfT05DRShwLVxcdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkLCBlbmFibGVkKTtcXG4rfVxcbitcXG4raW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKVxcbit7XFxuK1xcdHN0YXRpYyBERUZJTkVfTVVURVgodGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XFxuK1xcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0Ym9vbCBvbGRfZW5hYmxlZDtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2dGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcXHUwMDI2ZmxhZ3MpKSlcXG4rXFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4rXFxuK1xcdG9sZF9lbmFibGVkID0gY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkO1xcbitcXHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZClcXG4rXFx0XFx0V1JJVEVfT05DRShjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsIGVuYWJsZWQpO1xcbitcXG4rXFx0dW5sb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcXHUwMDI2ZmxhZ3MpO1xcbitcXG4rXFx0aWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpIHtcXG4rXFx0XFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2soY3VycmVudCwgZW5hYmxlZCk7XFxuK1xcdFxcdHJlYWRfbG9jayhcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuK1xcdFxcdGZvcl9vdGhlcl90aHJlYWRzKGN1cnJlbnQsIHQpXFxuK1xcdFxcdFxcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHQsIGVuYWJsZWQpO1xcbitcXHRcXHRyZWFkX3VubG9jayhcXHUwMDI2dGFza2xpc3RfbG9jayk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cXG4gXFxuICNpZmRlZiBDT05GSUdfSE9UUExVR19DUFVcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9zY2hlZC9mYWlyLmNcXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXFxuQEAgLTM4LDYgKzM4LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2NvbmRfcmVzY2hlZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFxcdTAwM2VcXG5AQCAtMTcxMiw2ICsxNzEzLDcgQEAgc3RhdGljIGludCBnZXRfcHJlZl9sbGMoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcXG4gXFx0XFx0ICogY29uZmxpY3Qgb25seSBleGlzdHMgZm9yIGEgc2hvcnQgcGVyaW9kIG9mIHRpbWUuXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRpZiAoc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdCAgICBjcHVfdG9fbm9kZShtbV9zY2hlZF9jcHUpICE9IHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZClcXG4gXFx0XFx0XFx0bW1fc2NoZWRfbGxjID0gLTE7XFxuQEAgLTE4MDgsNiArMTgxMCw5IEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NwdW1hc2tzKGNwdW1hc2tfdmFyX3QgY3B1cywgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRjcHUgPSBSRUFEX09OQ0UocC1cXHUwMDNlbW0tXFx1MDAzZXNjX3N0YXQuY3B1KTtcXG4gXFx0aWYgKGNwdSAhPSAtMSlcXG4gXFx0XFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcXG5AQCAtMjM4NywxNCArMjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiBcXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2VucXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxcbiB7XFxuLVxcdHJxLVxcdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gKHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xcbi1cXHRycS1cXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgKz0gKHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xcbitcXHRib29sIGVuYWJsZWQgPSB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKTtcXG4rXFxuK1xcdHJxLVxcdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgcC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcXG4rXFx0cnEtXFx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nICs9IGVuYWJsZWQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0XFx0ICAgICBwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBhY2NvdW50X251bWFfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXFxuIHtcXG4tXFx0cnEtXFx1MDAzZW5yX251bWFfcnVubmluZyAtPSAocC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XFxuLVxcdHJxLVxcdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC1cXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7XFxuK1xcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xcbitcXG4rXFx0cnEtXFx1MDAzZW5yX251bWFfcnVubmluZyAtPSBlbmFibGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdFxcdCBwLVxcdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xcbitcXHRycS1cXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHRcXHQgICAgIHAtXFx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XFxuIH1cXG4gXFxuIC8qIFNoYXJlZCBvciBwcml2YXRlIGZhdWx0cy4gKi9cXG5AQCAtMzA4NSw2ICszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcXG4gXFx0XFx0XFx0Z290byB1bmxvY2s7XFxuIFxcdH1cXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSlcXG4rXFx0XFx0Z290byB1bmxvY2s7XFxuK1xcbiBcXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXFxuIFxcdGlmICghY3B1bWFza190ZXN0X2NwdShlbnYtXFx1MDAzZXNyY19jcHUsIGN1ci1cXHUwMDNlY3B1c19wdHIpKVxcbiBcXHRcXHRnb3RvIHVubG9jaztcXG5AQCAtMzk5Miw2ICs0MDA4LDkgQEAgdm9pZCB0YXNrX251bWFfZmF1bHQoaW50IGxhc3RfY3B1cGlkLCBpbnQgbWVtX25vZGUsIGludCBwYWdlcywgaW50IGZsYWdzKVxcbiBcXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuIFxcdC8qIGZvciBleGFtcGxlLCBrc21kIGZhdWx0aW5nIGluIGEgdXNlcidzIG1tICovXFxuIFxcdGlmICghcC1cXHUwMDNlbW0pXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtNDQzNiw2ICs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxcbiBcXHRpZiAoIWN1cnItXFx1MDAzZW1tIHx8IChjdXJyLVxcdTAwM2VmbGFncyBcXHUwMDI2IChQRl9FWElUSU5HIHwgUEZfS1RIUkVBRCkpIHx8IHdvcmstXFx1MDAzZW5leHQgIT0gd29yaylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0LypcXG4gXFx0ICogVXNpbmcgcnVudGltZSByYXRoZXIgdGhhbiB3YWxsdGltZSBoYXMgdGhlIGR1YWwgYWR2YW50YWdlIHRoYXRcXG4gXFx0ICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGVcXG5AQCAtNDQ2Myw2ICs0NDg1LDkgQEAgc3RhdGljIHZvaWQgdXBkYXRlX3NjYW5fcGVyaW9kKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5ld19jcHUpXFxuIFxcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4rXFx0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKCFwLVxcdTAwM2VtbSB8fCAhcC1cXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfRVhJVElORykpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuQEAgLTEwNDc1LDYgKzEwNTAwLDkgQEAgc3RhdGljIGxvbmcgbWlncmF0ZV9kZWdyYWRlc19sb2NhbGl0eShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBsYl9lbnYgKmVudilcXG4gXFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4gXFx0aWYgKCFwLVxcdTAwM2VudW1hX2ZhdWx0cyB8fCAhKGVudi1cXHUwMDNlc2QtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0RfTlVNQSkpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL3N5cy5jIGIva2VybmVsL3N5cy5jXFxuaW5kZXggMzViNTM4YmE4NDNjNy4uZmIwMTg0MWMwY2U5MCAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvc3lzLmNcXG4rKysgYi9rZXJuZWwvc3lzLmNcXG5AQCAtNjAsNiArNjAsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvc3RhdC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL2NvcmVkdW1wLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvdGFzay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmN1cGRhdGUuaFxcdTAwM2VcXG5AQCAtMjkwNyw2ICsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXFxuIFxcdFxcdGlmIChhcmczIFxcdTAwMjYgUFJfQ0ZJX0xPQ0sgXFx1MDAyNlxcdTAwMjYgIShhcmczIFxcdTAwMjYgUFJfQ0ZJX0RJU0FCTEUpKVxcbiBcXHRcXHRcXHRlcnJvciA9IGFyY2hfcHJjdGxfbG9ja19icmFuY2hfbGFuZGluZ19wYWRfc3RhdGUobWUpO1xcbiBcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkc6XFxuK1xcdFxcdGlmIChhcmczIHx8IGFyZzQgfHwgYXJnNSlcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGFyZzIgIT0gUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFBSX0dFVF9OVU1BX0JBTEFOQ0lORzpcXG4rXFx0XFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHRlcnJvciA9IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQoKTtcXG4rXFx0XFx0aWYgKGVycm9yIFxcdTAwM2U9IDApXFxuK1xcdFxcdFxcdGVycm9yID0gZXJyb3IgPyBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUgOlxcbitcXHRcXHRcXHRcXHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xcbitcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0dHJhY2VfdGFza19wcmN0bF91bmtub3duKG9wdGlvbiwgYXJnMiwgYXJnMywgYXJnNCwgYXJnNSk7XFxuIFxcdFxcdGVycm9yID0gLUVJTlZBTDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTkuNDk5MjM1NTExWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozMDkyMzE5NzU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NmQwZWE3YTNiMzMxNWM3NTI2NmY0ZDA2YjJmMmNkMThiYTg4MjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNDoyNTo1OCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3QgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5pbmRleCBiNjMyOGNkMGY0M2U5Li43ZjY2NWMyODgyOGE4IDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdFxuQEAgLTc1NCw2ICs3NTQsMjIgQEAgZGlmZmVyZW50IHR5cGVzIG9mIG1lbW9yeSAocmVwcmVzZW50ZWQgYXMgZGlmZmVyZW50IE5VTUEgbm9kZXMpIHRvXG4gcGxhY2UgdGhlIGhvdCBwYWdlcyBpbiB0aGUgZmFzdCBtZW1vcnkuICBUaGlzIGlzIGltcGxlbWVudGVkIGJhc2VkIG9uXG4gdW5tYXBwaW5nIGFuZCBwYWdlIGZhdWx0IHRvby5cbiBcbitUaGUgYGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgYCBhbmQgYGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgYCBwcmN0bCgyKVxuK29wZXJhdGlvbnMgY2FuIGJlIHVzZWQgYnkgYSBwcm9jZXNzIHRvIG9wdCBvdXQgb2YgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nXG4rb3IgcmUtZW5hYmxlIHBhcnRpY2lwYXRpb24gZm9yIHRoZSB3aG9sZSB0aHJlYWQgZ3JvdXAuICBBbnkgdGhyZWFkIGluIHRoZVxuK3RocmVhZCBncm91cCBtYXkgY2hhbmdlIHRoZSBwcm9jZXNzIHNldHRpbmcuICBUaGUgc2V0dGluZyBpcyBpbmhlcml0ZWQgYnlcbitmb3JrKDIpLCBpcyBzaGFyZWQgYnkgdGhyZWFkcyBjcmVhdGVkIHdpdGggY2xvbmUoMikgYGBDTE9ORV9USFJFQURgYCBhbmQgaXNcbitwcmVzZXJ2ZWQgYWNyb3NzIGV4ZWN2ZSgyKS4gIFRoZSBnbG9iYWwgYGBudW1hX2JhbGFuY2luZ2BgIHN5c2N0bCByZW1haW5zXG4rdGhlIHRvcC1sZXZlbCBjb250cm9sOiBhIHByb2Nlc3MtbGV2ZWwgZW5hYmxlIGRvZXMgbm90IHR1cm4gYXV0b21hdGljIE5VTUFcbitiYWxhbmNpbmcgb24gd2hlbiBpdCBpcyBkaXNhYmxlZCBzeXN0ZW0td2lkZS4gIE1lbW9yeSBwb2xpY3kgc3RpbGwgYXBwbGllcyxcbitzbyB0aGUgcHJvY2VzcyBzZXR0aW5nIGRvZXMgbm90IG1ha2UgVk1BcyBwYXJ0aWNpcGF0ZSB3aGVuIHRoZWlyIHBvbGljeVxuK3ByZXZlbnRzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZy5cbitcbitEaXNhYmxpbmcgdGhlIHByb2Nlc3Mgc2V0dGluZyBzdG9wcyBzY2hlZHVsaW5nIG5ldyBwZXJpb2RpYyBOVU1BIHNjYW5zIGZvclxuK3RoYXQgcHJvY2Vzcy4gRXhpc3RpbmcgTlVNQSBoaW50aW5nIFBURXMgYW5kIGFscmVhZHkgcXVldWVkIHdvcmsgYXJlIG5vdFxuK2FjdGl2ZWx5IGNsZWFyZWQgYW5kIG1heSBzdGlsbCBkcmFpbiBuYXR1cmFsbHkgYXMgdGhlIGRpc2FibGVkIHN0YXRlIHRha2VzXG4rZWZmZWN0LlxuK1xuIG51bWFfYmFsYW5jaW5nX3Byb21vdGVfcmF0ZV9saW1pdF9NQnBzXG4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiBcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0IGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuaW5kZXggYzEwMmI2MjAyM2NkYy4uYTRlOTAzN2EzMTYxMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcbkBAIC0xODgsNiArMTg4LDcgQEAgcmVhZCB0aGUgZmlsZSAvcHJvYy9QSUQvc3RhdHVzOjpcbiAgIEh1Z2V0bGJQYWdlczogICAgICAgICAgMCBrQlxuICAgQ29yZUR1bXBpbmc6ICAgIDBcbiAgIFRIUF9lbmFibGVkOlx0ICAxXG4rICBOdW1hQl9tb2RlOiAgICAgZW5hYmxlZFxuICAgVGhyZWFkczogICAgICAgIDFcbiAgIFNpZ1E6ICAgMC8yODU3OFxuICAgU2lnUG5kOiAwMDAwMDAwMDAwMDAwMDAwXG5AQCAtMjc0LDYgKzI3NSwxMSBAQCBJdCdzIHNsb3cgYnV0IHZlcnkgcHJlY2lzZS5cbiAgVEhQX2VuYWJsZWQgICAgICAgICAgICAgICAgIHByb2Nlc3MgaXMgYWxsb3dlZCB0byB1c2UgVEhQIChyZXR1cm5zIDAgd2hlblxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFJfU0VUX1RIUF9ESVNBQkxFIGlzIHNldCBvbiB0aGUgcHJvY2VzcyB0byBkaXNhYmxlXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUSFAgY29tcGxldGVseSwgbm90IGp1c3QgcGFydGlhbGx5KVxuKyBOdW1hQl9tb2RlICAgICAgICAgICAgICAgICAgcHJvY2VzcyBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmcgbW9kZTpcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuYWJsZWQgb3IgZGlzYWJsZWQgd2hlbiBzdXBwb3J0ZWQsIG90aGVyd2lzZVxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zdXBwb3J0ZWQ7IHRoZSBlZmZlY3RpdmUgYmVoYXZpb3IgYWxzbyBkZXBlbmRzXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbiB0aGUgZ2xvYmFsIG51bWFfYmFsYW5jaW5nIHN5c2N0bCBhbmQgbWVtb3J5XG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb2xpY3lcbiAgVGhyZWFkcyAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiB0aHJlYWRzXG4gIFNpZ1EgICAgICAgICAgICAgICAgICAgICAgICBudW1iZXIgb2Ygc2lnbmFscyBxdWV1ZWQvbWF4LiBudW1iZXIgZm9yIHF1ZXVlXG4gIFNpZ1BuZCAgICAgICAgICAgICAgICAgICAgICBiaXRtYXAgb2YgcGVuZGluZyBzaWduYWxzIGZvciB0aGUgdGhyZWFkXG5kaWZmIC0tZ2l0IGEvZnMvcHJvYy9hcnJheS5jIGIvZnMvcHJvYy9hcnJheS5jXG5pbmRleCBmNmY3NWQyMDY3NjJhLi5hMjdhNmE1N2U4YjIyIDEwMDY0NFxuLS0tIGEvZnMvcHJvYy9hcnJheS5jXG4rKysgYi9mcy9wcm9jL2FycmF5LmNcbkBAIC00MjUsNiArNDI1LDIxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3RocF9zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiBcdHNlcV9wcmludGYobSwgXCJUSFBfZW5hYmxlZDpcXHQlZFxcblwiLCB0aHBfZW5hYmxlZCk7XG4gfVxuIFxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMoc3RydWN0IHNlcV9maWxlICptLFxuK1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2spXG4re1xuK1x0c2VxX3ByaW50ZihtLCBcIk51bWFCX21vZGU6XFx0JXNcXG5cIixcbitcdFx0ICAgdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUodGFzaykpO1xuK31cbisjZWxzZVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbit7XG4rXHRzZXFfcHV0cyhtLCBcIk51bWFCX21vZGU6XFx0dW5zdXBwb3J0ZWRcXG5cIik7XG4rfVxuKyNlbmRpZlxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX3VudGFnX21hc2soc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSlcbiB7XG4gXHRzZXFfcHJpbnRmKG0sIFwidW50YWdfbWFzazpcXHQlI2x4XFxuXCIsIG1tX3VudGFnX21hc2sobW0pKTtcbkBAIC00NTMsNiArNDY4LDcgQEAgaW50IHByb2NfcGlkX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBwaWRfbmFtZXNwYWNlICpucyxcbiBcdFx0dGFza191bnRhZ19tYXNrKG0sIG1tKTtcbiBcdFx0bW1wdXQobW0pO1xuIFx0fVxuK1x0dGFza19udW1hX2JhbGFuY2luZ19zdGF0dXMobSwgdGFzayk7XG4gXHR0YXNrX3NpZyhtLCB0YXNrKTtcbiBcdHRhc2tfY2FwKG0sIHRhc2spO1xuIFx0dGFza19zZWNjb21wKG0sIHRhc2spO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuaW5kZXggOGIzZDQ3YTMyNWNjYS4uN2YxOTMyNjU4ZDI0YyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5AQCAtMTM4Miw2ICsxMzgyLDEyIEBAIHN0cnVjdCB0YXNrX3N0cnVjdCB7XG4gXHRzaG9ydFx0XHRcdFx0cHJlZl9ub2RlX2Zvcms7XG4gI2VuZGlmXG4gI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0LypcbitcdCAqIFNjaGVkdWxlciBzbmFwc2hvdCBvZiBzaWduYWxfc3RydWN0OjpudW1hX2JhbGFuY2luZ19lbmFibGVkLiBJdCBpc1xuK1x0ICogdXBkYXRlZCB3aXRoIHNjaGVkX2NoYW5nZSBmb3IgcnVucXVldWUgTlVNQSBhY2NvdW50aW5nOyB0aGVcbitcdCAqIHVzZXItdmlzaWJsZSBwcm9jZXNzIG1vZGUgbGl2ZXMgaW4gc2lnbmFsX3N0cnVjdC5cbitcdCAqL1xuK1x0Ym9vbFx0XHRcdFx0bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZDtcbiBcdGludFx0XHRcdFx0bnVtYV9zY2FuX3NlcTtcbiBcdHVuc2lnbmVkIGludFx0XHRcdG51bWFfc2Nhbl9wZXJpb2Q7XG4gXHR1bnNpZ25lZCBpbnRcdFx0XHRudW1hX3NjYW5fcGVyaW9kX21heDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmggYi9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbmluZGV4IDUyYjIyYzVjMzk2ZGIuLjY5ZTc5MzU5ZmEyMmUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuQEAgLTgsNiArOCw3IEBAXG4gICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG4gI2RlZmluZSBUTkZfTUlHUkFURURcdDB4MDFcbiAjZGVmaW5lIFRORl9OT19HUk9VUFx0MHgwMlxuQEAgLTMwLDYgKzMxLDI3IEBAIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xuIGV4dGVybiBwaWRfdCB0YXNrX251bWFfZ3JvdXBfaWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKTtcbiBleHRlcm4gdm9pZCBzZXRfbnVtYWJhbGFuY2luZ19zdGF0ZShib29sIGVuYWJsZWQpO1xuIGV4dGVybiB2b2lkIHRhc2tfbnVtYV9mcmVlKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBmaW5hbCk7XG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbit7XG4rXHRyZXR1cm4gUkVBRF9PTkNFKHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4rfVxuK1xuK2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZCk7XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuK3tcbitcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoY3VycmVudCk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqdGFza19udW1hX2JhbGFuY2luZ19tb2RlX25hbWUoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQocCkgPyBcImVuYWJsZWRcIiA6IFwiZGlzYWJsZWRcIjtcbit9XG4gYm9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdFx0XHRpbnQgc3JjX25pZCwgaW50IGRzdF9jcHUpO1xuICNlbHNlXG5AQCAtNDcsNiArNjksMjYgQEAgc3RhdGljIGlubGluZSB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZClcbiBzdGF0aWMgaW5saW5lIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKVxuIHtcbiB9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgYm9vbCB0YXNrX251bWFfcHJvY2Vzc19tb2RlX2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4re1xuK1x0cmV0dXJuIC1FSU5WQUw7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgaW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfZ2V0X2N1cnJlbnQodm9pZClcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4gc3RhdGljIGlubGluZSBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCxcbiBcdFx0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8sIGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSlcbiB7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbmluZGV4IDU4NGFlODhiNDM1ZTkuLmZkYzAzYzAxNmNmZWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oXG5AQCAtMTc5LDYgKzE3OSwxNCBAQCBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCB7XG4gXG4gI2lmZGVmIENPTkZJR19TQ0hFRF9BVVRPR1JPVVBcbiBcdHN0cnVjdCBhdXRvZ3JvdXAgKmF1dG9ncm91cDtcbisjZW5kaWZcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQvKlxuK1x0ICogVGhyZWFkLWdyb3VwIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlIGNvbmZpZ3VyZWQgdGhyb3VnaCBwcmN0bCgpLlxuK1x0ICogU2NoZWR1bGVyIGhvdCBwYXRocyB1c2UgdGFza19zdHJ1Y3Q6Om51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgYXNcbitcdCAqIHRoZWlyIHBlci10YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgc25hcHNob3QuXG4rXHQgKi9cbitcdGJvb2wgbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbiAjZW5kaWZcbiBcdC8qXG4gXHQgKiBDdW11bGF0aXZlIHJlc291cmNlIGNvdW50ZXJzIGZvciBkZWFkIHRocmVhZHMgaW4gdGhlIGdyb3VwLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcbmluZGV4IGI2ZWM2ZjY5MzcxOTUuLjViYzBhMmEyYTkzMGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmhcbkBAIC00MTYsNCArNDE2LDEwIEBAIHN0cnVjdCBwcmN0bF9tbV9tYXAge1xuICMgZGVmaW5lIFBSX0NGSV9ESVNBQkxFXHRcdF9CSVRVTCgxKVxuICMgZGVmaW5lIFBSX0NGSV9MT0NLXHRcdF9CSVRVTCgyKVxuIFxuKy8qIFBlci1wcm9jZXNzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBjb250cm9sICovXG4rI2RlZmluZSBQUl9TRVRfTlVNQV9CQUxBTkNJTkdcdDgyXG4rI2RlZmluZSBQUl9HRVRfTlVNQV9CQUxBTkNJTkdcdDgzXG4rIyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRElTQUJMRVx0MFxuKyMgZGVmaW5lIFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRVx0MVxuK1xuICNlbmRpZiAvKiBfTElOVVhfUFJDVExfSCAqL1xuZGlmZiAtLWdpdCBhL2luaXQvaW5pdF90YXNrLmMgYi9pbml0L2luaXRfdGFzay5jXG5pbmRleCBhZGIyMDdjZDk4N2M1Li44MzViYjNmN2ExN2ViIDEwMDY0NFxuLS0tIGEvaW5pdC9pbml0X3Rhc2suY1xuKysrIGIvaW5pdC9pbml0X3Rhc2suY1xuQEAgLTQwLDYgKzQwLDkgQEAgc3RhdGljIHN0cnVjdCBzaWduYWxfc3RydWN0IGluaXRfc2lnbmFscyA9IHtcbiBcdC5jcHV0aW1lclx0XHQ9IHtcbiBcdFx0LmNwdXRpbWVfYXRvbWljXHQ9IElOSVRfQ1BVVElNRV9BVE9NSUMsXG4gXHR9LFxuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC5udW1hX2JhbGFuY2luZ19lbmFibGVkID0gdHJ1ZSxcbiAjZW5kaWZcbiBcdElOSVRfQ1BVX1RJTUVSUyhpbml0X3NpZ25hbHMpXG4gXHQucGlkcyA9IHtcbkBAIC0yMjQsNiArMjI3LDcgQEAgc3RydWN0IHRhc2tfc3RydWN0IGluaXRfdGFzayBfX2FsaWduZWQoTDFfQ0FDSEVfQllURVMpID0ge1xuIFx0LnZ0aW1lLnN0YXRlXHQ9IFZUSU1FX1NZUyxcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQubnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCA9IHRydWUsXG4gXHQubnVtYV9wcmVmZXJyZWRfbmlkID0gTlVNQV9OT19OT0RFLFxuIFx0Lm51bWFfZ3JvdXBcdD0gTlVMTCxcbiBcdC5udW1hX2ZhdWx0c1x0PSBOVUxMLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9mb3JrLmMgYi9rZXJuZWwvZm9yay5jXG5pbmRleCA0MTY3NThjOGEzZDQzLi5hZmY2NGQ3NWM3N2ZiIDEwMDY0NFxuLS0tIGEva2VybmVsL2ZvcmsuY1xuKysrIGIva2VybmVsL2ZvcmsuY1xuQEAgLTI0OTYsNiArMjQ5NiwxNCBAQCBfX2xhdGVudF9lbnRyb3B5IHN0cnVjdCB0YXNrX3N0cnVjdCAqY29weV9wcm9jZXNzKFxuIFxuIFx0LyogTm8gbW9yZSBmYWlsdXJlIHBhdGhzIGFmdGVyIHRoaXMgcG9pbnQuICovXG4gXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID1cbitcdFx0UkVBRF9PTkNFKGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQpO1xuK1x0aWYgKCEoY2xvbmVfZmxhZ3MgXHUwMDI2IENMT05FX1RIUkVBRCkpXG4rXHRcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPVxuK1x0XHRcdHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZDtcbisjZW5kaWZcbitcbiBcdC8qXG4gXHQgKiBDb3B5IHNlY2NvbXAgZGV0YWlscyBleHBsaWNpdGx5IGhlcmUsIGluIGNhc2UgdGhleSB3ZXJlIGNoYW5nZWRcbiBcdCAqIGJlZm9yZSBob2xkaW5nIHNpZ2hhbmQgbG9jay5cbmRpZmYgLS1naXQgYS9rZXJuZWwvc2NoZWQvY29yZS5jIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuaW5kZXggZjc4Mjc1MTkyMDM2Yi4uYmE4YjIyZjNmZmE1MyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zY2hlZC9jb3JlLmNcbisrKyBiL2tlcm5lbC9zY2hlZC9jb3JlLmNcbkBAIC0zNiw2ICszNiw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9sb2FkYXZnLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL25vaHouaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3JzZXFfYXBpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9ydC5oXHUwMDNlXG5AQCAtNjAzLDYgKzYwNCw4IEBAIGludCB0YXNrX2xsYyhjb25zdCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gICpcdFx0XHRcdHAtXHUwMDNlc2UubG9hZCwgcC1cdTAwM2VydF9wcmlvcml0eSxcbiAgKlx0XHRcdFx0cC1cdTAwM2VkbC5kbF97cnVudGltZSwgZGVhZGxpbmUsIHBlcmlvZCwgZmxhZ3MsIGJ3LCBkZW5zaXR5fVxuICAqICAtIHNjaGVkX3NldG51bWEoKTpcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWRcbisgKiAgLSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KCk6XHRwLVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkLFxuKyAqXHRcdFx0XHRcdHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZFxuICAqICAtIHNjaGVkX21vdmVfdGFzaygpOlx0cC1cdTAwM2VzY2hlZF90YXNrX2dyb3VwXG4gICogIC0gdWNsYW1wX3VwZGF0ZV9hY3RpdmUoKVx0cC1cdTAwM2V1Y2xhbXAqXG4gICpcbkBAIC04NDA3LDYgKzg0MTAsNDIgQEAgdm9pZCBzY2hlZF9zZXRudW1hKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgaW50IG5pZClcbiBcdHNjb3BlZF9ndWFyZCAoc2NoZWRfY2hhbmdlLCBwLCBERVFVRVVFX1NBVkUpXG4gXHRcdHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID0gbmlkO1xuIH1cbitcbitzdGF0aWMgdm9pZCBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZW5hYmxlZClcbit7XG4rXHRndWFyZCh0YXNrX3JxX2xvY2spKHApO1xuK1x0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcbitcdFx0V1JJVEVfT05DRShwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQsIGVuYWJsZWQpO1xuK31cbitcbitpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpXG4re1xuK1x0c3RhdGljIERFRklORV9NVVRFWCh0YXNrX251bWFfYmFsYW5jaW5nX211dGV4KTtcbitcdHN0cnVjdCB0YXNrX3N0cnVjdCAqdDtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHRib29sIG9sZF9lbmFibGVkO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNnRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuK1xuK1x0aWYgKFdBUk5fT05fT05DRSghbG9ja190YXNrX3NpZ2hhbmQoY3VycmVudCwgXHUwMDI2ZmxhZ3MpKSlcbitcdFx0cmV0dXJuIC1FU1JDSDtcbitcbitcdG9sZF9lbmFibGVkID0gY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZDtcbitcdGlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKVxuK1x0XHRXUklURV9PTkNFKGN1cnJlbnQtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsIGVuYWJsZWQpO1xuK1xuK1x0dW5sb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcdTAwMjZmbGFncyk7XG4rXG4rXHRpZiAob2xkX2VuYWJsZWQgIT0gZW5hYmxlZCkge1xuK1x0XHRzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFzayhjdXJyZW50LCBlbmFibGVkKTtcbitcdFx0cmVhZF9sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuK1x0XHRmb3Jfb3RoZXJfdGhyZWFkcyhjdXJyZW50LCB0KVxuK1x0XHRcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHQsIGVuYWJsZWQpO1xuK1x0XHRyZWFkX3VubG9jayhcdTAwMjZ0YXNrbGlzdF9sb2NrKTtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX05VTUFfQkFMQU5DSU5HICovXG4gXG4gI2lmZGVmIENPTkZJR19IT1RQTFVHX0NQVVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9mYWlyLmMgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5pbmRleCA4ZGZmMzcwNTlmYWY3Li43ZGZlMjc1YTRiYzQzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2ZhaXIuY1xuKysrIGIva2VybmVsL3NjaGVkL2ZhaXIuY1xuQEAgLTM4LDYgKzM4LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb25kX3Jlc2NoZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NwdXRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2lzb2xhdGlvbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL25vaHouaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3ByaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0YXRpY19jYWxsLmhcdTAwM2VcbkBAIC0xNzEyLDYgKzE3MTMsNyBAQCBzdGF0aWMgaW50IGdldF9wcmVmX2xsYyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0XHQgKiBjb25mbGljdCBvbmx5IGV4aXN0cyBmb3IgYSBzaG9ydCBwZXJpb2Qgb2YgdGltZS5cbiBcdFx0ICovXG4gXHRcdGlmIChzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIGNwdV90b19ub2RlKG1tX3NjaGVkX2NwdSkgIT0gcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQpXG4gXHRcdFx0bW1fc2NoZWRfbGxjID0gLTE7XG5AQCAtMTgwOCw2ICsxODEwLDkgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY3B1bWFza3MoY3B1bWFza192YXJfdCBjcHVzLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdGNwdSA9IFJFQURfT05DRShwLVx1MDAzZW1tLVx1MDAzZXNjX3N0YXQuY3B1KTtcbiBcdGlmIChjcHUgIT0gLTEpXG4gXHRcdG5pZCA9IGNwdV90b19ub2RlKGNwdSk7XG5AQCAtMjM4NywxNCArMjM5MiwyMiBAQCBzdGF0aWMgdW5zaWduZWQgaW50IHRhc2tfc2Nhbl9tYXgoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9lbnF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XG4tXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyArPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApKTtcbitcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuK1xuK1x0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nICs9IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuK1x0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgKz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBhY2NvdW50X251bWFfZGVxdWV1ZShzdHJ1Y3QgcnEgKnJxLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4ge1xuLVx0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nIC09IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREUpO1xuLVx0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKSk7XG4rXHRib29sIGVuYWJsZWQgPSB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKTtcbitcbitcdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyAtPSBlbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0IHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERTtcbitcdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgICAgIHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkID09IHRhc2tfbm9kZShwKTtcbiB9XG4gXG4gLyogU2hhcmVkIG9yIHByaXZhdGUgZmF1bHRzLiAqL1xuQEAgLTMwODUsNiArMzA5OCw5IEBAIHN0YXRpYyBib29sIHRhc2tfbnVtYV9jb21wYXJlKHN0cnVjdCB0YXNrX251bWFfZW52ICplbnYsXG4gXHRcdFx0Z290byB1bmxvY2s7XG4gXHR9XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKGN1cikpXG4rXHRcdGdvdG8gdW5sb2NrO1xuK1xuIFx0LyogU2tpcCB0aGlzIHN3YXAgY2FuZGlkYXRlIGlmIGNhbm5vdCBtb3ZlIHRvIHRoZSBzb3VyY2UgY3B1LiAqL1xuIFx0aWYgKCFjcHVtYXNrX3Rlc3RfY3B1KGVudi1cdTAwM2VzcmNfY3B1LCBjdXItXHUwMDNlY3B1c19wdHIpKVxuIFx0XHRnb3RvIHVubG9jaztcbkBAIC0zOTkyLDYgKzQwMDgsOSBAQCB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9jcHVwaWQsIGludCBtZW1fbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LyogZm9yIGV4YW1wbGUsIGtzbWQgZmF1bHRpbmcgaW4gYSB1c2VyJ3MgbW0gKi9cbiBcdGlmICghcC1cdTAwM2VtbSlcbiBcdFx0cmV0dXJuO1xuQEAgLTQ0MzYsNiArNDQ1NSw5IEBAIHN0YXRpYyB2b2lkIHRhc2tfdGlja19udW1hKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqY3VycilcbiBcdGlmICghY3Vyci1cdTAwM2VtbSB8fCAoY3Vyci1cdTAwM2VmbGFncyBcdTAwMjYgKFBGX0VYSVRJTkcgfCBQRl9LVEhSRUFEKSkgfHwgd29yay1cdTAwM2VuZXh0ICE9IHdvcmspXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VycikpXG4rXHRcdHJldHVybjtcbitcbiBcdC8qXG4gXHQgKiBVc2luZyBydW50aW1lIHJhdGhlciB0aGFuIHdhbGx0aW1lIGhhcyB0aGUgZHVhbCBhZHZhbnRhZ2UgdGhhdFxuIFx0ICogd2UgKG1vc3RseSkgZHJpdmUgdGhlIHNlbGVjdGlvbiBmcm9tIGJ1c3kgdGhyZWFkcyBhbmQgdGhhdCB0aGVcbkBAIC00NDYzLDYgKzQ0ODUsOSBAQCBzdGF0aWMgdm9pZCB1cGRhdGVfc2Nhbl9wZXJpb2Qoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmV3X2NwdSlcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRpZiAoIXAtXHUwMDNlbW0gfHwgIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgKHAtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0VYSVRJTkcpKVxuIFx0XHRyZXR1cm47XG4gXG5AQCAtMTA0NzUsNiArMTA1MDAsOSBAQCBzdGF0aWMgbG9uZyBtaWdyYXRlX2RlZ3JhZGVzX2xvY2FsaXR5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGxiX2VudiAqZW52KVxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChwKSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoIXAtXHUwMDNlbnVtYV9mYXVsdHMgfHwgIShlbnYtXHUwMDNlc2QtXHUwMDNlZmxhZ3MgXHUwMDI2IFNEX05VTUEpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvc3lzLmMgYi9rZXJuZWwvc3lzLmNcbmluZGV4IDM1YjUzOGJhODQzYzcuLmZiMDE4NDFjMGNlOTAgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc3lzLmNcbisrKyBiL2tlcm5lbC9zeXMuY1xuQEAgLTYwLDYgKzYwLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9zdGF0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY29yZWR1bXAuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC90YXNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jcHV0aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yY3VwZGF0ZS5oXHUwMDNlXG5AQCAtMjkwNyw2ICsyOTA4LDIzIEBAIFNZU0NBTExfREVGSU5FNShwcmN0bCwgaW50LCBvcHRpb24sIHVuc2lnbmVkIGxvbmcsIGFyZzIsIHVuc2lnbmVkIGxvbmcsIGFyZzMsXG4gXHRcdGlmIChhcmczIFx1MDAyNiBQUl9DRklfTE9DSyBcdTAwMjZcdTAwMjYgIShhcmczIFx1MDAyNiBQUl9DRklfRElTQUJMRSkpXG4gXHRcdFx0ZXJyb3IgPSBhcmNoX3ByY3RsX2xvY2tfYnJhbmNoX2xhbmRpbmdfcGFkX3N0YXRlKG1lKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlIFBSX1NFVF9OVU1BX0JBTEFOQ0lORzpcbitcdFx0aWYgKGFyZzMgfHwgYXJnNCB8fCBhcmc1KVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRpZiAoYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgYXJnMiAhPSBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChhcmcyID09XG4rXHRcdFx0XHRcdFx0XHQgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFBSX0dFVF9OVU1BX0JBTEFOQ0lORzpcbitcdFx0aWYgKGFyZzIgfHwgYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGVycm9yID0gdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCgpO1xuK1x0XHRpZiAoZXJyb3IgXHUwMDNlPSAwKVxuK1x0XHRcdGVycm9yID0gZXJyb3IgPyBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUgOlxuK1x0XHRcdFx0UFJfTlVNQV9CQUxBTkNJTkdfRElTQUJMRTtcbitcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHR0cmFjZV90YXNrX3ByY3RsX3Vua25vd24ob3B0aW9uLCBhcmcyLCBhcmczLCBhcmc0LCBhcmc1KTtcbiBcdFx0ZXJyb3IgPSAtRUlOVkFMO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjU6NTkuNDk5MjM3MzIxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTg4MDQ1NjU2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIFNlcmllcyBmb3IgU3l6a2FsbGVyIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyAqY291bGQqIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIFN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4gYW5kIHNlZSBpZiBpdCdzIHdvcnRoIHRoZSBlZmZvcnQuXG5cbkZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUuIEl0IGxvb2tzIGxpa2Ugd2UncmUgZGVhbGluZyB3aXRoIE5VTUEgYmFsYW5jaW5nIGVuaGFuY2VtZW50cy4gU3BlY2lmaWNhbGx5OlxuXG4xLiAgKipEb2N1bWVudGF0aW9uOioqIE1vZGlmaWNhdGlvbnMgdG8gZG9jdW1lbnRhdGlvbiBmaWxlcyDigJMgbm90IGluaGVyZW50bHkgZnV6emFibGUsIGJ1dCBjb3VsZCBleHBvc2UgbmV3IGNvZGUgcGF0aHMgb3Igc2V0dGluZ3MuIEknbGwgbm90ZSBpdC5cbjIuICAqKi9wcm9jIEludGVyZmFjZToqKiBBIG5ldyBlbnRyeSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzYCwgaW4gYC9wcm9jL1BJRC9zdGF0dXNgLiBUaGlzIGlzIHByb21pc2luZy4gQW55IGNoYW5nZXMgdG8gcHJvY2ZzIGFyZSBnb29kIHRhcmdldHMsIGFuZCBgL3Byb2MvUElEL3N0YXR1c2AgaXMgaGVhdmlseSB1c2VkLlxuMy4gICoqSGVhZGVyczoqKiBIZWFkZXIgZmlsZXMgYXJlIGJlaW5nIHVwZGF0ZWQuIEltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LlxuNC4gICoqSW5pdGlhbGl6YXRpb246KiogQ2hhbmdlcyBpbiBgaW5pdF90YXNrLmNgLCBhZmZlY3RpbmcgaG93IHRoZSBgaW5pdGAgcHJvY2VzcyBpcyBzZXQgdXAuIENvdWxkIGJlIGludGVyZXN0aW5nLlxuNS4gICoqRm9yayBMb2dpYzoqKiBNb2RpZmljYXRpb25zIHRvIGBjb3B5X3Byb2Nlc3NgIHdpdGhpbiBga2VybmVsL2ZvcmsuY2AsIHVwZGF0aW5nIGBudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCBhbmQgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBUaGlzIGlzIEhVR0UuIEZvcmsgaXMgYSBjcml0aWNhbCwgYW5kIG9mdGVuIGZ1enplZCwgcGF0aC4gVGhpcyBtYWtlcyBpdCB2ZXJ5IGludGVyZXN0aW5nLlxuNi4gICoqU2NoZWR1bGVyIENvcmU6KiogVGhpcyBpcyB3aGVyZSB0aGluZ3MgZ2V0IHJlYWxseSBqdWljeS4gVGhlIGltcGxlbWVudGF0aW9uIG9mIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgYW5kIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpbiBga2VybmVsL3NjaGVkL2NvcmUuY2AgYXJlIHZpdGFsLiBUaGlzIGlzIHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcy4gVGhlIHNjaGVkdWxlciBpcyBhIGtleSB0YXJnZXQuXG43LiAgKipGYWlyIFNjaGVkdWxlcjoqKiBFdmVuIGJldHRlciDigJMgdGhlIGZhaXIgc2NoZWR1bGVyIChga2VybmVsL3NjaGVkL2ZhaXIuY2ApIGlzIGNoZWNraW5nIGB0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZGAgaW4gYSBidW5jaCBvZiBjcnVjaWFsIHBsYWNlczogYGdldF9wcmVmX2xsY2AsIGBnZXRfc2Nhbl9jcHVtYXNrc2AsIGFuZCBvdGhlciBzY2hlZHVsZXIgb3BlcmF0aW9ucy4gVGhpcyBpcyBnb2xkLiBBbnkgY2hhbmdlcyB0byB0aGUgc2NoZWR1bGVyJ3MgYmVoYXZpb3IgaXMgbGlrZWx5IHRvIGludHJvZHVjZSBlcnJvcnMgYW5kIG1ha2UgdGhpcyBhIGhpZ2ggcHJpb3JpdHkuXG44LiAgKipwcmN0bCBTeXNjYWxsOioqIFRoZSBhZGRpdGlvbiBvZiBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYCBhbmQgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2AgdG8gdGhlIGBwcmN0bGAgc3lzY2FsbC4gVGhpcyBpcyBhIHZlcnkgZ29vZCBpbmRpY2F0b3IgZm9yIHVzLiBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IHRoaXMgaXMgYSByZWFjaGFibGUgY29kZSBwYXRoLCBidXQgc3lzdGVtIGNhbGxzIGFyZSBwZXJmZWN0IGZ1enppbmcgY2FuZGlkYXRlcy5cblxuTXkgaW1tZWRpYXRlIGltcHJlc3Npb24gaXMgdGhhdCAqeWVzKiwgdGhpcyBjb2RlIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGFuZCBleGVjdXRhYmxlLiBXZSdyZSB0YWxraW5nIGFib3V0IGNoYW5nZXMgdG8gY29yZSBzY2hlZHVsZXIgbG9naWMsIGZvcmsgbG9naWMsIHRoZSBgcHJjdGxgIHN5c2NhbGwgaGFuZGxlciwgYW5kIHRoZSBgL3Byb2NgIGludGVyZmFjZS4gVGhpcyBpcyBhbGwgaGlnaC12YWx1ZSBzdHVmZi4gVGhlIGFkZGl0aW9uIG9mIG5ldyBgcHJjdGxgIG9wdGlvbnMgaXMgYSBtYXNzaXZlIHdpbi4gSSBzZWUgbG9ja2luZyBwcmltaXRpdmVzIGV2ZXJ5d2hlcmU6IG11dGV4ZXMsIGB0YXNrX3JxX2xvY2tgLCBgc2NoZWRfY2hhbmdlYCwgYHRhc2tsaXN0X2xvY2tgLCBzaWdoYW5kIGxvY2tzLCB0aHJlYWQgaXRlcmF0aW9uLCBhbGwgb2Ygd2hpY2ggYXJlIGdvb2Qgc3BvdHMgZm9yIGZ1enppbmcuIExvY2tpbmcgaXMgYWx3YXlzIGludGVyZXN0aW5nIGZyb20gYSBjb25jdXJyZW5jeSBzdGFuZHBvaW50LlxuXG5Ob3csIGxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBJJ2xsIHVzZSB0aGUgZ3JlcHBlciBhbmQgY2hlY2sgZm9yIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIHRvIG1ha2Ugc3VyZSB3ZSdyZSBhY3R1YWxseSBnb2luZyB0byB0YXJnZXQgdXNlZnVsIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3MzksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjowNS4zNzk2OTU5NzZaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE5NDIyNjQzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTlVNQV9CQUxBTkNJTkdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTEwMTg9Y29uZmlnIEFSQ0hfV0FOVF9OVU1BX1ZBUklBQkxFX0xPQ0FMSVRZXFxuLS1cXG5pbml0L0tjb25maWctMTAyMC1cXG5pbml0L0tjb25maWc6MTAyMTpjb25maWcgTlVNQV9CQUxBTkNJTkdcXG5pbml0L0tjb25maWctMTAyMi1cXHRib29sIFxcXCJNZW1vcnkgcGxhY2VtZW50IGF3YXJlIE5VTUEgc2NoZWR1bGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnPTEwMzQ9Y29uZmlnIFNDSEVEX0NBQ0hFXFxuLS1cXG5pbml0L0tjb25maWctMTA0NC1cXG5pbml0L0tjb25maWc6MTA0NTpjb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuaW5pdC9LY29uZmlnLTEwNDYtXFx0Ym9vbCBcXFwiQXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjA3LjU3MzkyODI5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI0NTU4NjMzMTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBOVU1BIEJhbGFuY2luZyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcHJlY2lzZSByZXF1aXJlbWVudHMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRldGVybWluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIGBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBNeSBpbW1lZGlhdGUgY291cnNlIG9mIGFjdGlvbiBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgc291cmNlIOKAkyB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZS4gSSdtIGZvY3VzaW5nIHNwZWNpZmljYWxseSBhcm91bmQgbGluZSAxMDIxLCB3aGljaCBzaG91bGQgYmUgd2hlcmUgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzIGRlZmluZWQgb3IgcmVmZXJlbmNlZC4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgd2hlcmUgSSBjYW4gc2VlIHRoZSBjb25kaXRpb25hbCBsb2dpYywgYW55IHByZXJlcXVpc2l0ZSBmZWF0dXJlcywgYW5kIGFueSBvdGhlciBzZXR0aW5ncyB0aGF0IG1pZ2h0IGFmZmVjdCB3aGV0aGVyIG9yIG5vdCBJIGNhbiBldmVuICpzZWUqIHRoZSBvcHRpb24sIGxldCBhbG9uZSBlbmFibGUgaXQuIEZyb20gdGhlcmUsIEknbGwgYmUgYWJsZSB0byBidWlsZCBhIHByb3BlciBtZW50YWwgbW9kZWwgb2YgaXRzIHBsYWNlIGluIHRoZSBicm9hZGVyIGtlcm5lbCBlY29zeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTk1LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTAuMDI5Nzk0NTM2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDE1LFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDE1OlxcdCMgRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCAoYWIpdXNlIE5VTUEgdG8gcmVwcmVzZW50IGRpZmZlcmVudCBtZW1vcnkgcmVnaW9uc1xcbjEwMTY6XFx0IyBhbGwgY3B1LWxvY2FsIGJ1dCBvZiBkaWZmZXJlbnQgbGF0ZW5jaWVzLCBzdWNoIGFzIFN1cGVySC5cXG4xMDE3OlxcdCNcXG4xMDE4OlxcdGNvbmZpZyBBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMTk6XFx0XFx0Ym9vbFxcbjEwMjA6XFx0XFxuMTAyMTpcXHRjb25maWcgTlVNQV9CQUxBTkNJTkdcXG4xMDIyOlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBwbGFjZW1lbnQgYXdhcmUgTlVNQSBzY2hlZHVsZXJcXFwiXFxuMTAyMzpcXHRcXHRkZXBlbmRzIG9uIEFSQ0hfU1VQUE9SVFNfTlVNQV9CQUxBTkNJTkdcXG4xMDI0OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9IQVNfUFRFX1BST1ROT05FXFxuMTAyNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX1dBTlRfTlVNQV9WQVJJQUJMRV9MT0NBTElUWVxcbjEwMjY6XFx0XFx0ZGVwZW5kcyBvbiBTTVAgXFx1MDAyNlxcdTAwMjYgTlVNQV9NSUdSQVRJT04gXFx1MDAyNlxcdTAwMjYgIVBSRUVNUFRfUlRcXG4xMDI3OlxcdFxcdGhlbHBcXG4xMDI4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBhdXRvbWF0aWMgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnQuXFxuMTAyOTpcXHRcXHQgIFRoZSBtZWNoYW5pc20gaXMgcXVpdGUgcHJpbWl0aXZlIGFuZCBpcyBiYXNlZCBvbiBtaWdyYXRpbmcgbWVtb3J5IHdoZW5cXG4xMDMwOlxcdFxcdCAgaXQgaGFzIHJlZmVyZW5jZXMgdG8gdGhlIG5vZGUgdGhlIHRhc2sgaXMgcnVubmluZyBvbi5cXG4xMDMxOlxcdFxcbjEwMzI6XFx0XFx0ICBUaGlzIHN5c3RlbSB3aWxsIGJlIGluYWN0aXZlIG9uIFVNQSBzeXN0ZW1zLlxcbjEwMzM6XFx0XFxuMTAzNDpcXHRjb25maWcgU0NIRURfQ0FDSEVcXG4xMDM1OlxcdFxcdGJvb2wgXFxcIkNhY2hlIGF3YXJlIGxvYWQgYmFsYW5jZVxcXCJcXG4xMDM2OlxcdFxcdGRlZmF1bHQgeVxcbjEwMzc6XFx0XFx0ZGVwZW5kcyBvbiBTTVBcXG4xMDM4OlxcdFxcdGhlbHBcXG4xMDM5OlxcdFxcdCAgV2hlbiBlbmFibGVkLCB0aGUgc2NoZWR1bGVyIHdpbGwgYXR0ZW1wdCB0byBhZ2dyZWdhdGUgdGFza3MgZnJvbVxcbjEwNDA6XFx0XFx0ICB0aGUgc2FtZSBwcm9jZXNzIG9udG8gYSBzaW5nbGUgTGFzdCBMZXZlbCBDYWNoZSAoTExDKSBkb21haW4gd2hlblxcbjEwNDE6XFx0XFx0ICBwb3NzaWJsZS4gVGhpcyBpbXByb3ZlcyBjYWNoZSBsb2NhbGl0eSBieSBrZWVwaW5nIHRhc2tzIHRoYXQgc2hhcmVcXG4xMDQyOlxcdFxcdCAgcmVzb3VyY2VzIHdpdGhpbiB0aGUgc2FtZSBjYWNoZSBkb21haW4sIHJlZHVjaW5nIGNhY2hlIG1pc3NlcyBhbmRcXG4xMDQzOlxcdFxcdCAgbG93ZXJpbmcgZGF0YSBhY2Nlc3MgbGF0ZW5jeS5cXG4xMDQ0OlxcdFxcbjEwNDU6XFx0Y29uZmlnIE5VTUFfQkFMQU5DSU5HX0RFRkFVTFRfRU5BQkxFRFxcbjEwNDY6XFx0XFx0Ym9vbCBcXFwiQXV0b21hdGljYWxseSBlbmFibGUgTlVNQSBhd2FyZSBtZW1vcnkvdGFzayBwbGFjZW1lbnRcXFwiXFxuMTA0NzpcXHRcXHRkZWZhdWx0IHlcXG4xMDQ4OlxcdFxcdGRlcGVuZHMgb24gTlVNQV9CQUxBTkNJTkdcXG4xMDQ5OlxcdFxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTAuMDI5OTE2MjM2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQxNDY2OTU5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGtlZXBpbmcgaW4gbWluZCBJJ20gc3BlYWtpbmcgdG8gYSBmZWxsb3cgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQV9NSUdSQVRJT04gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSB0b28gZGVlcCBpbnRvIHRoZSBwcmltYXJ5IGlzc3VlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgc29tZXRoaW5nIGZ1bmRhbWVudGFsLiBNeSBpbml0aWFsIGZvY3VzIGlzIG9uIFgsIFksIGFuZCBaLCBidXQgaXQncyBjcnVjaWFsIHRvIGJlIHRob3JvdWdoLiBUaGUgYE5VTUFfTUlHUkFUSU9OYCBmdW5jdGlvbmFsaXR5IGNhbiBpbnRyb2R1Y2Ugc29tZSBzdWJ0bGUsIHlldCBpbXBhY3RmdWwsIGRlcGVuZGVuY2llcyB0aGF0IGFyZSBlYXNpbHkgb3Zlcmxvb2tlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBrbm93IHRoYXQgb3Zlcmxvb2tpbmcgdGhlc2UgZGV0YWlscyBjYW4gbGVhZCB0byBzb21lIHJlYWxseSBmcnVzdHJhdGluZyBkZWJ1Z2dpbmcgc2Vzc2lvbnMgZG93biB0aGUgbGluZS4gSSBuZWVkIHRvIHRha2UgYSBtb21lbnQgYW5kIHJlZnJlc2ggbXlzZWxmIG9uIHRoZSBwb3RlbnRpYWwgZm9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zIG9yIGJlaGF2aW9ycyB0aGF0IG1pZ2h0IGFyaXNlIGlmIGBOVU1BX01JR1JBVElPTmAgaXNuJ3QgaGFuZGxlZCBjb3JyZWN0bHkgYWNyb3NzIHRoZSBib2FyZCwgZXZlbiBpZiBpdCBzZWVtcyBwZXJpcGhlcmFsbHkgcmVsYXRlZC4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBhbnkgb2YgdGhvc2UgZGVwZW5kZW5jaWVzIGFyZSBpbiBwbGF5IGhlcmUuIEl0J3MgYmVzdCB0byBiZSBhcyBjb21wcmVoZW5zaXZlIGFzIHBvc3NpYmxlIGF0IHRoaXMgc3RhZ2UuIEJldHRlciB0byBjaGVjayBub3cgYW5kIHNhdmUgc29tZSB0aW1lIGxhdGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk2OSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTIuNDQ0NTg4ODE1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODYwNTQ3NDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5VTUFfTUlHUkFUSU9OXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9NjY1PWNvbmZpZyBQQUdFX1JFUE9SVElOR1xcbi0tXFxubW0vS2NvbmZpZy02NzItXFxubW0vS2NvbmZpZzo2NzM6Y29uZmlnIE5VTUFfTUlHUkFUSU9OXFxubW0vS2NvbmZpZy02NzQtXFx0Ym9vbCBcXFwiTlVNQSBwYWdlIG1pZ3JhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MTQuNDMwNjQ4NjhaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTYyMjI1MTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGl2aW5nIGludG8gdGhlIEtlcm5lbCBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgNjczLiBNeSBtZW50YWwgbW9kZWwgaXMgYWxyZWFkeSBwcmltZWQgZm9yIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIEknbSBleHBlY3RpbmcgdG8gZmluZCBhIGNvbmRpdGlvbmFsIGRlZmluaXRpb24gb3IgcGVyaGFwcyBhIGRlcGVuZGVuY3kgcmVsYXRlZCB0byBhIHNwZWNpZmljIG1lbW9yeSBmZWF0dXJlIG9yIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMaW5lIDY3Mz8gVGhhdCBudW1iZXIgaXMgZmFtaWxpYXI7IGl0J3MgbGlrZWx5IGRlYWxpbmcgd2l0aCBhIGdyYW51bGFyIHNldHRpbmcsIHBlcmhhcHMgcmVsYXRlZCB0byBOVU1BLCBtZW1vcnkgaG90cGx1Zywgb3IgYSBzcGVjaWZpYyBhbGxvY2F0b3IuIEknbSBmb2N1c2luZyBpbiBiZWNhdXNlIEkgc3VzcGVjdCBhIHN1YnRsZXR5IHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBwaHlzaWNhbCBtZW1vcnkgcmVnaW9ucyBvciBtYW5hZ2VzIHRoZWlyIGFsbG9jYXRpb24uIEknbSBnb2luZyB0byBxdWlja2x5IHBhcnNlIHRoYXQgc2VjdGlvbiwgbG9va2luZyBmb3IgdGhlIHVzdWFsIHN1c3BlY3RzOiBgY29uZmlnYCBibG9ja3MsIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBib29sZWFuIGRlZmluaXRpb25zLCBvciBtYXliZSBldmVuIGFuIGBpZmAgc3RhdGVtZW50IHRoYXQgcmV2ZWFscyB0aGUgdW5kZXJseWluZyBsb2dpYy4gQmFzZWQgb24gbXkgcGFzdCBleHBlcmllbmNlLCBJ4oCZbSBhbnRpY2lwYXRpbmcgYSBwb3RlbnRpYWwgaW50ZXJhY3Rpb24gcG9pbnQgYmV0d2VlbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSBvciBmZWF0dXJlLiBJJ20gaG9waW5nIHRvIHVuZGVyc3RhbmQgYSBjZXJ0YWluIGRldGFpbCBhYm91dCB0aGUgY29uZmlndXJhdGlvbi4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTI5NSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjE2Ljk5Mjg3NjE5N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE4ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA2NzAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA2NzA6XFx0XFx0ICB0aG9zZSBwYWdlcyB0byBhbm90aGVyIGVudGl0eSwgc3VjaCBhcyBhIGh5cGVydmlzb3IsIHNvIHRoYXQgdGhlXFxuIDY3MTpcXHRcXHQgIG1lbW9yeSBjYW4gYmUgZnJlZWQgd2l0aGluIHRoZSBob3N0IGZvciBvdGhlciB1c2VzLlxcbiA2NzI6XFx0XFxuIDY3MzpcXHRjb25maWcgTlVNQV9NSUdSQVRJT05cXG4gNjc0OlxcdFxcdGJvb2wgXFxcIk5VTUEgcGFnZSBtaWdyYXRpb25cXFwiXFxuIDY3NTpcXHRcXHRkZWZhdWx0IHlcXG4gNjc2OlxcdFxcdGRlcGVuZHMgb24gTlVNQSBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gNjc3OlxcdFxcdHNlbGVjdCBNSUdSQVRJT05cXG4gNjc4OlxcdFxcdGhlbHBcXG4gNjc5OlxcdFxcdCAgU3VwcG9ydCB0aGUgbWlncmF0aW9uIG9mIHBhZ2VzIHRvIG90aGVyIE5VTUEgbm9kZXMsIGF2YWlsYWJsZSB0b1xcbiA2ODA6XFx0XFx0ICB1c2VyIHNwYWNlIHRocm91Z2ggaW50ZXJmYWNlcyBsaWtlIG1pZ3JhdGVfcGFnZXMoKSwgbW92ZV9wYWdlcygpLFxcbiA2ODE6XFx0XFx0ICBhbmQgbWJpbmQoKS4gU2VsZWN0aW5nIHRoaXMgb3B0aW9uIGFsc28gZW5hYmxlcyBzdXBwb3J0IGZvciBwYWdlXFxuIDY4MjpcXHRcXHQgIGRlbW90aW9uIGZvciBtZW1vcnkgdGllcmluZy5cXG4gNjgzOlxcdFxcbiA2ODQ6XFx0Y29uZmlnIE1JR1JBVElPTlxcbiA2ODU6XFx0XFx0Ym9vbFxcbiA2ODY6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4gNjg3OlxcdFxcbiA2ODg6XFx0Y29uZmlnIERFVklDRV9NSUdSQVRJT05cXG4gNjg5OlxcdFxcdGRlZl9ib29sIE1JR1JBVElPTiBcXHUwMDI2XFx1MDAyNiBaT05FX0RFVklDRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjoxNi45OTI5ODEzNDdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjI3NTY5Mjc1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBOVU1BIEJhbGFuY2luZyBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBOVU1BX0JBTEFOQ0lOR2AsIHdoaWNoLCBhcyBleHBlY3RlZCwgcmVsaWVzIG9uIHRoZSBicm9hZGVyIGBOVU1BYCBpbmZyYXN0cnVjdHVyZSwgd2hpY2ggaXRzZWxmIG1lYW5zIGBOVU1BX01JR1JBVElPTmAgaXMgbGlrZWx5IGludm9sdmVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBwaWVjZXMgYXJlIGNyaXRpY2FsIGZvciBmdXp6aW5nIGZvY3VzLiBJJ20gc3RhcnRpbmcgYnkgbG9va2luZyBhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zOiBjbGVhcmx5IGBOVU1BX0JBTEFOQ0lOR2AgaXRzZWxmIGlzIGtleSwgYXMgaXMgdGhlIGVuYWJsaW5nIG9mIGBOVU1BYC5cblxuTm93LCB0aGUgc3ltYm9scyB0aGF0IGhhdmUgYmVlbiBtb2RpZmllZCBvciBpbnRyb2R1Y2VkIGFyZSBpbXBvcnRhbnQuIEkndmUgZ290IGEgbGlzdDogYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIChrZXJuZWwvc2NoZWQvY29yZS5jLCBhbmQgY2FsbGVkIGZyb20gYHByY3RsYCksIGBzY2hlZF9udW1hX2JhbGFuY2luZ19jaGFuZ2VfdGFza2AgKHN0YXRpYyksIGB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50YCAoc3RhdGljIGlubGluZSksIGB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1c2AgKHN0YXRpYyBpbmxpbmUpLCBgcHJvY19waWRfc3RhdHVzYCwgYW5kIGEgYnVuY2ggb2Ygb3RoZXIgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYC5cblxuSSdtIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gcGljayBvdXQgKm5vbi11YmlxdWl0b3VzKiBmdW5jdGlvbnMuIEknbSBhdm9pZGluZyBnZW5lcmljIGZ1bmN0aW9ucyBsaWtlIG1lbW9yeSBhbGxvY2F0b3JzLCBkZWFsbG9jYXRvcnMsIG9yIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzLCBzaW5jZSBsaXN0aW5nIHRob3NlIHdvdWxkIGRpbHV0ZSB0aGUgZm9jdXMuIEkgd2FudCBmZWF0dXJlLXNwZWNpZmljIGxvZ2ljIG9yIGVudHJ5IHBvaW50cy4gU3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gaGVhZGVycyBhcmUgdHJpY2t5LCBzbyBJIG5lZWQgdG8gZmluZCB0aGUgbm9uLXN0YXRpYyBjYWxsZXJzIGluIHRoZSAuYyBmaWxlcy5cblxuTGV0J3Mgc3RhcnQgd2l0aCBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGAuIENoZWNraW5nIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgaXQncyAqbm90KiBzdGF0aWMsIGFuZCBpdCdzIGFuIGBpbnQgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudChib29sIGVuYWJsZWQpYC4gSXQncyBhIGRpcmVjdCBBUEkgZW50cnlwb2ludCEgSXQncyBjYWxsZWQgYnkgYHN5c19wcmN0bGAgd2l0aCBgUFJfU0VUX05VTUFfQkFMQU5DSU5HYC4gVGhhdCdzIGEgZ29vZCBvbmUgdG8gc3RhcnQgd2l0aCwgdmVyeSBzcGVjaWZpYy4gV2hhdCBhYm91dCBgdGFza19udW1hX2ZhdWx0YD8gVGhhdCBsb29rcyBsaWtlIGl0IG1pZ2h0IGJlIGEgZmF1bHQgaGFuZGxlciwgYnV0IGxldCdzIGNoZWNrIGl0J3MgY29tbW9uYWxpdHk7IGl0J3Mgc3BlY2lmaWMgdG8gTlVNQSBoaW50aW5nLlxuXG5gc2NoZWRfc2V0bnVtYWAgaXNuJ3QgdG91Y2hlZCwganVzdCBhIGNvbW1lbnQgdXBkYXRlLiBgdGFza190aWNrX251bWFgIGlzIHN0YXRpYywgc28gSSBjYW4gcHJvYmFibHkgaWdub3JlIHRoYXQsIGFuZCBgcHJvY19waWRfc3RhdHVzYCBjYWxscyBgdGFza19udW1hX2JhbGFuY2luZ19zdGF0dXNgLCBhIG5vbi1zdGF0aWMgZnVuY3Rpb24gZnJvbSBgZnMvcHJvYy9hcnJheS5jYC4gQW5kIG9mIGNvdXJzZSBgcHJjdGxgIGl0c2VsZiBpcyBhIHN5c2NhbGwgZW50cnlwb2ludCwgYnV0IGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCBpcyB0aGUgcHJlY2lzZSBmdW5jdGlvbiBpbXBsZW1lbnRpbmcgdGhpcyBmZWF0dXJlIVxuXG5TbywgdGhlIGtleSBmdW5jdGlvbnMgdGhhdCBzdGFuZCBvdXQgYXJlOlxuLSBgdGFza19udW1hX2JhbGFuY2luZ19zZXRfY3VycmVudGBcbi0gYHByb2NfcGlkX3N0YXR1c2BcblxuSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciBgdGFza19udW1hX2ZhdWx0YCBpcyB1YmlxdWl0b3VzIG9yIHNwZWNpZmljLiBUaGUgc2lnbmF0dXJlIHN1Z2dlc3RzIGl0J3MgcmVsYXRlZCB0byBOVU1BIGhpbnRpbmcgcGFnZSBmYXVsdHMgKCBgZG9fbnVtYV9wYWdlYCBpcyBwcm9iYWJseSBhIGtleSBjYWxsIHBhdGgpLCBtYWtpbmcgaXQgbGVzcyBsaWtlbHkgdG8gYmUgYSBnZW5lcmFsLCBoaWdoLWZyZXF1ZW5jeSBmdW5jdGlvbiwgdGh1cyBhbHNvIHVzZWZ1bC4gSSBzaG91bGQgY2hlY2sgd2hhdCBjYWxscyBpdCwgdGhvdWdoLCBqdXN0IHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODY4LCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MjMuMjY4Njc2Mzg3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY1NjgzNDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInRhc2tfbnVtYV9mYXVsdFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg9MTk9ZW51bSBudW1hX3ZtYXNraXBfcmVhc29uIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0yOS0jaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXFxuaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oOjMwOmV4dGVybiB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLCBpbnQgZmxhZ3MpO1xcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC0zMS1leHRlcm4gcGlkX3QgdGFza19udW1hX2dyb3VwX2lkKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg9NTU9Ym9vbCBzaG91bGRfbnVtYV9taWdyYXRlX21lbW9yeShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmgtNTctI2Vsc2VcXG5pbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmg6NTg6c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9mYXVsdChpbnQgbGFzdF9ub2RlLCBpbnQgbm9kZSwgaW50IHBhZ2VzLFxcbmluY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaC01OS1cXHRcXHRcXHRcXHQgICBpbnQgZmxhZ3MpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jPTM5NjM9dm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXFxuLS1cXG5rZXJuZWwvc2NoZWQvZmFpci5jLTM5OTgtICovXFxua2VybmVsL3NjaGVkL2ZhaXIuYzozOTk5OnZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcXG5rZXJuZWwvc2NoZWQvZmFpci5jLTQwMDAte1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0yMjc4PXZtX2ZhdWx0X3QgZG9faHVnZV9wbWRfbnVtYV9wYWdlKHN0cnVjdCB2bV9mYXVsdCAqdm1mKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0yMzI4LVxcdFxcdG5pZCA9IHRhcmdldF9uaWQ7XFxubW0vaHVnZV9tZW1vcnkuYzoyMzI5OlxcdFxcdHRhc2tfbnVtYV9mYXVsdChsYXN0X2NwdXBpZCwgbmlkLCBIUEFHRV9QTURfTlIsIGZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzMzAtXFx0XFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTIzNDktXFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxubW0vaHVnZV9tZW1vcnkuYzoyMzUwOlxcdFxcdHRhc2tfbnVtYV9mYXVsdChsYXN0X2NwdXBpZCwgbmlkLCBIUEFHRV9QTURfTlIsIGZsYWdzKTtcXG5tbS9odWdlX21lbW9yeS5jLTIzNTEtXFx0cmV0dXJuIDA7XFxuLS1cXG5tbS9tZW1vcnkuYz02Mjg4PXN0YXRpYyB2bV9mYXVsdF90IGRvX251bWFfcGFnZShzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTYzNDctXFx0XFx0ZmxhZ3MgfD0gVE5GX01JR1JBVEVEO1xcbm1tL21lbW9yeS5jOjYzNDg6XFx0XFx0dGFza19udW1hX2ZhdWx0KGxhc3RfY3B1cGlkLCBuaWQsIG5yX3BhZ2VzLCBmbGFncyk7XFxubW0vbWVtb3J5LmMtNjM0OS1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbm1tL21lbW9yeS5jLTYzNzQtXFx0aWYgKG5pZCAhPSBOVU1BX05PX05PREUpXFxubW0vbWVtb3J5LmM6NjM3NTpcXHRcXHR0YXNrX251bWFfZmF1bHQobGFzdF9jcHVwaWQsIG5pZCwgbnJfcGFnZXMsIGZsYWdzKTtcXG5tbS9tZW1vcnkuYy02Mzc2LVxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjoyNS4yMzQzNjc3NTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTA5MzkwMTM2NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBOVU1BIEJhbGFuY2luZyBTeW1ib2xzIGFuZCBDb25maWd1cmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IHN5bWJvbHMgcmVsYXRlZCB0byB0aGlzIE5VTUEgYmFsYW5jaW5nIGZ1bmN0aW9uYWxpdHkuIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gbmV3IHN5bWJvbCBpbnRyb2R1Y2VkIGlzIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YC4gSSBzaG91bGQgYWxzbyBrZWVwIGFuIGV5ZSBvbiBgcHJvY19waWRfc3RhdHVzYCBpbiBgZnMvcHJvYy9hcnJheS5jYCBhbmQgYHRhc2tfbnVtYV9mYXVsdGAgaW4gYGtlcm5lbC9zY2hlZC9mYWlyLmNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gQ2xlYXJseSwgYE5VTUFgIGlzIGEgcHJlcmVxdWlzaXRlLCBhbmQgYE5VTUFfQkFMQU5DSU5HYCBpdHNlbGYgaXMgdGhlIGNydWNpYWwgZW5hYmxpbmcgY29uZmlndXJhdGlvbi4gTGV0J3MgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcuIEEgcXVpY2sgc2NhbiBvZiB0aGUgY29kZSByZXZlYWxzIHRoYXQgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgIGd1YXJkcyB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgc3RydWN0dXJlcyBhY3Jvc3MgdmFyaW91cyBmaWxlczogYGZzL3Byb2MvYXJyYXkuY2AsIGBpbmNsdWRlL2xpbnV4L3NjaGVkL251bWFfYmFsYW5jaW5nLmhgLCBgaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaGAsIGBrZXJuZWwvc2NoZWQvY29yZS5jYCwgYGluaXQvaW5pdF90YXNrLmNgLCBhbmQgYGtlcm5lbC9mb3JrLmNgLiBTbyBpdCdzIGNvbmZpcm1lZCwgZW5hYmxpbmcgYE5VTUFfQkFMQU5DSU5HYCBhbmQgYnkgYXNzb2NpYXRpb24sIGBOVU1BYCBpcyB0aGUgcmlnaHQgcGF0aCB0byB0YWtlLlxuXG5Ob3csIGxldCdzIGNvbmZpcm0gd2hldGhlciB0aGlzIGlzIGEgd29ydGh3aGlsZSBmdXp6aW5nIHRhcmdldC4gWWVzLCBhYnNvbHV0ZWx5LiBUaGlzIGlzIGRlZmluaXRlbHkgV29ydGhGdXp6aW5nOiB0aGUgY29yZSBzY2hlZHVsZXIgaXMgaW52b2x2ZWQsIGFuZCB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgcHJjdGxgLCBpbmNsdWRpbmcgbmV3IG9wZXJhdGlvbnMgKGBQUl9TRVRfTlVNQV9CQUxBTkNJTkdgLCBgUFJfR0VUX05VTUFfQkFMQU5DSU5HYCkuIFBsdXMsIHRoZXJlJ3MgaW50cmljYXRlIHRocmVhZCBncm91cCBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcgbG9naWMgdXNpbmcgYHRhc2tfcnFfbG9ja2AsIGBzY2hlZF9jaGFuZ2VgLCBgdGFza2xpc3RfbG9ja2AsIGFuZCBgZm9yX290aGVyX3RocmVhZHNgLiBUaGVyZSBhcmUgc2lnbmlmaWNhbnQgY2hhbmdlcyB0byB0YXNrIGVucXVldWUvZGVxdWV1ZSBhY2NvdW50aW5nLCBoYW5kbGluZyBvZiBOVU1BIGhpbnRpbmcgZmF1bHRzLCBzY2FubmluZywgYW5kIG1pZ3JhdGlvbiBkZWNpc2lvbnMuIFRoaXMgaXMgcmljaCB0ZXJyaXRvcnkgZm9yIHBvdGVudGlhbCBmdXp6aW5nLlxuXG5GaW5hbGx5LCBJIG5lZWQgdG8gc2FuaXR5LWNoZWNrIG15IEZvY3VzU3ltYm9scy4gSSdtIGZvY3VzaW5nIG9uIGB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50YCwgYHRhc2tfbnVtYV9mYXVsdGAsIGFuZCBgcHJvY19waWRfc3RhdHVzYC4gSSdsbCBuZWVkIHRvIGJlIG1pbmRmdWwgb2YgcG90ZW50aWFsbHkgdWJpcXVpdG91cyBmdW5jdGlvbnMgbGlrZSBgY29weV9wcm9jZXNzYCBhbmQgYHByY3RsYCwgYnV0IGluIHRoaXMgY2FzZSwgYHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRgIGlzIHRoZSBtb3JlIHNwZWNpZmljIHRhcmdldCwgYWx0aG91Z2ggYHByY3RsYCBkb2VzIHdhcnJhbnQgYXR0ZW50aW9uLlxuXG5BbHJpZ2h0LCB0aW1lIHRvIHByZXBhcmUgdGhlIGNhbGwgdG8gYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyNzMsIk91dHB1dFRva2VucyI6MTUxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjMwLjMyODI3Mjk0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0MTU1MTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BX0JBTEFOQ0lOR1wiLFxuICAgIFwiTlVNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnRcIixcbiAgICBcInRhc2tfbnVtYV9mYXVsdFwiLFxuICAgIFwicHJvY19waWRfc3RhdHVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBwZXItcHJvY2VzcyBjb250cm9scyBmb3IgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIHZpYSBwcmN0bCAoUFJfU0VUX05VTUFfQkFMQU5DSU5HIGFuZCBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpLCAvcHJvYy9QSUQvc3RhdHVzIGV4cG9zdXJlLCBhbmQgc2NoZWR1bGVyIGZhaXIvY29yZSB1cGRhdGVzIGluY2x1ZGluZyB0YXNrIHJ1bnF1ZXVlIGFjY291bnRpbmcgYW5kIHRocmVhZC1ncm91cCBzeW5jaHJvbml6YXRpb24uIFRoZXNlIGNoYW5nZXMgdG91Y2ggcmVhY2hhYmxlIGNvcmUgc2NoZWR1bGVyIGFuZCBwcm9jZXNzIG1hbmFnZW1lbnQgcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzAuNDIyNDM3OTE2WiIsIlNlcSI6MTUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTY0NzUxNDE1OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjMwLjQyMzMwMjI2NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE5NjQ2NjQ1MTI5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cXG5cXG5FdmFsdWF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIChLTVNBTiB2cyBLQVNBTik6XFxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcXG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXFxuICAgLSBUaGUgL3Byb2MvUElEL3N0YXR1cyBlbnRyeSBmb3JtYXRzIHN0YXRpYyBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbHMgKFxcXCJlbmFibGVkXFxcIiwgXFxcImRpc2FibGVkXFxcIiwgXFxcInVuc3VwcG9ydGVkXFxcIikgaW50byB0aGUgc2VxX2ZpbGUuXFxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XFxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxcbiAgIC0gYHN0cnVjdCBzaWduYWxfc3RydWN0YCBhbGxvY2F0aW9ucyBpbiBgZm9yay5jYCB1c2UgYGttZW1fY2FjaGVfemFsbG9jKClgLlxcbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XFxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg2ZDBlYTdhM2IzMzE1Yzc1MjY2ZjRkMDZiMmYyY2QxOGJhODgyMmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE0OjI1OjU4IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9zeXNjdGwva2VybmVsLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvc3lzY3RsL2tlcm5lbC5yc3RcbmluZGV4IGI2MzI4Y2QwZjQzZTkuLjdmNjY1YzI4ODI4YTggMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL3N5c2N0bC9rZXJuZWwucnN0XG5AQCAtNzU0LDYgKzc1NCwyMiBAQCBkaWZmZXJlbnQgdHlwZXMgb2YgbWVtb3J5IChyZXByZXNlbnRlZCBhcyBkaWZmZXJlbnQgTlVNQSBub2RlcykgdG9cbiBwbGFjZSB0aGUgaG90IHBhZ2VzIGluIHRoZSBmYXN0IG1lbW9yeS4gIFRoaXMgaXMgaW1wbGVtZW50ZWQgYmFzZWQgb25cbiB1bm1hcHBpbmcgYW5kIHBhZ2UgZmF1bHQgdG9vLlxuIFxuK1RoZSBgYFBSX1NFVF9OVU1BX0JBTEFOQ0lOR2BgIGFuZCBgYFBSX0dFVF9OVU1BX0JBTEFOQ0lOR2BgIHByY3RsKDIpXG4rb3BlcmF0aW9ucyBjYW4gYmUgdXNlZCBieSBhIHByb2Nlc3MgdG8gb3B0IG91dCBvZiBhdXRvbWF0aWMgTlVNQSBiYWxhbmNpbmdcbitvciByZS1lbmFibGUgcGFydGljaXBhdGlvbiBmb3IgdGhlIHdob2xlIHRocmVhZCBncm91cC4gIEFueSB0aHJlYWQgaW4gdGhlXG4rdGhyZWFkIGdyb3VwIG1heSBjaGFuZ2UgdGhlIHByb2Nlc3Mgc2V0dGluZy4gIFRoZSBzZXR0aW5nIGlzIGluaGVyaXRlZCBieVxuK2ZvcmsoMiksIGlzIHNoYXJlZCBieSB0aHJlYWRzIGNyZWF0ZWQgd2l0aCBjbG9uZSgyKSBgYENMT05FX1RIUkVBRGBgIGFuZCBpc1xuK3ByZXNlcnZlZCBhY3Jvc3MgZXhlY3ZlKDIpLiAgVGhlIGdsb2JhbCBgYG51bWFfYmFsYW5jaW5nYGAgc3lzY3RsIHJlbWFpbnNcbit0aGUgdG9wLWxldmVsIGNvbnRyb2w6IGEgcHJvY2Vzcy1sZXZlbCBlbmFibGUgZG9lcyBub3QgdHVybiBhdXRvbWF0aWMgTlVNQVxuK2JhbGFuY2luZyBvbiB3aGVuIGl0IGlzIGRpc2FibGVkIHN5c3RlbS13aWRlLiAgTWVtb3J5IHBvbGljeSBzdGlsbCBhcHBsaWVzLFxuK3NvIHRoZSBwcm9jZXNzIHNldHRpbmcgZG9lcyBub3QgbWFrZSBWTUFzIHBhcnRpY2lwYXRlIHdoZW4gdGhlaXIgcG9saWN5XG4rcHJldmVudHMgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nLlxuK1xuK0Rpc2FibGluZyB0aGUgcHJvY2VzcyBzZXR0aW5nIHN0b3BzIHNjaGVkdWxpbmcgbmV3IHBlcmlvZGljIE5VTUEgc2NhbnMgZm9yXG4rdGhhdCBwcm9jZXNzLiBFeGlzdGluZyBOVU1BIGhpbnRpbmcgUFRFcyBhbmQgYWxyZWFkeSBxdWV1ZWQgd29yayBhcmUgbm90XG4rYWN0aXZlbHkgY2xlYXJlZCBhbmQgbWF5IHN0aWxsIGRyYWluIG5hdHVyYWxseSBhcyB0aGUgZGlzYWJsZWQgc3RhdGUgdGFrZXNcbitlZmZlY3QuXG4rXG4gbnVtYV9iYWxhbmNpbmdfcHJvbW90ZV9yYXRlX2xpbWl0X01CcHNcbiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3QgYi9Eb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL3Byb2MucnN0XG5pbmRleCBjMTAyYjYyMDIzY2RjLi5hNGU5MDM3YTMxNjEyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9maWxlc3lzdGVtcy9wcm9jLnJzdFxuQEAgLTE4OCw2ICsxODgsNyBAQCByZWFkIHRoZSBmaWxlIC9wcm9jL1BJRC9zdGF0dXM6OlxuICAgSHVnZXRsYlBhZ2VzOiAgICAgICAgICAwIGtCXG4gICBDb3JlRHVtcGluZzogICAgMFxuICAgVEhQX2VuYWJsZWQ6XHQgIDFcbisgIE51bWFCX21vZGU6ICAgICBlbmFibGVkXG4gICBUaHJlYWRzOiAgICAgICAgMVxuICAgU2lnUTogICAwLzI4NTc4XG4gICBTaWdQbmQ6IDAwMDAwMDAwMDAwMDAwMDBcbkBAIC0yNzQsNiArMjc1LDExIEBAIEl0J3Mgc2xvdyBidXQgdmVyeSBwcmVjaXNlLlxuICBUSFBfZW5hYmxlZCAgICAgICAgICAgICAgICAgcHJvY2VzcyBpcyBhbGxvd2VkIHRvIHVzZSBUSFAgKHJldHVybnMgMCB3aGVuXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQUl9TRVRfVEhQX0RJU0FCTEUgaXMgc2V0IG9uIHRoZSBwcm9jZXNzIHRvIGRpc2FibGVcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRIUCBjb21wbGV0ZWx5LCBub3QganVzdCBwYXJ0aWFsbHkpXG4rIE51bWFCX21vZGUgICAgICAgICAgICAgICAgICBwcm9jZXNzIGF1dG9tYXRpYyBOVU1BIGJhbGFuY2luZyBtb2RlOlxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5hYmxlZCBvciBkaXNhYmxlZCB3aGVuIHN1cHBvcnRlZCwgb3RoZXJ3aXNlXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZDsgdGhlIGVmZmVjdGl2ZSBiZWhhdmlvciBhbHNvIGRlcGVuZHNcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uIHRoZSBnbG9iYWwgbnVtYV9iYWxhbmNpbmcgc3lzY3RsIGFuZCBtZW1vcnlcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvbGljeVxuICBUaHJlYWRzICAgICAgICAgICAgICAgICAgICAgbnVtYmVyIG9mIHRocmVhZHNcbiAgU2lnUSAgICAgICAgICAgICAgICAgICAgICAgIG51bWJlciBvZiBzaWduYWxzIHF1ZXVlZC9tYXguIG51bWJlciBmb3IgcXVldWVcbiAgU2lnUG5kICAgICAgICAgICAgICAgICAgICAgIGJpdG1hcCBvZiBwZW5kaW5nIHNpZ25hbHMgZm9yIHRoZSB0aHJlYWRcbmRpZmYgLS1naXQgYS9mcy9wcm9jL2FycmF5LmMgYi9mcy9wcm9jL2FycmF5LmNcbmluZGV4IGY2Zjc1ZDIwNjc2MmEuLmEyN2E2YTU3ZThiMjIgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL2FycmF5LmNcbisrKyBiL2ZzL3Byb2MvYXJyYXkuY1xuQEAgLTQyNSw2ICs0MjUsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdGhwX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIFx0c2VxX3ByaW50ZihtLCBcIlRIUF9lbmFibGVkOlxcdCVkXFxuXCIsIHRocF9lbmFibGVkKTtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK3N0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4rXHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzaylcbit7XG4rXHRzZXFfcHJpbnRmKG0sIFwiTnVtYUJfbW9kZTpcXHQlc1xcblwiLFxuK1x0XHQgICB0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZSh0YXNrKSk7XG4rfVxuKyNlbHNlXG4rc3RhdGljIGlubGluZSB2b2lkIHRhc2tfbnVtYV9iYWxhbmNpbmdfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrKVxuK3tcbitcdHNlcV9wdXRzKG0sIFwiTnVtYUJfbW9kZTpcXHR1bnN1cHBvcnRlZFxcblwiKTtcbit9XG4rI2VuZGlmXG4rXG4gc3RhdGljIGlubGluZSB2b2lkIHRhc2tfdW50YWdfbWFzayhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuIHtcbiBcdHNlcV9wcmludGYobSwgXCJ1bnRhZ19tYXNrOlxcdCUjbHhcXG5cIiwgbW1fdW50YWdfbWFzayhtbSkpO1xuQEAgLTQ1Myw2ICs0NjgsNyBAQCBpbnQgcHJvY19waWRfc3RhdHVzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IHBpZF9uYW1lc3BhY2UgKm5zLFxuIFx0XHR0YXNrX3VudGFnX21hc2sobSwgbW0pO1xuIFx0XHRtbXB1dChtbSk7XG4gXHR9XG4rXHR0YXNrX251bWFfYmFsYW5jaW5nX3N0YXR1cyhtLCB0YXNrKTtcbiBcdHRhc2tfc2lnKG0sIHRhc2spO1xuIFx0dGFza19jYXAobSwgdGFzayk7XG4gXHR0YXNrX3NlY2NvbXAobSwgdGFzayk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oXG5pbmRleCA4YjNkNDdhMzI1Y2NhLi43ZjE5MzI2NThkMjRjIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zY2hlZC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmhcbkBAIC0xMzgyLDYgKzEzODIsMTIgQEAgc3RydWN0IHRhc2tfc3RydWN0IHtcbiBcdHNob3J0XHRcdFx0XHRwcmVmX25vZGVfZm9yaztcbiAjZW5kaWZcbiAjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHQvKlxuK1x0ICogU2NoZWR1bGVyIHNuYXBzaG90IG9mIHNpZ25hbF9zdHJ1Y3Q6Om51bWFfYmFsYW5jaW5nX2VuYWJsZWQuIEl0IGlzXG4rXHQgKiB1cGRhdGVkIHdpdGggc2NoZWRfY2hhbmdlIGZvciBydW5xdWV1ZSBOVU1BIGFjY291bnRpbmc7IHRoZVxuK1x0ICogdXNlci12aXNpYmxlIHByb2Nlc3MgbW9kZSBsaXZlcyBpbiBzaWduYWxfc3RydWN0LlxuK1x0ICovXG4rXHRib29sXHRcdFx0XHRudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xuIFx0aW50XHRcdFx0XHRudW1hX3NjYW5fc2VxO1xuIFx0dW5zaWduZWQgaW50XHRcdFx0bnVtYV9zY2FuX3BlcmlvZDtcbiBcdHVuc2lnbmVkIGludFx0XHRcdG51bWFfc2Nhbl9wZXJpb2RfbWF4O1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaCBiL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuaW5kZXggNTJiMjJjNWMzOTZkYi4uNjllNzkzNTlmYTIyZSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFxuKysrIGIvaW5jbHVkZS9saW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXG5AQCAtOCw2ICs4LDcgQEBcbiAgKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiBcbiAjZGVmaW5lIFRORl9NSUdSQVRFRFx0MHgwMVxuICNkZWZpbmUgVE5GX05PX0dST1VQXHQweDAyXG5AQCAtMzAsNiArMzEsMjcgQEAgZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X25vZGUsIGludCBub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncyk7XG4gZXh0ZXJuIHBpZF90IHRhc2tfbnVtYV9ncm91cF9pZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApO1xuIGV4dGVybiB2b2lkIHNldF9udW1hYmFsYW5jaW5nX3N0YXRlKGJvb2wgZW5hYmxlZCk7XG4gZXh0ZXJuIHZvaWQgdGFza19udW1hX2ZyZWUoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBib29sIGZpbmFsKTtcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBSRUFEX09OQ0UocC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkKTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIFJFQURfT05DRShwLVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkKTtcbit9XG4rXG4raW50IHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoYm9vbCBlbmFibGVkKTtcbitcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KHZvaWQpXG4re1xuK1x0cmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChjdXJyZW50KTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBjb25zdCBjaGFyICp0YXNrX251bWFfYmFsYW5jaW5nX21vZGVfbmFtZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChwKSA/IFwiZW5hYmxlZFwiIDogXCJkaXNhYmxlZFwiO1xuK31cbiBib29sIHNob3VsZF9udW1hX21pZ3JhdGVfbWVtb3J5KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0XHRcdGludCBzcmNfbmlkLCBpbnQgZHN0X2NwdSk7XG4gI2Vsc2VcbkBAIC00Nyw2ICs2OSwyNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2V0X251bWFiYWxhbmNpbmdfc3RhdGUoYm9vbCBlbmFibGVkKVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrX251bWFfZnJlZShzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGJvb2wgZmluYWwpXG4ge1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4rXG4rc3RhdGljIGlubGluZSBib29sIHRhc2tfbnVtYV9wcm9jZXNzX21vZGVfZW5hYmxlZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZClcbit7XG4rXHRyZXR1cm4gLUVJTlZBTDtcbit9XG4rXG4rc3RhdGljIGlubGluZSBpbnQgdGFza19udW1hX2JhbGFuY2luZ19nZXRfY3VycmVudCh2b2lkKVxuK3tcbitcdHJldHVybiAtRUlOVkFMO1xuK31cbiBzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX251bWFfbWlncmF0ZV9tZW1vcnkoc3RydWN0IHRhc2tfc3RydWN0ICpwLFxuIFx0XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbywgaW50IHNyY19uaWQsIGludCBkc3RfY3B1KVxuIHtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3NjaGVkL3NpZ25hbC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC9zaWduYWwuaFxuaW5kZXggNTg0YWU4OGI0MzVlOS4uZmRjMDNjMDE2Y2ZlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc2NoZWQvc2lnbmFsLmhcbkBAIC0xNzksNiArMTc5LDE0IEBAIHN0cnVjdCBzaWduYWxfc3RydWN0IHtcbiBcbiAjaWZkZWYgQ09ORklHX1NDSEVEX0FVVE9HUk9VUFxuIFx0c3RydWN0IGF1dG9ncm91cCAqYXV0b2dyb3VwO1xuKyNlbmRpZlxuKyNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC8qXG4rXHQgKiBUaHJlYWQtZ3JvdXAgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIG1vZGUgY29uZmlndXJlZCB0aHJvdWdoIHByY3RsKCkuXG4rXHQgKiBTY2hlZHVsZXIgaG90IHBhdGhzIHVzZSB0YXNrX3N0cnVjdDo6bnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCBhc1xuK1x0ICogdGhlaXIgcGVyLXRhc2sgcnVucXVldWUgYWNjb3VudGluZyBzbmFwc2hvdC5cbitcdCAqL1xuK1x0Ym9vbCBudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuICNlbmRpZlxuIFx0LypcbiBcdCAqIEN1bXVsYXRpdmUgcmVzb3VyY2UgY291bnRlcnMgZm9yIGRlYWQgdGhyZWFkcyBpbiB0aGUgZ3JvdXAsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L3ByY3RsLmggYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuaW5kZXggYjZlYzZmNjkzNzE5NS4uNWJjMGEyYTJhOTMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9wcmN0bC5oXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvcHJjdGwuaFxuQEAgLTQxNiw0ICs0MTYsMTAgQEAgc3RydWN0IHByY3RsX21tX21hcCB7XG4gIyBkZWZpbmUgUFJfQ0ZJX0RJU0FCTEVcdFx0X0JJVFVMKDEpXG4gIyBkZWZpbmUgUFJfQ0ZJX0xPQ0tcdFx0X0JJVFVMKDIpXG4gXG4rLyogUGVyLXByb2Nlc3MgYXV0b21hdGljIE5VTUEgYmFsYW5jaW5nIGNvbnRyb2wgKi9cbisjZGVmaW5lIFBSX1NFVF9OVU1BX0JBTEFOQ0lOR1x0ODJcbisjZGVmaW5lIFBSX0dFVF9OVU1BX0JBTEFOQ0lOR1x0ODNcbisjIGRlZmluZSBQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFXHQwXG4rIyBkZWZpbmUgUFJfTlVNQV9CQUxBTkNJTkdfRU5BQkxFXHQxXG4rXG4gI2VuZGlmIC8qIF9MSU5VWF9QUkNUTF9IICovXG5kaWZmIC0tZ2l0IGEvaW5pdC9pbml0X3Rhc2suYyBiL2luaXQvaW5pdF90YXNrLmNcbmluZGV4IGFkYjIwN2NkOTg3YzUuLjgzNWJiM2Y3YTE3ZWIgMTAwNjQ0XG4tLS0gYS9pbml0L2luaXRfdGFzay5jXG4rKysgYi9pbml0L2luaXRfdGFzay5jXG5AQCAtNDAsNiArNDAsOSBAQCBzdGF0aWMgc3RydWN0IHNpZ25hbF9zdHJ1Y3QgaW5pdF9zaWduYWxzID0ge1xuIFx0LmNwdXRpbWVyXHRcdD0ge1xuIFx0XHQuY3B1dGltZV9hdG9taWNcdD0gSU5JVF9DUFVUSU1FX0FUT01JQyxcbiBcdH0sXG4rI2VuZGlmXG4rI2lmZGVmIENPTkZJR19OVU1BX0JBTEFOQ0lOR1xuK1x0Lm51bWFfYmFsYW5jaW5nX2VuYWJsZWQgPSB0cnVlLFxuICNlbmRpZlxuIFx0SU5JVF9DUFVfVElNRVJTKGluaXRfc2lnbmFscylcbiBcdC5waWRzID0ge1xuQEAgLTIyNCw2ICsyMjcsNyBAQCBzdHJ1Y3QgdGFza19zdHJ1Y3QgaW5pdF90YXNrIF9fYWxpZ25lZChMMV9DQUNIRV9CWVRFUykgPSB7XG4gXHQudnRpbWUuc3RhdGVcdD0gVlRJTUVfU1lTLFxuICNlbmRpZlxuICNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdcbitcdC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkID0gdHJ1ZSxcbiBcdC5udW1hX3ByZWZlcnJlZF9uaWQgPSBOVU1BX05PX05PREUsXG4gXHQubnVtYV9ncm91cFx0PSBOVUxMLFxuIFx0Lm51bWFfZmF1bHRzXHQ9IE5VTEwsXG5kaWZmIC0tZ2l0IGEva2VybmVsL2ZvcmsuYyBiL2tlcm5lbC9mb3JrLmNcbmluZGV4IDQxNjc1OGM4YTNkNDMuLmFmZjY0ZDc1Yzc3ZmIgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvZm9yay5jXG4rKysgYi9rZXJuZWwvZm9yay5jXG5AQCAtMjQ5Niw2ICsyNDk2LDE0IEBAIF9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXG4gXG4gXHQvKiBObyBtb3JlIGZhaWx1cmUgcGF0aHMgYWZ0ZXIgdGhpcyBwb2ludC4gKi9cbiBcbisjaWZkZWYgQ09ORklHX05VTUFfQkFMQU5DSU5HXG4rXHRwLVx1MDAzZW51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQgPVxuK1x0XHRSRUFEX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCk7XG4rXHRpZiAoIShjbG9uZV9mbGFncyBcdTAwMjYgQ0xPTkVfVEhSRUFEKSlcbitcdFx0cC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCA9XG4rXHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkO1xuKyNlbmRpZlxuK1xuIFx0LypcbiBcdCAqIENvcHkgc2VjY29tcCBkZXRhaWxzIGV4cGxpY2l0bHkgaGVyZSwgaW4gY2FzZSB0aGV5IHdlcmUgY2hhbmdlZFxuIFx0ICogYmVmb3JlIGhvbGRpbmcgc2lnaGFuZCBsb2NrLlxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC9jb3JlLmMgYi9rZXJuZWwvc2NoZWQvY29yZS5jXG5pbmRleCBmNzgyNzUxOTIwMzZiLi5iYThiMjJmM2ZmYTUzIDEwMDY0NFxuLS0tIGEva2VybmVsL3NjaGVkL2NvcmUuY1xuKysrIGIva2VybmVsL3NjaGVkL2NvcmUuY1xuQEAgLTM2LDYgKzM2LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9pc29sYXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2xvYWRhdmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcnNlcV9hcGkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3J0LmhcdTAwM2VcbkBAIC02MDMsNiArNjA0LDggQEAgaW50IHRhc2tfbGxjKGNvbnN0IHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiAgKlx0XHRcdFx0cC1cdTAwM2VzZS5sb2FkLCBwLVx1MDAzZXJ0X3ByaW9yaXR5LFxuICAqXHRcdFx0XHRwLVx1MDAzZWRsLmRsX3tydW50aW1lLCBkZWFkbGluZSwgcGVyaW9kLCBmbGFncywgYncsIGRlbnNpdHl9XG4gICogIC0gc2NoZWRfc2V0bnVtYSgpOlx0XHRwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZFxuKyAqICAtIHRhc2tfbnVtYV9iYWxhbmNpbmdfc2V0X2N1cnJlbnQoKTpcdHAtXHUwMDNlc2lnbmFsLVx1MDAzZW51bWFfYmFsYW5jaW5nX2VuYWJsZWQsXG4rICpcdFx0XHRcdFx0cC1cdTAwM2VudW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkXG4gICogIC0gc2NoZWRfbW92ZV90YXNrKCk6XHRwLVx1MDAzZXNjaGVkX3Rhc2tfZ3JvdXBcbiAgKiAgLSB1Y2xhbXBfdXBkYXRlX2FjdGl2ZSgpXHRwLVx1MDAzZXVjbGFtcCpcbiAgKlxuQEAgLTg0MDcsNiArODQxMCw0MiBAQCB2b2lkIHNjaGVkX3NldG51bWEoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBpbnQgbmlkKVxuIFx0c2NvcGVkX2d1YXJkIChzY2hlZF9jaGFuZ2UsIHAsIERFUVVFVUVfU0FWRSlcbiBcdFx0cC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPSBuaWQ7XG4gfVxuK1xuK3N0YXRpYyB2b2lkIHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgYm9vbCBlbmFibGVkKVxuK3tcbitcdGd1YXJkKHRhc2tfcnFfbG9jaykocCk7XG4rXHRzY29wZWRfZ3VhcmQgKHNjaGVkX2NoYW5nZSwgcCwgREVRVUVVRV9TQVZFKVxuK1x0XHRXUklURV9PTkNFKHAtXHUwMDNlbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCwgZW5hYmxlZCk7XG4rfVxuK1xuK2ludCB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGJvb2wgZW5hYmxlZClcbit7XG4rXHRzdGF0aWMgREVGSU5FX01VVEVYKHRhc2tfbnVtYV9iYWxhbmNpbmdfbXV0ZXgpO1xuK1x0c3RydWN0IHRhc2tfc3RydWN0ICp0O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGJvb2wgb2xkX2VuYWJsZWQ7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2dGFza19udW1hX2JhbGFuY2luZ19tdXRleCk7XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKCFsb2NrX3Rhc2tfc2lnaGFuZChjdXJyZW50LCBcdTAwMjZmbGFncykpKVxuK1x0XHRyZXR1cm4gLUVTUkNIO1xuK1xuK1x0b2xkX2VuYWJsZWQgPSBjdXJyZW50LVx1MDAzZXNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkO1xuK1x0aWYgKG9sZF9lbmFibGVkICE9IGVuYWJsZWQpXG4rXHRcdFdSSVRFX09OQ0UoY3VycmVudC1cdTAwM2VzaWduYWwtXHUwMDNlbnVtYV9iYWxhbmNpbmdfZW5hYmxlZCwgZW5hYmxlZCk7XG4rXG4rXHR1bmxvY2tfdGFza19zaWdoYW5kKGN1cnJlbnQsIFx1MDAyNmZsYWdzKTtcbitcbitcdGlmIChvbGRfZW5hYmxlZCAhPSBlbmFibGVkKSB7XG4rXHRcdHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKGN1cnJlbnQsIGVuYWJsZWQpO1xuK1x0XHRyZWFkX2xvY2soXHUwMDI2dGFza2xpc3RfbG9jayk7XG4rXHRcdGZvcl9vdGhlcl90aHJlYWRzKGN1cnJlbnQsIHQpXG4rXHRcdFx0c2NoZWRfbnVtYV9iYWxhbmNpbmdfY2hhbmdlX3Rhc2sodCwgZW5hYmxlZCk7XG4rXHRcdHJlYWRfdW5sb2NrKFx1MDAyNnRhc2tsaXN0X2xvY2spO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgKi9cbiBcbiAjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVXG5kaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkL2ZhaXIuYyBiL2tlcm5lbC9zY2hlZC9mYWlyLmNcbmluZGV4IDhkZmYzNzA1OWZhZjcuLjdkZmUyNzVhNGJjNDMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvc2NoZWQvZmFpci5jXG4rKysgYi9rZXJuZWwvc2NoZWQvZmFpci5jXG5AQCAtMzgsNiArMzgsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NvbmRfcmVzY2hlZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvY3B1dGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvaXNvbGF0aW9uLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9udW1hX2JhbGFuY2luZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbm9oei5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvcHJpby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RhdGljX2NhbGwuaFx1MDAzZVxuQEAgLTE3MTIsNiArMTcxMyw3IEBAIHN0YXRpYyBpbnQgZ2V0X3ByZWZfbGxjKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCwgc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4gXHRcdCAqIGNvbmZsaWN0IG9ubHkgZXhpc3RzIGZvciBhIHNob3J0IHBlcmlvZCBvZiB0aW1lLlxuIFx0XHQgKi9cbiBcdFx0aWYgKHN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgY3B1X3RvX25vZGUobW1fc2NoZWRfY3B1KSAhPSBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZClcbiBcdFx0XHRtbV9zY2hlZF9sbGMgPSAtMTtcbkBAIC0xODA4LDYgKzE4MTAsOSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jcHVtYXNrcyhjcHVtYXNrX3Zhcl90IGNwdXMsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRnb3RvIG91dDtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4rXHRcdGdvdG8gb3V0O1xuK1xuIFx0Y3B1ID0gUkVBRF9PTkNFKHAtXHUwMDNlbW0tXHUwMDNlc2Nfc3RhdC5jcHUpO1xuIFx0aWYgKGNwdSAhPSAtMSlcbiBcdFx0bmlkID0gY3B1X3RvX25vZGUoY3B1KTtcbkBAIC0yMzg3LDE0ICsyMzkyLDIyIEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgdGFza19zY2FuX21heChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApXG4gXG4gc3RhdGljIHZvaWQgYWNjb3VudF9udW1hX2VucXVldWUoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKVxuIHtcbi1cdHJxLVx1MDAzZW5yX251bWFfcnVubmluZyArPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFKTtcbi1cdHJxLVx1MDAzZW5yX3ByZWZlcnJlZF9ydW5uaW5nICs9IChwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCkpO1xuK1x0Ym9vbCBlbmFibGVkID0gdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCk7XG4rXG4rXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgKz0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCAhPSBOVU1BX05PX05PREU7XG4rXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyArPSBlbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHRcdFx0ICAgICBwLVx1MDAzZW51bWFfcHJlZmVycmVkX25pZCA9PSB0YXNrX25vZGUocCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGFjY291bnRfbnVtYV9kZXF1ZXVlKHN0cnVjdCBycSAqcnEsIHN0cnVjdCB0YXNrX3N0cnVjdCAqcClcbiB7XG4tXHRycS1cdTAwM2Vucl9udW1hX3J1bm5pbmcgLT0gKHAtXHUwMDNlbnVtYV9wcmVmZXJyZWRfbmlkICE9IE5VTUFfTk9fTk9ERSk7XG4tXHRycS1cdTAwM2Vucl9wcmVmZXJyZWRfcnVubmluZyAtPSAocC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApKTtcbitcdGJvb2wgZW5hYmxlZCA9IHRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApO1xuK1xuK1x0cnEtXHUwMDNlbnJfbnVtYV9ydW5uaW5nIC09IGVuYWJsZWQgXHUwMDI2XHUwMDI2XG4rXHRcdFx0XHQgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgIT0gTlVNQV9OT19OT0RFO1xuK1x0cnEtXHUwMDNlbnJfcHJlZmVycmVkX3J1bm5pbmcgLT0gZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0XHRcdCAgICAgcC1cdTAwM2VudW1hX3ByZWZlcnJlZF9uaWQgPT0gdGFza19ub2RlKHApO1xuIH1cbiBcbiAvKiBTaGFyZWQgb3IgcHJpdmF0ZSBmYXVsdHMuICovXG5AQCAtMzA4NSw2ICszMDk4LDkgQEAgc3RhdGljIGJvb2wgdGFza19udW1hX2NvbXBhcmUoc3RydWN0IHRhc2tfbnVtYV9lbnYgKmVudixcbiBcdFx0XHRnb3RvIHVubG9jaztcbiBcdH1cbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQoY3VyKSlcbitcdFx0Z290byB1bmxvY2s7XG4rXG4gXHQvKiBTa2lwIHRoaXMgc3dhcCBjYW5kaWRhdGUgaWYgY2Fubm90IG1vdmUgdG8gdGhlIHNvdXJjZSBjcHUuICovXG4gXHRpZiAoIWNwdW1hc2tfdGVzdF9jcHUoZW52LVx1MDAzZXNyY19jcHUsIGN1ci1cdTAwM2VjcHVzX3B0cikpXG4gXHRcdGdvdG8gdW5sb2NrO1xuQEAgLTM5OTIsNiArNDAwOCw5IEBAIHZvaWQgdGFza19udW1hX2ZhdWx0KGludCBsYXN0X2NwdXBpZCwgaW50IG1lbV9ub2RlLCBpbnQgcGFnZXMsIGludCBmbGFncylcbiBcdGlmICghc3RhdGljX2JyYW5jaF9saWtlbHkoXHUwMDI2c2NoZWRfbnVtYV9iYWxhbmNpbmcpKVxuIFx0XHRyZXR1cm47XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm47XG4rXG4gXHQvKiBmb3IgZXhhbXBsZSwga3NtZCBmYXVsdGluZyBpbiBhIHVzZXIncyBtbSAqL1xuIFx0aWYgKCFwLVx1MDAzZW1tKVxuIFx0XHRyZXR1cm47XG5AQCAtNDQzNiw2ICs0NDU1LDkgQEAgc3RhdGljIHZvaWQgdGFza190aWNrX251bWEoc3RydWN0IHJxICpycSwgc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyKVxuIFx0aWYgKCFjdXJyLVx1MDAzZW1tIHx8IChjdXJyLVx1MDAzZWZsYWdzIFx1MDAyNiAoUEZfRVhJVElORyB8IFBGX0tUSFJFQUQpKSB8fCB3b3JrLVx1MDAzZW5leHQgIT0gd29yaylcbiBcdFx0cmV0dXJuO1xuIFxuK1x0aWYgKCF0YXNrX251bWFfc2NoZWRfc25hcHNob3RfZW5hYmxlZChjdXJyKSlcbitcdFx0cmV0dXJuO1xuK1xuIFx0LypcbiBcdCAqIFVzaW5nIHJ1bnRpbWUgcmF0aGVyIHRoYW4gd2FsbHRpbWUgaGFzIHRoZSBkdWFsIGFkdmFudGFnZSB0aGF0XG4gXHQgKiB3ZSAobW9zdGx5KSBkcml2ZSB0aGUgc2VsZWN0aW9uIGZyb20gYnVzeSB0aHJlYWRzIGFuZCB0aGF0IHRoZVxuQEAgLTQ0NjMsNiArNDQ4NSw5IEBAIHN0YXRpYyB2b2lkIHVwZGF0ZV9zY2FuX3BlcmlvZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIGludCBuZXdfY3B1KVxuIFx0aWYgKCFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZzY2hlZF9udW1hX2JhbGFuY2luZykpXG4gXHRcdHJldHVybjtcbiBcbitcdGlmICghdGFza19udW1hX3NjaGVkX3NuYXBzaG90X2VuYWJsZWQocCkpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmICghcC1cdTAwM2VtbSB8fCAhcC1cdTAwM2VudW1hX2ZhdWx0cyB8fCAocC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfRVhJVElORykpXG4gXHRcdHJldHVybjtcbiBcbkBAIC0xMDQ3NSw2ICsxMDUwMCw5IEBAIHN0YXRpYyBsb25nIG1pZ3JhdGVfZGVncmFkZXNfbG9jYWxpdHkoc3RydWN0IHRhc2tfc3RydWN0ICpwLCBzdHJ1Y3QgbGJfZW52ICplbnYpXG4gXHRpZiAoIXN0YXRpY19icmFuY2hfbGlrZWx5KFx1MDAyNnNjaGVkX251bWFfYmFsYW5jaW5nKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpZiAoIXRhc2tfbnVtYV9zY2hlZF9zbmFwc2hvdF9lbmFibGVkKHApKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdGlmICghcC1cdTAwM2VudW1hX2ZhdWx0cyB8fCAhKGVudi1cdTAwM2VzZC1cdTAwM2VmbGFncyBcdTAwMjYgU0RfTlVNQSkpXG4gXHRcdHJldHVybiAwO1xuIFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9zeXMuYyBiL2tlcm5lbC9zeXMuY1xuaW5kZXggMzViNTM4YmE4NDNjNy4uZmIwMTg0MWMwY2U5MCAxMDA2NDRcbi0tLSBhL2tlcm5lbC9zeXMuY1xuKysrIGIva2VybmVsL3N5cy5jXG5AQCAtNjAsNiArNjAsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3N0YXQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL21tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9jb3JlZHVtcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvbnVtYV9iYWxhbmNpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3Rhc2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL2NwdXRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3JjdXBkYXRlLmhcdTAwM2VcbkBAIC0yOTA3LDYgKzI5MDgsMjMgQEAgU1lTQ0FMTF9ERUZJTkU1KHByY3RsLCBpbnQsIG9wdGlvbiwgdW5zaWduZWQgbG9uZywgYXJnMiwgdW5zaWduZWQgbG9uZywgYXJnMyxcbiBcdFx0aWYgKGFyZzMgXHUwMDI2IFBSX0NGSV9MT0NLIFx1MDAyNlx1MDAyNiAhKGFyZzMgXHUwMDI2IFBSX0NGSV9ESVNBQkxFKSlcbiBcdFx0XHRlcnJvciA9IGFyY2hfcHJjdGxfbG9ja19icmFuY2hfbGFuZGluZ19wYWRfc3RhdGUobWUpO1xuIFx0XHRicmVhaztcbitcdGNhc2UgUFJfU0VUX05VTUFfQkFMQU5DSU5HOlxuK1x0XHRpZiAoYXJnMyB8fCBhcmc0IHx8IGFyZzUpXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdGlmIChhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0RJU0FCTEUgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhcmcyICE9IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX3NldF9jdXJyZW50KGFyZzIgPT1cbitcdFx0XHRcdFx0XHRcdCBQUl9OVU1BX0JBTEFOQ0lOR19FTkFCTEUpO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUFJfR0VUX05VTUFfQkFMQU5DSU5HOlxuK1x0XHRpZiAoYXJnMiB8fCBhcmczIHx8IGFyZzQgfHwgYXJnNSlcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0ZXJyb3IgPSB0YXNrX251bWFfYmFsYW5jaW5nX2dldF9jdXJyZW50KCk7XG4rXHRcdGlmIChlcnJvciBcdTAwM2U9IDApXG4rXHRcdFx0ZXJyb3IgPSBlcnJvciA/IFBSX05VTUFfQkFMQU5DSU5HX0VOQUJMRSA6XG4rXHRcdFx0XHRQUl9OVU1BX0JBTEFOQ0lOR19ESVNBQkxFO1xuK1x0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdHRyYWNlX3Rhc2tfcHJjdGxfdW5rbm93bihvcHRpb24sIGFyZzIsIGFyZzMsIGFyZzQsIGFyZzUpO1xuIFx0XHRlcnJvciA9IC1FSU5WQUw7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjozMC40MjMzMDQ1NjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjEwMjM1MzIyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24gZm9yIE5VTUEgQmFsYW5jaW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBnb2FsIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBhIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSBhbmFseXplIHRoZSBjaGFuZ2VzIHRvIGFzc2VzcyB0aGUgcmlzay5cblxuRmlyc3QsIEkgc2VlIHRoZSBwYXRjaCBpbmNsdWRlcyBkb2N1bWVudGF0aW9uIHVwZGF0ZXMuIFRoYXQncyB1c3VhbGx5IGxvdyByaXNrLCBidXQgSSdsbCBtYWtlIGEgbm90ZSB0byBjaGVjayB0aG9zZSB1cGRhdGVzIGZvciBhbnkgY29kZSBzbmlwcGV0cyBvciBpbmRpcmVjdGx5IHJlbGF0ZWQgY2hhbmdlcy5cblxuTmV4dCwgSSBzZWUgYWRkaXRpb25zIHRvIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHdpdGggYE51bWFCX21vZGVgLiBUaGlzIG1lYW5zIHRoZXJlJ3MgbmV3IGV4cG9zZWQgc3RhdGUuIFRoZSBjb2RlIGZvcm1hdHRpbmcgdGhhdCByZWxpZXMgb24gdXNlci12aXNpYmxlIHN0YXRlIGNvdWxkIGJlIGFuIGFyZWEgZm9yIGZ1enppbmcuXG5cbkknbSBzZWVpbmcgbmV3IGZpZWxkcyBhZGRlZCB0byBgdGFza19zdHJ1Y3RgIGFuZCBgc2lnbmFsX3N0cnVjdGAgdW5kZXIgYCNpZmRlZiBDT05GSUdfTlVNQV9CQUxBTkNJTkdgLiBUaGVzZSBhcmUga2V5LCBhbmQgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGhvdyB0aGVzZSBmaWVsZHMgYXJlICp1c2VkKiBhbmQgKmluaXRpYWxpemVkKi4gVGhlIG5ldyBoZWxwZXIgZnVuY3Rpb25zIGluIGBudW1hX2JhbGFuY2luZy5oYCBhbHNvIGRlbWFuZCBhdHRlbnRpb247IHRoZXkncmUgbGlrZWx5IGFjY2Vzc2luZyBhbmQgbWFuaXB1bGF0aW5nIHRoZXNlIG5ldyBmaWVsZHMsIGFuZCB0aGF0J3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuXG5cblRoZW4sIHRoZXJlIGFyZSB0aGUgYWRkaXRpb25zIHRvIGBwcmN0bC5oYCwgd2hpY2ggZGVmaW5lIHRoZSB1c2VyLXNwYWNlIGludGVyZmFjZS4gVGhpcyBtZWFucyB0aGVyZSdzIGEgbmV3IHN5c3RlbSBjYWxsIGludGVyZmFjZSwgd2hpY2ggaXMgYW4gb2J2aW91cyBhcmVhIHRvIHRlc3QgZm9yIHBvdGVudGlhbCBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJndW1lbnRzIGFyZSB2YWxpZGF0ZWQsIGFuZCBob3cgdGhlc2UgdmFsdWVzIHRyYW5zbGF0ZSB0byBpbnRlcm5hbCBzdGF0ZSBjaGFuZ2VzLlxuXG5UaGUgaW5pdGlhbGl6YXRpb24gb2YgYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgIGFuZCBgbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZGAgaW4gYGluaXRfdGFzay5jYCBpcyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGRlZmF1bHQgc3RhdGUgYW5kIHRoZSBjb250cm9sIGZsb3cuIFRoZSBgZm9yay5jYCBjaGFuZ2VzIGFyZSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcuICBJJ20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgbmV3IGZpZWxkcyBhcmUgY29waWVkIGR1cmluZyBwcm9jZXNzIGNyZWF0aW9uLiBUaGUgYFJFQURfT05DRWAgYW5kIGNvbmRpdGlvbmFsIGFzc2lnbm1lbnQgbG9vayBzYWZlIGVub3VnaCBidXQgbmVlZCBmdXJ0aGVyIGV4YW1pbmF0aW9uLiAgSXQncyBjcml0aWNhbCB0aGF0IHRoZSBuZXcgc3RhdGUgaXMgY29ycmVjdGx5IHByb3BhZ2F0ZWQgZHVyaW5nIGBmb3JrYCBhbmQgdGhyZWFkaW5nLlxuXG5GaW5hbGx5LCB0aGUgYHNjaGVkX251bWFfYmFsYW5jaW5nX2NoYW5nZV90YXNrKClgIGltcGxlbWVudGF0aW9uIGFuZCBhbGwgb2YgdGhlIHVzZXMgd2l0aGluIGBrZXJuZWwvc2NoZWQvZmFpci5jYCBhcmUgaGlnaC1wcmlvcml0eS4gIFRoaXMgcGF0Y2ggaXMgKmZ1bmRhbWVudGFsbHkqIGFsdGVyaW5nIHNjaGVkdWxpbmcgYmVoYXZpb3IsIGFuZCB0aGUgdmFyaW91cyBOVU1BLXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgYGFjY291bnRfbnVtYV9lbnF1ZXVlYCwgYHRhc2tfbnVtYV9mYXVsdGAsIGV0Yy4sIGFyZSB0aGUgY29yZSBvZiB0aGUgbmV3IGxvZ2ljLiBBbnkgZXJyb3JzIGhlcmUgY291bGQgbGVhZCB0byBoYXJkLXRvLWRlYnVnIHNjaGVkdWxpbmcgYW5vbWFsaWVzLiAgVGhlIHN5cy5jIGhhbmRsaW5nIG9mIHRoZSBgcHJjdGxgIGNhbGxzIGNvbmZpcm1zIGEgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHdoaWNoIGlzIGFsd2F5cyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIG5vdyBpcyB1bmRlcnN0YW5kaW5nIGhvdyB0aGUgYHRhc2tfc3RydWN0YCBhbmQgYHNpZ25hbF9zdHJ1Y3RgIGFyZSBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLCBlc3BlY2lhbGx5IGluIHJlbGF0aW9uIHRvIGBmb3JrYC4gSSdtIGdvaW5nIHRvIHVzZSBteSBncmVwcGVyIHRvb2wgdG8gdHJhY2UgaG93IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgaW4gYGZvcmsuY2AgdG8gY2xhcmlmeSB0aGlzIGNyaXRpY2FsIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGVuc3VyZSB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gb3Bwb3J0dW5pdGllcyBpbiB0aG9zZSBhbGxvY2F0aW9uIGFuZCBjb3B5IHBhdGhzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3OTUxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTM4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzYuNTI1NjYwODY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQyMzc4OSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2lnbmFsX3N0cnVjdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjozNi41NzUwOTUyOTdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ2Mzg3ODA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBgY29weV9zaWduYWxgIGluIGBrZXJuZWwvZm9yay5jYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHNpZ25hbHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBgZm9yaygpYCBvcGVyYXRpb24uIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIHRoZSBgY29weV9zaWduYWxgIGZ1bmN0aW9uLCB3aGljaCByZXNpZGVzIGluIGBrZXJuZWwvZm9yay5jYC4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gZGlzc2VjdCBob3cgc2lnbmFsIGRpc3Bvc2l0aW9ucyBhcmUgY29waWVkIG9yLCBtb3JlIGFjY3VyYXRlbHksICpub3QqIGNvcGllZCBmcm9tIHRoZSBwYXJlbnQgcHJvY2VzcyB0byB0aGUgbmV3bHkgY3JlYXRlZCBjaGlsZC4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBzdWJ0bGUgc2hpZnRzIGluIHNpZ25hbCBzZW1hbnRpY3Mgb3ZlciB0aW1lLCBlc3BlY2lhbGx5IHJlbGF0ZWQgdG8gc2lnbmFsIG1hc2tpbmcgYW5kIHRoZSBoYW5kbGluZyBvZiByZWFsLXRpbWUgc2lnbmFscywgc28gSSB3YW50IHRvIGVuc3VyZSBteSBtZW50YWwgbW9kZWwgaXMgYWNjdXJhdGUuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHdoaWNoIHNpZ25hbHMgYXJlIGluaGVyaXRlZCB3aXRoIHRoZWlyIGRlZmF1bHQgYWN0aW9ucyB2ZXJzdXMgdGhvc2UgdGhhdCBtYXkgYmUgcmVzZXQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgYGNsb25lKClgIGZsYWdzIGFuZCBwb3RlbnRpYWwgdGhyZWFkLXNwZWNpZmljIHNpZ25hbCBoYW5kbGluZy4gSSBzdXNwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBpbnRlcmVzdGluZyBpbnRlcnBsYXkgd2l0aCB0aGUgYHNpZ3BlbmRpbmdgIHN0cnVjdHVyZSBhcyB3ZWxsLCBhbmQgSSB3YW50IHRvIHNlZSBpZiBhbnkgb3B0aW1pemF0aW9uIGlzIGRvbmUgdG8gYXZvaWQgY29weWluZyB1bm5lY2Vzc2FyeSBzaWduYWwgZGF0YS4gSSBzaG91bGQgYWxzbyBjaGVjayBpZiBhbnkgc2lnbmFsIGhhbmRsZXIgZHVwbGljYXRpb24gb2NjdXJzIGFuZCB0aGUgb3ZlcmFsbCBlZmZpY2llbmN5IG9mIHRoZSBjb3B5IHByb2Nlc3MuIFRpbWUgdG8gZGlnIGluIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTU4LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6MzkuMDM4OTc3MTY2WiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NjkwOTA4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3B5X3NpZ25hbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvZm9yay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9mb3JrLmM9MTczMD1zdGF0aWMgdm9pZCBwb3NpeF9jcHVfdGltZXJzX2luaXRfZ3JvdXAoc3RydWN0IHNpZ25hbF9zdHJ1Y3QgKnNpZylcXG4tLVxcbmtlcm5lbC9mb3JrLmMtMTczOC1cXG5rZXJuZWwvZm9yay5jOjE3Mzk6c3RhdGljIGludCBjb3B5X3NpZ25hbCh1NjQgY2xvbmVfZmxhZ3MsIHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNrKVxcbmtlcm5lbC9mb3JrLmMtMTc0MC17XFxuLS1cXG5rZXJuZWwvZm9yay5jPTE5Njc9c3RhdGljIHZvaWQgY29weV9vb21fc2NvcmVfYWRqKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuLS1cXG5rZXJuZWwvZm9yay5jLTE5NzktXFx0bW1fZmxhZ3Nfc2V0KE1NRl9NVUxUSVBST0NFU1MsIHRzay1cXHUwMDNlbW0pO1xcbmtlcm5lbC9mb3JrLmM6MTk4MDpcXHQvKiBVcGRhdGUgdGhlIHZhbHVlcyBpbiBjYXNlIHRoZXkgd2VyZSBjaGFuZ2VkIGFmdGVyIGNvcHlfc2lnbmFsICovXFxua2VybmVsL2ZvcmsuYy0xOTgxLVxcdHRzay1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqID0gY3VycmVudC1cXHUwMDNlc2lnbmFsLVxcdTAwM2Vvb21fc2NvcmVfYWRqO1xcbi0tXFxua2VybmVsL2ZvcmsuYz0yMDEyPV9fbGF0ZW50X2VudHJvcHkgc3RydWN0IHRhc2tfc3RydWN0ICpjb3B5X3Byb2Nlc3MoXFxuLS1cXG5rZXJuZWwvZm9yay5jLTIzMDMtXFx0XFx0Z290byBiYWRfZm9ya19jbGVhbnVwX2ZzO1xcbmtlcm5lbC9mb3JrLmM6MjMwNDpcXHRyZXR2YWwgPSBjb3B5X3NpZ25hbChjbG9uZV9mbGFncywgcCk7XFxua2VybmVsL2ZvcmsuYy0yMzA1LVxcdGlmIChyZXR2YWwpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE0OjI2OjM5LjA4NTg5MzAzNVoiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MTExMzYyMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBmaXJzdC1wZXJzb24gc3VtbWFyeSwgdGFpbG9yZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBjb3B5X3NpZ25hbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHNpZ25hbHMgYXJlIGhhbmRsZWQgZHVyaW5nIHRoZSBgZm9ya2AgcHJvY2VzcywgYW5kIHRoYXQgbWVhbnMgZ29pbmcgc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIGNoaWxkIHByb2Nlc3MgaW5oZXJpdHMgb3IgbWFuYWdlcyBzaWduYWxzIGZyb20gdGhlIHBhcmVudC4gVGhlIGBrZXJuZWwvZm9yay5jYCBmaWxlIGlzIHRoZSBwbGFjZSB0byBiZSwgc28gSSdtIG5hdmlnYXRpbmcgdGhlcmUgbm93IGFuZCB0YXJnZXRpbmcgdGhlIGBjb3B5X3NpZ25hbGAgZnVuY3Rpb24uIEknbSBnb2luZyB0byBjYXJlZnVsbHkgZGlzc2VjdCBpdHMgbG9naWMsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gZGF0YSBzdHJ1Y3R1cmVzIGFuZCBob3cgc2lnbmFsIG1hc2tzIG9yIGhhbmRsZXJzIG1pZ2h0IGJlIGNvcGllZCwgY2xlYXJlZCwgb3Igb3RoZXJ3aXNlIG1hbmlwdWxhdGVkLiBJJ20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHdoZXRoZXIgYW55IHNpZ25hbC1zcGVjaWZpYyBpbmZvcm1hdGlvbiBpcyBkdXBsaWNhdGVkLCBpbmhlcml0ZWQsIG9yIGlmIHRoZSBjaGlsZCBzdGFydHMgd2l0aCBhIGZyZXNoIHNsYXRlLiBNeSBleHBlcnQgaW50dWl0aW9uIGlzIHRlbGxpbmcgbWUgdGhhdCB0aGlzIHdpbGwgcHJvdmlkZSBjcnVjaWFsIGluc2lnaHQgaW50byB0aGUgc3luY2hyb25pemF0aW9uIGlzc3VlcyBvZiB0aGUgZm9yayBzeXN0ZW0gY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxODEsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNDoyNjo0My4xOTcyNTg3NTNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC9mb3JrLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTczOSxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTczOTpcXHRzdGF0aWMgaW50IGNvcHlfc2lnbmFsKHU2NCBjbG9uZV9mbGFncywgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spXFxuMTc0MDpcXHR7XFxuMTc0MTpcXHRcXHRzdHJ1Y3Qgc2lnbmFsX3N0cnVjdCAqc2lnO1xcbjE3NDI6XFx0XFxuMTc0MzpcXHRcXHRpZiAoY2xvbmVfZmxhZ3MgXFx1MDAyNiBDTE9ORV9USFJFQUQpXFxuMTc0NDpcXHRcXHRcXHRyZXR1cm4gMDtcXG4xNzQ1OlxcdFxcbjE3NDY6XFx0XFx0c2lnID0ga21lbV9jYWNoZV96YWxsb2Moc2lnbmFsX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuMTc0NzpcXHRcXHR0c2stXFx1MDAzZXNpZ25hbCA9IHNpZztcXG4xNzQ4OlxcdFxcdGlmICghc2lnKVxcbjE3NDk6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTc1MDpcXHRcXG4xNzUxOlxcdFxcdHNpZy1cXHUwMDNlbnJfdGhyZWFkcyA9IDE7XFxuMTc1MjpcXHRcXHRzaWctXFx1MDAzZXF1aWNrX3RocmVhZHMgPSAxO1xcbjE3NTM6XFx0XFx0YXRvbWljX3NldChcXHUwMDI2c2lnLVxcdTAwM2VsaXZlLCAxKTtcXG4xNzU0OlxcdFxcdHJlZmNvdW50X3NldChcXHUwMDI2c2lnLVxcdTAwM2VzaWdjbnQsIDEpO1xcbjE3NTU6XFx0XFxuMTc1NjpcXHRcXHQvKiBsaXN0X2FkZCh0aHJlYWRfbm9kZSwgdGhyZWFkX2hlYWQpIHdpdGhvdXQgSU5JVF9MSVNUX0hFQUQoKSAqL1xcbjE3NTc6XFx0XFx0c2lnLVxcdTAwM2V0aHJlYWRfaGVhZCA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHRzay1cXHUwMDNldGhyZWFkX25vZGUpO1xcbjE3NTg6XFx0XFx0dHNrLVxcdTAwM2V0aHJlYWRfbm9kZSA9IChzdHJ1Y3QgbGlzdF9oZWFkKUxJU1RfSEVBRF9JTklUKHNpZy1cXHUwMDNldGhyZWFkX2hlYWQpO1xcbjE3NTk6XFx0XFxuMTc2MDpcXHRcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZzaWctXFx1MDAzZXdhaXRfY2hsZGV4aXQpO1xcbjE3NjE6XFx0XFx0c2lnLVxcdTAwM2VjdXJyX3RhcmdldCA9IHRzaztcXG4xNzYyOlxcdFxcdGluaXRfc2lncGVuZGluZyhcXHUwMDI2c2lnLVxcdTAwM2VzaGFyZWRfcGVuZGluZyk7XFxuMTc2MzpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNpZy1cXHUwMDNlbXVsdGlwcm9jZXNzKTtcXG4xNzY0OlxcdFxcdHNlcWxvY2tfaW5pdChcXHUwMDI2c2lnLVxcdTAwM2VzdGF0c19sb2NrKTtcXG4xNzY1OlxcdFxcdHByZXZfY3B1dGltZV9pbml0KFxcdTAwMjZzaWctXFx1MDAzZXByZXZfY3B1dGltZSk7XFxuMTc2NjpcXHRcXG4xNzY3OlxcdCNpZmRlZiBDT05GSUdfUE9TSVhfVElNRVJTXFxuMTc2ODpcXHRcXHRJTklUX0hMSVNUX0hFQUQoXFx1MDAyNnNpZy1cXHUwMDNlcG9zaXhfdGltZXJzKTtcXG4xNzY5OlxcdFxcdElOSVRfSExJU1RfSEVBRChcXHUwMDI2c2lnLVxcdTAwM2VpZ25vcmVkX3Bvc2l4X3RpbWVycyk7XFxuMTc3MDpcXHRcXHRocnRpbWVyX3NldHVwKFxcdTAwMjZzaWctXFx1MDAzZXJlYWxfdGltZXIsIGl0X3JlYWxfZm4sIENMT0NLX01PTk9UT05JQywgSFJUSU1FUl9NT0RFX1JFTCk7XFxuMTc3MTpcXHQjZW5kaWZcXG4xNzcyOlxcdFxcbjE3NzM6XFx0XFx0dGFza19sb2NrKGN1cnJlbnQtXFx1MDAzZWdyb3VwX2xlYWRlcik7XFxuMTc3NDpcXHRcXHRtZW1jcHkoc2lnLVxcdTAwM2VybGltLCBjdXJyZW50LVxcdTAwM2VzaWduYWwtXFx1MDAzZXJsaW0sIHNpemVvZiBzaWctXFx1MDAzZXJsaW0pO1xcbjE3NzU6XFx0XFx0dGFza191bmxvY2soY3VycmVudC1cXHUwMDNlZ3JvdXBfbGVhZGVyKTtcXG4xNzc2OlxcdFxcbjE3Nzc6XFx0XFx0cG9zaXhfY3B1X3RpbWVyc19pbml0X2dyb3VwKHNpZyk7XFxuMTc3ODpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6NDMuMTk3NDI0NTAzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY4NzI0OTY0NTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBOVU1BIEJhbGFuY2luZyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBzaWduYWxfc3RydWN0YCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGttZW1fY2FjaGVfemFsbG9jYCwgbWVhbmluZyBpdCdzIHplcm8taW5pdGlhbGl6ZWQuIEV4Y2VsbGVudC4gV2UgYWxzbyBzZWUgdGhpcyBzdHJ1Y3R1cmUgc3RhdGljYWxseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBhbmQgYWdhaW4sIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgZHVyaW5nIHByb2Nlc3MgY3JlYXRpb24gdmlhIGBjb3B5X3Byb2Nlc3NgLlxuXG5Ob3csIHRoZSBtYWluIGNvbmNlcm4gaXMgdW5pbml0aWFsaXplZCBtZW1vcnkuIExldCdzIHNlZS4uLlxuXG5GaXJzdCwgYXJlIHdlIGxlYWtpbmcgYW55dGhpbmcgdG8gdXNlcnNwYWNlPyBUaGUgY29kZSBpbiBxdWVzdGlvbiBpcyBkZWFsaW5nIHdpdGggYG51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBMb29raW5nIGF0IGBQUl9HRVRfTlVNQV9CQUxBTkNJTkdgLCBpdCBzaW1wbHkgcmV0dXJucyBhIHZhbHVlIGRpcmVjdGx5LCBubyBkYXRhIGNvcHlpbmcuIGAvcHJvYy9bcGlkXS9zdGF0dXNgIHByaW50cyBzdHJpbmcgbGl0ZXJhbHMuIE5vIHVzZXItc3BhY2UgbGVha3MuIFRoYXQncyBhIGh1Z2UgcmVsaWVmLlxuXG5OZXh0LCBhcmUgdGhlcmUgYW55IHBvdGVudGlhbCBsb2dpYyBmbGF3cyBkdWUgdG8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IGBpbml0X3Rhc2tgIHNlZW1zIHRvIGluaXRpYWxpemUgYC5udW1hX2JhbGFuY2luZ19zY2hlZF9lbmFibGVkYCAqYW5kKiBgaW5pdF9zaWduYWxzLm51bWFfYmFsYW5jaW5nX2VuYWJsZWRgLiBFdmVyeSBwcm9jZXNzIGZvcmsgKmV4cGxpY2l0bHkqIHNldHMgYm90aCBgbnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZGAgKmFuZCogYHNpZ25hbC1cdTAwM2VudW1hX2JhbGFuY2luZ19lbmFibGVkYC4gYGttZW1fY2FjaGVfemFsbG9jYCBpcyBhbHJlYWR5IHplcm9pbmcgaXQgYW55d2F5LiBFdmVuIHdpdGggbm9uLU5VTUEgY29uZmlncywgc3R1YiBmdW5jdGlvbnMgcHJldmVudCBhbnkgaXNzdWVzLiBObyBsb2dpY2FsIGhvbGVzIGRldGVjdGVkLlxuXG5Ob3csIGRvIHdlIGhhdmUgYW55IGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIG5vdCBoZXJlLlxuXG5GaW5hbGx5LCBhcmUgdGhlcmUgYW55IGJvdW5kcyBjaGVjayBvciBsZW5ndGggaXNzdWVzIHRoYXQgY291bGQgbGVhZCB0byByZWFkaW5nIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby5cblxuU28sIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzPyBaZXJvLiBUaGlzIGlzIGdyZWF0LlxuXG5Ob3csIGNvbmNlcm5pbmcgS0FTQU4gYW5kIGNvbmN1cnJlbmN5IGlzc3Vlcy4uLiBUaGUgY29kZSB1c2VzIGNvbW1vbiBsb2NraW5nIHByaW1pdGl2ZXMgbGlrZSBgdGFza19ycV9sb2NrYCwgYHNjb3BlZF9ndWFyZChzY2hlZF9jaGFuZ2UpYCwgYGxvY2tfdGFza19zaWdoYW5kYCwgYG11dGV4YCwgYW5kIGB0YXNrbGlzdF9sb2NrYC4gQW55IGxvY2tpbmcgYnVncyB3b3VsZCBiZSBjYXVnaHQgYnkgTE9DS0RFUC4gS0FTQU4gaXMgaW4gcGxhY2UgdG8gY2F0Y2ggYW55IHVzZS1hZnRlci1mcmVlIG9yIG91dC1vZi1ib3VuZHMgaXNzdWVzLiBCZWNhdXNlIHRoZXJlIGlzIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2ssIEtNU0FOIGlzIG5vdCBuZWVkZWQgaGVyZS5cblxuSW4gc3VtbWFyeSwgSSBhbSBjb25maWRlbnQgdGhhdCBgTmVlZHNLTVNBTmAgaXMgZmFsc2UsIGFuZCB0aGVyZSBpcyBhIGNsZWFyIGNvbnRyYXN0IHRvIEtBU0FOJ3MgYXBwbGljYWJpbGl0eS5cblxuQWxyaWdodCwgdGhhdCdzIG15IGFzc2Vzc21lbnQuIFRpbWUgdG8gZm9ybXVsYXRlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgY2FsbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExMDgsIk91dHB1dFRva2VucyI6MzQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTQ6MjY6NTAuMDY5OTI1MDE1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk5NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBhIHBlci1wcm9jZXNzIE5VTUEgYmFsYW5jaW5nIHRvZ2dsZSBjb250cm9sbGVkIHZpYSBwcmN0bChQUl9TRVRfTlVNQV9CQUxBTkNJTkcgLyBQUl9HRVRfTlVNQV9CQUxBTkNJTkcpIGFuZCByZXBvcnRlZCB2aWEgL3Byb2MvUElEL3N0YXR1cy5cXG5cXG5FdmFsdWF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIChLTVNBTiB2cyBLQVNBTik6XFxuMS4gS2VybmVsLXRvLXVzZXIgY29waWVzIC8gaW5mby1sZWFrczpcXG4gICAtIFBSX0dFVF9OVU1BX0JBTEFOQ0lORyByZXR1cm5zIGFuIGludGVnZXIgc3RhdHVzIGRpcmVjdGx5IGFzIHRoZSBzeXNjYWxsIHJldHVybiB2YWx1ZTsgbm8gdXNlciBtZW1vcnkgYnVmZmVyIGlzIHdyaXR0ZW4uXFxuICAgLSBUaGUgL3Byb2MvUElEL3N0YXR1cyBlbnRyeSBmb3JtYXRzIHN0YXRpYyBjb25zdGFudCBzdHJpbmcgbGl0ZXJhbHMgKFxcXCJlbmFibGVkXFxcIiwgXFxcImRpc2FibGVkXFxcIiwgXFxcInVuc3VwcG9ydGVkXFxcIikgaW50byB0aGUgc2VxX2ZpbGUuXFxuMi4gVW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgLyBicmFuY2hpbmc6XFxuICAgLSBGaWVsZHMgYWRkZWQgdG8gYHN0cnVjdCB0YXNrX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX3NjaGVkX2VuYWJsZWQpIGFuZCBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIChudW1hX2JhbGFuY2luZ19lbmFibGVkKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBpbiBgaW5pdF90YXNrLmNgLCBgY29weV9wcm9jZXNzKClgLCBhbmQgZmFsbGJhY2sgc3R1YiBmdW5jdGlvbnMgYXJlIHByb3ZpZGVkIHdoZW4gQ09ORklHX05VTUFfQkFMQU5DSU5HIGlzIGRpc2FibGVkLlxcbiAgIC0gYHN0cnVjdCBzaWduYWxfc3RydWN0YCBhbGxvY2F0aW9ucyBpbiBgZm9yay5jYCB1c2UgYGttZW1fY2FjaGVfemFsbG9jKClgLlxcbjMuIE90aGVyIHBvdGVudGlhbCBpc3N1ZXM6XFxuICAgLSBBbnkgY29uY3VycmVuY3ksIGxvY2tpbmcsIG9yIHNjaGVkdWxlciBzdGF0ZSB0cmFuc2l0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgc3ViamVjdCB0byBMT0NLREVQIG9yIHN0YW5kYXJkIGtlcm5lbCBhc3NlcnRpb25zLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGludHJvZHVjZXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgaGF6YXJkcyBvciBpbmZvLWxlYWsgdmVjdG9ycyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgcGVyLXByb2Nlc3MgTlVNQSBiYWxhbmNpbmcgdG9nZ2xlIGNvbnRyb2xsZWQgdmlhIHByY3RsKFBSX1NFVF9OVU1BX0JBTEFOQ0lORyAvIFBSX0dFVF9OVU1BX0JBTEFOQ0lORykgYW5kIHJlcG9ydGVkIHZpYSAvcHJvYy9QSUQvc3RhdHVzLlxcblxcbkV2YWx1YXRpb24gb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgKEtNU0FOIHZzIEtBU0FOKTpcXG4xLiBLZXJuZWwtdG8tdXNlciBjb3BpZXMgLyBpbmZvLWxlYWtzOlxcbiAgIC0gUFJfR0VUX05VTUFfQkFMQU5DSU5HIHJldHVybnMgYW4gaW50ZWdlciBzdGF0dXMgZGlyZWN0bHkgYXMgdGhlIHN5c2NhbGwgcmV0dXJuIHZhbHVlOyBubyB1c2VyIG1lbW9yeSBidWZmZXIgaXMgd3JpdHRlbi5cXG4gICAtIFRoZSAvcHJvYy9QSUQvc3RhdHVzIGVudHJ5IGZvcm1hdHMgc3RhdGljIGNvbnN0YW50IHN0cmluZyBsaXRlcmFscyAoXFxcImVuYWJsZWRcXFwiLCBcXFwiZGlzYWJsZWRcXFwiLCBcXFwidW5zdXBwb3J0ZWRcXFwiKSBpbnRvIHRoZSBzZXFfZmlsZS5cXG4yLiBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyAvIGJyYW5jaGluZzpcXG4gICAtIEZpZWxkcyBhZGRlZCB0byBgc3RydWN0IHRhc2tfc3RydWN0YCAobnVtYV9iYWxhbmNpbmdfc2NoZWRfZW5hYmxlZCkgYW5kIGBzdHJ1Y3Qgc2lnbmFsX3N0cnVjdGAgKG51bWFfYmFsYW5jaW5nX2VuYWJsZWQpIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGluIGBpbml0X3Rhc2suY2AsIGBjb3B5X3Byb2Nlc3MoKWAsIGFuZCBmYWxsYmFjayBzdHViIGZ1bmN0aW9ucyBhcmUgcHJvdmlkZWQgd2hlbiBDT05GSUdfTlVNQV9CQUxBTkNJTkcgaXMgZGlzYWJsZWQuXFxuICAgLSBgc3RydWN0IHNpZ25hbF9zdHJ1Y3RgIGFsbG9jYXRpb25zIGluIGBmb3JrLmNgIHVzZSBga21lbV9jYWNoZV96YWxsb2MoKWAuXFxuMy4gT3RoZXIgcG90ZW50aWFsIGlzc3VlczpcXG4gICAtIEFueSBjb25jdXJyZW5jeSwgbG9ja2luZywgb3Igc2NoZWR1bGVyIHN0YXRlIHRyYW5zaXRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBzdWJqZWN0IHRvIExPQ0tERVAgb3Igc3RhbmRhcmQga2VybmVsIGFzc2VydGlvbnMsIG5vdCBLTVNBTi5cXG5cXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBoYXphcmRzIG9yIGluZm8tbGVhayB2ZWN0b3JzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowr2fmh[1] Phase: Succeeded StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 14:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 14:27:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2] Phase: Succeeded StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 14:27:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 14:27:01 +0000 UTC FinishedAt: 2026-09-08 14:27:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr2fmh/series-workflowr2fmh-convert-artifact-788714982/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 14:27:11 +0000 UTC FinishedAt: 2026-09-08 14:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 14:27:11 +0000 UTC FinishedAt: 2026-09-08 14:50:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*11332afa-a1b8-49ea-a058-347e3747b071,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-workflowr2fmh/series-workflowr2fmh-convert-artifact-788714982/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": "dbb3aa1a-e1d3-40a4-ae85-0d2357f084ba", "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-workflowr2fmh/series-workflowr2fmh-build-action-117667196/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 14:27:11 +0000 UTC FinishedAt: 2026-09-08 14:49:22 +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:*11332afa-a1b8-49ea-a058-347e3747b071,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-workflowr2fmh/series-workflowr2fmh-convert-artifact-788714982/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": "dbb3aa1a-e1d3-40a4-ae85-0d2357f084ba", "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-workflowr2fmh/series-workflowr2fmh-build-action-117667196/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 14:50:08 +0000 UTC FinishedAt: 2026-09-08 14:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 14:50:08 +0000 UTC FinishedAt: 2026-09-08 14:50:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 14:50:08 +0000 UTC FinishedAt: 2026-09-08 14:50:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 14:50:08 +0000 UTC FinishedAt: 2026-09-08 14:50:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowr2fmh/series-workflowr2fmh-convert-artifact-2365101369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 14:50:18 +0000 UTC FinishedAt: 2026-09-08 14:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 14:50:18 +0000 UTC FinishedAt: 2026-09-08 14:52:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dbb3aa1a-e1d3-40a4-ae85-0d2357f084ba,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-workflowr2fmh/series-workflowr2fmh-build-action-117667196/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-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 14:52:24 +0000 UTC FinishedAt: 2026-09-08 14:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 14:52:24 +0000 UTC FinishedAt: 2026-09-08 14:52:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 14:52:24 +0000 UTC FinishedAt: 2026-09-08 15:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 14:52:24 +0000 UTC FinishedAt: 2026-09-08 15:22:33 +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:*11332afa-a1b8-49ea-a058-347e3747b071,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-workflowr2fmh/series-workflowr2fmh-convert-artifact-2365101369/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": "e038c277-3e35-492e-96f5-760f01ce0846", "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-workflowr2fmh/series-workflowr2fmh-build-action-1370779157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 14:52:24 +0000 UTC FinishedAt: 2026-09-08 15:22:23 +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:*11332afa-a1b8-49ea-a058-347e3747b071,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-workflowr2fmh/series-workflowr2fmh-convert-artifact-2365101369/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": "e038c277-3e35-492e-96f5-760f01ce0846", "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-workflowr2fmh/series-workflowr2fmh-build-action-1370779157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 15:22:33 +0000 UTC FinishedAt: 2026-09-08 15:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 15:22:33 +0000 UTC FinishedAt: 2026-09-08 15:22:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 15:22:33 +0000 UTC FinishedAt: 2026-09-08 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 15:22:33 +0000 UTC FinishedAt: 2026-09-08 15:24:18 +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:*e038c277-3e35-492e-96f5-760f01ce0846,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-workflowr2fmh/series-workflowr2fmh-build-action-1370779157/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-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"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:*dbb3aa1a-e1d3-40a4-ae85-0d2357f084ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e038c277-3e35-492e-96f5-760f01ce0846,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-workflowr2fmh/series-workflowr2fmh-build-action-117667196/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-workflowr2fmh/series-workflowr2fmh-build-action-1370779157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 15:24:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 15:24:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"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-workflowr2fmh/series-workflowr2fmh-convert-artifact-3759100846/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 15:24:28 +0000 UTC FinishedAt: 2026-09-08 15:24:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 15:24:49 +0000 UTC FinishedAt: 2026-09-08 18:31:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowr2fmh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["task_numa_balancing_set_current","task_numa_fault","proc_pid_status"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"b485131995544741ba6dcc313d7eb573bca7bebc","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA_BALANCING","NUMA"],"series_id":"310399fa-75cc-4dd3-bce3-377a2ca758ae","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 15:24:49 +0000 UTC FinishedAt: 2026-09-08 18:31:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dbb3aa1a-e1d3-40a4-ae85-0d2357f084ba,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e038c277-3e35-492e-96f5-760f01ce0846,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-workflowr2fmh/series-workflowr2fmh-build-action-117667196/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-workflowr2fmh/series-workflowr2fmh-build-action-1370779157/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-workflowr2fmh/series-workflowr2fmh-convert-artifact-3759100846/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,}