Name: series-workflowggxbq Phase: Succeeded StartedAt: 2026-09-07 09:25:41 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[0] Phase: Succeeded StartedAt: 2026-09-07 09:25:41 +0000 UTC FinishedAt: 2026-09-07 10:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 09:25:41 +0000 UTC FinishedAt: 2026-09-07 10:07:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_HSO", "USB", "RFKILL", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_HSO", "USB", "RFKILL", "TTY" ], "series_id": "70ffcec5-9374-4219-8d36-9a5f4110b573" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hso_wait_modem_status", "hso_serial_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9IU08mIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1JGS0lMTCYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc29fd2FpdF9tb2RlbV9zdGF0dXMmIzM0OywKICAgICYjMzQ7aHNvX3NlcmlhbF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2tgIGFuZCByZWFkaW5nIHRoZSBtb2RlbSBpbnRlcnJ1cHQgY291bnRlcnMgYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGNub3dgLCBgY3ByZXZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHlgIGZyb20gYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXG5pbmRleCBjMWFlYzY3Njg4YWU3Li43MWNhYTM3NjRiMjM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcbkBAIC0xNTQ3LDEwICYjNDM7MTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdFx0bWVtY3B5KFx1MDAyNmNub3csIFx1MDAyNnRpb2NtZ2V0LVx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0aWYgKCgoYXJnIFx1MDAyNiBUSU9DTV9STkcpIFx1MDAyNlx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9EU1IpIFx1MDAyNlx1MDAyNiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9DRCkgIFx1MDAyNlx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSFNPJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtSRktJTEwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgICAmIzM0O2hzb19zZXJpYWxfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMDowNjoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBjMWFlYzY3Njg4YWU3Li43MWNhYTM3NjRiMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC0xNTQ3LDEwICYjNDM7MTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VyaWFsLSZndDtzZXJpYWxfbG9jayk7CiAJYWRkX3dhaXRfcXVldWUoJmFtcDt0aW9jbWdldC0mZ3Q7d2FpdHEsICZhbXA7d2FpdCk7CiAJZm9yICg7OykgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwogCQltZW1jcHkoJmFtcDtjbm93LCAmYW1wO3Rpb2NtZ2V0LSZndDtpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VyaWFsLSZndDtzZXJpYWxfbG9jayk7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmICgoKGFyZyAmYW1wOyBUSU9DTV9STkcpICZhbXA7JmFtcDsgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CiAJCSAgICAoKGFyZyAmYW1wOyBUSU9DTV9EU1IpICZhbXA7JmFtcDsgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CiAJCSAgICAoKGFyZyAmYW1wOyBUSU9DTV9DRCkgICZhbXA7JmFtcDsgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDcKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEl0IGxvb2tzIGxpa2UgdGhlIHRhcmdldCBpcyBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24gY2xvc2VseS4KCk5vdywgY29udGV4dCBpcyBrZXkuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIEFyZSB0aGVyZSByZWxhdGVkIGNoYW5nZXM/IFdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGF0IG1vZHVsZT8KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoZSB0b29scyBmaXJlZCB1cC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2hzby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9oc28uYz0xNTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNTMyOmhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaHNvLmM9MTY4Nz1zdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcbi0tXG5kcml2ZXJzL25ldC91c2IvaHNvLmMtMTY5Ny1cdGNhc2UgVElPQ01JV0FJVDpcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNjk4Olx0XHRyZXQgPSBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc2VyaWFsLCBhcmcpO1xuZHJpdmVycy9uZXQvdXNiL2hzby5jLTE2OTktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qSFNPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MzA9Y29uZmlnIFVTQl9ORVRfUU1JX1dXQU5cbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NTEtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NTI6Y29uZmlnIFVTQl9IU09cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU1My1cdHRyaXN0YXRlIFwmIzM0O09wdGlvbiBVU0IgSGlnaCBTcGVlZCBNb2JpbGUgRGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhTTyBNb2RlbSBTdGF0dXMgV2FpdCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24gd29ya3Mgd2l0aGluIHRoZSBIU08gZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIGFuZCB6ZXJvaW5nIGluIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvbywgYmVjYXVzZSBjb250ZXh0IGlzIGtleSwgeW91IGtub3c/IEZ1bmN0aW9ucyByYXJlbHkgbGl2ZSBpbiBhIHZhY3V1bS4KCkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9IU09gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgSFNPIGZ1bmN0aW9uYWxpdHkgdG8gZXZlbiBiZSBwcmVzZW50LiBUaGF0JiMzOTtsbCBzYXZlIG1lIGZyb20gYmFuZ2luZyBteSBoZWFkIGFnYWluc3QgdGhlIHdhbGwgbGF0ZXIsIGZpZ3VyaW5nIG91dCB3aHkgc29tZXRoaW5nIGlzbiYjMzk7dCB3b3JraW5nIGlmIHRoZSBidWlsZCBkb2VzbiYjMzk7dCBldmVuIGluY2x1ZGUgdGhlIHJlbGV2YW50IG1vZHVsZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdGhlIGhvdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgY29uZmlnIG9wdGlvbnMgYXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaHNvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MzA6XHQgKi9cbjE1MzE6XHRzdGF0aWMgaW50XG4xNTMyOlx0aHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMTUzMzpcdHtcbjE1MzQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuMTUzNTpcdFx0c3RydWN0IHVhcnRfaWNvdW50IGNwcmV2LCBjbm93O1xuMTUzNjpcdFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0O1xuMTUzNzpcdFx0aW50IHJldDtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRpb2NtZ2V0ID0gc2VyaWFsLVx1MDAzZXRpb2NtZ2V0O1xuMTU0MDpcdFx0aWYgKCF0aW9jbWdldClcbjE1NDE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTQyOlx0XHQvKlxuMTU0MzpcdFx0ICogbm90ZSB0aGUgY291bnRlcnMgb24gZW50cnlcbjE1NDQ6XHRcdCAqL1xuMTU0NTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU0NjpcdFx0bWVtY3B5KFx1MDAyNmNwcmV2LCBcdTAwMjZ0aW9jbWdldC1cdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcbjE1NDc6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU0ODpcdFx0YWRkX3dhaXRfcXVldWUoXHUwMDI2dGlvY21nZXQtXHUwMDNld2FpdHEsIFx1MDAyNndhaXQpO1xuMTU0OTpcdFx0Zm9yICg7Oykge1xuMTU1MDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTU1MTpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4xNTUyOlx0XHRcdG1lbWNweShcdTAwMjZjbm93LCBcdTAwMjZ0aW9jbWdldC1cdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcbjE1NTM6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4xNTU0Olx0XHRcdGlmICgoKGFyZyBcdTAwMjYgVElPQ01fUk5HKSBcdTAwMjZcdTAwMjYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8XG4xNTU1Olx0XHRcdCAgICAoKGFyZyBcdTAwMjYgVElPQ01fRFNSKSBcdTAwMjZcdTAwMjYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8XG4xNTU2Olx0XHRcdCAgICAoKGFyZyBcdTAwMjYgVElPQ01fQ0QpICBcdTAwMjZcdTAwMjYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpKSB7XG4xNTU3Olx0XHRcdFx0cmV0ID0gMDtcbjE1NTg6XHRcdFx0XHRicmVhaztcbjE1NTk6XHRcdFx0fVxuMTU2MDpcdFx0XHRzY2hlZHVsZSgpO1xuMTU2MTpcdFx0XHQvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovXG4xNTYyOlx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuMTU2MzpcdFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbjE1NjQ6XHRcdFx0XHRicmVhaztcbjE1NjU6XHRcdFx0fVxuMTU2NjpcdFx0XHRjcHJldiA9IGNub3c7XG4xNTY3Olx0XHR9XG4xNTY4Olx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4xNTY5Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZ0aW9jbWdldC1cdTAwM2V3YWl0cSwgXHUwMDI2d2FpdCk7XG4xNTcwOlx0XG4xNTcxOlx0XHRyZXR1cm4gcmV0O1xuMTU3MjpcdH1cbjE1NzM6XHRcbjE1NzQ6XHQvKlxuMTU3NTpcdCAqIEdldCBjb3VudGVyIG9mIGlucHV0IHNlcmlhbCBsaW5lIGludGVycnVwdHMgKERDRCxSSSxEU1IsQ1RTKVxuMTU3NjpcdCAqIFJldHVybjogd3JpdGUgY291bnRlcnMgdG8gdGhlIHVzZXIgcGFzc2VkIGNvdW50ZXIgc3RydWN0XG4xNTc3Olx0ICogTkI6IGJvdGggMS1cdTAwM2UwIGFuZCAwLVx1MDAzZTEgdHJhbnNpdGlvbnMgYXJlIGNvdW50ZWQgZXhjZXB0IGZvclxuMTU3ODpcdCAqICAgICBSSSB3aGVyZSBvbmx5IDAtXHUwMDNlMSBpcyBjb3VudGVkLlxuMTU3OTpcdCAqL1xuMTU4MDpcdHN0YXRpYyBpbnQgaHNvX2dldF9jb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxuMTU4MTpcdFx0XHQgIHN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0ICppY291bnQpXG4xNTgyOlx0e1xuMTU4MzpcdFx0c3RydWN0IHVhcnRfaWNvdW50IGNub3c7XG4xNTg0Olx0XHRzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuMTU4NTpcdFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0ID0gc2VyaWFsLVx1MDAzZXRpb2NtZ2V0O1xuMTU4NjpcdFxuMTU4NzpcdFx0bWVtc2V0KGljb3VudCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0KSk7XG4xNTg4Olx0XG4xNTg5Olx0XHRpZiAoIXRpb2NtZ2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFx0ICAgICogY2RjLXdkbTogUXVhbGNvbW0gTVNNIEludGVyZmFjZSAoUU1JKSBwcm90b2NvbCBvbiAvZGV2L2NkYy13ZG14XG4gNTQ2Olx0XG4gNTQ3Olx0XHQgIEEgbW9kZW0gbWFuYWdlciB3aXRoIHN1cHBvcnQgZm9yIFFNSSBpcyByZWNvbW1lbmRlZC5cbiA1NDg6XHRcbiA1NDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTUwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxbWlfd3dhbi5cbiA1NTE6XHRcbiA1NTI6XHRjb25maWcgVVNCX0hTT1xuIDU1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3B0aW9uIFVTQiBIaWdoIFNwZWVkIE1vYmlsZSBEZXZpY2VzXCYjMzQ7XG4gNTU0Olx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUkZLSUxMIFx1MDAyNlx1MDAyNiBUVFlcbiA1NTU6XHRcdGRlZmF1bHQgblxuIDU1NjpcdFx0aGVscFxuIDU1NzpcdFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gT3B0aW9uIEhTRFBBL0hTVVBBIGNhcmQuXG4gNTU4Olx0XHQgIFRoZXNlIGNhcmRzIHN1cHBvcnQgZG93bmxpbmsgc3BlZWRzIG9mIDcuMk1icHMgb3IgZ3JlYXRlci5cbiA1NTk6XHRcbiA1NjA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTYxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoc28uXG4gNTYyOlx0XG4gNTYzOlx0Y29uZmlnIFVTQl9ORVRfSU5UNTFYMVxuIDU2NDpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXCYjMzQ7XG4gNTY1Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA1NjY6XHRcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4gNTY3Olx0XHRoZWxwXG4gNTY4Olx0XHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UmIzM5O3JlIHVzaW5nIGEgMTRNYiBVU0ItYmFzZWQgUExDXG4gNTY5Olx0XHQgIChQb3dlcmxpbmUgQ29tbXVuaWNhdGlvbnMpIHNvbHV0aW9uIHdpdGggYW4gSW50ZWxsb25cbiA1NzA6XHRcdCAgSU5UNTF4MS9JTlQ1MjAwIGNoaXAsIGxpa2UgdGhlIFwmIzM0O2Rldm9sbyBkTGFuIGR1b1wmIzM0Oy5cbiA1NzE6XHRcbiA1NzI6XHRjb25maWcgVVNCX0NEQ19QSE9ORVRcbiA1NzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NEQyBQaG9uZXQgc3VwcG9ydFwmIzM0O1xuIDU3NDpcdFx0ZGVwZW5kcyBvbiBQSE9ORVQgXHUwMDI2XHUwMDI2IFVTQl9VU0JORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIEVtdWxhdGluZyBhbmQgUHJvYmluZyBVU0JfSFNPIGluIFN5emthbGxlci9RRU1VKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgVVNCX0hTT2AgZHJpdmVyIHdpdGhpbiB0aGUgU3l6a2FsbGVyL1FFTVUgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG9mIHRoaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIGxldmVyYWdlcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el91c2JfY29udHJvbF9pb2AsIGVzc2VudGlhbGx5IGNyYWZ0aW5nIGEgdmlydHVhbCBVU0IgbGFuZHNjYXBlIHRvIHByb2JlIHZhcmlvdXMgZHJpdmVycy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCBgaHNvYCBlZmZlY3RpdmVseSB0aHJvdWdoIHRoaXMgcmF3IGdhZGdldCBlbXVsYXRpb24uCgpUaGUgZ29vZCBuZXdzIGlzLCB5ZXMsIHRoZSByYXcgZ2FkZ2V0IGFwcHJvYWNoIHNob3VsZCB3b3JrLiBEcml2ZXJzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9gIGFyZSBpbmRlZWQgcmVhY2hhYmxlIHZpYSB0aGlzIG1ldGhvZC4gRXNzZW50aWFsbHksIFN5emthbGxlciByZWdpc3RlcnMgVVNCIElEcywgdGhlbiBlbXVsYXRlcyB0aGUgVVNCIGRldmljZS4gIFRoZSBkcml2ZXIgdGhlbiBiaW5kcyB0byB0aGlzIGVtdWxhdGVkIGRldmljZSBhbmQsIGluIHR1cm4sIGV4cG9zZXMgZWl0aGVyIGB0dHlgIG9yIGBuZXRkZXZgIGludGVyZmFjZXMuCgpOb3csIHRvIGRpZyBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBiZXR0ZXIuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZXhhbWluZSB3aGF0IHRoZSBgaHNvX3NlcmlhbF9pb2N0bGAgZnVuY3Rpb24gaXMgZG9pbmcsIGFuZCB0aGVuIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBVU0IgSFNPIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5leHQgcGhhc2UgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9oc28uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4MDpcdFxuMTY4MTpcdFx0cmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtXHUwMDNlcGFyZW50LVx1MDAzZXVzYixcbjE2ODI6XHRcdFx0XHQgICAgICAgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC1cdTAwM2VwYXJlbnQtXHUwMDNldXNiLCAwKSwgMHgyMixcbjE2ODM6XHRcdFx0XHQgICAgICAgMHgyMSwgdmFsLCBpZl9udW0sIE5VTEwsIDAsXG4xNjg0Olx0XHRcdFx0ICAgICAgIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcbjE2ODU6XHR9XG4xNjg2Olx0XG4xNjg3Olx0c3RhdGljIGludCBoc29fc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4xNjg4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMTY4OTpcdHtcbjE2OTA6XHRcdHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4xNjkxOlx0XHRpbnQgcmV0ID0gMDtcbjE2OTI6XHRcdGhzb19kYmcoMHg4LCBcJiMzNDtJT0NUTCBjbWQ6ICVkLCBhcmc6ICVsZFxcblwmIzM0OywgY21kLCBhcmcpO1xuMTY5MzpcdFxuMTY5NDpcdFx0aWYgKCFzZXJpYWwpXG4xNjk1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTY5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjE2OTc6XHRcdGNhc2UgVElPQ01JV0FJVDpcbjE2OTg6XHRcdFx0cmV0ID0gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHNlcmlhbCwgYXJnKTtcbjE2OTk6XHRcdFx0YnJlYWs7XG4xNzAwOlx0XHRkZWZhdWx0OlxuMTcwMTpcdFx0XHRyZXQgPSAtRU5PSU9DVExDTUQ7XG4xNzAyOlx0XHRcdGJyZWFrO1xuMTcwMzpcdFx0fVxuMTcwNDpcdFx0cmV0dXJuIHJldDtcbjE3MDU6XHR9XG4xNzA2Olx0XG4xNzA3Olx0XG4xNzA4Olx0Lyogc3RhcnRzIGEgdHJhbnNtaXQgKi9cbjE3MDk6XHRzdGF0aWMgdm9pZCBoc29fa2lja190cmFuc21pdChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKVxuMTcxMDpcdHtcbjE3MTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xNzEyOlx0XHRpbnQgcmVzO1xuMTcxMzpcdFxuMTcxNDpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrLCBmbGFncyk7XG4xNzE1Olx0XHRpZiAoIXNlcmlhbC1cdTAwM2V0eF9idWZmZXJfY291bnQpXG4xNzE2Olx0XHRcdGdvdG8gb3V0O1xuMTcxNzpcdFxuMTcxODpcdFx0aWYgKHNlcmlhbC1cdTAwM2V0eF91cmJfdXNlZClcbjE3MTk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTMKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogODM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFuYWx5c2lzOiBIU08gTW9kZW0gRHJpdmVyIC0gVElPQ01JV0FJVCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgaHNvX3NlcmlhbF9pb2N0bGAmIzM5O3MgaGFuZGxpbmcgb2YgYFRJT0NNSVdBSVRgIGFuZCBob3cgaXQgY2FsbHMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBoYXMgbW92ZWQgKmJlZm9yZSogYHNwaW5fbG9ja19pcnFgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIGlzIHdvcnRoIGEgY2xvc2UgbG9vayBiZWNhdXNlIHRoZSBvcmRlcmluZyBvZiB0aGVzZSBvcGVyYXRpb25zIOKAkyBzZXR0aW5nIHRoZSB0YXNrIHRvIGludGVycnVwdGlibGUgYmVmb3JlIGFjcXVpcmluZyBhIHNwaW5sb2NrIHRoYXQgZGlzYWJsZXMgaW50ZXJydXB0cyDigJMgY291bGQgaW50cm9kdWNlIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKRmlyc3QsIGlzIHRoaXMgZXZlbiBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhlIGBoc29gIGRyaXZlciAoYFVTQl9IU09gKSBpcyBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgd2hpY2ggaXMgdHJpdmlhbCB0byBzZXQgdXAgaW4gYSBzeXprYWxsZXIgb3Igc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBUSU9DTUlXQUlUYCBpb2N0bCBvcGVyYXRlcyBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBIU08gbW9kZW0mIzM5O3Mgc2VyaWFsIHBvcnQsIG1ha2luZyBpdCBhIG5hdHVyYWwgdGFyZ2V0LiBXZSAqa25vdyogdGhhdCBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIChgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCkgaGFzIGJlZW4gbW9kaWZpZWQsIGNvbmZpcm1pbmcgaXRzIHJlbGV2YW5jZS4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IGEgZHJpdmVyIHRoYXQgZmFsbHMgaW50byBhbnkgb2YgdGhlIHVzdWFsICYjMzQ7bm8tZ28mIzM0OyBjYXRlZ29yaWVzIOKAkyBubyBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgKGxpa2UgYSBjdXN0b20gUENJZSBvciBHUFUpLCBubyB1bnVzdWFsIGFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHMsIG5vIHZlbmRvciBsb2NrLWluLCBhbmQgbm90IGp1c3Qgc2V0dXAvdGVhcmRvd24gY29kZS4gVVNCIGRyaXZlcnMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHZpcnR1YWxpemF0aW9uLiBTbywgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMuIGBVU0JfSFNPYCBpcyB0aGUga2V5LiBCdXQgbGV0JiMzOTtzIHZlcmlmeS4gYFVTQl9IU09gIGRlcGVuZHMgb24gYFVTQiAmYW1wOyZhbXA7IFJGS0lMTCAmYW1wOyZhbXA7IFRUWWAuIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgVVNCX0hTT2AgaXMgc3VmZmljaWVudCwgSSYjMzk7bGwgYWRkIGBVU0JgLCBgUkZLSUxMYCwgYFRUWWAsIGFzIGEgZmFsbGJhY2sgLSBzYWZlIGFuZCBnb29kIHByYWN0aWNlLgoKTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIFdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGFuZCBgaHNvX3NlcmlhbF9pb2N0bGAuIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgICppcyogc3RhdGljIHdpdGhpbiBgaHNvLmNgLCBidXQgdGhhdCYjMzk7cyBub3QgYSBkZWFsLWJyZWFrZXIuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogc3RpbGwgYmVjb21lIHN5bWJvbHMsIG9yIGFyZSBpbmxpbmVkLCBzbyB3ZSBjaGVjayB0aGVtIGFsbCwgcmVnYXJkbGVzcy4gV2UmIzM5O3ZlIHZlcmlmaWVkIHRoZXkgYXJlIHRoZSBvbmx5IHJlbGV2YW50IG9uZXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AuIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGlzICpvbmx5KiBjYWxsZWQgYnkgYGhzb19zZXJpYWxfaW9jdGxgLCBhbmQgYm90aCBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIGFuZCBub3Qgb3Zlci11c2VkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJlY2FwIHRoZSByZXF1aXJlbWVudHM6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtVU0JfSFNPJiMzNDssICYjMzQ7VVNCJiMzNDssICYjMzQ7UkZLSUxMJiMzNDssICYjMzQ7VFRZJiMzNDtdYCAoVGhpcyBpcyB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgYW5kIGNvcnJlY3Qgd2F5KS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLCBgaHNvX3NlcmlhbF9pb2N0bGAKCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciwgY29uY2lzZSwgYW5kIGRlZmVuc2libGUuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0hTTyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7UkZLSUxMJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzb193YWl0X21vZGVtX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtoc29fc2VyaWFsX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSFNPJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtSRktJTEwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgICAmIzM0O2hzb19zZXJpYWxfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cdTAwM2VpY291bnRgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKWAuIFRoaXMgZml4ZXMgYSBjbGFzc2ljIGxvc3Qgd2FrZS11cCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgd2FpdCBsb29wLlxuXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cdTAwM2VpY291bnRgLiBUaGUgY2hhbmdlIHJlbGF0ZXMgZW50aXJlbHkgdG8gc2NoZWR1bGVyIHN0YXRlIGFuZCBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMTU0NywxMCAmIzQzOzE1NDcsMTAgQEAgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwogCWFkZF93YWl0X3F1ZXVlKCZhbXA7dGlvY21nZXQtJmd0O3dhaXRxLCAmYW1wO3dhaXQpOwogCWZvciAoOzspIHsKJiM0MzsJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtzZXJpYWwtJmd0O3NlcmlhbF9sb2NrKTsKIAkJbWVtY3B5KCZhbXA7Y25vdywgJmFtcDt0aW9jbWdldC0mZ3Q7aWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoKChhcmcgJmFtcDsgVElPQ01fUk5HKSAmYW1wOyZhbXA7IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAogCQkgICAgKChhcmcgJmFtcDsgVElPQ01fRFNSKSAmYW1wOyZhbXA7IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAogCQkgICAgKChhcmcgJmFtcDsgVElPQ01fQ0QpICAmYW1wOyZhbXA7IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24sIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgbmF0dXJhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKnByZWNpc2UqIGJlaGF2aW9yIGJlaW5nIG1vZGlmaWVkIGhlcmUuIEkmIzM5O2xsIHJlYWQgdGhpcyBzZWN0aW9uIGNsb3NlbHkgdG8gYXNjZXJ0YWluIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoLiBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGV5IGdvaW5nIGFib3V0IGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZWluZyBhZGRyZXNzZWQ/IElzIHRoaXMgYSB0aW1pbmcgaXNzdWU/IE9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGluIHRoZSBjb21tdW5pY2F0aW9uIGhhbmRzaGFrZT8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlcnMgaGFkIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2hzby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTMwOlx0ICovXG4xNTMxOlx0c3RhdGljIGludFxuMTUzMjpcdGhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcbjE1MzM6XHR7XG4xNTM0Olx0XHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbjE1MzU6XHRcdHN0cnVjdCB1YXJ0X2ljb3VudCBjcHJldiwgY25vdztcbjE1MzY6XHRcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldDtcbjE1Mzc6XHRcdGludCByZXQ7XG4xNTM4Olx0XG4xNTM5Olx0XHR0aW9jbWdldCA9IHNlcmlhbC1cdTAwM2V0aW9jbWdldDtcbjE1NDA6XHRcdGlmICghdGlvY21nZXQpXG4xNTQxOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTU0MjpcdFx0LypcbjE1NDM6XHRcdCAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5XG4xNTQ0Olx0XHQgKi9cbjE1NDU6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbjE1NDY6XHRcdG1lbWNweShcdTAwMjZjcHJldiwgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4xNTQ3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbjE1NDg6XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbjE1NDk6XHRcdGZvciAoOzspIHtcbjE1NTA6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbjE1NTE6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU1MjpcdFx0XHRtZW1jcHkoXHUwMDI2Y25vdywgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4xNTUzOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU1NDpcdFx0XHRpZiAoKChhcmcgXHUwMDI2IFRJT0NNX1JORykgXHUwMDI2XHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxuMTU1NTpcdFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0RTUikgXHUwMDI2XHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxuMTU1NjpcdFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0NEKSAgXHUwMDI2XHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xuMTU1NzpcdFx0XHRcdHJldCA9IDA7XG4xNTU4Olx0XHRcdFx0YnJlYWs7XG4xNTU5Olx0XHRcdH1cbjE1NjA6XHRcdFx0c2NoZWR1bGUoKTtcbjE1NjE6XHRcdFx0Lyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqL1xuMTU2MjpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjE1NjM6XHRcdFx0XHRyZXQgPSAtRVJFU1RBUlRTWVM7XG4xNTY0Olx0XHRcdFx0YnJlYWs7XG4xNTY1Olx0XHRcdH1cbjE1NjY6XHRcdFx0Y3ByZXYgPSBjbm93O1xuMTU2NzpcdFx0fVxuMTU2ODpcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMTU2OTpcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2dGlvY21nZXQtXHUwMDNld2FpdHEsIFx1MDAyNndhaXQpO1xuMTU3MDpcdFxuMTU3MTpcdFx0cmV0dXJuIHJldDtcbjE1NzI6XHR9XG4xNTczOlx0XG4xNTc0Olx0LypcbjE1NzU6XHQgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUylcbjE1NzY6XHQgKiBSZXR1cm46IHdyaXRlIGNvdW50ZXJzIHRvIHRoZSB1c2VyIHBhc3NlZCBjb3VudGVyIHN0cnVjdFxuMTU3NzpcdCAqIE5COiBib3RoIDEtXHUwMDNlMCBhbmQgMC1cdTAwM2UxIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3JcbjE1Nzg6XHQgKiAgICAgUkkgd2hlcmUgb25seSAwLVx1MDAzZTEgaXMgY291bnRlZC5cbjE1Nzk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1OQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VyaWFsIERyaXZlciBXYWl0IExvb3AgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIHRoZSBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgY2FsbCAqYmVmb3JlKiByZWFkaW5nIHRoZSBgdGlvY21nZXQtJmd0O2ljb3VudGAgdW5kZXIgdGhlIHNwaW5sb2NrLiBBaCwgY2xhc3NpYyBsb3N0LXdha2V1cCBmaXguIFRoZSBpbnRlcnJ1cHQvd2FrZXVwIGNvdWxkIGhhdmUgaGFwcGVuZWQgcmlnaHQgYWZ0ZXIgdGhlIHJlYWQsIGJ1dCBiZWZvcmUgc2V0dGluZyB0aGUgdGFzayB0byBpbnRlcnJ1cHRpYmxlLCByZXN1bHRpbmcgaW4gYSBwZXJtYW5lbnQgd2FpdC4gUHV0dGluZyBgc2V0X2N1cnJlbnRfc3RhdGVgIGZpcnN0IGVuc3VyZXMgdGhhdCBpZiB0aGUgd2FrZXVwIG9jY3VycyAqYWZ0ZXIqIHRoZSBgaWNvdW50YCB1cGRhdGUsIHRoZSB0YXNrIGdldHMgbWFya2VkIGFzIHJlYWR5IGJ5IGB3YWtlX3VwYCBhbmQgd29uJiMzOTt0IHNsZWVwIGluZGVmaW5pdGVseS4gU21hcnQuCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBBbnkgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBzbmVha2luZyBpbj8gSSYjMzk7dmUgZ290IGBjcHJldmAgYW5kIGBjbm93YCwgYm90aCBgc3RydWN0IHVhcnRfaWNvdW50YC4gVGhlIGNvZGUgZG9lcyBgbWVtY3B5YCB0byBwb3B1bGF0ZSBib3RoLiBUaGUgZmllbGRzIGJlaW5nIGNoZWNrZWQgKGBybmdgLCBgZHNyYCwgYGRjZGApIHdpdGhpbiBgY25vd2AgYXJlIHByb3Blcmx5IGNvcGllZC4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RydWN0cywgYW5kIG5vIHBhZGRpbmcgbGVha3MgdGhhdCBJIGNhbiBzZWUuIFRoaXMgc2VlbXMgcHVyZWx5IGFib3V0IHRocmVhZCBzY2hlZHVsaW5nIGFuZCBhZGRyZXNzaW5nIHRoYXQgcmFjZSBjb25kaXRpb24uIENsZWFuIGFuZCBzaW1wbGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBgTmVlZHNLTVNBTmAgZmxhZy4gRG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55ICpuZXcqIHdheXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBObyBidWZmZXIgbGVuZ3RoIGlzc3VlcyBvciBib3VuZGFyeSBwcm9ibGVtcyBlaXRoZXIuIFNvLCBkZWZpbml0ZWx5IG5vIEtNU0FOIGNvbmNlcm5zLiBUaGlzIGlzIGEgc29saWQgZml4IGZvciB0aGUgcmFjZSwgYnV0IG5vdCBzb21ldGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IExldCYjMzk7cyBydW4gZG93biB0aGUgY2hlY2tsaXN0LgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ6IE5vcGUuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm9wZS4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOiBOYWRhLgo0LiBCb3VuZHMgY2hlY2tzIC8gbGVuZ3RocyAvIGxvZ2ljIGFsbG93aW5nIHVuaW5pdCBieXRlcyBhY2Nlc3M6IE5vdGhpbmcuCgpDb25jbHVzaXZlbHksIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyaW5nIG9mIGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCByZWxhdGl2ZSB0byBhY3F1aXJpbmcgYHNlcmlhbC1cdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cblxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2tgIGFuZCByZWFkaW5nIHRoZSBtb2RlbSBpbnRlcnJ1cHQgY291bnRlcnMgYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGNub3dgLCBgY3ByZXZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHlgIGZyb20gYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjI1LjQ3NDU4MTM3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU1MDk5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9IU09cIixcbiAgICBcIlVTQlwiLFxuICAgIFwiUkZLSUxMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc29fd2FpdF9tb2RlbV9zdGF0dXNcIixcbiAgICBcImhzb19zZXJpYWxfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cXG5cXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2xlZXAgbG9vcCBzdGF0ZSBtYW5hZ2VtZW50IGluIGhzb193YWl0X21vZGVtX3N0YXR1cygpIHdpdGhpbiB0aGUgVVNCIEhTTyBtb2RlbSBkcml2ZXIuIFRoaXMgcmVhY2hhYmxlIGRyaXZlciBwYXRoIGhhbmRsZXMgdGhlIFRJT0NNSVdBSVQgaW9jdGwgb24gdGhlIFRUWSBkZXZpY2UgZXhwb3NlZCBieSB0aGUgVVNCIG1vZGVtLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MjUuNDc0NTg1NTM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA3MTYzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXFxuaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcXG5AQCAtMTU0NywxMCArMTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuIFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNld2FpdHEsIFxcdTAwMjZ3YWl0KTtcXG4gXFx0Zm9yICg7Oykge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZjbm93LCBcXHUwMDI2dGlvY21nZXQtXFx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbi1cXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRpZiAoKChhcmcgXFx1MDAyNiBUSU9DTV9STkcpIFxcdTAwMjZcXHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxcbiBcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9EU1IpIFxcdTAwMjZcXHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxcbiBcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9DRCkgIFxcdTAwMjZcXHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjoyNi4wODYxNzQxMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2ODExODI0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9IU09cIixcbiAgICBcIlVTQlwiLFxuICAgIFwiUkZLSUxMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc29fd2FpdF9tb2RlbV9zdGF0dXNcIixcbiAgICBcImhzb19zZXJpYWxfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2xlZXAgbG9vcCBzdGF0ZSBtYW5hZ2VtZW50IGluIGhzb193YWl0X21vZGVtX3N0YXR1cygpIHdpdGhpbiB0aGUgVVNCIEhTTyBtb2RlbSBkcml2ZXIuIFRoaXMgcmVhY2hhYmxlIGRyaXZlciBwYXRoIGhhbmRsZXMgdGhlIFRJT0NNSVdBSVQgaW9jdGwgb24gdGhlIFRUWSBkZXZpY2UgZXhwb3NlZCBieSB0aGUgVVNCIG1vZGVtLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDowNjoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXG5AQCAtMTU0NywxMCArMTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbitcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuIFx0XHRtZW1jcHkoXHUwMDI2Y25vdywgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuLVx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoKChhcmcgXHUwMDI2IFRJT0NNX1JORykgXHUwMDI2XHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxuIFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0RTUikgXHUwMDI2XHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxuIFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0NEKSAgXHUwMDI2XHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MjYuMDg2MTc2MDE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzNjY5Njg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIHRoZSB0YXJnZXQgaXMgYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AsIHNwZWNpZmljYWxseSB0aGUgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24gY2xvc2VseS5cblxuTm93LCBjb250ZXh0IGlzIGtleS4gSSBzaG91bGQgYWxzbyBjaGVjayB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZS4gQXJlIHRoZXJlIHJlbGF0ZWQgY2hhbmdlcz8gV2hhdCdzIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhhdCBtb2R1bGU/XG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoZSB0b29scyBmaXJlZCB1cC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNywiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzAuMzIyODc1NzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjQyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzb193YWl0X21vZGVtX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2hzby5jPTE1MzE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNTMyOmhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC91c2IvaHNvLmMtMTUzMy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaHNvLmM9MTY4Nz1zdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNjk3LVxcdGNhc2UgVElPQ01JV0FJVDpcXG5kcml2ZXJzL25ldC91c2IvaHNvLmM6MTY5ODpcXHRcXHRyZXQgPSBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc2VyaWFsLCBhcmcpO1xcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNjk5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMC4zOTI1MjYzMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxODAxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipIU09cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MzA9Y29uZmlnIFVTQl9ORVRfUU1JX1dXQU5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU1MS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NTI6Y29uZmlnIFVTQl9IU09cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NTMtXFx0dHJpc3RhdGUgXFxcIk9wdGlvbiBVU0IgSGlnaCBTcGVlZCBNb2JpbGUgRGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzAuNDc4NzE1MTQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzODUwNDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEhTTyBNb2RlbSBTdGF0dXMgV2FpdCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBmdW5jdGlvbiB3b3JrcyB3aXRoaW4gdGhlIEhTTyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AgYW5kIHplcm9pbmcgaW4gb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGFic29yYiB0aGUgc3Vycm91bmRpbmcgY29kZSB0b28sIGJlY2F1c2UgY29udGV4dCBpcyBrZXksIHlvdSBrbm93PyBGdW5jdGlvbnMgcmFyZWx5IGxpdmUgaW4gYSB2YWN1dW0uXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9IU09gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgSFNPIGZ1bmN0aW9uYWxpdHkgdG8gZXZlbiBiZSBwcmVzZW50LiBUaGF0J2xsIHNhdmUgbWUgZnJvbSBiYW5naW5nIG15IGhlYWQgYWdhaW5zdCB0aGUgd2FsbCBsYXRlciwgZmlndXJpbmcgb3V0IHdoeSBzb21ldGhpbmcgaXNuJ3Qgd29ya2luZyBpZiB0aGUgYnVpbGQgZG9lc24ndCBldmVuIGluY2x1ZGUgdGhlIHJlbGV2YW50IG1vZHVsZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdGhlIGhvdXNlLiBMZXQncyBzZWUgd2hhdCB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMy40MTcyMjI0NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2hzby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MzA6XFx0ICovXFxuMTUzMTpcXHRzdGF0aWMgaW50XFxuMTUzMjpcXHRoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuMTUzMzpcXHR7XFxuMTUzNDpcXHRcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4xNTM1OlxcdFxcdHN0cnVjdCB1YXJ0X2ljb3VudCBjcHJldiwgY25vdztcXG4xNTM2OlxcdFxcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldDtcXG4xNTM3OlxcdFxcdGludCByZXQ7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdHRpb2NtZ2V0ID0gc2VyaWFsLVxcdTAwM2V0aW9jbWdldDtcXG4xNTQwOlxcdFxcdGlmICghdGlvY21nZXQpXFxuMTU0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTQyOlxcdFxcdC8qXFxuMTU0MzpcXHRcXHQgKiBub3RlIHRoZSBjb3VudGVycyBvbiBlbnRyeVxcbjE1NDQ6XFx0XFx0ICovXFxuMTU0NTpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4xNTQ2OlxcdFxcdG1lbWNweShcXHUwMDI2Y3ByZXYsIFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XFxuMTU0NzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NDg6XFx0XFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2V3YWl0cSwgXFx1MDAyNndhaXQpO1xcbjE1NDk6XFx0XFx0Zm9yICg7Oykge1xcbjE1NTA6XFx0XFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4xNTUxOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NTI6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZjbm93LCBcXHUwMDI2dGlvY21nZXQtXFx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xcbjE1NTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4xNTU0OlxcdFxcdFxcdGlmICgoKGFyZyBcXHUwMDI2IFRJT0NNX1JORykgXFx1MDAyNlxcdTAwMjYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8XFxuMTU1NTpcXHRcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9EU1IpIFxcdTAwMjZcXHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxcbjE1NTY6XFx0XFx0XFx0ICAgICgoYXJnIFxcdTAwMjYgVElPQ01fQ0QpICBcXHUwMDI2XFx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcXG4xNTU3OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTU1ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTU5OlxcdFxcdFxcdH1cXG4xNTYwOlxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuMTU2MTpcXHRcXHRcXHQvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovXFxuMTU2MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4xNTYzOlxcdFxcdFxcdFxcdHJldCA9IC1FUkVTVEFSVFNZUztcXG4xNTY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NjU6XFx0XFx0XFx0fVxcbjE1NjY6XFx0XFx0XFx0Y3ByZXYgPSBjbm93O1xcbjE1Njc6XFx0XFx0fVxcbjE1Njg6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjE1Njk6XFx0XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2V3YWl0cSwgXFx1MDAyNndhaXQpO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE1NzI6XFx0fVxcbjE1NzM6XFx0XFxuMTU3NDpcXHQvKlxcbjE1NzU6XFx0ICogR2V0IGNvdW50ZXIgb2YgaW5wdXQgc2VyaWFsIGxpbmUgaW50ZXJydXB0cyAoRENELFJJLERTUixDVFMpXFxuMTU3NjpcXHQgKiBSZXR1cm46IHdyaXRlIGNvdW50ZXJzIHRvIHRoZSB1c2VyIHBhc3NlZCBjb3VudGVyIHN0cnVjdFxcbjE1Nzc6XFx0ICogTkI6IGJvdGggMS1cXHUwMDNlMCBhbmQgMC1cXHUwMDNlMSB0cmFuc2l0aW9ucyBhcmUgY291bnRlZCBleGNlcHQgZm9yXFxuMTU3ODpcXHQgKiAgICAgUkkgd2hlcmUgb25seSAwLVxcdTAwM2UxIGlzIGNvdW50ZWQuXFxuMTU3OTpcXHQgKi9cXG4xNTgwOlxcdHN0YXRpYyBpbnQgaHNvX2dldF9jb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxcbjE1ODE6XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCAqaWNvdW50KVxcbjE1ODI6XFx0e1xcbjE1ODM6XFx0XFx0c3RydWN0IHVhcnRfaWNvdW50IGNub3c7XFxuMTU4NDpcXHRcXHRzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gdHR5LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4xNTg1OlxcdFxcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldCA9IHNlcmlhbC1cXHUwMDNldGlvY21nZXQ7XFxuMTU4NjpcXHRcXG4xNTg3OlxcdFxcdG1lbXNldChpY291bnQsIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpO1xcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRpZiAoIXRpb2NtZ2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMy40MTc0MjQ1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0ICAgICogY2RjLXdkbTogUXVhbGNvbW0gTVNNIEludGVyZmFjZSAoUU1JKSBwcm90b2NvbCBvbiAvZGV2L2NkYy13ZG14XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdCAgQSBtb2RlbSBtYW5hZ2VyIHdpdGggc3VwcG9ydCBmb3IgUU1JIGlzIHJlY29tbWVuZGVkLlxcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NTA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcW1pX3d3YW4uXFxuIDU1MTpcXHRcXG4gNTUyOlxcdGNvbmZpZyBVU0JfSFNPXFxuIDU1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3B0aW9uIFVTQiBIaWdoIFNwZWVkIE1vYmlsZSBEZXZpY2VzXFxcIlxcbiA1NTQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUkZLSUxMIFxcdTAwMjZcXHUwMDI2IFRUWVxcbiA1NTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDU1NjpcXHRcXHRoZWxwXFxuIDU1NzpcXHRcXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBPcHRpb24gSFNEUEEvSFNVUEEgY2FyZC5cXG4gNTU4OlxcdFxcdCAgVGhlc2UgY2FyZHMgc3VwcG9ydCBkb3dubGluayBzcGVlZHMgb2YgNy4yTWJwcyBvciBncmVhdGVyLlxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHNvLlxcbiA1NjI6XFx0XFxuIDU2MzpcXHRjb25maWcgVVNCX05FVF9JTlQ1MVgxXFxuIDU2NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXFxcIlxcbiA1NjU6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDU2NjpcXHRcXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbiA1Njc6XFx0XFx0aGVscFxcbiA1Njg6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgMTRNYiBVU0ItYmFzZWQgUExDXFxuIDU2OTpcXHRcXHQgIChQb3dlcmxpbmUgQ29tbXVuaWNhdGlvbnMpIHNvbHV0aW9uIHdpdGggYW4gSW50ZWxsb25cXG4gNTcwOlxcdFxcdCAgSU5UNTF4MS9JTlQ1MjAwIGNoaXAsIGxpa2UgdGhlIFxcXCJkZXZvbG8gZExhbiBkdW9cXFwiLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRjb25maWcgVVNCX0NEQ19QSE9ORVRcXG4gNTczOlxcdFxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuIDU3NDpcXHRcXHRkZXBlbmRzIG9uIFBIT05FVCBcXHUwMDI2XFx1MDAyNiBVU0JfVVNCTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjMzLjQxNzUxODQ2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTIzODI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gRW11bGF0aW5nIGFuZCBQcm9iaW5nIFVTQl9IU08gaW4gU3l6a2FsbGVyL1FFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgVVNCX0hTT2AgZHJpdmVyIHdpdGhpbiB0aGUgU3l6a2FsbGVyL1FFTVUgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG9mIHRoaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIGxldmVyYWdlcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el91c2JfY29udHJvbF9pb2AsIGVzc2VudGlhbGx5IGNyYWZ0aW5nIGEgdmlydHVhbCBVU0IgbGFuZHNjYXBlIHRvIHByb2JlIHZhcmlvdXMgZHJpdmVycy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCBgaHNvYCBlZmZlY3RpdmVseSB0aHJvdWdoIHRoaXMgcmF3IGdhZGdldCBlbXVsYXRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIHJhdyBnYWRnZXQgYXBwcm9hY2ggc2hvdWxkIHdvcmsuIERyaXZlcnMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvdXNiL2AgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIHRoaXMgbWV0aG9kLiBFc3NlbnRpYWxseSwgU3l6a2FsbGVyIHJlZ2lzdGVycyBVU0IgSURzLCB0aGVuIGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLiAgVGhlIGRyaXZlciB0aGVuIGJpbmRzIHRvIHRoaXMgZW11bGF0ZWQgZGV2aWNlIGFuZCwgaW4gdHVybiwgZXhwb3NlcyBlaXRoZXIgYHR0eWAgb3IgYG5ldGRldmAgaW50ZXJmYWNlcy5cblxuTm93LCB0byBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJuYWwgd29ya2luZ3MgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgd2hhdCB0aGUgYGhzb19zZXJpYWxfaW9jdGxgIGZ1bmN0aW9uIGlzIGRvaW5nLCBhbmQgdGhlbiB0cmFjZSB0aGUgY2FsbGVycyBvZiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBVU0IgSFNPIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5leHQgcGhhc2UgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzYuNDY5OTAzMjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRcXG4xNjgxOlxcdFxcdHJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXVzYixcXG4xNjgyOlxcdFxcdFxcdFxcdCAgICAgICB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXVzYiwgMCksIDB4MjIsXFxuMTY4MzpcXHRcXHRcXHRcXHQgICAgICAgMHgyMSwgdmFsLCBpZl9udW0sIE5VTEwsIDAsXFxuMTY4NDpcXHRcXHRcXHRcXHQgICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpO1xcbjE2ODU6XFx0fVxcbjE2ODY6XFx0XFxuMTY4NzpcXHRzdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4xNjg4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNjg5OlxcdHtcXG4xNjkwOlxcdFxcdHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB0dHktXFx1MDAzZWRyaXZlcl9kYXRhO1xcbjE2OTE6XFx0XFx0aW50IHJldCA9IDA7XFxuMTY5MjpcXHRcXHRoc29fZGJnKDB4OCwgXFxcIklPQ1RMIGNtZDogJWQsIGFyZzogJWxkXFxcXG5cXFwiLCBjbWQsIGFyZyk7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdGlmICghc2VyaWFsKVxcbjE2OTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTY5NjpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbjE2OTc6XFx0XFx0Y2FzZSBUSU9DTUlXQUlUOlxcbjE2OTg6XFx0XFx0XFx0cmV0ID0gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHNlcmlhbCwgYXJnKTtcXG4xNjk5OlxcdFxcdFxcdGJyZWFrO1xcbjE3MDA6XFx0XFx0ZGVmYXVsdDpcXG4xNzAxOlxcdFxcdFxcdHJldCA9IC1FTk9JT0NUTENNRDtcXG4xNzAyOlxcdFxcdFxcdGJyZWFrO1xcbjE3MDM6XFx0XFx0fVxcbjE3MDQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNzA1OlxcdH1cXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFxuMTcwODpcXHQvKiBzdGFydHMgYSB0cmFuc21pdCAqL1xcbjE3MDk6XFx0c3RhdGljIHZvaWQgaHNvX2tpY2tfdHJhbnNtaXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbClcXG4xNzEwOlxcdHtcXG4xNzExOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTcxMjpcXHRcXHRpbnQgcmVzO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jaywgZmxhZ3MpO1xcbjE3MTU6XFx0XFx0aWYgKCFzZXJpYWwtXFx1MDAzZXR4X2J1ZmZlcl9jb3VudClcXG4xNzE2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRpZiAoc2VyaWFsLVxcdTAwM2V0eF91cmJfdXNlZClcXG4xNzE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozNi40NzAwNjM3ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwMzE5ODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogSFNPIE1vZGVtIERyaXZlciAtIFRJT0NNSVdBSVQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYGhzb19zZXJpYWxfaW9jdGxgJ3MgaGFuZGxpbmcgb2YgYFRJT0NNSVdBSVRgIGFuZCBob3cgaXQgY2FsbHMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBoYXMgbW92ZWQgKmJlZm9yZSogYHNwaW5fbG9ja19pcnFgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIGlzIHdvcnRoIGEgY2xvc2UgbG9vayBiZWNhdXNlIHRoZSBvcmRlcmluZyBvZiB0aGVzZSBvcGVyYXRpb25zIOKAkyBzZXR0aW5nIHRoZSB0YXNrIHRvIGludGVycnVwdGlibGUgYmVmb3JlIGFjcXVpcmluZyBhIHNwaW5sb2NrIHRoYXQgZGlzYWJsZXMgaW50ZXJydXB0cyDigJMgY291bGQgaW50cm9kdWNlIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5GaXJzdCwgaXMgdGhpcyBldmVuIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGUgYGhzb2AgZHJpdmVyIChgVVNCX0hTT2ApIGlzIGFjY2Vzc2libGUgdmlhIFVTQiByYXcgZ2FkZ2V0LCB3aGljaCBpcyB0cml2aWFsIHRvIHNldCB1cCBpbiBhIHN5emthbGxlciBvciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgYFRJT0NNSVdBSVRgIGlvY3RsIG9wZXJhdGVzIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIEhTTyBtb2RlbSdzIHNlcmlhbCBwb3J0LCBtYWtpbmcgaXQgYSBuYXR1cmFsIHRhcmdldC4gV2UgKmtub3cqIHRoYXQgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCAoYGhzb193YWl0X21vZGVtX3N0YXR1c2ApIGhhcyBiZWVuIG1vZGlmaWVkLCBjb25maXJtaW5nIGl0cyByZWxldmFuY2UuIEFuZCBjcnVjaWFsbHksIGl0J3Mgbm90IGEgZHJpdmVyIHRoYXQgZmFsbHMgaW50byBhbnkgb2YgdGhlIHVzdWFsIFwibm8tZ29cIiBjYXRlZ29yaWVzIOKAkyBubyBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgKGxpa2UgYSBjdXN0b20gUENJZSBvciBHUFUpLCBubyB1bnVzdWFsIGFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHMsIG5vIHZlbmRvciBsb2NrLWluLCBhbmQgbm90IGp1c3Qgc2V0dXAvdGVhcmRvd24gY29kZS4gVVNCIGRyaXZlcnMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHZpcnR1YWxpemF0aW9uLiBTbywgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9ucy4gYFVTQl9IU09gIGlzIHRoZSBrZXkuIEJ1dCBsZXQncyB2ZXJpZnkuIGBVU0JfSFNPYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IFJGS0lMTCBcdTAwMjZcdTAwMjYgVFRZYC4gSSdsbCBjb25maXJtIHRoYXQgYFVTQl9IU09gIGlzIHN1ZmZpY2llbnQsIEknbGwgYWRkIGBVU0JgLCBgUkZLSUxMYCwgYFRUWWAsIGFzIGEgZmFsbGJhY2sgLSBzYWZlIGFuZCBnb29kIHByYWN0aWNlLlxuXG5OZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UncmUgemVyb2luZyBpbiBvbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBhbmQgYGhzb19zZXJpYWxfaW9jdGxgLiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCAqaXMqIHN0YXRpYyB3aXRoaW4gYGhzby5jYCwgYnV0IHRoYXQncyBub3QgYSBkZWFsLWJyZWFrZXIuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogc3RpbGwgYmVjb21lIHN5bWJvbHMsIG9yIGFyZSBpbmxpbmVkLCBzbyB3ZSBjaGVjayB0aGVtIGFsbCwgcmVnYXJkbGVzcy4gV2UndmUgdmVyaWZpZWQgdGhleSBhcmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lcyBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYC4gYGhzb193YWl0X21vZGVtX3N0YXR1c2AgaXMgKm9ubHkqIGNhbGxlZCBieSBgaHNvX3NlcmlhbF9pb2N0bGAsIGFuZCBib3RoIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgYW5kIG5vdCBvdmVyLXVzZWQuXG5cbkFscmlnaHQsIGxldCdzIHJlY2FwIHRoZSByZXF1aXJlbWVudHM6XG5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIlVTQl9IU09cIiwgXCJVU0JcIiwgXCJSRktJTExcIiwgXCJUVFlcIl1gIChUaGlzIGlzIHRoZSBtb3N0IGNvbnNlcnZhdGl2ZSBhbmQgY29ycmVjdCB3YXkpLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLCBgaHNvX3NlcmlhbF9pb2N0bGBcblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyLCBjb25jaXNlLCBhbmQgZGVmZW5zaWJsZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTMsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6NDIuNzczMjY0MjQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NzMwNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSFNPXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlJGS0lMTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNvX3dhaXRfbW9kZW1fc3RhdHVzXCIsXG4gICAgXCJoc29fc2VyaWFsX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0hTT1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJSRktJTExcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzb193YWl0X21vZGVtX3N0YXR1c1wiLFxuICAgIFwiaHNvX3NlcmlhbF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo0Mi44OTgwMDIxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzE2NjUyNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo0Mi44OTg2MDM0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyODMxMDU4MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXFxuXFxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcbmluZGV4IGMxYWVjNjc2ODhhZTcuLjcxY2FhMzc2NGIyMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuQEAgLTE1NDcsMTAgKzE1NDcsMTAgQEAgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4gXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZ0aW9jbWdldC1cdTAwM2V3YWl0cSwgXHUwMDI2d2FpdCk7XG4gXHRmb3IgKDs7KSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdFx0bWVtY3B5KFx1MDAyNmNub3csIFx1MDAyNnRpb2NtZ2V0LVx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0aWYgKCgoYXJnIFx1MDAyNiBUSU9DTV9STkcpIFx1MDAyNlx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9EU1IpIFx1MDAyNlx1MDAyNiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9DRCkgIFx1MDAyNlx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjQyLjg5ODYwNTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU4MzU0NTg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGZ1bmN0aW9uLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpwcmVjaXNlKiBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBoZXJlLiBJJ2xsIHJlYWQgdGhpcyBzZWN0aW9uIGNsb3NlbHkgdG8gYXNjZXJ0YWluIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoLiBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGV5IGdvaW5nIGFib3V0IGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZWluZyBhZGRyZXNzZWQ/IElzIHRoaXMgYSB0aW1pbmcgaXNzdWU/IE9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGluIHRoZSBjb21tdW5pY2F0aW9uIGhhbmRzaGFrZT8gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcImhvd1wiIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZXJzIGhhZCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo1OC43MzQwNjg2NTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHQgKi9cXG4xNTMxOlxcdHN0YXRpYyBpbnRcXG4xNTMyOlxcdGhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNTMzOlxcdHtcXG4xNTM0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbjE1MzU6XFx0XFx0c3RydWN0IHVhcnRfaWNvdW50IGNwcmV2LCBjbm93O1xcbjE1MzY6XFx0XFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0O1xcbjE1Mzc6XFx0XFx0aW50IHJldDtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dGlvY21nZXQgPSBzZXJpYWwtXFx1MDAzZXRpb2NtZ2V0O1xcbjE1NDA6XFx0XFx0aWYgKCF0aW9jbWdldClcXG4xNTQxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NDI6XFx0XFx0LypcXG4xNTQzOlxcdFxcdCAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5XFxuMTU0NDpcXHRcXHQgKi9cXG4xNTQ1OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NDY6XFx0XFx0bWVtY3B5KFxcdTAwMjZjcHJldiwgXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcXG4xNTQ3OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuMTU0ODpcXHRcXHRhZGRfd2FpdF9xdWV1ZShcXHUwMDI2dGlvY21nZXQtXFx1MDAzZXdhaXRxLCBcXHUwMDI2d2FpdCk7XFxuMTU0OTpcXHRcXHRmb3IgKDs7KSB7XFxuMTU1MDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE1NTE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuMTU1MjpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNmNub3csIFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XFxuMTU1MzpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NTQ6XFx0XFx0XFx0aWYgKCgoYXJnIFxcdTAwMjYgVElPQ01fUk5HKSBcXHUwMDI2XFx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcXG4xNTU1OlxcdFxcdFxcdCAgICAoKGFyZyBcXHUwMDI2IFRJT0NNX0RTUikgXFx1MDAyNlxcdTAwMjYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8XFxuMTU1NjpcXHRcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9DRCkgIFxcdTAwMjZcXHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xcbjE1NTc6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4xNTU4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NTk6XFx0XFx0XFx0fVxcbjE1NjA6XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4xNTYxOlxcdFxcdFxcdC8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi9cXG4xNTYyOlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjE1NjM6XFx0XFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbjE1NjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU2NTpcXHRcXHRcXHR9XFxuMTU2NjpcXHRcXHRcXHRjcHJldiA9IGNub3c7XFxuMTU2NzpcXHRcXHR9XFxuMTU2ODpcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuMTU2OTpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2dGlvY21nZXQtXFx1MDAzZXdhaXRxLCBcXHUwMDI2d2FpdCk7XFxuMTU3MDpcXHRcXG4xNTcxOlxcdFxcdHJldHVybiByZXQ7XFxuMTU3MjpcXHR9XFxuMTU3MzpcXHRcXG4xNTc0OlxcdC8qXFxuMTU3NTpcXHQgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUylcXG4xNTc2OlxcdCAqIFJldHVybjogd3JpdGUgY291bnRlcnMgdG8gdGhlIHVzZXIgcGFzc2VkIGNvdW50ZXIgc3RydWN0XFxuMTU3NzpcXHQgKiBOQjogYm90aCAxLVxcdTAwM2UwIGFuZCAwLVxcdTAwM2UxIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3JcXG4xNTc4OlxcdCAqICAgICBSSSB3aGVyZSBvbmx5IDAtXFx1MDAzZTEgaXMgY291bnRlZC5cXG4xNTc5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo1OC43MzU0NzAxMjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk5NDE2NDUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZXJpYWwgRHJpdmVyIFdhaXQgTG9vcCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXkndmUgdXBkYXRlZCBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBjYWxsICpiZWZvcmUqIHJlYWRpbmcgdGhlIGB0aW9jbWdldC1cdTAwM2VpY291bnRgIHVuZGVyIHRoZSBzcGlubG9jay4gQWgsIGNsYXNzaWMgbG9zdC13YWtldXAgZml4LiBUaGUgaW50ZXJydXB0L3dha2V1cCBjb3VsZCBoYXZlIGhhcHBlbmVkIHJpZ2h0IGFmdGVyIHRoZSByZWFkLCBidXQgYmVmb3JlIHNldHRpbmcgdGhlIHRhc2sgdG8gaW50ZXJydXB0aWJsZSwgcmVzdWx0aW5nIGluIGEgcGVybWFuZW50IHdhaXQuIFB1dHRpbmcgYHNldF9jdXJyZW50X3N0YXRlYCBmaXJzdCBlbnN1cmVzIHRoYXQgaWYgdGhlIHdha2V1cCBvY2N1cnMgKmFmdGVyKiB0aGUgYGljb3VudGAgdXBkYXRlLCB0aGUgdGFzayBnZXRzIG1hcmtlZCBhcyByZWFkeSBieSBgd2FrZV91cGAgYW5kIHdvbid0IHNsZWVwIGluZGVmaW5pdGVseS4gU21hcnQuXG5cbk5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gQW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgc25lYWtpbmcgaW4/IEkndmUgZ290IGBjcHJldmAgYW5kIGBjbm93YCwgYm90aCBgc3RydWN0IHVhcnRfaWNvdW50YC4gVGhlIGNvZGUgZG9lcyBgbWVtY3B5YCB0byBwb3B1bGF0ZSBib3RoLiBUaGUgZmllbGRzIGJlaW5nIGNoZWNrZWQgKGBybmdgLCBgZHNyYCwgYGRjZGApIHdpdGhpbiBgY25vd2AgYXJlIHByb3Blcmx5IGNvcGllZC4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RydWN0cywgYW5kIG5vIHBhZGRpbmcgbGVha3MgdGhhdCBJIGNhbiBzZWUuIFRoaXMgc2VlbXMgcHVyZWx5IGFib3V0IHRocmVhZCBzY2hlZHVsaW5nIGFuZCBhZGRyZXNzaW5nIHRoYXQgcmFjZSBjb25kaXRpb24uIENsZWFuIGFuZCBzaW1wbGUuXG5cbkFscmlnaHQsIGxldCdzIGFzc2VzcyB0aGUgYE5lZWRzS01TQU5gIGZsYWcuIERvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSAqbmV3KiB3YXlzIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEl0IGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgaXQgZG9lc24ndCBjcmVhdGUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm8gYnVmZmVyIGxlbmd0aCBpc3N1ZXMgb3IgYm91bmRhcnkgcHJvYmxlbXMgZWl0aGVyLiBTbywgZGVmaW5pdGVseSBubyBLTVNBTiBjb25jZXJucy4gVGhpcyBpcyBhIHNvbGlkIGZpeCBmb3IgdGhlIHJhY2UsIGJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgS01TQU4gd291bGQgZmxhZy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IExldCdzIHJ1biBkb3duIHRoZSBjaGVja2xpc3QuXG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ6IE5vcGUuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IE5vcGUuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6IE5hZGEuXG40LiBCb3VuZHMgY2hlY2tzIC8gbGVuZ3RocyAvIGxvZ2ljIGFsbG93aW5nIHVuaW5pdCBieXRlcyBhY2Nlc3M6IE5vdGhpbmcuXG5cbkNvbmNsdXNpdmVseSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cbkxldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNzowNS43Mjk2MzkyOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cXG5cXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXFxuXFxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowggxbq[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 09:25:41 +0000 UTC FinishedAt: 2026-09-07 10:07:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_HSO", "USB", "RFKILL", "TTY" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "38b6be101006d3e7af972999f45d4f1e8250587a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "USB_HSO", "USB", "RFKILL", "TTY" ], "series_id": "70ffcec5-9374-4219-8d36-9a5f4110b573" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "hso_wait_modem_status", "hso_serial_ioctl" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1VTQl9IU08mIzM0OywKICAgICYjMzQ7VVNCJiMzNDssCiAgICAmIzM0O1JGS0lMTCYjMzQ7LAogICAgJiMzNDtUVFkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtoc29fd2FpdF9tb2RlbV9zdGF0dXMmIzM0OywKICAgICYjMzQ7aHNvX3NlcmlhbF9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2tgIGFuZCByZWFkaW5nIHRoZSBtb2RlbSBpbnRlcnJ1cHQgY291bnRlcnMgYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGNub3dgLCBgY3ByZXZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHlgIGZyb20gYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXG5pbmRleCBjMWFlYzY3Njg4YWU3Li43MWNhYTM3NjRiMjM5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcbkBAIC0xNTQ3LDEwICYjNDM7MTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbiYjNDM7XHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdFx0bWVtY3B5KFx1MDAyNmNub3csIFx1MDAyNnRpb2NtZ2V0LVx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0aWYgKCgoYXJnIFx1MDAyNiBUSU9DTV9STkcpIFx1MDAyNlx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9EU1IpIFx1MDAyNlx1MDAyNiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9DRCkgIFx1MDAyNlx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSFNPJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtSRktJTEwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgICAmIzM0O2hzb19zZXJpYWxfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIE1vbiBTZXAgNyAxMDowNjoyNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwppbmRleCBjMWFlYzY3Njg4YWU3Li43MWNhYTM3NjRiMjM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvdXNiL2hzby5jCkBAIC0xNTQ3LDEwICYjNDM7MTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpCiAJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VyaWFsLSZndDtzZXJpYWxfbG9jayk7CiAJYWRkX3dhaXRfcXVldWUoJmFtcDt0aW9jbWdldC0mZ3Q7d2FpdHEsICZhbXA7d2FpdCk7CiAJZm9yICg7OykgewomIzQzOwkJc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTsKIAkJc3Bpbl9sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwogCQltZW1jcHkoJmFtcDtjbm93LCAmYW1wO3Rpb2NtZ2V0LSZndDtpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTsKIAkJc3Bpbl91bmxvY2tfaXJxKCZhbXA7c2VyaWFsLSZndDtzZXJpYWxfbG9jayk7Ci0JCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCWlmICgoKGFyZyAmYW1wOyBUSU9DTV9STkcpICZhbXA7JmFtcDsgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8CiAJCSAgICAoKGFyZyAmYW1wOyBUSU9DTV9EU1IpICZhbXA7JmFtcDsgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8CiAJCSAgICAoKGFyZyAmYW1wOyBUSU9DTV9DRCkgICZhbXA7JmFtcDsgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpKSB7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwMDcKCQkJCQkJCW91dHB1dDogNjkKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEl0IGxvb2tzIGxpa2UgdGhlIHRhcmdldCBpcyBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24gY2xvc2VseS4KCk5vdywgY29udGV4dCBpcyBrZXkuIEkgc2hvdWxkIGFsc28gY2hlY2sgd2hhdCBlbHNlIGlzIGhhcHBlbmluZyBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCB0byBnZXQgYSBicm9hZGVyIHBpY3R1cmUuIEFyZSB0aGVyZSByZWxhdGVkIGNoYW5nZXM/IFdoYXQmIzM5O3MgdGhlIG92ZXJhbGwgcHVycG9zZSBvZiB0aGF0IG1vZHVsZT8KCkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoZSB0b29scyBmaXJlZCB1cC4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBkaWcgdXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2hzby5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9oc28uYz0xNTMxPXN0YXRpYyBpbnRcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNTMyOmhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNTMzLXtcbi0tXG5kcml2ZXJzL25ldC91c2IvaHNvLmM9MTY4Nz1zdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcbi0tXG5kcml2ZXJzL25ldC91c2IvaHNvLmMtMTY5Ny1cdGNhc2UgVElPQ01JV0FJVDpcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNjk4Olx0XHRyZXQgPSBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc2VyaWFsLCBhcmcpO1xuZHJpdmVycy9uZXQvdXNiL2hzby5jLTE2OTktXHRcdGJyZWFrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qSFNPJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MzA9Y29uZmlnIFVTQl9ORVRfUU1JX1dXQU5cbi0tXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NTEtXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NTI6Y29uZmlnIFVTQl9IU09cbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU1My1cdHRyaXN0YXRlIFwmIzM0O09wdGlvbiBVU0IgSGlnaCBTcGVlZCBNb2JpbGUgRGV2aWNlc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1ODUKCQkJCQkJCW91dHB1dDogNzUKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIEhTTyBNb2RlbSBTdGF0dXMgV2FpdCBGdW5jdGlvbioqCgpPa2F5LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24gd29ya3Mgd2l0aGluIHRoZSBIU08gZHJpdmVyLiBNeSBpbnN0aW5jdCBpcyB0byBzdGFydCBieSBuYXZpZ2F0aW5nIHRvIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIGFuZCB6ZXJvaW5nIGluIG9uIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gYWJzb3JiIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvbywgYmVjYXVzZSBjb250ZXh0IGlzIGtleSwgeW91IGtub3c/IEZ1bmN0aW9ucyByYXJlbHkgbGl2ZSBpbiBhIHZhY3V1bS4KCkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9IU09gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgSFNPIGZ1bmN0aW9uYWxpdHkgdG8gZXZlbiBiZSBwcmVzZW50LiBUaGF0JiMzOTtsbCBzYXZlIG1lIGZyb20gYmFuZ2luZyBteSBoZWFkIGFnYWluc3QgdGhlIHdhbGwgbGF0ZXIsIGZpZ3VyaW5nIG91dCB3aHkgc29tZXRoaW5nIGlzbiYjMzk7dCB3b3JraW5nIGlmIHRoZSBidWlsZCBkb2VzbiYjMzk7dCBldmVuIGluY2x1ZGUgdGhlIHJlbGV2YW50IG1vZHVsZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdGhlIGhvdXNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhvc2UgY29uZmlnIG9wdGlvbnMgYXJlLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC91c2IvaHNvLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNTMwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE1MzA6XHQgKi9cbjE1MzE6XHRzdGF0aWMgaW50XG4xNTMyOlx0aHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMTUzMzpcdHtcbjE1MzQ6XHRcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xuMTUzNTpcdFx0c3RydWN0IHVhcnRfaWNvdW50IGNwcmV2LCBjbm93O1xuMTUzNjpcdFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0O1xuMTUzNzpcdFx0aW50IHJldDtcbjE1Mzg6XHRcbjE1Mzk6XHRcdHRpb2NtZ2V0ID0gc2VyaWFsLVx1MDAzZXRpb2NtZ2V0O1xuMTU0MDpcdFx0aWYgKCF0aW9jbWdldClcbjE1NDE6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4xNTQyOlx0XHQvKlxuMTU0MzpcdFx0ICogbm90ZSB0aGUgY291bnRlcnMgb24gZW50cnlcbjE1NDQ6XHRcdCAqL1xuMTU0NTpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU0NjpcdFx0bWVtY3B5KFx1MDAyNmNwcmV2LCBcdTAwMjZ0aW9jbWdldC1cdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcbjE1NDc6XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU0ODpcdFx0YWRkX3dhaXRfcXVldWUoXHUwMDI2dGlvY21nZXQtXHUwMDNld2FpdHEsIFx1MDAyNndhaXQpO1xuMTU0OTpcdFx0Zm9yICg7Oykge1xuMTU1MDpcdFx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuMTU1MTpcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4xNTUyOlx0XHRcdG1lbWNweShcdTAwMjZjbm93LCBcdTAwMjZ0aW9jbWdldC1cdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcbjE1NTM6XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4xNTU0Olx0XHRcdGlmICgoKGFyZyBcdTAwMjYgVElPQ01fUk5HKSBcdTAwMjZcdTAwMjYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8XG4xNTU1Olx0XHRcdCAgICAoKGFyZyBcdTAwMjYgVElPQ01fRFNSKSBcdTAwMjZcdTAwMjYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8XG4xNTU2Olx0XHRcdCAgICAoKGFyZyBcdTAwMjYgVElPQ01fQ0QpICBcdTAwMjZcdTAwMjYgKGNub3cuZGNkICE9IGNwcmV2LmRjZCkpKSB7XG4xNTU3Olx0XHRcdFx0cmV0ID0gMDtcbjE1NTg6XHRcdFx0XHRicmVhaztcbjE1NTk6XHRcdFx0fVxuMTU2MDpcdFx0XHRzY2hlZHVsZSgpO1xuMTU2MTpcdFx0XHQvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovXG4xNTYyOlx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xuMTU2MzpcdFx0XHRcdHJldCA9IC1FUkVTVEFSVFNZUztcbjE1NjQ6XHRcdFx0XHRicmVhaztcbjE1NjU6XHRcdFx0fVxuMTU2NjpcdFx0XHRjcHJldiA9IGNub3c7XG4xNTY3Olx0XHR9XG4xNTY4Olx0XHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XG4xNTY5Olx0XHRyZW1vdmVfd2FpdF9xdWV1ZShcdTAwMjZ0aW9jbWdldC1cdTAwM2V3YWl0cSwgXHUwMDI2d2FpdCk7XG4xNTcwOlx0XG4xNTcxOlx0XHRyZXR1cm4gcmV0O1xuMTU3MjpcdH1cbjE1NzM6XHRcbjE1NzQ6XHQvKlxuMTU3NTpcdCAqIEdldCBjb3VudGVyIG9mIGlucHV0IHNlcmlhbCBsaW5lIGludGVycnVwdHMgKERDRCxSSSxEU1IsQ1RTKVxuMTU3NjpcdCAqIFJldHVybjogd3JpdGUgY291bnRlcnMgdG8gdGhlIHVzZXIgcGFzc2VkIGNvdW50ZXIgc3RydWN0XG4xNTc3Olx0ICogTkI6IGJvdGggMS1cdTAwM2UwIGFuZCAwLVx1MDAzZTEgdHJhbnNpdGlvbnMgYXJlIGNvdW50ZWQgZXhjZXB0IGZvclxuMTU3ODpcdCAqICAgICBSSSB3aGVyZSBvbmx5IDAtXHUwMDNlMSBpcyBjb3VudGVkLlxuMTU3OTpcdCAqL1xuMTU4MDpcdHN0YXRpYyBpbnQgaHNvX2dldF9jb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxuMTU4MTpcdFx0XHQgIHN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0ICppY291bnQpXG4xNTgyOlx0e1xuMTU4MzpcdFx0c3RydWN0IHVhcnRfaWNvdW50IGNub3c7XG4xNTg0Olx0XHRzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gdHR5LVx1MDAzZWRyaXZlcl9kYXRhO1xuMTU4NTpcdFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0ID0gc2VyaWFsLVx1MDAzZXRpb2NtZ2V0O1xuMTU4NjpcdFxuMTU4NzpcdFx0bWVtc2V0KGljb3VudCwgMCwgc2l6ZW9mKHN0cnVjdCBzZXJpYWxfaWNvdW50ZXJfc3RydWN0KSk7XG4xNTg4Olx0XG4xNTg5Olx0XHRpZiAoIXRpb2NtZ2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1NDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDU0NTpcdFx0ICAgICogY2RjLXdkbTogUXVhbGNvbW0gTVNNIEludGVyZmFjZSAoUU1JKSBwcm90b2NvbCBvbiAvZGV2L2NkYy13ZG14XG4gNTQ2Olx0XG4gNTQ3Olx0XHQgIEEgbW9kZW0gbWFuYWdlciB3aXRoIHN1cHBvcnQgZm9yIFFNSSBpcyByZWNvbW1lbmRlZC5cbiA1NDg6XHRcbiA1NDk6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTUwOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBxbWlfd3dhbi5cbiA1NTE6XHRcbiA1NTI6XHRjb25maWcgVVNCX0hTT1xuIDU1MzpcdFx0dHJpc3RhdGUgXCYjMzQ7T3B0aW9uIFVTQiBIaWdoIFNwZWVkIE1vYmlsZSBEZXZpY2VzXCYjMzQ7XG4gNTU0Olx0XHRkZXBlbmRzIG9uIFVTQiBcdTAwMjZcdTAwMjYgUkZLSUxMIFx1MDAyNlx1MDAyNiBUVFlcbiA1NTU6XHRcdGRlZmF1bHQgblxuIDU1NjpcdFx0aGVscFxuIDU1NzpcdFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91IGhhdmUgYW4gT3B0aW9uIEhTRFBBL0hTVVBBIGNhcmQuXG4gNTU4Olx0XHQgIFRoZXNlIGNhcmRzIHN1cHBvcnQgZG93bmxpbmsgc3BlZWRzIG9mIDcuMk1icHMgb3IgZ3JlYXRlci5cbiA1NTk6XHRcbiA1NjA6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gNTYxOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoc28uXG4gNTYyOlx0XG4gNTYzOlx0Y29uZmlnIFVTQl9ORVRfSU5UNTFYMVxuIDU2NDpcdFx0dHJpc3RhdGUgXCYjMzQ7SW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXCYjMzQ7XG4gNTY1Olx0XHRkZXBlbmRzIG9uIFVTQl9VU0JORVRcbiA1NjY6XHRcdHNlbGVjdCBVU0JfTkVUX0NEQ0VUSEVSXG4gNTY3Olx0XHRoZWxwXG4gNTY4Olx0XHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UmIzM5O3JlIHVzaW5nIGEgMTRNYiBVU0ItYmFzZWQgUExDXG4gNTY5Olx0XHQgIChQb3dlcmxpbmUgQ29tbXVuaWNhdGlvbnMpIHNvbHV0aW9uIHdpdGggYW4gSW50ZWxsb25cbiA1NzA6XHRcdCAgSU5UNTF4MS9JTlQ1MjAwIGNoaXAsIGxpa2UgdGhlIFwmIzM0O2Rldm9sbyBkTGFuIGR1b1wmIzM0Oy5cbiA1NzE6XHRcbiA1NzI6XHRjb25maWcgVVNCX0NEQ19QSE9ORVRcbiA1NzM6XHRcdHRyaXN0YXRlIFwmIzM0O0NEQyBQaG9uZXQgc3VwcG9ydFwmIzM0O1xuIDU3NDpcdFx0ZGVwZW5kcyBvbiBQSE9ORVQgXHUwMDI2XHUwMDI2IFVTQl9VU0JORVRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzkzCgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFwcHJvYWNoIHRvIEVtdWxhdGluZyBhbmQgUHJvYmluZyBVU0JfSFNPIGluIFN5emthbGxlci9RRU1VKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgVVNCX0hTT2AgZHJpdmVyIHdpdGhpbiB0aGUgU3l6a2FsbGVyL1FFTVUgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG9mIHRoaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIGxldmVyYWdlcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el91c2JfY29udHJvbF9pb2AsIGVzc2VudGlhbGx5IGNyYWZ0aW5nIGEgdmlydHVhbCBVU0IgbGFuZHNjYXBlIHRvIHByb2JlIHZhcmlvdXMgZHJpdmVycy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCBgaHNvYCBlZmZlY3RpdmVseSB0aHJvdWdoIHRoaXMgcmF3IGdhZGdldCBlbXVsYXRpb24uCgpUaGUgZ29vZCBuZXdzIGlzLCB5ZXMsIHRoZSByYXcgZ2FkZ2V0IGFwcHJvYWNoIHNob3VsZCB3b3JrLiBEcml2ZXJzIGxvY2F0ZWQgaW4gYGRyaXZlcnMvbmV0L3VzYi9gIGFyZSBpbmRlZWQgcmVhY2hhYmxlIHZpYSB0aGlzIG1ldGhvZC4gRXNzZW50aWFsbHksIFN5emthbGxlciByZWdpc3RlcnMgVVNCIElEcywgdGhlbiBlbXVsYXRlcyB0aGUgVVNCIGRldmljZS4gIFRoZSBkcml2ZXIgdGhlbiBiaW5kcyB0byB0aGlzIGVtdWxhdGVkIGRldmljZSBhbmQsIGluIHR1cm4sIGV4cG9zZXMgZWl0aGVyIGB0dHlgIG9yIGBuZXRkZXZgIGludGVyZmFjZXMuCgpOb3csIHRvIGRpZyBkZWVwZXIsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcm5hbCB3b3JraW5ncyBiZXR0ZXIuIE15IG5leHQgc3RlcCB3aWxsIGJlIHRvIHRob3JvdWdobHkgZXhhbWluZSB3aGF0IHRoZSBgaHNvX3NlcmlhbF9pb2N0bGAgZnVuY3Rpb24gaXMgZG9pbmcsIGFuZCB0aGVuIHRyYWNlIHRoZSBjYWxsZXJzIG9mIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgYmVoYXZpb3IgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBVU0IgSFNPIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5leHQgcGhhc2UgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgZW11bGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3VzYi9oc28uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE2ODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTY4MDpcdFxuMTY4MTpcdFx0cmV0dXJuIHVzYl9jb250cm9sX21zZyhzZXJpYWwtXHUwMDNlcGFyZW50LVx1MDAzZXVzYixcbjE2ODI6XHRcdFx0XHQgICAgICAgdXNiX3NuZGN0cmxwaXBlKHNlcmlhbC1cdTAwM2VwYXJlbnQtXHUwMDNldXNiLCAwKSwgMHgyMixcbjE2ODM6XHRcdFx0XHQgICAgICAgMHgyMSwgdmFsLCBpZl9udW0sIE5VTEwsIDAsXG4xNjg0Olx0XHRcdFx0ICAgICAgIFVTQl9DVFJMX1NFVF9USU1FT1VUKTtcbjE2ODU6XHR9XG4xNjg2Olx0XG4xNjg3Olx0c3RhdGljIGludCBoc29fc2VyaWFsX2lvY3RsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksXG4xNjg4Olx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKVxuMTY4OTpcdHtcbjE2OTA6XHRcdHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB0dHktXHUwMDNlZHJpdmVyX2RhdGE7XG4xNjkxOlx0XHRpbnQgcmV0ID0gMDtcbjE2OTI6XHRcdGhzb19kYmcoMHg4LCBcJiMzNDtJT0NUTCBjbWQ6ICVkLCBhcmc6ICVsZFxcblwmIzM0OywgY21kLCBhcmcpO1xuMTY5MzpcdFxuMTY5NDpcdFx0aWYgKCFzZXJpYWwpXG4xNjk1Olx0XHRcdHJldHVybiAtRU5PREVWO1xuMTY5NjpcdFx0c3dpdGNoIChjbWQpIHtcbjE2OTc6XHRcdGNhc2UgVElPQ01JV0FJVDpcbjE2OTg6XHRcdFx0cmV0ID0gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHNlcmlhbCwgYXJnKTtcbjE2OTk6XHRcdFx0YnJlYWs7XG4xNzAwOlx0XHRkZWZhdWx0OlxuMTcwMTpcdFx0XHRyZXQgPSAtRU5PSU9DVExDTUQ7XG4xNzAyOlx0XHRcdGJyZWFrO1xuMTcwMzpcdFx0fVxuMTcwNDpcdFx0cmV0dXJuIHJldDtcbjE3MDU6XHR9XG4xNzA2Olx0XG4xNzA3Olx0XG4xNzA4Olx0Lyogc3RhcnRzIGEgdHJhbnNtaXQgKi9cbjE3MDk6XHRzdGF0aWMgdm9pZCBoc29fa2lja190cmFuc21pdChzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsKVxuMTcxMDpcdHtcbjE3MTE6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4xNzEyOlx0XHRpbnQgcmVzO1xuMTcxMzpcdFxuMTcxNDpcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrLCBmbGFncyk7XG4xNzE1Olx0XHRpZiAoIXNlcmlhbC1cdTAwM2V0eF9idWZmZXJfY291bnQpXG4xNzE2Olx0XHRcdGdvdG8gb3V0O1xuMTcxNzpcdFxuMTcxODpcdFx0aWYgKHNlcmlhbC1cdTAwM2V0eF91cmJfdXNlZClcbjE3MTk6XHRcdFx0Z290byBvdXQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NTMKCQkJCQkJCW91dHB1dDogMTM0CgkJCQkJCQl0aG91Z2h0czogODM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IEFuYWx5c2lzOiBIU08gTW9kZW0gRHJpdmVyIC0gVElPQ01JV0FJVCBIYW5kbGluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBXZSYjMzk7cmUgbG9va2luZyBhdCBgaHNvX3NlcmlhbF9pb2N0bGAmIzM5O3MgaGFuZGxpbmcgb2YgYFRJT0NNSVdBSVRgIGFuZCBob3cgaXQgY2FsbHMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBoYXMgbW92ZWQgKmJlZm9yZSogYHNwaW5fbG9ja19pcnFgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIGlzIHdvcnRoIGEgY2xvc2UgbG9vayBiZWNhdXNlIHRoZSBvcmRlcmluZyBvZiB0aGVzZSBvcGVyYXRpb25zIOKAkyBzZXR0aW5nIHRoZSB0YXNrIHRvIGludGVycnVwdGlibGUgYmVmb3JlIGFjcXVpcmluZyBhIHNwaW5sb2NrIHRoYXQgZGlzYWJsZXMgaW50ZXJydXB0cyDigJMgY291bGQgaW50cm9kdWNlIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLgoKRmlyc3QsIGlzIHRoaXMgZXZlbiBmdXp6YWJsZT8gQWJzb2x1dGVseS4gVGhlIGBoc29gIGRyaXZlciAoYFVTQl9IU09gKSBpcyBhY2Nlc3NpYmxlIHZpYSBVU0IgcmF3IGdhZGdldCwgd2hpY2ggaXMgdHJpdmlhbCB0byBzZXQgdXAgaW4gYSBzeXprYWxsZXIgb3Igc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gVGhlIGBUSU9DTUlXQUlUYCBpb2N0bCBvcGVyYXRlcyBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBIU08gbW9kZW0mIzM5O3Mgc2VyaWFsIHBvcnQsIG1ha2luZyBpdCBhIG5hdHVyYWwgdGFyZ2V0LiBXZSAqa25vdyogdGhhdCBjb2RlIGluIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIChgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCkgaGFzIGJlZW4gbW9kaWZpZWQsIGNvbmZpcm1pbmcgaXRzIHJlbGV2YW5jZS4gQW5kIGNydWNpYWxseSwgaXQmIzM5O3Mgbm90IGEgZHJpdmVyIHRoYXQgZmFsbHMgaW50byBhbnkgb2YgdGhlIHVzdWFsICYjMzQ7bm8tZ28mIzM0OyBjYXRlZ29yaWVzIOKAkyBubyBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgKGxpa2UgYSBjdXN0b20gUENJZSBvciBHUFUpLCBubyB1bnVzdWFsIGFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHMsIG5vIHZlbmRvciBsb2NrLWluLCBhbmQgbm90IGp1c3Qgc2V0dXAvdGVhcmRvd24gY29kZS4gVVNCIGRyaXZlcnMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHZpcnR1YWxpemF0aW9uLiBTbywgYFdvcnRoRnV6emluZyA9IHRydWVgLgoKTm93LCB0aGUgY29uZmlndXJhdGlvbnMuIGBVU0JfSFNPYCBpcyB0aGUga2V5LiBCdXQgbGV0JiMzOTtzIHZlcmlmeS4gYFVTQl9IU09gIGRlcGVuZHMgb24gYFVTQiAmYW1wOyZhbXA7IFJGS0lMTCAmYW1wOyZhbXA7IFRUWWAuIEkmIzM5O2xsIGNvbmZpcm0gdGhhdCBgVVNCX0hTT2AgaXMgc3VmZmljaWVudCwgSSYjMzk7bGwgYWRkIGBVU0JgLCBgUkZLSUxMYCwgYFRUWWAsIGFzIGEgZmFsbGJhY2sgLSBzYWZlIGFuZCBnb29kIHByYWN0aWNlLgoKTmV4dCwgdGhlIGZvY3VzIHN5bWJvbHMuIFdlJiMzOTtyZSB6ZXJvaW5nIGluIG9uIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGFuZCBgaHNvX3NlcmlhbF9pb2N0bGAuIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgICppcyogc3RhdGljIHdpdGhpbiBgaHNvLmNgLCBidXQgdGhhdCYjMzk7cyBub3QgYSBkZWFsLWJyZWFrZXIuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogc3RpbGwgYmVjb21lIHN5bWJvbHMsIG9yIGFyZSBpbmxpbmVkLCBzbyB3ZSBjaGVjayB0aGVtIGFsbCwgcmVnYXJkbGVzcy4gV2UmIzM5O3ZlIHZlcmlmaWVkIHRoZXkgYXJlIHRoZSBvbmx5IHJlbGV2YW50IG9uZXMgaW4gYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AuIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGlzICpvbmx5KiBjYWxsZWQgYnkgYGhzb19zZXJpYWxfaW9jdGxgLCBhbmQgYm90aCBmdW5jdGlvbnMgYXJlIHNwZWNpZmljIGFuZCBub3Qgb3Zlci11c2VkLgoKQWxyaWdodCwgbGV0JiMzOTtzIHJlY2FwIHRoZSByZXF1aXJlbWVudHM6CgoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtVU0JfSFNPJiMzNDssICYjMzQ7VVNCJiMzNDssICYjMzQ7UkZLSUxMJiMzNDssICYjMzQ7VFRZJiMzNDtdYCAoVGhpcyBpcyB0aGUgbW9zdCBjb25zZXJ2YXRpdmUgYW5kIGNvcnJlY3Qgd2F5KS4KKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLCBgaHNvX3NlcmlhbF9pb2N0bGAKCkV2ZXJ5dGhpbmcgY2hlY2tzIG91dC4gVGhlIHJlYXNvbmluZyBpcyBjbGVhciwgY29uY2lzZSwgYW5kIGRlZmVuc2libGUuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAxMDowNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VVNCX0hTTyYjMzQ7LAogICAgJiMzNDtVU0ImIzM0OywKICAgICYjMzQ7UkZLSUxMJiMzNDssCiAgICAmIzM0O1RUWSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2hzb193YWl0X21vZGVtX3N0YXR1cyYjMzQ7LAogICAgJiMzNDtoc29fc2VyaWFsX2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtVU0JfSFNPJiMzNDssCiAgICAmIzM0O1VTQiYjMzQ7LAogICAgJiMzNDtSRktJTEwmIzM0OywKICAgICYjMzQ7VFRZJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHNvX3dhaXRfbW9kZW1fc3RhdHVzJiMzNDssCiAgICAmIzM0O2hzb19zZXJpYWxfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cdTAwM2VpY291bnRgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKWAuIFRoaXMgZml4ZXMgYSBjbGFzc2ljIGxvc3Qgd2FrZS11cCByYWNlIGNvbmRpdGlvbiBpbiB0aGUgd2FpdCBsb29wLlxuXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cdTAwM2VpY291bnRgLiBUaGUgY2hhbmdlIHJlbGF0ZXMgZW50aXJlbHkgdG8gc2NoZWR1bGVyIHN0YXRlIGFuZCBwcm9jZXNzIHN5bmNocm9uaXphdGlvbiwgd2hpY2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcy4gVGh1cywgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmMKaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvdXNiL2hzby5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uYwpAQCAtMTU0NywxMCAmIzQzOzE1NDcsMTAgQEAgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwogCWFkZF93YWl0X3F1ZXVlKCZhbXA7dGlvY21nZXQtJmd0O3dhaXRxLCAmYW1wO3dhaXQpOwogCWZvciAoOzspIHsKJiM0MzsJCXNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7CiAJCXNwaW5fbG9ja19pcnEoJmFtcDtzZXJpYWwtJmd0O3NlcmlhbF9sb2NrKTsKIAkJbWVtY3B5KCZhbXA7Y25vdywgJmFtcDt0aW9jbWdldC0mZ3Q7aWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7CiAJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NlcmlhbC0mZ3Q7c2VyaWFsX2xvY2spOwotCQlzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpOwogCQlpZiAoKChhcmcgJmFtcDsgVElPQ01fUk5HKSAmYW1wOyZhbXA7IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fAogCQkgICAgKChhcmcgJmFtcDsgVElPQ01fRFNSKSAmYW1wOyZhbXA7IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fAogCQkgICAgKChhcmcgJmFtcDsgVElPQ01fQ0QpICAmYW1wOyZhbXA7IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkgewo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIxOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AgcGF0Y2guIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB0aGUgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24sIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgbmF0dXJhbGx5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgKnByZWNpc2UqIGJlaGF2aW9yIGJlaW5nIG1vZGlmaWVkIGhlcmUuIEkmIzM5O2xsIHJlYWQgdGhpcyBzZWN0aW9uIGNsb3NlbHkgdG8gYXNjZXJ0YWluIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoLiBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGV5IGdvaW5nIGFib3V0IGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZWluZyBhZGRyZXNzZWQ/IElzIHRoaXMgYSB0aW1pbmcgaXNzdWU/IE9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGluIHRoZSBjb21tdW5pY2F0aW9uIGhhbmRzaGFrZT8gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgJiMzNDt3aHkmIzM0OyBhbmQgJiMzNDtob3cmIzM0OyBvZiB0aGlzIGNoYW5nZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlcnMgaGFkIGluIG1pbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDEwOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvdXNiL2hzby5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTUzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNTMwOlx0ICovXG4xNTMxOlx0c3RhdGljIGludFxuMTUzMjpcdGhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcbjE1MzM6XHR7XG4xNTM0Olx0XHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcbjE1MzU6XHRcdHN0cnVjdCB1YXJ0X2ljb3VudCBjcHJldiwgY25vdztcbjE1MzY6XHRcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldDtcbjE1Mzc6XHRcdGludCByZXQ7XG4xNTM4Olx0XG4xNTM5Olx0XHR0aW9jbWdldCA9IHNlcmlhbC1cdTAwM2V0aW9jbWdldDtcbjE1NDA6XHRcdGlmICghdGlvY21nZXQpXG4xNTQxOlx0XHRcdHJldHVybiAtRU5PRU5UO1xuMTU0MjpcdFx0LypcbjE1NDM6XHRcdCAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5XG4xNTQ0Olx0XHQgKi9cbjE1NDU6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbjE1NDY6XHRcdG1lbWNweShcdTAwMjZjcHJldiwgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4xNTQ3Olx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbjE1NDg6XHRcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbjE1NDk6XHRcdGZvciAoOzspIHtcbjE1NTA6XHRcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbjE1NTE6XHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU1MjpcdFx0XHRtZW1jcHkoXHUwMDI2Y25vdywgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4xNTUzOlx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuMTU1NDpcdFx0XHRpZiAoKChhcmcgXHUwMDI2IFRJT0NNX1JORykgXHUwMDI2XHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxuMTU1NTpcdFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0RTUikgXHUwMDI2XHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxuMTU1NjpcdFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0NEKSAgXHUwMDI2XHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xuMTU1NzpcdFx0XHRcdHJldCA9IDA7XG4xNTU4Olx0XHRcdFx0YnJlYWs7XG4xNTU5Olx0XHRcdH1cbjE1NjA6XHRcdFx0c2NoZWR1bGUoKTtcbjE1NjE6XHRcdFx0Lyogc2VlIGlmIGEgc2lnbmFsIGRpZCBpdCAqL1xuMTU2MjpcdFx0XHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbjE1NjM6XHRcdFx0XHRyZXQgPSAtRVJFU1RBUlRTWVM7XG4xNTY0Olx0XHRcdFx0YnJlYWs7XG4xNTY1Olx0XHRcdH1cbjE1NjY6XHRcdFx0Y3ByZXYgPSBjbm93O1xuMTU2NzpcdFx0fVxuMTU2ODpcdFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xuMTU2OTpcdFx0cmVtb3ZlX3dhaXRfcXVldWUoXHUwMDI2dGlvY21nZXQtXHUwMDNld2FpdHEsIFx1MDAyNndhaXQpO1xuMTU3MDpcdFxuMTU3MTpcdFx0cmV0dXJuIHJldDtcbjE1NzI6XHR9XG4xNTczOlx0XG4xNTc0Olx0LypcbjE1NzU6XHQgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUylcbjE1NzY6XHQgKiBSZXR1cm46IHdyaXRlIGNvdW50ZXJzIHRvIHRoZSB1c2VyIHBhc3NlZCBjb3VudGVyIHN0cnVjdFxuMTU3NzpcdCAqIE5COiBib3RoIDEtXHUwMDNlMCBhbmQgMC1cdTAwM2UxIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3JcbjE1Nzg6XHQgKiAgICAgUkkgd2hlcmUgb25seSAwLVx1MDAzZTEgaXMgY291bnRlZC5cbjE1Nzk6XHQgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzI1OQoJCQkJCQkJb3V0cHV0OiAxNzkKCQkJCQkJCXRob3VnaHRzOiA3MDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgU2VyaWFsIERyaXZlciBXYWl0IExvb3AgRml4KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIFRoZXkmIzM5O3ZlIHVwZGF0ZWQgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgbW92aW5nIHRoZSBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgY2FsbCAqYmVmb3JlKiByZWFkaW5nIHRoZSBgdGlvY21nZXQtJmd0O2ljb3VudGAgdW5kZXIgdGhlIHNwaW5sb2NrLiBBaCwgY2xhc3NpYyBsb3N0LXdha2V1cCBmaXguIFRoZSBpbnRlcnJ1cHQvd2FrZXVwIGNvdWxkIGhhdmUgaGFwcGVuZWQgcmlnaHQgYWZ0ZXIgdGhlIHJlYWQsIGJ1dCBiZWZvcmUgc2V0dGluZyB0aGUgdGFzayB0byBpbnRlcnJ1cHRpYmxlLCByZXN1bHRpbmcgaW4gYSBwZXJtYW5lbnQgd2FpdC4gUHV0dGluZyBgc2V0X2N1cnJlbnRfc3RhdGVgIGZpcnN0IGVuc3VyZXMgdGhhdCBpZiB0aGUgd2FrZXVwIG9jY3VycyAqYWZ0ZXIqIHRoZSBgaWNvdW50YCB1cGRhdGUsIHRoZSB0YXNrIGdldHMgbWFya2VkIGFzIHJlYWR5IGJ5IGB3YWtlX3VwYCBhbmQgd29uJiMzOTt0IHNsZWVwIGluZGVmaW5pdGVseS4gU21hcnQuCgpOb3csIGxldCYjMzk7cyBkaWcgYSBiaXQgZGVlcGVyLiBBbnkgY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3VlcyBzbmVha2luZyBpbj8gSSYjMzk7dmUgZ290IGBjcHJldmAgYW5kIGBjbm93YCwgYm90aCBgc3RydWN0IHVhcnRfaWNvdW50YC4gVGhlIGNvZGUgZG9lcyBgbWVtY3B5YCB0byBwb3B1bGF0ZSBib3RoLiBUaGUgZmllbGRzIGJlaW5nIGNoZWNrZWQgKGBybmdgLCBgZHNyYCwgYGRjZGApIHdpdGhpbiBgY25vd2AgYXJlIHByb3Blcmx5IGNvcGllZC4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RydWN0cywgYW5kIG5vIHBhZGRpbmcgbGVha3MgdGhhdCBJIGNhbiBzZWUuIFRoaXMgc2VlbXMgcHVyZWx5IGFib3V0IHRocmVhZCBzY2hlZHVsaW5nIGFuZCBhZGRyZXNzaW5nIHRoYXQgcmFjZSBjb25kaXRpb24uIENsZWFuIGFuZCBzaW1wbGUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgYXNzZXNzIHRoZSBgTmVlZHNLTVNBTmAgZmxhZy4gRG9lcyB0aGlzIGNoYW5nZSBpbnRyb2R1Y2UgYW55ICpuZXcqIHdheXMgdG8gYWNjZXNzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5PyBOby4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2VzbiYjMzk7dCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlciBzcGFjZSwgYW5kIGl0IGRvZXNuJiMzOTt0IGNyZWF0ZSBjb25kaXRpb25hbCBicmFuY2hpbmcgYmFzZWQgb24gdW5pbml0aWFsaXplZCBkYXRhLiBObyBidWZmZXIgbGVuZ3RoIGlzc3VlcyBvciBib3VuZGFyeSBwcm9ibGVtcyBlaXRoZXIuIFNvLCBkZWZpbml0ZWx5IG5vIEtNU0FOIGNvbmNlcm5zLiBUaGlzIGlzIGEgc29saWQgZml4IGZvciB0aGUgcmFjZSwgYnV0IG5vdCBzb21ldGhpbmcgdGhhdCBLTVNBTiB3b3VsZCBmbGFnLgoKSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IExldCYjMzk7cyBydW4gZG93biB0aGUgY2hlY2tsaXN0LgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ6IE5vcGUuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIGRlcGVuZGluZyBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlczogTm9wZS4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzOiBOYWRhLgo0LiBCb3VuZHMgY2hlY2tzIC8gbGVuZ3RocyAvIGxvZ2ljIGFsbG93aW5nIHVuaW5pdCBieXRlcyBhY2Nlc3M6IE5vdGhpbmcuCgpDb25jbHVzaXZlbHksIGBOZWVkc0tNU0FOYCBpcyBgZmFsc2VgLgoKTGV0JiMzOTtzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMTA6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG9yZGVyaW5nIG9mIGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCByZWxhdGl2ZSB0byBhY3F1aXJpbmcgYHNlcmlhbC1cdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cblxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2tgIGFuZCByZWFkaW5nIHRoZSBtb2RlbSBpbnRlcnJ1cHQgY291bnRlcnMgYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXG5cbk5vIG1lbW9yeSBhbGxvY2F0aW9ucywgY29waWVzIHRvIHVzZXIgc3BhY2UsIG9yIHVuaW5pdGlhbGl6ZWQgZGF0YSBhY2Nlc3NlcyBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZC4gQWxsIHZhcmlhYmxlcyBpbnZvbHZlZCAoYGNub3dgLCBgY3ByZXZgKSBhcmUgZnVsbHkgaW5pdGlhbGl6ZWQgdmlhIGBtZW1jcHlgIGZyb20gYHRpb2NtZ2V0LVx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjI1LjQ3NDU4MTM3NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQwMjU1MDk5OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9IU09cIixcbiAgICBcIlVTQlwiLFxuICAgIFwiUkZLSUxMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc29fd2FpdF9tb2RlbV9zdGF0dXNcIixcbiAgICBcImhzb19zZXJpYWxfaW9jdGxcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cXG5cXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2xlZXAgbG9vcCBzdGF0ZSBtYW5hZ2VtZW50IGluIGhzb193YWl0X21vZGVtX3N0YXR1cygpIHdpdGhpbiB0aGUgVVNCIEhTTyBtb2RlbSBkcml2ZXIuIFRoaXMgcmVhY2hhYmxlIGRyaXZlciBwYXRoIGhhbmRsZXMgdGhlIFRJT0NNSVdBSVQgaW9jdGwgb24gdGhlIFRUWSBkZXZpY2UgZXhwb3NlZCBieSB0aGUgVVNCIG1vZGVtLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MjUuNDc0NTg1NTM2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTA3MTYzNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvdXNiL2hzby5jIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXFxuaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmNcXG4rKysgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcXG5AQCAtMTU0NywxMCArMTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuIFxcdGFkZF93YWl0X3F1ZXVlKFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNld2FpdHEsIFxcdTAwMjZ3YWl0KTtcXG4gXFx0Zm9yICg7Oykge1xcbitcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4gXFx0XFx0bWVtY3B5KFxcdTAwMjZjbm93LCBcXHUwMDI2dGlvY21nZXQtXFx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xcbiBcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbi1cXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbiBcXHRcXHRpZiAoKChhcmcgXFx1MDAyNiBUSU9DTV9STkcpIFxcdTAwMjZcXHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxcbiBcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9EU1IpIFxcdTAwMjZcXHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxcbiBcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9DRCkgIFxcdTAwMjZcXHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjoyNi4wODYxNzQxMjZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjE2ODExODI0MjA0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlVTQl9IU09cIixcbiAgICBcIlVTQlwiLFxuICAgIFwiUkZLSUxMXCIsXG4gICAgXCJUVFlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJoc29fd2FpdF9tb2RlbV9zdGF0dXNcIixcbiAgICBcImhzb19zZXJpYWxfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgc2xlZXAgbG9vcCBzdGF0ZSBtYW5hZ2VtZW50IGluIGhzb193YWl0X21vZGVtX3N0YXR1cygpIHdpdGhpbiB0aGUgVVNCIEhTTyBtb2RlbSBkcml2ZXIuIFRoaXMgcmVhY2hhYmxlIGRyaXZlciBwYXRoIGhhbmRsZXMgdGhlIFRJT0NNSVdBSVQgaW9jdGwgb24gdGhlIFRUWSBkZXZpY2UgZXhwb3NlZCBieSB0aGUgVVNCIG1vZGVtLCB3aGljaCBjYW4gYmUgaW5zdGFudGlhdGVkIGFuZCBmdXp6ZWQgdmlhIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAxZTA1MjYzMWMzMWU5YmZhZjc0MGNhZTgwNmM3NTExNjhiOThiNTYwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAxMDowNjoyNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3VzYi9oc28uYyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuaW5kZXggYzFhZWM2NzY4OGFlNy4uNzFjYWEzNzY0YjIzOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuKysrIGIvZHJpdmVycy9uZXQvdXNiL2hzby5jXG5AQCAtMTU0NywxMCArMTU0NywxMCBAQCBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXG4gXHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdGFkZF93YWl0X3F1ZXVlKFx1MDAyNnRpb2NtZ2V0LVx1MDAzZXdhaXRxLCBcdTAwMjZ3YWl0KTtcbiBcdGZvciAoOzspIHtcbitcdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuIFx0XHRtZW1jcHkoXHUwMDI2Y25vdywgXHUwMDI2dGlvY21nZXQtXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XG4gXHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzZXJpYWwtXHUwMDNlc2VyaWFsX2xvY2spO1xuLVx0XHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xuIFx0XHRpZiAoKChhcmcgXHUwMDI2IFRJT0NNX1JORykgXHUwMDI2XHUwMDI2IChjbm93LnJuZyAhPSBjcHJldi5ybmcpKSB8fFxuIFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0RTUikgXHUwMDI2XHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxuIFx0XHQgICAgKChhcmcgXHUwMDI2IFRJT0NNX0NEKSAgXHUwMDI2XHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MjYuMDg2MTc2MDE2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDIzNjY5Njg5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJdCBsb29rcyBsaWtlIHRoZSB0YXJnZXQgaXMgYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AsIHNwZWNpZmljYWxseSB0aGUgYGhzb193YWl0X21vZGVtX3N0YXR1c2AgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBleGFtaW5lIHRoYXQgZnVuY3Rpb24gY2xvc2VseS5cblxuTm93LCBjb250ZXh0IGlzIGtleS4gSSBzaG91bGQgYWxzbyBjaGVjayB3aGF0IGVsc2UgaXMgaGFwcGVuaW5nIGluIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIHRvIGdldCBhIGJyb2FkZXIgcGljdHVyZS4gQXJlIHRoZXJlIHJlbGF0ZWQgY2hhbmdlcz8gV2hhdCdzIHRoZSBvdmVyYWxsIHB1cnBvc2Ugb2YgdGhhdCBtb2R1bGU/XG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IHRoZSB0b29scyBmaXJlZCB1cC4gTGV0J3Mgc2VlIHdoYXQgd2UgY2FuIGRpZyB1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAwNywiT3V0cHV0VG9rZW5zIjo2OSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzAuMzIyODc1NzE4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY5NjQyOTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhzb193YWl0X21vZGVtX3N0YXR1c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvdXNiL2hzby5jPTE1MzE9c3RhdGljIGludFxcbmRyaXZlcnMvbmV0L3VzYi9oc28uYzoxNTMyOmhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcXG5kcml2ZXJzL25ldC91c2IvaHNvLmMtMTUzMy17XFxuLS1cXG5kcml2ZXJzL25ldC91c2IvaHNvLmM9MTY4Nz1zdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNjk3LVxcdGNhc2UgVElPQ01JV0FJVDpcXG5kcml2ZXJzL25ldC91c2IvaHNvLmM6MTY5ODpcXHRcXHRyZXQgPSBoc29fd2FpdF9tb2RlbV9zdGF0dXMoc2VyaWFsLCBhcmcpO1xcbmRyaXZlcnMvbmV0L3VzYi9oc28uYy0xNjk5LVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMC4zOTI1MjYzMzdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODYxODAxNjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipIU09cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvdXNiL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZz01MzA9Y29uZmlnIFVTQl9ORVRfUU1JX1dXQU5cXG4tLVxcbmRyaXZlcnMvbmV0L3VzYi9LY29uZmlnLTU1MS1cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZzo1NTI6Y29uZmlnIFVTQl9IU09cXG5kcml2ZXJzL25ldC91c2IvS2NvbmZpZy01NTMtXFx0dHJpc3RhdGUgXFxcIk9wdGlvbiBVU0IgSGlnaCBTcGVlZCBNb2JpbGUgRGV2aWNlc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzAuNDc4NzE1MTQ1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjkzODUwNDU2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gdGhlIEhTTyBNb2RlbSBTdGF0dXMgV2FpdCBGdW5jdGlvbioqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBmdW5jdGlvbiB3b3JrcyB3aXRoaW4gdGhlIEhTTyBkcml2ZXIuIE15IGluc3RpbmN0IGlzIHRvIHN0YXJ0IGJ5IG5hdmlnYXRpbmcgdG8gYGRyaXZlcnMvbmV0L3VzYi9oc28uY2AgYW5kIHplcm9pbmcgaW4gb24gdGhhdCBzcGVjaWZpYyBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGFic29yYiB0aGUgc3Vycm91bmRpbmcgY29kZSB0b28sIGJlY2F1c2UgY29udGV4dCBpcyBrZXksIHlvdSBrbm93PyBGdW5jdGlvbnMgcmFyZWx5IGxpdmUgaW4gYSB2YWN1dW0uXG5cbkJ1dCBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW4gdGhlIHdlZWRzIHdpdGggdGhlIGNvZGUsIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYEtjb25maWdgIGRlcGVuZGVuY2llcyBmb3IgYFVTQl9IU09gLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGVuYWJsZWQgZm9yIHRoaXMgSFNPIGZ1bmN0aW9uYWxpdHkgdG8gZXZlbiBiZSBwcmVzZW50LiBUaGF0J2xsIHNhdmUgbWUgZnJvbSBiYW5naW5nIG15IGhlYWQgYWdhaW5zdCB0aGUgd2FsbCBsYXRlciwgZmlndXJpbmcgb3V0IHdoeSBzb21ldGhpbmcgaXNuJ3Qgd29ya2luZyBpZiB0aGUgYnVpbGQgZG9lc24ndCBldmVuIGluY2x1ZGUgdGhlIHJlbGV2YW50IG1vZHVsZXMuIEdvdHRhIG1ha2Ugc3VyZSB0aGUgZm91bmRhdGlvbiBpcyBzb2xpZCBiZWZvcmUgYnVpbGRpbmcgdGhlIGhvdXNlLiBMZXQncyBzZWUgd2hhdCB0aG9zZSBjb25maWcgb3B0aW9ucyBhcmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU4NSwiT3V0cHV0VG9rZW5zIjo3NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciIsImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMy40MTcyMjI0NjlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDAyNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvdXNiL2hzby5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE1MzAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE1MzA6XFx0ICovXFxuMTUzMTpcXHRzdGF0aWMgaW50XFxuMTUzMjpcXHRoc29fd2FpdF9tb2RlbV9zdGF0dXMoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuMTUzMzpcXHR7XFxuMTUzNDpcXHRcXHRERUNMQVJFX1dBSVRRVUVVRSh3YWl0LCBjdXJyZW50KTtcXG4xNTM1OlxcdFxcdHN0cnVjdCB1YXJ0X2ljb3VudCBjcHJldiwgY25vdztcXG4xNTM2OlxcdFxcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldDtcXG4xNTM3OlxcdFxcdGludCByZXQ7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdHRpb2NtZ2V0ID0gc2VyaWFsLVxcdTAwM2V0aW9jbWdldDtcXG4xNTQwOlxcdFxcdGlmICghdGlvY21nZXQpXFxuMTU0MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4xNTQyOlxcdFxcdC8qXFxuMTU0MzpcXHRcXHQgKiBub3RlIHRoZSBjb3VudGVycyBvbiBlbnRyeVxcbjE1NDQ6XFx0XFx0ICovXFxuMTU0NTpcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4xNTQ2OlxcdFxcdG1lbWNweShcXHUwMDI2Y3ByZXYsIFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XFxuMTU0NzpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NDg6XFx0XFx0YWRkX3dhaXRfcXVldWUoXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2V3YWl0cSwgXFx1MDAyNndhaXQpO1xcbjE1NDk6XFx0XFx0Zm9yICg7Oykge1xcbjE1NTA6XFx0XFx0XFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcXG4xNTUxOlxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NTI6XFx0XFx0XFx0bWVtY3B5KFxcdTAwMjZjbm93LCBcXHUwMDI2dGlvY21nZXQtXFx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xcbjE1NTM6XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrKTtcXG4xNTU0OlxcdFxcdFxcdGlmICgoKGFyZyBcXHUwMDI2IFRJT0NNX1JORykgXFx1MDAyNlxcdTAwMjYgKGNub3cucm5nICE9IGNwcmV2LnJuZykpIHx8XFxuMTU1NTpcXHRcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9EU1IpIFxcdTAwMjZcXHUwMDI2IChjbm93LmRzciAhPSBjcHJldi5kc3IpKSB8fFxcbjE1NTY6XFx0XFx0XFx0ICAgICgoYXJnIFxcdTAwMjYgVElPQ01fQ0QpICBcXHUwMDI2XFx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcXG4xNTU3OlxcdFxcdFxcdFxcdHJldCA9IDA7XFxuMTU1ODpcXHRcXHRcXHRcXHRicmVhaztcXG4xNTU5OlxcdFxcdFxcdH1cXG4xNTYwOlxcdFxcdFxcdHNjaGVkdWxlKCk7XFxuMTU2MTpcXHRcXHRcXHQvKiBzZWUgaWYgYSBzaWduYWwgZGlkIGl0ICovXFxuMTU2MjpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcXG4xNTYzOlxcdFxcdFxcdFxcdHJldCA9IC1FUkVTVEFSVFNZUztcXG4xNTY0OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NjU6XFx0XFx0XFx0fVxcbjE1NjY6XFx0XFx0XFx0Y3ByZXYgPSBjbm93O1xcbjE1Njc6XFx0XFx0fVxcbjE1Njg6XFx0XFx0X19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1JVTk5JTkcpO1xcbjE1Njk6XFx0XFx0cmVtb3ZlX3dhaXRfcXVldWUoXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2V3YWl0cSwgXFx1MDAyNndhaXQpO1xcbjE1NzA6XFx0XFxuMTU3MTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE1NzI6XFx0fVxcbjE1NzM6XFx0XFxuMTU3NDpcXHQvKlxcbjE1NzU6XFx0ICogR2V0IGNvdW50ZXIgb2YgaW5wdXQgc2VyaWFsIGxpbmUgaW50ZXJydXB0cyAoRENELFJJLERTUixDVFMpXFxuMTU3NjpcXHQgKiBSZXR1cm46IHdyaXRlIGNvdW50ZXJzIHRvIHRoZSB1c2VyIHBhc3NlZCBjb3VudGVyIHN0cnVjdFxcbjE1Nzc6XFx0ICogTkI6IGJvdGggMS1cXHUwMDNlMCBhbmQgMC1cXHUwMDNlMSB0cmFuc2l0aW9ucyBhcmUgY291bnRlZCBleGNlcHQgZm9yXFxuMTU3ODpcXHQgKiAgICAgUkkgd2hlcmUgb25seSAwLVxcdTAwM2UxIGlzIGNvdW50ZWQuXFxuMTU3OTpcXHQgKi9cXG4xNTgwOlxcdHN0YXRpYyBpbnQgaHNvX2dldF9jb3VudChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LFxcbjE1ODE6XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCAqaWNvdW50KVxcbjE1ODI6XFx0e1xcbjE1ODM6XFx0XFx0c3RydWN0IHVhcnRfaWNvdW50IGNub3c7XFxuMTU4NDpcXHRcXHRzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsID0gdHR5LVxcdTAwM2Vkcml2ZXJfZGF0YTtcXG4xNTg1OlxcdFxcdHN0cnVjdCBoc29fdGlvY21nZXQgICp0aW9jbWdldCA9IHNlcmlhbC1cXHUwMDNldGlvY21nZXQ7XFxuMTU4NjpcXHRcXG4xNTg3OlxcdFxcdG1lbXNldChpY291bnQsIDAsIHNpemVvZihzdHJ1Y3Qgc2VyaWFsX2ljb3VudGVyX3N0cnVjdCkpO1xcbjE1ODg6XFx0XFxuMTU4OTpcXHRcXHRpZiAoIXRpb2NtZ2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozMy40MTc0MjQ1NzlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MTcyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0XFx0ICAgICogY2RjLXdkbTogUXVhbGNvbW0gTVNNIEludGVyZmFjZSAoUU1JKSBwcm90b2NvbCBvbiAvZGV2L2NkYy13ZG14XFxuIDU0NjpcXHRcXG4gNTQ3OlxcdFxcdCAgQSBtb2RlbSBtYW5hZ2VyIHdpdGggc3VwcG9ydCBmb3IgUU1JIGlzIHJlY29tbWVuZGVkLlxcbiA1NDg6XFx0XFxuIDU0OTpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NTA6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgcW1pX3d3YW4uXFxuIDU1MTpcXHRcXG4gNTUyOlxcdGNvbmZpZyBVU0JfSFNPXFxuIDU1MzpcXHRcXHR0cmlzdGF0ZSBcXFwiT3B0aW9uIFVTQiBIaWdoIFNwZWVkIE1vYmlsZSBEZXZpY2VzXFxcIlxcbiA1NTQ6XFx0XFx0ZGVwZW5kcyBvbiBVU0IgXFx1MDAyNlxcdTAwMjYgUkZLSUxMIFxcdTAwMjZcXHUwMDI2IFRUWVxcbiA1NTU6XFx0XFx0ZGVmYXVsdCBuXFxuIDU1NjpcXHRcXHRoZWxwXFxuIDU1NzpcXHRcXHQgIENob29zZSB0aGlzIG9wdGlvbiBpZiB5b3UgaGF2ZSBhbiBPcHRpb24gSFNEUEEvSFNVUEEgY2FyZC5cXG4gNTU4OlxcdFxcdCAgVGhlc2UgY2FyZHMgc3VwcG9ydCBkb3dubGluayBzcGVlZHMgb2YgNy4yTWJwcyBvciBncmVhdGVyLlxcbiA1NTk6XFx0XFxuIDU2MDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiA1NjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgaHNvLlxcbiA1NjI6XFx0XFxuIDU2MzpcXHRjb25maWcgVVNCX05FVF9JTlQ1MVgxXFxuIDU2NDpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWxsb24gUExDIGJhc2VkIHVzYiBhZGFwdGVyXFxcIlxcbiA1NjU6XFx0XFx0ZGVwZW5kcyBvbiBVU0JfVVNCTkVUXFxuIDU2NjpcXHRcXHRzZWxlY3QgVVNCX05FVF9DRENFVEhFUlxcbiA1Njc6XFx0XFx0aGVscFxcbiA1Njg6XFx0XFx0ICBDaG9vc2UgdGhpcyBvcHRpb24gaWYgeW91J3JlIHVzaW5nIGEgMTRNYiBVU0ItYmFzZWQgUExDXFxuIDU2OTpcXHRcXHQgIChQb3dlcmxpbmUgQ29tbXVuaWNhdGlvbnMpIHNvbHV0aW9uIHdpdGggYW4gSW50ZWxsb25cXG4gNTcwOlxcdFxcdCAgSU5UNTF4MS9JTlQ1MjAwIGNoaXAsIGxpa2UgdGhlIFxcXCJkZXZvbG8gZExhbiBkdW9cXFwiLlxcbiA1NzE6XFx0XFxuIDU3MjpcXHRjb25maWcgVVNCX0NEQ19QSE9ORVRcXG4gNTczOlxcdFxcdHRyaXN0YXRlIFxcXCJDREMgUGhvbmV0IHN1cHBvcnRcXFwiXFxuIDU3NDpcXHRcXHRkZXBlbmRzIG9uIFBIT05FVCBcXHUwMDI2XFx1MDAyNiBVU0JfVVNCTkVUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjMzLjQxNzUxODQ2OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMwNTIzODI0MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXBwcm9hY2ggdG8gRW11bGF0aW5nIGFuZCBQcm9iaW5nIFVTQl9IU08gaW4gU3l6a2FsbGVyL1FFTVUqKlxuXG5Pa2F5LCBzbyBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHdlIGNhbiBlZmZlY3RpdmVseSB0ZXN0IHRoZSBgVVNCX0hTT2AgZHJpdmVyIHdpdGhpbiB0aGUgU3l6a2FsbGVyL1FFTVUgZW52aXJvbm1lbnQuIFRoZSBjb3JlIG9mIHRoaXMsIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVsaWVzIG9uIFVTQiByYXcgZ2FkZ2V0IGVtdWxhdGlvbi4gU3l6a2FsbGVyIGxldmVyYWdlcyBmdW5jdGlvbnMgbGlrZSBgc3l6X3VzYl9jb25uZWN0YCBhbmQgYHN5el91c2JfY29udHJvbF9pb2AsIGVzc2VudGlhbGx5IGNyYWZ0aW5nIGEgdmlydHVhbCBVU0IgbGFuZHNjYXBlIHRvIHByb2JlIHZhcmlvdXMgZHJpdmVycy4gVGhlIGtleSBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiByZWFjaCBgaHNvYCBlZmZlY3RpdmVseSB0aHJvdWdoIHRoaXMgcmF3IGdhZGdldCBlbXVsYXRpb24uXG5cblRoZSBnb29kIG5ld3MgaXMsIHllcywgdGhlIHJhdyBnYWRnZXQgYXBwcm9hY2ggc2hvdWxkIHdvcmsuIERyaXZlcnMgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvdXNiL2AgYXJlIGluZGVlZCByZWFjaGFibGUgdmlhIHRoaXMgbWV0aG9kLiBFc3NlbnRpYWxseSwgU3l6a2FsbGVyIHJlZ2lzdGVycyBVU0IgSURzLCB0aGVuIGVtdWxhdGVzIHRoZSBVU0IgZGV2aWNlLiAgVGhlIGRyaXZlciB0aGVuIGJpbmRzIHRvIHRoaXMgZW11bGF0ZWQgZGV2aWNlIGFuZCwgaW4gdHVybiwgZXhwb3NlcyBlaXRoZXIgYHR0eWAgb3IgYG5ldGRldmAgaW50ZXJmYWNlcy5cblxuTm93LCB0byBkaWcgZGVlcGVyLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJuYWwgd29ya2luZ3MgYmV0dGVyLiBNeSBuZXh0IHN0ZXAgd2lsbCBiZSB0byB0aG9yb3VnaGx5IGV4YW1pbmUgd2hhdCB0aGUgYGhzb19zZXJpYWxfaW9jdGxgIGZ1bmN0aW9uIGlzIGRvaW5nLCBhbmQgdGhlbiB0cmFjZSB0aGUgY2FsbGVycyBvZiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIGJlaGF2aW9yIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQgd2l0aGluIHRoZSBVU0IgSFNPIGNvbnRleHQuIFRoaXMgaXMgdGhlIG5leHQgcGhhc2UgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZSBvZiBpdHMgZnVuY3Rpb25hbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgZW11bGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzkzLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIiwicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6MzYuNDY5OTAzMjcxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTY4MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTY4MDpcXHRcXG4xNjgxOlxcdFxcdHJldHVybiB1c2JfY29udHJvbF9tc2coc2VyaWFsLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXVzYixcXG4xNjgyOlxcdFxcdFxcdFxcdCAgICAgICB1c2Jfc25kY3RybHBpcGUoc2VyaWFsLVxcdTAwM2VwYXJlbnQtXFx1MDAzZXVzYiwgMCksIDB4MjIsXFxuMTY4MzpcXHRcXHRcXHRcXHQgICAgICAgMHgyMSwgdmFsLCBpZl9udW0sIE5VTEwsIDAsXFxuMTY4NDpcXHRcXHRcXHRcXHQgICAgICAgVVNCX0NUUkxfU0VUX1RJTUVPVVQpO1xcbjE2ODU6XFx0fVxcbjE2ODY6XFx0XFxuMTY4NzpcXHRzdGF0aWMgaW50IGhzb19zZXJpYWxfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSxcXG4xNjg4OlxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNjg5OlxcdHtcXG4xNjkwOlxcdFxcdHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwgPSB0dHktXFx1MDAzZWRyaXZlcl9kYXRhO1xcbjE2OTE6XFx0XFx0aW50IHJldCA9IDA7XFxuMTY5MjpcXHRcXHRoc29fZGJnKDB4OCwgXFxcIklPQ1RMIGNtZDogJWQsIGFyZzogJWxkXFxcXG5cXFwiLCBjbWQsIGFyZyk7XFxuMTY5MzpcXHRcXG4xNjk0OlxcdFxcdGlmICghc2VyaWFsKVxcbjE2OTU6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuMTY5NjpcXHRcXHRzd2l0Y2ggKGNtZCkge1xcbjE2OTc6XFx0XFx0Y2FzZSBUSU9DTUlXQUlUOlxcbjE2OTg6XFx0XFx0XFx0cmV0ID0gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHNlcmlhbCwgYXJnKTtcXG4xNjk5OlxcdFxcdFxcdGJyZWFrO1xcbjE3MDA6XFx0XFx0ZGVmYXVsdDpcXG4xNzAxOlxcdFxcdFxcdHJldCA9IC1FTk9JT0NUTENNRDtcXG4xNzAyOlxcdFxcdFxcdGJyZWFrO1xcbjE3MDM6XFx0XFx0fVxcbjE3MDQ6XFx0XFx0cmV0dXJuIHJldDtcXG4xNzA1OlxcdH1cXG4xNzA2OlxcdFxcbjE3MDc6XFx0XFxuMTcwODpcXHQvKiBzdGFydHMgYSB0cmFuc21pdCAqL1xcbjE3MDk6XFx0c3RhdGljIHZvaWQgaHNvX2tpY2tfdHJhbnNtaXQoc3RydWN0IGhzb19zZXJpYWwgKnNlcmlhbClcXG4xNzEwOlxcdHtcXG4xNzExOlxcdFxcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuMTcxMjpcXHRcXHRpbnQgcmVzO1xcbjE3MTM6XFx0XFxuMTcxNDpcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jaywgZmxhZ3MpO1xcbjE3MTU6XFx0XFx0aWYgKCFzZXJpYWwtXFx1MDAzZXR4X2J1ZmZlcl9jb3VudClcXG4xNzE2OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjE3MTc6XFx0XFxuMTcxODpcXHRcXHRpZiAoc2VyaWFsLVxcdTAwM2V0eF91cmJfdXNlZClcXG4xNzE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjozNi40NzAwNjM3ODFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NjMwMzE5ODU1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBBbmFseXNpczogSFNPIE1vZGVtIERyaXZlciAtIFRJT0NNSVdBSVQgSGFuZGxpbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYGhzb19zZXJpYWxfaW9jdGxgJ3MgaGFuZGxpbmcgb2YgYFRJT0NNSVdBSVRgIGFuZCBob3cgaXQgY2FsbHMgYGhzb193YWl0X21vZGVtX3N0YXR1c2AuIFRoZSBjcnVjaWFsIGNoYW5nZSBpcyB0aGF0IGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBoYXMgbW92ZWQgKmJlZm9yZSogYHNwaW5fbG9ja19pcnFgIGluIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLiBUaGlzIGlzIHdvcnRoIGEgY2xvc2UgbG9vayBiZWNhdXNlIHRoZSBvcmRlcmluZyBvZiB0aGVzZSBvcGVyYXRpb25zIOKAkyBzZXR0aW5nIHRoZSB0YXNrIHRvIGludGVycnVwdGlibGUgYmVmb3JlIGFjcXVpcmluZyBhIHNwaW5sb2NrIHRoYXQgZGlzYWJsZXMgaW50ZXJydXB0cyDigJMgY291bGQgaW50cm9kdWNlIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyBvciB1bmV4cGVjdGVkIGJlaGF2aW9yLlxuXG5GaXJzdCwgaXMgdGhpcyBldmVuIGZ1enphYmxlPyBBYnNvbHV0ZWx5LiBUaGUgYGhzb2AgZHJpdmVyIChgVVNCX0hTT2ApIGlzIGFjY2Vzc2libGUgdmlhIFVTQiByYXcgZ2FkZ2V0LCB3aGljaCBpcyB0cml2aWFsIHRvIHNldCB1cCBpbiBhIHN5emthbGxlciBvciBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50LiBUaGUgYFRJT0NNSVdBSVRgIGlvY3RsIG9wZXJhdGVzIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIEhTTyBtb2RlbSdzIHNlcmlhbCBwb3J0LCBtYWtpbmcgaXQgYSBuYXR1cmFsIHRhcmdldC4gV2UgKmtub3cqIHRoYXQgY29kZSBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYCAoYGhzb193YWl0X21vZGVtX3N0YXR1c2ApIGhhcyBiZWVuIG1vZGlmaWVkLCBjb25maXJtaW5nIGl0cyByZWxldmFuY2UuIEFuZCBjcnVjaWFsbHksIGl0J3Mgbm90IGEgZHJpdmVyIHRoYXQgZmFsbHMgaW50byBhbnkgb2YgdGhlIHVzdWFsIFwibm8tZ29cIiBjYXRlZ29yaWVzIOKAkyBubyBoYXJkd2FyZS1zcGVjaWZpYyBkZXBlbmRlbmNpZXMgKGxpa2UgYSBjdXN0b20gUENJZSBvciBHUFUpLCBubyB1bnVzdWFsIGFyY2hpdGVjdHVyZSByZXF1aXJlbWVudHMsIG5vIHZlbmRvciBsb2NrLWluLCBhbmQgbm90IGp1c3Qgc2V0dXAvdGVhcmRvd24gY29kZS4gVVNCIGRyaXZlcnMgYXJlIGJyZWFkIGFuZCBidXR0ZXIgZm9yIHZpcnR1YWxpemF0aW9uLiBTbywgYFdvcnRoRnV6emluZyA9IHRydWVgLlxuXG5Ob3csIHRoZSBjb25maWd1cmF0aW9ucy4gYFVTQl9IU09gIGlzIHRoZSBrZXkuIEJ1dCBsZXQncyB2ZXJpZnkuIGBVU0JfSFNPYCBkZXBlbmRzIG9uIGBVU0IgXHUwMDI2XHUwMDI2IFJGS0lMTCBcdTAwMjZcdTAwMjYgVFRZYC4gSSdsbCBjb25maXJtIHRoYXQgYFVTQl9IU09gIGlzIHN1ZmZpY2llbnQsIEknbGwgYWRkIGBVU0JgLCBgUkZLSUxMYCwgYFRUWWAsIGFzIGEgZmFsbGJhY2sgLSBzYWZlIGFuZCBnb29kIHByYWN0aWNlLlxuXG5OZXh0LCB0aGUgZm9jdXMgc3ltYm9scy4gV2UncmUgemVyb2luZyBpbiBvbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCBhbmQgYGhzb19zZXJpYWxfaW9jdGxgLiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYCAqaXMqIHN0YXRpYyB3aXRoaW4gYGhzby5jYCwgYnV0IHRoYXQncyBub3QgYSBkZWFsLWJyZWFrZXIuIFN0YXRpYyBmdW5jdGlvbnMgKmNhbiogc3RpbGwgYmVjb21lIHN5bWJvbHMsIG9yIGFyZSBpbmxpbmVkLCBzbyB3ZSBjaGVjayB0aGVtIGFsbCwgcmVnYXJkbGVzcy4gV2UndmUgdmVyaWZpZWQgdGhleSBhcmUgdGhlIG9ubHkgcmVsZXZhbnQgb25lcyBpbiBgZHJpdmVycy9uZXQvdXNiL2hzby5jYC4gYGhzb193YWl0X21vZGVtX3N0YXR1c2AgaXMgKm9ubHkqIGNhbGxlZCBieSBgaHNvX3NlcmlhbF9pb2N0bGAsIGFuZCBib3RoIGZ1bmN0aW9ucyBhcmUgc3BlY2lmaWMgYW5kIG5vdCBvdmVyLXVzZWQuXG5cbkFscmlnaHQsIGxldCdzIHJlY2FwIHRoZSByZXF1aXJlbWVudHM6XG5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFtcIlVTQl9IU09cIiwgXCJVU0JcIiwgXCJSRktJTExcIiwgXCJUVFlcIl1gIChUaGlzIGlzIHRoZSBtb3N0IGNvbnNlcnZhdGl2ZSBhbmQgY29ycmVjdCB3YXkpLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgLCBgaHNvX3NlcmlhbF9pb2N0bGBcblxuRXZlcnl0aGluZyBjaGVja3Mgb3V0LiBUaGUgcmVhc29uaW5nIGlzIGNsZWFyLCBjb25jaXNlLCBhbmQgZGVmZW5zaWJsZS4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY0NTMsIk91dHB1dFRva2VucyI6MTM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMTA6MDY6NDIuNzczMjY0MjQyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI0NzMwNDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJVU0JfSFNPXCIsXG4gICAgXCJVU0JcIixcbiAgICBcIlJGS0lMTFwiLFxuICAgIFwiVFRZXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHNvX3dhaXRfbW9kZW1fc3RhdHVzXCIsXG4gICAgXCJoc29fc2VyaWFsX2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIHNsZWVwIGxvb3Agc3RhdGUgbWFuYWdlbWVudCBpbiBoc29fd2FpdF9tb2RlbV9zdGF0dXMoKSB3aXRoaW4gdGhlIFVTQiBIU08gbW9kZW0gZHJpdmVyLiBUaGlzIHJlYWNoYWJsZSBkcml2ZXIgcGF0aCBoYW5kbGVzIHRoZSBUSU9DTUlXQUlUIGlvY3RsIG9uIHRoZSBUVFkgZGV2aWNlIGV4cG9zZWQgYnkgdGhlIFVTQiBtb2RlbSwgd2hpY2ggY2FuIGJlIGluc3RhbnRpYXRlZCBhbmQgZnV6emVkIHZpYSBVU0IgcmF3IGdhZGdldCBlbXVsYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVVNCX0hTT1wiLFxuICAgIFwiVVNCXCIsXG4gICAgXCJSRktJTExcIixcbiAgICBcIlRUWVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImhzb193YWl0X21vZGVtX3N0YXR1c1wiLFxuICAgIFwiaHNvX3NlcmlhbF9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBzbGVlcCBsb29wIHN0YXRlIG1hbmFnZW1lbnQgaW4gaHNvX3dhaXRfbW9kZW1fc3RhdHVzKCkgd2l0aGluIHRoZSBVU0IgSFNPIG1vZGVtIGRyaXZlci4gVGhpcyByZWFjaGFibGUgZHJpdmVyIHBhdGggaGFuZGxlcyB0aGUgVElPQ01JV0FJVCBpb2N0bCBvbiB0aGUgVFRZIGRldmljZSBleHBvc2VkIGJ5IHRoZSBVU0IgbW9kZW0sIHdoaWNoIGNhbiBiZSBpbnN0YW50aWF0ZWQgYW5kIGZ1enplZCB2aWEgVVNCIHJhdyBnYWRnZXQgZW11bGF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo0Mi44OTgwMDIxNVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI4MzE2NjUyNjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo0Mi44OTg2MDM0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjIyODMxMDU4MjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXFxuXFxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMWUwNTI2MzFjMzFlOWJmYWY3NDBjYWU4MDZjNzUxMTY4Yjk4YjU2MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMTA6MDY6MjQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC91c2IvaHNvLmMgYi9kcml2ZXJzL25ldC91c2IvaHNvLmNcbmluZGV4IGMxYWVjNjc2ODhhZTcuLjcxY2FhMzc2NGIyMzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC91c2IvaHNvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3VzYi9oc28uY1xuQEAgLTE1NDcsMTAgKzE1NDcsMTAgQEAgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKHN0cnVjdCBoc29fc2VyaWFsICpzZXJpYWwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNlcmlhbC1cdTAwM2VzZXJpYWxfbG9jayk7XG4gXHRhZGRfd2FpdF9xdWV1ZShcdTAwMjZ0aW9jbWdldC1cdTAwM2V3YWl0cSwgXHUwMDI2d2FpdCk7XG4gXHRmb3IgKDs7KSB7XG4rXHRcdHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSk7XG4gXHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbiBcdFx0bWVtY3B5KFx1MDAyNmNub3csIFx1MDAyNnRpb2NtZ2V0LVx1MDAzZWljb3VudCwgc2l6ZW9mKHN0cnVjdCB1YXJ0X2ljb3VudCkpO1xuIFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2VyaWFsLVx1MDAzZXNlcmlhbF9sb2NrKTtcbi1cdFx0c2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKTtcbiBcdFx0aWYgKCgoYXJnIFx1MDAyNiBUSU9DTV9STkcpIFx1MDAyNlx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9EU1IpIFx1MDAyNlx1MDAyNiAoY25vdy5kc3IgIT0gY3ByZXYuZHNyKSkgfHxcbiBcdFx0ICAgICgoYXJnIFx1MDAyNiBUSU9DTV9DRCkgIFx1MDAyNlx1MDAyNiAoY25vdy5kY2QgIT0gY3ByZXYuZGNkKSkpIHtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDEwOjA2OjQyLjg5ODYwNTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTU4MzU0NTg1NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIGBkcml2ZXJzL25ldC91c2IvaHNvLmNgIHBhdGNoLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgdGhlIGBoc29fd2FpdF9tb2RlbV9zdGF0dXNgIGZ1bmN0aW9uLCBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIG5hdHVyYWxseS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlICpwcmVjaXNlKiBiZWhhdmlvciBiZWluZyBtb2RpZmllZCBoZXJlLiBJJ2xsIHJlYWQgdGhpcyBzZWN0aW9uIGNsb3NlbHkgdG8gYXNjZXJ0YWluIHRoZSBpbnRlbnQgb2YgdGhlIHBhdGNoLiBXaGF0IGFyZSB0aGV5IHRyeWluZyB0byBhY2hpZXZlLCBhbmQgbW9yZSBpbXBvcnRhbnRseSwgaG93IGFyZSB0aGV5IGdvaW5nIGFib3V0IGl0PyBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBiZWluZyBhZGRyZXNzZWQ/IElzIHRoaXMgYSB0aW1pbmcgaXNzdWU/IE9yIHNvbWV0aGluZyBtb3JlIGZ1bmRhbWVudGFsIGluIHRoZSBjb21tdW5pY2F0aW9uIGhhbmRzaGFrZT8gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoeVwiIGFuZCBcImhvd1wiIG9mIHRoaXMgY2hhbmdlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZXJzIGhhZCBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjE5LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo1OC43MzQwNjg2NTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM5ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC91c2IvaHNvLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTUzMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTUzMDpcXHQgKi9cXG4xNTMxOlxcdHN0YXRpYyBpbnRcXG4xNTMyOlxcdGhzb193YWl0X21vZGVtX3N0YXR1cyhzdHJ1Y3QgaHNvX3NlcmlhbCAqc2VyaWFsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4xNTMzOlxcdHtcXG4xNTM0OlxcdFxcdERFQ0xBUkVfV0FJVFFVRVVFKHdhaXQsIGN1cnJlbnQpO1xcbjE1MzU6XFx0XFx0c3RydWN0IHVhcnRfaWNvdW50IGNwcmV2LCBjbm93O1xcbjE1MzY6XFx0XFx0c3RydWN0IGhzb190aW9jbWdldCAgKnRpb2NtZ2V0O1xcbjE1Mzc6XFx0XFx0aW50IHJldDtcXG4xNTM4OlxcdFxcbjE1Mzk6XFx0XFx0dGlvY21nZXQgPSBzZXJpYWwtXFx1MDAzZXRpb2NtZ2V0O1xcbjE1NDA6XFx0XFx0aWYgKCF0aW9jbWdldClcXG4xNTQxOlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbjE1NDI6XFx0XFx0LypcXG4xNTQzOlxcdFxcdCAqIG5vdGUgdGhlIGNvdW50ZXJzIG9uIGVudHJ5XFxuMTU0NDpcXHRcXHQgKi9cXG4xNTQ1OlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NDY6XFx0XFx0bWVtY3B5KFxcdTAwMjZjcHJldiwgXFx1MDAyNnRpb2NtZ2V0LVxcdTAwM2VpY291bnQsIHNpemVvZihzdHJ1Y3QgdWFydF9pY291bnQpKTtcXG4xNTQ3OlxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuMTU0ODpcXHRcXHRhZGRfd2FpdF9xdWV1ZShcXHUwMDI2dGlvY21nZXQtXFx1MDAzZXdhaXRxLCBcXHUwMDI2d2FpdCk7XFxuMTU0OTpcXHRcXHRmb3IgKDs7KSB7XFxuMTU1MDpcXHRcXHRcXHRzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpO1xcbjE1NTE6XFx0XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2c2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9jayk7XFxuMTU1MjpcXHRcXHRcXHRtZW1jcHkoXFx1MDAyNmNub3csIFxcdTAwMjZ0aW9jbWdldC1cXHUwMDNlaWNvdW50LCBzaXplb2Yoc3RydWN0IHVhcnRfaWNvdW50KSk7XFxuMTU1MzpcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNlcmlhbC1cXHUwMDNlc2VyaWFsX2xvY2spO1xcbjE1NTQ6XFx0XFx0XFx0aWYgKCgoYXJnIFxcdTAwMjYgVElPQ01fUk5HKSBcXHUwMDI2XFx1MDAyNiAoY25vdy5ybmcgIT0gY3ByZXYucm5nKSkgfHxcXG4xNTU1OlxcdFxcdFxcdCAgICAoKGFyZyBcXHUwMDI2IFRJT0NNX0RTUikgXFx1MDAyNlxcdTAwMjYgKGNub3cuZHNyICE9IGNwcmV2LmRzcikpIHx8XFxuMTU1NjpcXHRcXHRcXHQgICAgKChhcmcgXFx1MDAyNiBUSU9DTV9DRCkgIFxcdTAwMjZcXHUwMDI2IChjbm93LmRjZCAhPSBjcHJldi5kY2QpKSkge1xcbjE1NTc6XFx0XFx0XFx0XFx0cmV0ID0gMDtcXG4xNTU4OlxcdFxcdFxcdFxcdGJyZWFrO1xcbjE1NTk6XFx0XFx0XFx0fVxcbjE1NjA6XFx0XFx0XFx0c2NoZWR1bGUoKTtcXG4xNTYxOlxcdFxcdFxcdC8qIHNlZSBpZiBhIHNpZ25hbCBkaWQgaXQgKi9cXG4xNTYyOlxcdFxcdFxcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbjE1NjM6XFx0XFx0XFx0XFx0cmV0ID0gLUVSRVNUQVJUU1lTO1xcbjE1NjQ6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMTU2NTpcXHRcXHRcXHR9XFxuMTU2NjpcXHRcXHRcXHRjcHJldiA9IGNub3c7XFxuMTU2NzpcXHRcXHR9XFxuMTU2ODpcXHRcXHRfX3NldF9jdXJyZW50X3N0YXRlKFRBU0tfUlVOTklORyk7XFxuMTU2OTpcXHRcXHRyZW1vdmVfd2FpdF9xdWV1ZShcXHUwMDI2dGlvY21nZXQtXFx1MDAzZXdhaXRxLCBcXHUwMDI2d2FpdCk7XFxuMTU3MDpcXHRcXG4xNTcxOlxcdFxcdHJldHVybiByZXQ7XFxuMTU3MjpcXHR9XFxuMTU3MzpcXHRcXG4xNTc0OlxcdC8qXFxuMTU3NTpcXHQgKiBHZXQgY291bnRlciBvZiBpbnB1dCBzZXJpYWwgbGluZSBpbnRlcnJ1cHRzIChEQ0QsUkksRFNSLENUUylcXG4xNTc2OlxcdCAqIFJldHVybjogd3JpdGUgY291bnRlcnMgdG8gdGhlIHVzZXIgcGFzc2VkIGNvdW50ZXIgc3RydWN0XFxuMTU3NzpcXHQgKiBOQjogYm90aCAxLVxcdTAwM2UwIGFuZCAwLVxcdTAwM2UxIHRyYW5zaXRpb25zIGFyZSBjb3VudGVkIGV4Y2VwdCBmb3JcXG4xNTc4OlxcdCAqICAgICBSSSB3aGVyZSBvbmx5IDAtXFx1MDAzZTEgaXMgY291bnRlZC5cXG4xNTc5OlxcdCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNjo1OC43MzU0NzAxMjZaIiwiU2VxIjoxNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Njk5NDE2NDUwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBTZXJpYWwgRHJpdmVyIFdhaXQgTG9vcCBGaXgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZXkndmUgdXBkYXRlZCBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzYC4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBtb3ZpbmcgdGhlIGBzZXRfY3VycmVudF9zdGF0ZShUQVNLX0lOVEVSUlVQVElCTEUpYCBjYWxsICpiZWZvcmUqIHJlYWRpbmcgdGhlIGB0aW9jbWdldC1cdTAwM2VpY291bnRgIHVuZGVyIHRoZSBzcGlubG9jay4gQWgsIGNsYXNzaWMgbG9zdC13YWtldXAgZml4LiBUaGUgaW50ZXJydXB0L3dha2V1cCBjb3VsZCBoYXZlIGhhcHBlbmVkIHJpZ2h0IGFmdGVyIHRoZSByZWFkLCBidXQgYmVmb3JlIHNldHRpbmcgdGhlIHRhc2sgdG8gaW50ZXJydXB0aWJsZSwgcmVzdWx0aW5nIGluIGEgcGVybWFuZW50IHdhaXQuIFB1dHRpbmcgYHNldF9jdXJyZW50X3N0YXRlYCBmaXJzdCBlbnN1cmVzIHRoYXQgaWYgdGhlIHdha2V1cCBvY2N1cnMgKmFmdGVyKiB0aGUgYGljb3VudGAgdXBkYXRlLCB0aGUgdGFzayBnZXRzIG1hcmtlZCBhcyByZWFkeSBieSBgd2FrZV91cGAgYW5kIHdvbid0IHNsZWVwIGluZGVmaW5pdGVseS4gU21hcnQuXG5cbk5vdywgbGV0J3MgZGlnIGEgYml0IGRlZXBlci4gQW55IGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMgc25lYWtpbmcgaW4/IEkndmUgZ290IGBjcHJldmAgYW5kIGBjbm93YCwgYm90aCBgc3RydWN0IHVhcnRfaWNvdW50YC4gVGhlIGNvZGUgZG9lcyBgbWVtY3B5YCB0byBwb3B1bGF0ZSBib3RoLiBUaGUgZmllbGRzIGJlaW5nIGNoZWNrZWQgKGBybmdgLCBgZHNyYCwgYGRjZGApIHdpdGhpbiBgY25vd2AgYXJlIHByb3Blcmx5IGNvcGllZC4gTm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLCBubyByZWFkcyBmcm9tIHVuaW5pdGlhbGl6ZWQgc3RydWN0cywgYW5kIG5vIHBhZGRpbmcgbGVha3MgdGhhdCBJIGNhbiBzZWUuIFRoaXMgc2VlbXMgcHVyZWx5IGFib3V0IHRocmVhZCBzY2hlZHVsaW5nIGFuZCBhZGRyZXNzaW5nIHRoYXQgcmFjZSBjb25kaXRpb24uIENsZWFuIGFuZCBzaW1wbGUuXG5cbkFscmlnaHQsIGxldCdzIGFzc2VzcyB0aGUgYE5lZWRzS01TQU5gIGZsYWcuIERvZXMgdGhpcyBjaGFuZ2UgaW50cm9kdWNlIGFueSAqbmV3KiB3YXlzIHRvIGFjY2VzcyB1bmluaXRpYWxpemVkIG1lbW9yeT8gTm8uIEl0IGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCBkb2Vzbid0IGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2VyIHNwYWNlLCBhbmQgaXQgZG9lc24ndCBjcmVhdGUgY29uZGl0aW9uYWwgYnJhbmNoaW5nIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gTm8gYnVmZmVyIGxlbmd0aCBpc3N1ZXMgb3IgYm91bmRhcnkgcHJvYmxlbXMgZWl0aGVyLiBTbywgZGVmaW5pdGVseSBubyBLTVNBTiBjb25jZXJucy4gVGhpcyBpcyBhIHNvbGlkIGZpeCBmb3IgdGhlIHJhY2UsIGJ1dCBub3Qgc29tZXRoaW5nIHRoYXQgS01TQU4gd291bGQgZmxhZy5cblxuSnVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmU6IExldCdzIHJ1biBkb3duIHRoZSBjaGVja2xpc3QuXG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2Ugd2hlcmUgZmllbGRzIG1pZ2h0IGJlIHVuaW5pdGlhbGl6ZWQ6IE5vcGUuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBkZXBlbmRpbmcgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM6IE5vcGUuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM6IE5hZGEuXG40LiBCb3VuZHMgY2hlY2tzIC8gbGVuZ3RocyAvIGxvZ2ljIGFsbG93aW5nIHVuaW5pdCBieXRlcyBhY2Nlc3M6IE5vdGhpbmcuXG5cbkNvbmNsdXNpdmVseSwgYE5lZWRzS01TQU5gIGlzIGBmYWxzZWAuXG5cbkxldCdzIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI1OSwiT3V0cHV0VG9rZW5zIjoxNzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QxMDowNzowNS43Mjk2MzkyOTNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTcxMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBvcmRlcmluZyBvZiBgc2V0X2N1cnJlbnRfc3RhdGUoVEFTS19JTlRFUlJVUFRJQkxFKWAgcmVsYXRpdmUgdG8gYWNxdWlyaW5nIGBzZXJpYWwtXFx1MDAzZXNlcmlhbF9sb2NrYCBhbmQgcmVhZGluZyB0aGUgbW9kZW0gaW50ZXJydXB0IGNvdW50ZXJzIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YCBpbiBgaHNvX3dhaXRfbW9kZW1fc3RhdHVzKClgLiBUaGlzIGZpeGVzIGEgY2xhc3NpYyBsb3N0IHdha2UtdXAgcmFjZSBjb25kaXRpb24gaW4gdGhlIHdhaXQgbG9vcC5cXG5cXG5ObyBtZW1vcnkgYWxsb2NhdGlvbnMsIGNvcGllcyB0byB1c2VyIHNwYWNlLCBvciB1bmluaXRpYWxpemVkIGRhdGEgYWNjZXNzZXMgYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQuIEFsbCB2YXJpYWJsZXMgaW52b2x2ZWQgKGBjbm93YCwgYGNwcmV2YCkgYXJlIGZ1bGx5IGluaXRpYWxpemVkIHZpYSBgbWVtY3B5YCBmcm9tIGB0aW9jbWdldC1cXHUwMDNlaWNvdW50YC4gVGhlIGNoYW5nZSByZWxhdGVzIGVudGlyZWx5IHRvIHNjaGVkdWxlciBzdGF0ZSBhbmQgcHJvY2VzcyBzeW5jaHJvbml6YXRpb24sIHdoaWNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MuIFRodXMsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgb3JkZXJpbmcgb2YgYHNldF9jdXJyZW50X3N0YXRlKFRBU0tfSU5URVJSVVBUSUJMRSlgIHJlbGF0aXZlIHRvIGFjcXVpcmluZyBgc2VyaWFsLVxcdTAwM2VzZXJpYWxfbG9ja2AgYW5kIHJlYWRpbmcgdGhlIG1vZGVtIGludGVycnVwdCBjb3VudGVycyBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAgaW4gYGhzb193YWl0X21vZGVtX3N0YXR1cygpYC4gVGhpcyBmaXhlcyBhIGNsYXNzaWMgbG9zdCB3YWtlLXVwIHJhY2UgY29uZGl0aW9uIGluIHRoZSB3YWl0IGxvb3AuXFxuXFxuTm8gbWVtb3J5IGFsbG9jYXRpb25zLCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgb3IgdW5pbml0aWFsaXplZCBkYXRhIGFjY2Vzc2VzIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkLiBBbGwgdmFyaWFibGVzIGludm9sdmVkIChgY25vd2AsIGBjcHJldmApIGFyZSBmdWxseSBpbml0aWFsaXplZCB2aWEgYG1lbWNweWAgZnJvbSBgdGlvY21nZXQtXFx1MDAzZWljb3VudGAuIFRoZSBjaGFuZ2UgcmVsYXRlcyBlbnRpcmVseSB0byBzY2hlZHVsZXIgc3RhdGUgYW5kIHByb2Nlc3Mgc3luY2hyb25pemF0aW9uLCB3aGljaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBUaHVzLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowggxbq[1] Phase: Succeeded StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 10:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 10:07:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2] Phase: Succeeded StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 10:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 10:07:17 +0000 UTC FinishedAt: 2026-09-07 10:07:21 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowggxbq/series-workflowggxbq-convert-artifact-1985986322/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 10:07:27 +0000 UTC FinishedAt: 2026-09-07 10:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 10:07:27 +0000 UTC FinishedAt: 2026-09-07 10:23:25 +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:*79e136cc-d6ad-4af7-8bbe-693439e8b5c8,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-workflowggxbq/series-workflowggxbq-convert-artifact-1985986322/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": "6fcdb5d6-7830-4ea8-9667-10cd3009f8e4", "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-workflowggxbq/series-workflowggxbq-build-action-108675216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 10:07:27 +0000 UTC FinishedAt: 2026-09-07 10:23:15 +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:*79e136cc-d6ad-4af7-8bbe-693439e8b5c8,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-workflowggxbq/series-workflowggxbq-convert-artifact-1985986322/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": "6fcdb5d6-7830-4ea8-9667-10cd3009f8e4", "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-workflowggxbq/series-workflowggxbq-build-action-108675216/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 10:23:25 +0000 UTC FinishedAt: 2026-09-07 10:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 10:23:25 +0000 UTC FinishedAt: 2026-09-07 10:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 10:23:25 +0000 UTC FinishedAt: 2026-09-07 10:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 10:23:25 +0000 UTC FinishedAt: 2026-09-07 10:23:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowggxbq/series-workflowggxbq-convert-artifact-1368514861/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 10:23:35 +0000 UTC FinishedAt: 2026-09-07 10:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 10:23:35 +0000 UTC FinishedAt: 2026-09-07 10:25:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fcdb5d6-7830-4ea8-9667-10cd3009f8e4,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-workflowggxbq/series-workflowggxbq-build-action-108675216/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-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 10:25:30 +0000 UTC FinishedAt: 2026-09-07 10:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:25:30 +0000 UTC FinishedAt: 2026-09-07 10:25:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 10:25:30 +0000 UTC FinishedAt: 2026-09-07 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 10:25:30 +0000 UTC FinishedAt: 2026-09-07 10:41:24 +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:*79e136cc-d6ad-4af7-8bbe-693439e8b5c8,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-workflowggxbq/series-workflowggxbq-convert-artifact-1368514861/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": "666964f5-edd9-4708-b358-d657b1e3f32f", "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-workflowggxbq/series-workflowggxbq-build-action-1121330569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 10:25:30 +0000 UTC FinishedAt: 2026-09-07 10:41:15 +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:*79e136cc-d6ad-4af7-8bbe-693439e8b5c8,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-workflowggxbq/series-workflowggxbq-convert-artifact-1368514861/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": "666964f5-edd9-4708-b358-d657b1e3f32f", "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-workflowggxbq/series-workflowggxbq-build-action-1121330569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 10:41:24 +0000 UTC FinishedAt: 2026-09-07 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 10:41:24 +0000 UTC FinishedAt: 2026-09-07 10:41:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 10:41:24 +0000 UTC FinishedAt: 2026-09-07 10:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 10:41:24 +0000 UTC FinishedAt: 2026-09-07 10:42:53 +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:*666964f5-edd9-4708-b358-d657b1e3f32f,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-workflowggxbq/series-workflowggxbq-build-action-1121330569/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-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"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:*6fcdb5d6-7830-4ea8-9667-10cd3009f8e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*666964f5-edd9-4708-b358-d657b1e3f32f,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-workflowggxbq/series-workflowggxbq-build-action-108675216/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-workflowggxbq/series-workflowggxbq-build-action-1121330569/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 10:43:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 10:43:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"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-workflowggxbq/series-workflowggxbq-convert-artifact-2246645138/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 10:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 10:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:43:03 +0000 UTC FinishedAt: 2026-09-07 10:43:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 10:43:13 +0000 UTC FinishedAt: 2026-09-07 11:36:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowggxbq[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["hso_wait_modem_status","hso_serial_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"38b6be101006d3e7af972999f45d4f1e8250587a","config_name":"upstream-apparmor-kasan.config","enable_configs":["USB_HSO","USB","RFKILL","TTY"],"series_id":"70ffcec5-9374-4219-8d36-9a5f4110b573","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 10:43:13 +0000 UTC FinishedAt: 2026-09-07 11:36:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6fcdb5d6-7830-4ea8-9667-10cd3009f8e4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*666964f5-edd9-4708-b358-d657b1e3f32f,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-workflowggxbq/series-workflowggxbq-build-action-108675216/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-workflowggxbq/series-workflowggxbq-build-action-1121330569/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-workflowggxbq/series-workflowggxbq-convert-artifact-2246645138/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,}