Name: series-workflowvh7t7 Phase: Succeeded StartedAt: 2026-09-05 14:33:23 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[0] Phase: Succeeded StartedAt: 2026-09-05 14:33:23 +0000 UTC FinishedAt: 2026-09-05 14:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[0].run-triage Phase: Succeeded StartedAt: 2026-09-05 14:33:23 +0000 UTC FinishedAt: 2026-09-05 14:59:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NO_HZ_IDLE", "HOTPLUG_CPU", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NO_HZ_IDLE", "HOTPLUG_CPU", "BLOCK" ], "series_id": "13e60954-845a-4567-a291-3b60e1d0da81" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "report_idle_softirq", "blk_softirq_cpu_dead" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05PX0haX0lETEUmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfaWRsZV9zb2Z0aXJxJiMzNDssCiAgICAmIzM0O2Jsa19zb2Z0aXJxX2NwdV9kZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQkxPQ0tfU09GVElSUSB0byBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLLCB3aGljaCBhbHRlcnMgY29udHJvbCBmbG93IGluIHJlcG9ydF9pZGxlX3NvZnRpcnEoKSBhbmQgY2FuX3N0b3BfaWRsZV90aWNrKCkgd2hlbiBhIENQVSBpcyB0YWtlbiBvZmZsaW5lIGR1cmluZyBDUFUgaG90cGx1ZywgZW5zdXJpbmcgcGVuZGluZyBibG9jayBzb2Z0aXJxcyBhcmUgaWdub3JlZCByYXRoZXIgdGhhbiB0cmlnZ2VyaW5nIHRpY2stc3RvcCB3YXJuaW5ncyBiZWZvcmUgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjbGVhbnMgdGhlbSB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE0OjU4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG5pbmRleCAzYmY5NjlhZDhmZTA3Li41MmJiNjg0MDkwYzBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuQEAgLTU3Myw5ICYjNDM7NTczLDExIEBAIGVudW1cbiAgKiBfIElSUV9QT0xMOiBpcnFfcG9sbF9jcHVfZGVhZCgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuICAqXG4gICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBfIEJMT0NLX1NPRlRJUlE6IGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHNcbiAgKi9cbi0jZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8XFxcbi1cdFx0XHRcdCAgIEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcbiYjNDM7I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG4mIzQzO1x0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIFxuIFxuIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOT19IWl9JRExFJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X2lkbGVfc29mdGlycSYjMzQ7LAogICAgJiMzNDtibGtfc29mdGlycV9jcHVfZGVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJMT0NLX1NPRlRJUlEgdG8gU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSywgd2hpY2ggYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiByZXBvcnRfaWRsZV9zb2Z0aXJxKCkgYW5kIGNhbl9zdG9wX2lkbGVfdGljaygpIHdoZW4gYSBDUFUgaXMgdGFrZW4gb2ZmbGluZSBkdXJpbmcgQ1BVIGhvdHBsdWcsIGVuc3VyaW5nIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdHJpZ2dlcmluZyB0aWNrLXN0b3Agd2FybmluZ3MgYmVmb3JlIGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY2xlYW5zIHRoZW0gdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNjcwZTM3MzAzYzc1NjQxYmQxZDhiZTFhYTA0MjY2NGNiNzNiMTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDo1ODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNTczLDkgJiM0Mzs1NzMsMTEgQEAgZW51bQogICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWUKICAqCiAgKiBfIChIUilUSU1FUl9TT0ZUSVJROiAoaHIpdGltZXJzX2RlYWRfY3B1KCkgbWlncmF0ZXMgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBfIEJMT0NLX1NPRlRJUlE6IGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHMKICAqLwotI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoSVJRX1BPTExfU09GVElSUSkgfFwKLQkJCQkgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpCiYjNDM7I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFwKJiM0MzsJCQkJICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKQogCiAKIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgSW50ZXJydXB0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLiBMb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgLiBJIHJlY29nbml6ZSB0aGF0IG1hY3JvOyBpdCYjMzk7cyB0aGUgYml0bWFzayB1c2VkIHRvIGlkZW50aWZ5IHNvZnRpcnFzIHRoYXQgYXJlIHNhZmUgdG8gbWlncmF0ZSBkdXJpbmcgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gVGhlIGRpZmYgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBhZGRpbmcgYEJMT0NLX1NPRlRJUlFgIHRvIHRoZSBleGlzdGluZyBtYXNrIGFuZCByZW1vdmluZyBgUkNVX1NPRlRJUlFgLiBJbnRlcmVzdGluZy4KClNvLCB0aGUgaW50ZW50IGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgYmxvY2sgc29mdGlycSBpbiB0aGUgbGlzdCBvZiBvbmVzIHRoYXQgdGhlIGtlcm5lbCBjb25zaWRlcnMgc2FmZSBmb3IgbWlncmF0aW9uIGR1cmluZyBob3RwbHVnLiBUaGlzIGltcGxpZXMgdGhhdCB3aGF0ZXZlciB3b3JrIGBibGtfc29mdGlycV9jcHVfZGVhZCgpYCBpcyBkb2luZywgaXQmIzM5O3Mgbm93IGRlZW1lZCB0byBiZSBzYWZlIHRvIG1vdmUgdG8gYSBuZXcgQ1BVIHdoZW4gYW4gb2xkIG9uZSBpcyBnb2luZyBhd2F5LiBDb252ZXJzZWx5LCB0aGUgcmVtb3ZhbCBvZiBgUkNVX1NPRlRJUlFgIG1lYW5zIHRoYXQgaXQmIzM5O3MgKm5vIGxvbmdlciogY29uc2lkZXJlZCBzYWZlIHRvIG1pZ3JhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2h5IHRoYXQgZGVjaXNpb24gd2FzIG1hZGUuIEkgbmVlZCBtb3JlIGNvbnRleHQuCgpCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucywgSSYjMzk7bGwgcnVuIGBncmVwcGVyYCBvbiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciB0aGlzIG1ha2VzIHNlbnNlLiBUaW1lIHRvIHNlZSB3aGVyZSB0aGlzIG1hc2sgaXMgcmVmZXJlbmNlZCBhbmQgd2hhdCBjb2RlIGlzIGNoZWNraW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NPRlRJUlFfSE9UUExVR19TQUZFX01BU0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaD01NTA9ZW51bVxuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc4LSAqL1xuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzk6I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU4MC1cdFx0XHRcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTA2OD1zdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzctXHRpZiAoIWNwdV9hY3RpdmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkge1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwNzg6XHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc5LVx0XHRpZiAoIXBlbmRpbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVGljayBTY2hlZHVsaW5nIGFuZCBCbG9jayBTb2Z0SVJRIEJlaGF2aW9yKioKCkFscmlnaHQsIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBrZXJuZWwmIzM5O3MgdGljayBzY2hlZHVsaW5nIG1lY2hhbmlzbSBhbmQgdGhlIGhhbmRsaW5nIG9mIGJsb2NrIEkvTyBzb2Z0aXJxcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIENQVSBob3RwbHVnIGV2ZW50cy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgYmVoYXZlIHdoZW4gYSBDUFUgaXMgYnJvdWdodCBvbmxpbmUsIGdvZXMgaWRsZSwgb3IgaXMgdGFrZW4gb2ZmbGluZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBpbnNwZWN0IHRoZSBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYCBmaWxlLCBhcm91bmQgbGluZSAxMDY4LCB3aGljaCBpcyBvZnRlbiBhIGNyaXRpY2FsIGFyZWEgZm9yIHRpY2stcmVsYXRlZCBsb2dpYy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgY29kZSBwYXRoIGludGVyc2VjdHMgd2l0aCB0aGUgbWFuYWdlbWVudCBvZiB0aGUgdGltZXJzIGludm9sdmVkIGluIHRpY2sgc2NoZWR1bGluZy4gRnJvbSB0aGVyZSwgaXQmIzM5O3MgYSBzaG9ydCBqdW1wIHRvIGNvbnNpZGVyIHRoZSBiZWhhdmlvciBvZiBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgIGZ1bmN0aW9uIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBgQkxPQ0tfU09GVElSUWAuIEkgd2FudCB0byBzZWUgaWYgdGhlIGJsb2NrIGxheWVyJiMzOTtzIHNvZnRpcnEgaGFuZGxpbmcgaXMgcmVzaWxpZW50IHRvIGNoYW5nZXMgaW4gQ1BVIHN0YXRlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgd2hlbiBhIENQVSBpcyBhYnJ1cHRseSByZW1vdmVkIG9yIGlkbGVkPyBJcyB0aGUgc29mdGlycSBwcm9wZXJseSBtaWdyYXRlZCBvciBkaXNhYmxlZCwgb3IgZG9lcyBpdCBsZWF2ZSBhbiBvcGVuIGxvb3A/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29mdGlycSBpcyByZWdpc3RlcmVkLCB1bnJlZ2lzdGVyZWQsIGFuZCBoYW5kbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBDUFUgaG90cGx1ZyBldmVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgaW4gYSBkeW5hbWljIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBzY2hlZHVsZXIsIHRoZSBibG9jayBsYXllciwgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdCAqIHNob3VsZCBiZSB3YWl0aW5nIGZvciBrc29mdGlycWQgdG8gaGFuZGxlIGl0LiBUaGVyZWZvcmUgd2Ugc2hvdWxkbiYjMzk7dFxuMTA2MTpcdCAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxuMTA2MjpcdCAqXG4xMDYzOlx0ICogSG93ZXZlciBpZiB3ZSBhcmUgYmV0d2VlbiBDUFVIUF9BUF9TTVBCT09UX1RIUkVBRFMgYW5kIENQVV9URUFSRE9XTl9DUFUgb24gdGhlXG4xMDY0Olx0ICogY3B1X2Rvd24oKSBwcm9jZXNzLCBzb2Z0aXJxcyBjYW4gc3RpbGwgYmUgcmFpc2VkIHdoaWxlIGtzb2Z0aXJxZCBpcyBwYXJrZWQsXG4xMDY1Olx0ICogdHJpZ2dlcmluZyB0aGUgY29kZSBiZWxvdywgc2luY2Ugd2FrZXBfc29mdGlycWQoKSBpcyBpZ25vcmVkLlxuMTA2NjpcdCAqXG4xMDY3Olx0ICovXG4xMDY4Olx0c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxuMTA2OTpcdHtcbjEwNzA6XHRcdHN0YXRpYyBpbnQgcmF0ZWxpbWl0O1xuMTA3MTpcdFx0dW5zaWduZWQgaW50IHBlbmRpbmcgPSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKTtcbjEwNzI6XHRcbjEwNzM6XHRcdGlmIChsaWtlbHkoIXBlbmRpbmcpKVxuMTA3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBTb21lIHNvZnRpcnFzIGNsYWltIHRvIGJlIHNhZmUgYWdhaW5zdCBob3RwbHVnIGFuZCBrc29mdGlycWQgcGFya2luZyAqL1xuMTA3NzpcdFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcbjEwNzg6XHRcdFx0cGVuZGluZyBcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xuMTA3OTpcdFx0XHRpZiAoIXBlbmRpbmcpXG4xMDgwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4MTpcdFx0fVxuMTA4MjpcdFxuMTA4MzpcdFx0LyogT24gUlQsIHNvZnRpcnEgaGFuZGxpbmcgbWF5IGJlIHdhaXRpbmcgb24gc29tZSBsb2NrICovXG4xMDg0Olx0XHRpZiAobG9jYWxfYmhfYmxvY2tlZCgpKVxuMTA4NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDg2Olx0XG4xMDg3Olx0XHRpZiAocmF0ZWxpbWl0IFx1MDAzYyAxMCkge1xuMTA4ODpcdFx0XHRwcl93YXJuKFwmIzM0O05PSFogdGljay1zdG9wIGVycm9yOiBsb2NhbCBzb2Z0aXJxIHdvcmsgaXMgcGVuZGluZywgaGFuZGxlciAjJTAyeCEhIVxcblwmIzM0OyxcbjEwODk6XHRcdFx0XHRwZW5kaW5nKTtcbjEwOTA6XHRcdFx0cmF0ZWxpbWl0JiM0MzsmIzQzOztcbjEwOTE6XHRcdH1cbjEwOTI6XHRcbjEwOTM6XHRcdHJldHVybiB0cnVlO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxuMTA5NzpcdHtcbjEwOTg6XHRcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcbjEwOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIElkbGUgU29mdElSUSBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNvZnQgaW50ZXJydXB0cyB3aGVuIGl0JiMzOTtzIGlkbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyB0aGF0IHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIHN0b3AgdGhlIGlkbGUgdGljaywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdpdGhpbiB0aGUgYHRpY2tfbm9oemAgaWRsZSBwYXRoLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgY29tbWVudCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgcmVmZXJlbmNpbmcgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSYjMzk7ZCBiZXR0ZXIgc2VhcmNoIGZvciB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRpZmZlcmVudCBpbnRlcnJ1cHQgY29udGV4dHMuIEhvcGVmdWxseSB0aGF0IHNoZWRzIGxpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3NvZnRpcnFfY3B1X2RlYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmM9MTIyNT1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIGJsa19kb25lX3NvZnRpcnEodm9pZClcbi0tXG5ibG9jay9ibGstbXEuYy0xMjI5LVxuYmxvY2svYmxrLW1xLmM6MTIzMDpzdGF0aWMgaW50IGJsa19zb2Z0aXJxX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpXG5ibG9jay9ibGstbXEuYy0xMjMxLXtcbi0tXG5ibG9jay9ibGstbXEuYz01MjgxPXN0YXRpYyBpbnQgX19pbml0IGJsa19tcV9pbml0KHZvaWQpXG4tLVxuYmxvY2svYmxrLW1xLmMtNTI5My1cdFx0XHRcdCAgXCYjMzQ7YmxvY2svc29mdGlycTpkZWFkXCYjMzQ7LCBOVUxMLFxuYmxvY2svYmxrLW1xLmM6NTI5NDpcdFx0XHRcdCAgYmxrX3NvZnRpcnFfY3B1X2RlYWQpO1xuYmxvY2svYmxrLW1xLmMtNTI5NS1cdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JMS19NUV9ERUFELCBcJiMzNDtibG9jay9tcTpkZWFkXCYjMzQ7LCBOVUxMLFxuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3Ni0gKlxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzc6ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3OC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBJbXBsaWNhdGlvbnMgb2YgdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIHdhcywgd2hhdCBleGFjdGx5IGRvZXMgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGRvPyBUaGUgY29kZSBzaG93cyB0aGF0IGl0IGVzc2VudGlhbGx5IGlzc3VlcyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuYCBpZiB0aGVyZSBhcmUgcGVuZGluZyBzb2Z0aXJxcywgYW5kIHRoZW4gaXQgcmV0dXJucyBgdHJ1ZWAsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgdGhlIHRpY2sgZnJvbSBzdG9wcGluZyBhbmQgdGh1cyBzdXBwcmVzc2luZyBhIHJlbGF0ZWQgdGljay1zdG9wIGVycm9yLgoKVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgc2Vuc2l0aXZlIGR1cmluZyBDUFUgaG90LXVucGx1ZyBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBgIWNwdV9hY3RpdmUoKWAgYmVjb21lcyB0cnVlLiBIaXN0b3JpY2FsbHksIGlmIGBCTE9DS19TT0ZUSVJRYCB3YXMgcGVuZGluZyBkdXJpbmcgdGhpcyBzdGF0ZSwgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIHdvdWxkIHRyaWdnZXIgdGhlIHdhcm5pbmcgYW5kIHJldHVybiBgdHJ1ZWAsIGltcGFjdGluZyB0aGUgYGNhbl9zdG9wX2lkbGVfdGlja2AgZGVjaXNpb24uCgpUaGlzIHBhdGNoLCBob3dldmVyLCBtYXNrcyBvdXQgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgICh3aGljaCBlbmNvbXBhc3NlcyBgQkxPQ0tfU09GVElSUWAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciAmIzM0O3NhZmUmIzM0OyBzb2Z0aXJxcykgZnJvbSBgcGVuZGluZ2Agd2l0aGluIHRoZSBgIWNwdV9hY3RpdmUoKWAgY29uZGl0aW9uLiAgVGhpcyBtZWFucyB0aGF0IGlmICpvbmx5KiB0aG9zZSAmIzM0O3NhZmUmIzM0OyBzb2Z0aXJxcyBhcmUgcGVuZGluZywgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIHdpbGwgbm93IHJldHVybiBgZmFsc2VgIGFuZCBzdXBwcmVzcyB0aGUgd2FybmluZy4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBmdXp6aW5nLXJlbGV2YW50LiAgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBjYXJlZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIGEgbmVnYXRpdmUgY3JpdGVyaW9uIC0gdGhhdCBpcywgaWYgaXQmIzM5O3MgKm5vdCogd29ydGh5IG9mIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBhZmZlY3RzIGNvbXBpbGVkIEMgbG9naWMgYW5kIGNvbnRyb2wgZmxvdy4gQW5kIHRvIGFzY2VydGFpbiB0aGF0LCBJIG5lZWQgdG8gcmVmZXIgYmFjayB0byB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjaGFuZ2UgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzIGNoYW5nZSwgb3IgYSBjaGFuZ2Ugd2hpY2ggYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGtlcm5lbC4KCkxvb2tpbmcgYXQgdGhlIGNvZGU6ICBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaXMgZGlyZWN0bHkgdXNlZCBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOiByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLiBGdXJ0aGVybW9yZSwgd2l0aGluIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgOgoKYGBgYwoJaWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsKCQlwZW5kaW5nICZhbXA7PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSzsKCQlpZiAoIXBlbmRpbmcpCgkJCXJldHVybiBmYWxzZTsKCX0KYGBgCgpUaGlzIGlzICpkZWZpbml0ZWx5KiBhbHRlcmluZyBjb250cm9sIGZsb3cuICBUaGUgbWFza2luZyBvcGVyYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLCBhbmQgdGhlcmVmb3JlIHRoZSBzdWJzZXF1ZW50IGJlaGF2aW91ciBvZiBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiAgQWxzbywgYENQVSBvZmZsaW5lIC8gaG90cGx1ZyB2aWEgc3lzZnMgKGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL29ubGluZWApIG9yIENQVSBpZGxlIHRpY2sgY2FuIGJlIGV4ZXJjaXNlZCBpbiBRRU1VIC8gc3l6a2FsbGVyYC4gSSBjYW4gcmVhc29uYWJseSB0ZXN0IHRoZSBzY2VuYXJpby4gU28sIHllcywgaXQmIzM5O3MgYSBjaGFuZ2UgdG8gY29tcGlsZWQgQyBsb2dpYyBhbmQgY29udHJvbCBmbG93LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgYWx0ZXJzIGNvbnRyb2wgZmxvdyBhbmQgaXMgcG90ZW50aWFsbHkgZXhlcmNpc2VkIHZpYSBRRU1VIG9yIHN5emthbGxlciwgaXQmIzM5O3MgcmVsZXZhbnQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aWNrLXNjaGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxuMTA5NzpcdHtcbjEwOTg6XHRcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmICh1bmxpa2VseSghdGlja19zY2hlZF9mbGFnX3Rlc3QodHMsIFRTX0ZMQUdfTk9IWikpKVxuMTEwMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTAyOlx0XG4xMTAzOlx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4xMTA0Olx0XHRcdHJldHVybiBmYWxzZTtcbjExMDU6XHRcbjExMDY6XHRcdGlmICh1bmxpa2VseShyZXBvcnRfaWRsZV9zb2Z0aXJxKCkpKVxuMTEwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTA4Olx0XG4xMTA5Olx0XHRpZiAodGlja19ub2h6X2Z1bGxfZW5hYmxlZCgpKSB7XG4xMTEwOlx0XHRcdGludCB0aWNrX2NwdSA9IFJFQURfT05DRSh0aWNrX2RvX3RpbWVyX2NwdSk7XG4xMTExOlx0XG4xMTEyOlx0XHRcdC8qXG4xMTEzOlx0XHRcdCAqIEtlZXAgdGhlIHRpY2sgYWxpdmUgdG8gZ3VhcmFudGVlIHRpbWVrZWVwaW5nIHByb2dyZXNzaW9uXG4xMTE0Olx0XHRcdCAqIGlmIHRoZXJlIGFyZSBmdWxsIGR5bnRpY2tzIENQVXMgYXJvdW5kXG4xMTE1Olx0XHRcdCAqL1xuMTExNjpcdFx0XHRpZiAodGlja19jcHUgPT0gY3B1KVxuMTExNzpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjExMTg6XHRcbjExMTk6XHRcdFx0LyogU2hvdWxkIG5vdCBoYXBwZW4gZm9yIG5vaHotZnVsbCAqL1xuMTEyMDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHRpY2tfY3B1ID09IFRJQ0tfRE9fVElNRVJfTk9ORSkpXG4xMTIxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTEyMjpcdFx0fVxuMTEyMzpcdFxuMTEyNDpcdFx0cmV0dXJuIHRydWU7XG4xMTI1Olx0fVxuMTEyNjpcdFxuMTEyNzpcdC8qKlxuMTEyODpcdCAqIHRpY2tfbm9oel9pZGxlX3N0b3BfdGljayAtIHN0b3AgdGhlIGlkbGUgdGljayBmcm9tIHRoZSBpZGxlIHRhc2tcbjExMjk6XHQgKlxuMTEzMDpcdCAqIFdoZW4gdGhlIG5leHQgZXZlbnQgaXMgbW9yZSB0aGFuIGEgdGljayBpbnRvIHRoZSBmdXR1cmUsIHN0b3AgdGhlIGlkbGUgdGlja1xuMTEzMTpcdCAqL1xuMTEzMjpcdHZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXG4xMTMzOlx0e1xuMTEzNDpcdFx0c3RydWN0IHRpY2tfc2NoZWQgKnRzID0gdGhpc19jcHVfcHRyKFx1MDAyNnRpY2tfY3B1X3NjaGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIEJldHdlZW4gYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgYW5kIElkbGUgVGljayBTdG9wcGluZyoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgYGNhbl9zdG9wX2lkbGVfdGljaygpYC4gSWYgYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgcmV0dXJucyBgdHJ1ZWAsIHRoZW4gd2UgKmNhbm5vdCogc3RvcCB0aGUgaWRsZSB0aWNrLCB3aGljaCBtZWFucyBgY2FuX3N0b3BfaWRsZV90aWNrKClgIHdpbGwgcmV0dXJuIGBmYWxzZWAuIENvbnZlcnNlbHksIHdoZW4gYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgcmV0dXJucyBgZmFsc2VgLCBgY2FuX3N0b3BfaWRsZV90aWNrKClgIGlzIGFsbG93ZWQgdG8gcHJvY2VlZCBhbmQgcG90ZW50aWFsbHkgc3RvcCB0aGUgdGljay4gVGhhdCBjb250cm9sIGZsb3cgbWFrZXMgc2Vuc2UgLSBpdCBzZWVtcyBsaWtlIHRoaXMgaW50ZXJhY3Rpb24gaXMgbW9zdCByZWxldmFudCB3aGVuIGBCTE9DS19TT0ZUSVJRYCBpcyBwZW5kaW5nLCBwYXJ0aWN1bGFybHkgZHVyaW5nIENQVSBob3RwbHVnIG9yIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBzYXZlIHBvd2VyIHRocm91Z2ggaWRsZSBzdGF0ZSB0cmFuc2l0aW9ucy4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBhZmZlY3RlZCBoZXJlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBBaCwgU2VjdGlvbiAzISBJdCBzdGF0ZXMgdGhhdCBjaGFuZ2VzIGluICpjb3JlIHN1YnN5c3RlbXMqIGFyZSBjcml0aWNhbCwgYW5kIHRoaXMgaXMgY2xlYXJseSByZWxldmFudCB0byB0aW1la2VlcGluZywgc29mdGlycSBoYW5kbGluZywgYW5kIHRoZSBzY2hlZHVsZXIuIFRob3NlIGFyZSBhbGwgY29yZSBzdWJzeXN0ZW1zISBJZiB0aGlzIGFmZmVjdHMgdGhhdCBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMuCgpOb3csIEkgbmVlZCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgY29udHJvbCB0aGUgY29tcGlsYXRpb24gb2YgdGljay1zY2hlZCBvciBub2h6LXJlbGF0ZWQgY29kZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBrZXJuZWwvdGltZS9LY29uZmlnYCBhbmQgYGtlcm5lbC90aW1lL01ha2VmaWxlYCBmaWxlcy4gVGhvc2UgYXJlIHRoZSBiZXN0IHBsYWNlcyB0byBmaW5kIG91dCB3aGF0IEtjb25maWdzIGFyZSByZWxldmFudCBhbmQgcG90ZW50aWFsbHkgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGludm9sdmVkIGNvZGUuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlncyBhcmUgdXNlZCB3aWxsIGhlbHAgbWUgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aWNrLXNjaGVkXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLKVx0XHQmIzQzOz0gc2NoZWRfY2xvY2sub1xua2VybmVsL3RpbWUvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVClcdFx0XHQmIzQzOz0gdGljay1vbmVzaG90Lm8gdGljay1zY2hlZC5vXG5rZXJuZWwvdGltZS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTEVHQUNZX1RJTUVSX1RJQ0spXHRcdFx0JiM0Mzs9IHRpY2stbGVnYWN5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBwb3RlbnRpYWwgY3VscHJpdHM6IGBDT05GSUdfTk9fSFpfQ09NTU9OYCwgYENPTkZJR19USUNLX09ORVNIT1RgLCBgQ09ORklHX05PX0haX0lETEVgLCBhbmQgYENPTkZJR19IT1RQTFVHX0NQVWAuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRpbWVrZWVwaW5nIGFuZCBDUFUgaWRsZSBzdGF0ZXMsIHNvIHRoZXkmIzM5O3JlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcuCgpOb3csIHRvIGdldCBzb21lIHJlYWwgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBga2VybmVsL3RpbWUvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRpbWluZyBhbmQgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgVElDS19PTkVTSE9UYCBhbmQgYE5PX0haYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QgYW5kIHdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBhdCBwbGF5LiBUaW1lIHRvIGdldCB0aG9zZSBLY29uZmlnIGZpbGVzIG9wZW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSUNLX09ORVNIT1R8Y29uZmlnIE5PX0haJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvS2NvbmZpZz05NT1pZiBHRU5FUklDX0NMT0NLRVZFTlRTXG4tLVxua2VybmVsL3RpbWUvS2NvbmZpZy05OC0jIGFyZSBzdXBwb3J0ZWQgaW5kZXBlbmRlbnQgb2YgdGhpcy5cbmtlcm5lbC90aW1lL0tjb25maWc6OTk6Y29uZmlnIFRJQ0tfT05FU0hPVFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMDAtXHRib29sXG5rZXJuZWwvdGltZS9LY29uZmlnLTEwMS1cbmtlcm5lbC90aW1lL0tjb25maWc6MTAyOmNvbmZpZyBOT19IWl9DT01NT05cbmtlcm5lbC90aW1lL0tjb25maWctMTAzLVx0Ym9vbFxuLS1cbmtlcm5lbC90aW1lL0tjb25maWc9MTEwPWNvbmZpZyBIWl9QRVJJT0RJQ1xuLS1cbmtlcm5lbC90aW1lL0tjb25maWctMTE1LVxua2VybmVsL3RpbWUvS2NvbmZpZzoxMTY6Y29uZmlnIE5PX0haX0lETEVcbmtlcm5lbC90aW1lL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtJZGxlIGR5bnRpY2tzIHN5c3RlbSAodGlja2xlc3MgaWRsZSlcJiMzNDtcbi0tXG5rZXJuZWwvdGltZS9LY29uZmlnLTEyNS1cbmtlcm5lbC90aW1lL0tjb25maWc6MTI2OmNvbmZpZyBOT19IWl9GVUxMXG5rZXJuZWwvdGltZS9LY29uZmlnLTEyNy1cdGJvb2wgXCYjMzQ7RnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVwmIzM0O1xuLS1cbmtlcm5lbC90aW1lL0tjb25maWc9MTY1PWNvbmZpZyBDT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0Vcbi0tXG5rZXJuZWwvdGltZS9LY29uZmlnLTE5MC1cbmtlcm5lbC90aW1lL0tjb25maWc6MTkxOmNvbmZpZyBOT19IWlxua2VybmVsL3RpbWUvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O09sZCBJZGxlIGR5bnRpY2tzIGNvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRXhhbWluaW5nIFRpbWVrZWVwaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRpbWVrZWVwaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpZGxlIENQVSBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkgZm9jdXNlcyBvbiB0aGUga2V5IG9wdGlvbnM6IGBOT19IWl9JRExFYCwgYE5PX0haX0NPTU1PTmAsIGFuZCBgSE9UUExVR19DUFVgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aWNrbGVzcyBvcGVyYXRpb24gYW5kIENQVSBob3RwbHVnLCB3aGljaCwgb2YgY291cnNlLCBkaXJlY3RseSBpbXBhY3RzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHJlc3BvbnNpdmVuZXNzLiBJJiMzOTttIHJlY2FsbGluZyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGFyZSBvZnRlbiBpbnRlcnJlbGF0ZWQuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCBwb3RlbnRpYWwgZWZmZWN0cywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmVzIDEwMC0xMzAgaW4gYGtlcm5lbC90aW1lL0tjb25maWdgIGJlY2F1c2UgdGhlc2UgdHlwZXMgb2YgY29uZmlndXJhdGlvbnMgYXJlIG9mdGVuIGdyb3VwZWQgbG9naWNhbGx5LiBUaGlzIHNlY3Rpb24gaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZm9ybWFsIGRlc2NyaXB0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGtlcm5lbCB0aW1lIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTXG4gIDk2Olx0IyBDb3JlIGludGVybmFsIHN3aXRjaC4gU2VsZWN0ZWQgYnkgTk9fSFpfQ09NTU9OIC8gSElHSF9SRVNfVElNRVJTLiBUaGlzIGlzXG4gIDk3Olx0IyBvbmx5IHJlbGF0ZWQgdG8gdGhlIHRpY2sgZnVuY3Rpb25hbGl0eS4gT25lc2hvdCBjbG9ja2V2ZW50IGRldmljZXNcbiAgOTg6XHQjIGFyZSBzdXBwb3J0ZWQgaW5kZXBlbmRlbnQgb2YgdGhpcy5cbiAgOTk6XHRjb25maWcgVElDS19PTkVTSE9UXG4gMTAwOlx0XHRib29sXG4gMTAxOlx0XG4gMTAyOlx0Y29uZmlnIE5PX0haX0NPTU1PTlxuIDEwMzpcdFx0Ym9vbFxuIDEwNDpcdFx0c2VsZWN0IFRJQ0tfT05FU0hPVFxuIDEwNTpcdFxuIDEwNjpcdGNob2ljZVxuIDEwNzpcdFx0cHJvbXB0IFwmIzM0O1RpbWVyIHRpY2sgaGFuZGxpbmdcJiMzNDtcbiAxMDg6XHRcdGRlZmF1bHQgTk9fSFpfSURMRSBpZiBOT19IWlxuIDEwOTpcdFxuIDExMDpcdGNvbmZpZyBIWl9QRVJJT0RJQ1xuIDExMTpcdFx0Ym9vbCBcJiMzNDtQZXJpb2RpYyB0aW1lciB0aWNrcyAoY29uc3RhbnQgcmF0ZSwgbm8gZHludGlja3MpXCYjMzQ7XG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIFRoaXMgb3B0aW9uIGtlZXBzIHRoZSB0aWNrIHJ1bm5pbmcgcGVyaW9kaWNhbGx5IGF0IGEgY29uc3RhbnRcbiAxMTQ6XHRcdCAgcmF0ZSwgZXZlbiB3aGVuIHRoZSBDUFUgZG9lc24mIzM5O3QgbmVlZCBpdC5cbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgTk9fSFpfSURMRVxuIDExNzpcdFx0Ym9vbCBcJiMzNDtJZGxlIGR5bnRpY2tzIHN5c3RlbSAodGlja2xlc3MgaWRsZSlcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBOT19IWl9DT01NT05cbiAxMTk6XHRcdGhlbHBcbiAxMjA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRpY2tsZXNzIGlkbGUgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzXG4gMTIxOlx0XHQgIHdpbGwgb25seSB0cmlnZ2VyIG9uIGFuIGFzLW5lZWRlZCBiYXNpcyB3aGVuIHRoZSBzeXN0ZW0gaXMgaWRsZS5cbiAxMjI6XHRcdCAgVGhpcyBpcyB1c3VhbGx5IGludGVyZXN0aW5nIGZvciBlbmVyZ3kgc2F2aW5nLlxuIDEyMzpcdFxuIDEyNDpcdFx0ICBNb3N0IG9mIHRoZSB0aW1lIHlvdSB3YW50IHRvIHNheSBZIGhlcmUuXG4gMTI1Olx0XG4gMTI2Olx0Y29uZmlnIE5PX0haX0ZVTExcbiAxMjc6XHRcdGJvb2wgXCYjMzQ7RnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVwmIzM0O1xuIDEyODpcdFx0IyBOT19IWl9DT01NT04gZGVwZW5kZW5jeVxuIDEyOTpcdFx0IyBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwZXJpb2RpYyBDUFUgZm9yIHRpbWVrZWVwaW5nXG4gMTMwOlx0XHRkZXBlbmRzIG9uIFNNUFxuIDEzMTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUlxuIDEzMjpcdFx0IyBWSVJUX0NQVV9BQ0NPVU5USU5HX0dFTiBkZXBlbmRlbmN5XG4gMTMzOlx0XHRkZXBlbmRzIG9uIEhBVkVfVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbiAxMzQ6XHRcdHNlbGVjdCBOT19IWl9DT01NT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBDUFUgSG90cGx1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBDUFUgaG90cGx1ZyB0ZWFyZG93biBjb2RlLCBhbmQgaXQmIzM5O3MgbWFraW5nIG1lIHRoaW5rIHdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBIT1RQTFVHX0NQVWAgY29uZmlndXJhdGlvbi4gVGhlIGAhY3B1X2FjdGl2ZSguLi4pYCBjaGVjayBpbiB0aGUgY29kZSBzZWVtcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgaG90cGx1ZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBhIG1pc3Rha2UgdG8gb3Zlcmxvb2sgaG93IHdlIGFyZSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgYGNwdV9hY3RpdmVgIGJlaGF2aW9yIGFzIHdlIHRlYXIgZG93biBvciBicmluZyB1cCBDUFVzLCBzaW5jZSBob3RwbHVnIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGFjdGl2ZSBzZXQuCgpUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIGdvIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGh1bnQgZm9yIGBIT1RQTFVHX0NQVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBjcHVfYWN0aXZlYCBzdGF0ZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYmFzZXMgYXJlIGNvdmVyZWQuIEkgYmV0IHRoYXQgd2lsbCBjbGFyaWZ5IGEgbG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE9UUExVR19DUFUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vS2NvbmZpZz0xMDY1PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0xMDc2LVxuYXJjaC9hcm0vS2NvbmZpZzoxMDc3OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9hcm0vS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTYyMT1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI1LVxuYXJjaC9hcm02NC9LY29uZmlnOjE2MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2FybTY0L0tjb25maWctMTYyNy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9jc2t5L0tjb25maWc9MzMwPWNvbmZpZyBEUkFNX0JBU0Vcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzMtXG5hcmNoL2Nza3kvS2NvbmZpZzozMzQ6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NTE1PWNvbmZpZyBTTVBcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUzMi1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NTMzOmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI3MDM9Y29uZmlnIFNNUFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTI3MjQtXG5hcmNoL21pcHMvS2NvbmZpZzoyNzI1OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9taXBzL0tjb25maWctMjcyNi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZz0zMzE9Y29uZmlnIElSUVNUQUNLU1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctMzM4LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozMzk6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODM9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01OTQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTU6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01OTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1Mz1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00NjItXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYzOmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTM1PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTQ2LVxuYXJjaC9zMzkwL0tjb25maWc6NTQ3OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zMzkwL0tjb25maWctNTQ4LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvc2gvS2NvbmZpZz01OTI9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3NoL0tjb25maWctNjA1LVxuYXJjaC9zaC9LY29uZmlnOjYwNjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvc2gvS2NvbmZpZy02MDctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZz0yMjA9Y29uZmlnIEVBUkxZRkJcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjIyOTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvc3BhcmMvS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjE1ND1jb25maWcgQUREUkVTU19NQVNLSU5HXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoyMTY2OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC94ODYvS2NvbmZpZy0yMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWc9MjUzPWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZy0yNTgtXG5hcmNoL3h0ZW5zYS9LY29uZmlnOjI1OTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ1BVIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEJsb2NrIExheWVyJiMzOTtzIFNvZnRJUlEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc29mdGlycSBmb3IgdGhlIGJsb2NrIGxheWVyIGlzIHNldCB1cC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYEJMT0NLYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYEJMT0NLX1NPRlRJUlFgIGJlaW5nIGRlZmluZWQsIGFuZCBpZiBtZW1vcnkgc2VydmVzLCBpdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19CTE9DS2AgZ3VhcmQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBob25lIGluIG9uIGxpbmVzIGFyb3VuZCA1NTAgdG8gNTgwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHQgICBmcmVxdWVuY3kgdGhyZWFkZWQgam9iIHNjaGVkdWxpbmcuIEZvciBhbG1vc3QgYWxsIHRoZSBwdXJwb3Nlc1xuIDU0NjpcdCAgIHRhc2tsZXRzIGFyZSBtb3JlIHRoYW4gZW5vdWdoLiBGLmUuIGFsbCBzZXJpYWwgZGV2aWNlIEJIcyBldFxuIDU0NzpcdCAgIGFsLiBzaG91bGQgYmUgY29udmVydGVkIHRvIHRhc2tsZXRzLCBub3QgdG8gc29mdGlycXMuXG4gNTQ4Olx0ICovXG4gNTQ5Olx0XG4gNTUwOlx0ZW51bVxuIDU1MTpcdHtcbiA1NTI6XHRcdEhJX1NPRlRJUlE9MCxcbiA1NTM6XHRcdFRJTUVSX1NPRlRJUlEsXG4gNTU0Olx0XHRORVRfVFhfU09GVElSUSxcbiA1NTU6XHRcdE5FVF9SWF9TT0ZUSVJRLFxuIDU1NjpcdFx0QkxPQ0tfU09GVElSUSxcbiA1NTc6XHRcdElSUV9QT0xMX1NPRlRJUlEsXG4gNTU4Olx0XHRUQVNLTEVUX1NPRlRJUlEsXG4gNTU5Olx0XHRTQ0hFRF9TT0ZUSVJRLFxuIDU2MDpcdFx0SFJUSU1FUl9TT0ZUSVJRLFxuIDU2MTpcdFx0UkNVX1NPRlRJUlEsICAgIC8qIFByZWZlcmFibGUgUkNVIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3Qgc29mdGlycSAqL1xuIDU2MjpcdFxuIDU2MzpcdFx0TlJfU09GVElSUVNcbiA1NjQ6XHR9O1xuIDU2NTpcdFxuIDU2NjpcdC8qXG4gNTY3Olx0ICogVGhlIGZvbGxvd2luZyB2ZWN0b3JzIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBhZnRlciBrc29mdGlycWQgaXMgcGFya2VkOlxuIDU2ODpcdCAqXG4gNTY5Olx0ICogXyBSQ1U6XG4gNTcwOlx0ICogXHQxKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgbWlncmF0ZXMgdGhlIHF1ZXVlLlxuIDU3MTpcdCAqIFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxuIDU3MjpcdCAqXG4gNTczOlx0ICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiA1NzQ6XHQgKlxuIDU3NTpcdCAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiA1NzY6XHQgKlxuIDU3NzpcdCAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xuIDU3ODpcdCAqL1xuIDU3OTpcdCNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxuIDU4MDpcdFx0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIDU4MTpcdFxuIDU4MjpcdFxuIDU4MzpcdC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW5cbiA1ODQ6XHQgKiBrZXJuZWwvc29mdGlycS5jIHdoZW4gYWRkaW5nIGEgbmV3IHNvZnRpcnEuXG4gNTg1Olx0ICovXG4gNTg2Olx0ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBzb2Z0aXJxX3RvX25hbWVbTlJfU09GVElSUVNdO1xuIDU4NzpcdFxuIDU4ODpcdC8qIHNvZnRpcnEgbWFzayBhbmQgYWN0aXZlIGZpZWxkcyBtb3ZlZCB0byBpcnFfY3B1c3RhdF90IGluXG4gNTg5Olx0ICogYXNtL2hhcmRpcnEuaCB0byBnZXQgYmV0dGVyIGNhY2hlIHVzYWdlLiAgS0FPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTb2Z0SVJRIFVzYWdlIEFjcm9zcyB0aGUgQmxvY2sgTGF5ZXIgYW5kIFRpY2sgU2NoZWR1bGVyKioKCk9rYXksIHNvIGBCTE9DS19TT0ZUSVJRYCBpcyBqdXN0IGhhbmdpbmcgb3V0IGluIHRoZSBlbnVtIHdpdGhvdXQgYW55IHF1YWxpZmljYXRpb24sIGJ1dCB0aGUgYmxvY2sgbGF5ZXIgZGVmaW5pdGVseSB1c2VzIGl0IHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuIEZpcnN0LCBJJiMzOTtsbCB0cmFjZSBkb3duIHdoZXJlIGBibGtfc29mdGlycV9jcHVfZGVhZGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgYmxvY2svYmxrLW1xLmNgLiBIbW0sIGl0IGFwcGVhcnMgdG8gYmUgY2xlYW5pbmcgdXAgcmVxdWVzdHMgb24gYSBkZWFkIENQVS4gTWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSB0aW1lIHNjaGVkdWxlciBzaWRlLiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCBhbHNvIHNlZW1zIGludGVyZXN0aW5nLiBJdCYjMzk7cyBzdGF0aWMsIGFuZCBjYWxsZWQgYnkgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgd2hpY2gsIGluIHR1cm4sIGlzIHVzZWQgYnkgZnVuY3Rpb25zIGxpa2UgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGljaygpYCBhbmQgYHRpY2tfbm9oel9mdWxsX3VwZGF0ZV90aWNrKClgLiAKCkFscmlnaHQsIGZvciBhcHByb3ByaWF0ZSAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3MgbG9vayBhdCBgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKClgLCBgdGlja19ub2h6X2lkbGVfZW50ZXIoKWAsIGV0Yy4uIFRob3NlIGFyZSB0aGUgcmVhbCBlbnRyeSBwb2ludHMuIE9idmlvdXNseSwgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBpcyBpbXBvcnRhbnQgdG9vLiBBbmQgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFzIHdlbGwsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLgoKV2FpdCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSB2aXNpYmlsaXR5IG9mIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgYW5kIGl0cyBjYWxsZXJzIHdpdGhpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYC4gR290dGEgYmUgdGhvcm91Z2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhbl9zdG9wX2lkbGVfdGljayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDQ3PXN0YXRpYyB2b2lkIHRpY2tfbm9oel9mdWxsX3VwZGF0ZV90aWNrKHN0cnVjdCB0aWNrX3NjaGVkICp0cylcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA2MC0gKiBzaG91bGQgYmUgd2FpdGluZyBmb3Iga3NvZnRpcnFkIHRvIGhhbmRsZSBpdC4gVGhlcmVmb3JlIHdlIHNob3VsZG4mIzM5O3Rcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMDYxOiAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNjItICpcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTA2OD1zdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTUtXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA5NjpzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTcte1xuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMTMyPXZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTExNDMtXHRcdGV4cGlyZXMgPSB0cy1cdTAwM2V0aW1lcl9leHBpcmVzO1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjExNDQ6XHRlbHNlIGlmIChjYW5fc3RvcF9pZGxlX3RpY2soY3B1LCB0cykpXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTE0NS1cdFx0ZXhwaXJlcyA9IHRpY2tfbm9oel9uZXh0X2V2ZW50KHRzLCBjcHUpO1xuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMjg0PWt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgoa3RpbWVfdCAqZGVsdGFfbmV4dClcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTI5OS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMzAwOlx0aWYgKCFjYW5fc3RvcF9pZGxlX3RpY2soY3B1LCB0cykpXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTMwMS1cdFx0cmV0dXJuICpkZWx0YV9uZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQwNgoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsb2NrIFNvZnRJUlEgYW5kIElkbGUgVGljayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGdlbmVyYWwgaWRsZSBmdW5jdGlvbiwgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGlja2AsIGFuZCB0aGUgbW9yZSBzcGVjaWZpYyBjYWxsYmFjayBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgIGFyZSBkaXN0aW5jdCBzeW1ib2xzIHdpdGhpbiB0aGUgdm1saW51eCBpbWFnZS4gR29vZCwgdGhleSBhcmUuIFN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gd2l0aGluIC5jIGZpbGVzLCBnZXQgc3ltYm9scywgb3IgYXQgbGVhc3QgdGhlaXIgY2FsbGVycyBkbyBpZiBpbmxpbmVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHJlcG9ydF9pZGxlX3NvZnRpcnFgLCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLCBhbmQgYGNhbl9zdG9wX2lkbGVfdGlja2AuIEdvdCBpdC4gTW92aW5nIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGNoZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBpbiBwbGFjZS4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGBOT19IWl9JRExFYCAob3IgYE5PX0haX0NPTU1PTmAgd2hpY2ggaW1wbGllcyBpdCksIGBIT1RQTFVHX0NQVWAsIGFuZCBgQkxPQ0tgLiBBbGwgdGhlIGtleSBvbmVzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgYWNjdXJhdGU6IGBOT19IWl9JRExFYCwgYEhPVFBMVUdfQ1BVYCwgYW5kIGBCTE9DS2AuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdCB0b286IGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhbmQgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcgc2VlbXMgc291bmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gaW5jbHVkZSBgQkxPQ0tfU09GVElSUWAuIFRoaXMgYWxsb3dzIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIGNvbnNpZGVyIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgc2FmZSBkdXJpbmcgQ1BVIGhvdHBsdWcgb2ZmbGluZSB3aGVuIGtzb2Z0aXJxZCBpcyBwYXJrZWQuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBgY2FuX3N0b3BfaWRsZV90aWNrKClgJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgdGhlcmVmb3JlIGFmZmVjdHMgd2FybmluZyBzdXBwcmVzc2lvbi4KCkp1c3QgYSBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlncy4gYE5PX0haX0lETEVgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRoIGBOT19IWmAuIGBIT1RQTFVHX0NQVWAgZW5hYmxlcyBDUFUgaG90cGx1Z2dpbmcsIGFuZCBgQkxPQ0tgIG9mIGNvdXJzZSBlbmFibGVzIHRoZSBibG9jayBsYXllciBhbmQgYEJMT0NLX1NPRlRJUlFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLgoKWWVwLCBldmVyeXRoaW5nIGxpbmVzIHVwIHBlcmZlY3RseS4gUmVhZHkgdG8gc3VibWl0IHRoaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOT19IWl9JRExFJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X2lkbGVfc29mdGlycSYjMzQ7LAogICAgJiMzNDtibGtfc29mdGlycV9jcHVfZGVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJMT0NLX1NPRlRJUlEgdG8gU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSywgd2hpY2ggYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiByZXBvcnRfaWRsZV9zb2Z0aXJxKCkgYW5kIGNhbl9zdG9wX2lkbGVfdGljaygpIHdoZW4gYSBDUFUgaXMgdGFrZW4gb2ZmbGluZSBkdXJpbmcgQ1BVIGhvdHBsdWcsIGVuc3VyaW5nIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdHJpZ2dlcmluZyB0aWNrLXN0b3Agd2FybmluZ3MgYmVmb3JlIGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY2xlYW5zIHRoZW0gdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05PX0haX0lETEUmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfaWRsZV9zb2Z0aXJxJiMzNDssCiAgICAmIzM0O2Jsa19zb2Z0aXJxX2NwdV9kZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQkxPQ0tfU09GVElSUSB0byBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLLCB3aGljaCBhbHRlcnMgY29udHJvbCBmbG93IGluIHJlcG9ydF9pZGxlX3NvZnRpcnEoKSBhbmQgY2FuX3N0b3BfaWRsZV90aWNrKCkgd2hlbiBhIENQVSBpcyB0YWtlbiBvZmZsaW5lIGR1cmluZyBDUFUgaG90cGx1ZywgZW5zdXJpbmcgcGVuZGluZyBibG9jayBzb2Z0aXJxcyBhcmUgaWdub3JlZCByYXRoZXIgdGhhbiB0cmlnZ2VyaW5nIHRpY2stc3RvcCB3YXJuaW5ncyBiZWZvcmUgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjbGVhbnMgdGhlbSB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGNvbXBpbGUtdGltZSBiaXRtYXNrIGNvbnN0YW50IGZvciBzb2Z0aXJxIGhvdHBsdWcgaGFuZGxpbmcgbG9naWMuIEl0IGludHJvZHVjZXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgbm8gc3RydWN0IHBhZGRpbmcgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTY3MGUzNzMwM2M3NTY0MWJkMWQ4YmUxYWEwNDI2NjRjYjczYjE1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTQ6NTg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCAzYmY5NjlhZDhmZTA3Li41MmJiNjg0MDkwYzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTU3Myw5ICYjNDM7NTczLDExIEBAIGVudW0KICAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlCiAgKgogICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZQomIzQzOyAqCiYjNDM7ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzCiAgKi8KLSNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKElSUV9QT0xMX1NPRlRJUlEpIHxcCi0JCQkJICAgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKQomIzQzOyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcCiYjNDM7CQkJCSAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSkKIAogCiAvKiBtYXAgc29mdGlycSBpbmRleCB0byBzb2Z0aXJxIG5hbWUuIHVwZGF0ZSAmIzM5O3NvZnRpcnFfdG9fbmFtZSYjMzk7IGluCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBJbnRlcnJ1cHQgSGVhZGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWx0ZXJhdGlvbiBvZiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgQkxPQ0tfU09GVElSUWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBgQkxPQ0tfU09GVElSUWAgaXMgYmVpbmcgaW5jbHVkZWQgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLgoKVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGUgYWRkaXRpb24gb2YgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlbW92YWwgb2YgdGhlIG1hc2sgZWxlbWVudCBmb3IgdGhlIGJsb2NrJiMzOTtzIHdvcmsgcXVldWUgbWlncmF0aW9uLiBNeSBhc3N1bXB0aW9uIGlzIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHNvZnQgaW50ZXJydXB0IGhhbmRsaW5nIGR1cmluZyBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbm93IGhhbmRsZXMgYmxvY2sgcmVxdWVzdHMgZHVyaW5nIENQVSByZW1vdmFsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHVzZXMgb2YgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIHRoZSBjb2RlIGJhc2UuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZmlsZSB0byBjaGVjay4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIHJvdXRpbmVzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQWxzbywgSSBuZWVkIHRvIGtub3cgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGNydWNpYWwgdG8gaG93IGJsb2NrIHJlcXVlc3RzIGFyZSBub3cgaGFuZGxlZCBhZnRlciB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IGl0ICYjMzQ7Y29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG5ldyBiZWhhdmlvciBoYXMgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHNhZmUuIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgZm9yIHRoaXMgY2hhbmdlIHRvIGNvcnJlY3RseSBhc3Nlc3MgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXG4tLVxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzgtICovXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3OTojZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTgwLVx0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDY4PXN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA3Ny1cdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA3ODpcdFx0cGVuZGluZyBcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzktXHRcdGlmICghcGVuZGluZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIFRpY2sgU2NoZWR1bGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgc2NoZWR1bGluZyBpc3N1ZS4uLm15IGd1dCBzYXlzIHRoZSBwcm9ibGVtIGxpZXMgc29tZXdoZXJlIGluIHRoZSB0aWNrIHNjaGVkdWxlci4gSSBuZWVkIHRvIGdldCB0byB0aGUgY29yZSBvZiBob3cgaXQgbWFuYWdlcyB0aGUgdGltZXIgdGlja3MuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEwNjguIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5ICp0aGVyZSogYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aWNrLXNjaGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHQgKiBzaG91bGQgYmUgd2FpdGluZyBmb3Iga3NvZnRpcnFkIHRvIGhhbmRsZSBpdC4gVGhlcmVmb3JlIHdlIHNob3VsZG4mIzM5O3RcbjEwNjE6XHQgKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cbjEwNjI6XHQgKlxuMTA2MzpcdCAqIEhvd2V2ZXIgaWYgd2UgYXJlIGJldHdlZW4gQ1BVSFBfQVBfU01QQk9PVF9USFJFQURTIGFuZCBDUFVfVEVBUkRPV05fQ1BVIG9uIHRoZVxuMTA2NDpcdCAqIGNwdV9kb3duKCkgcHJvY2Vzcywgc29mdGlycXMgY2FuIHN0aWxsIGJlIHJhaXNlZCB3aGlsZSBrc29mdGlycWQgaXMgcGFya2VkLFxuMTA2NTpcdCAqIHRyaWdnZXJpbmcgdGhlIGNvZGUgYmVsb3csIHNpbmNlIHdha2VwX3NvZnRpcnFkKCkgaXMgaWdub3JlZC5cbjEwNjY6XHQgKlxuMTA2NzpcdCAqL1xuMTA2ODpcdHN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHRzdGF0aWMgaW50IHJhdGVsaW1pdDtcbjEwNzE6XHRcdHVuc2lnbmVkIGludCBwZW5kaW5nID0gbG9jYWxfc29mdGlycV9wZW5kaW5nKCk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAobGlrZWx5KCFwZW5kaW5nKSlcbjEwNzQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA3NTpcdFxuMTA3NjpcdFx0LyogU29tZSBzb2Z0aXJxcyBjbGFpbSB0byBiZSBzYWZlIGFnYWluc3QgaG90cGx1ZyBhbmQga3NvZnRpcnFkIHBhcmtpbmcgKi9cbjEwNzc6XHRcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XG4xMDc4Olx0XHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcbjEwNzk6XHRcdFx0aWYgKCFwZW5kaW5nKVxuMTA4MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwODE6XHRcdH1cbjEwODI6XHRcbjEwODM6XHRcdC8qIE9uIFJULCBzb2Z0aXJxIGhhbmRsaW5nIG1heSBiZSB3YWl0aW5nIG9uIHNvbWUgbG9jayAqL1xuMTA4NDpcdFx0aWYgKGxvY2FsX2JoX2Jsb2NrZWQoKSlcbjEwODU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4NjpcdFxuMTA4NzpcdFx0aWYgKHJhdGVsaW1pdCBcdTAwM2MgMTApIHtcbjEwODg6XHRcdFx0cHJfd2FybihcJiMzNDtOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXG5cJiMzNDssXG4xMDg5Olx0XHRcdFx0cGVuZGluZyk7XG4xMDkwOlx0XHRcdHJhdGVsaW1pdCYjNDM7JiM0Mzs7XG4xMDkxOlx0XHR9XG4xMDkyOlx0XG4xMDkzOlx0XHRyZXR1cm4gdHJ1ZTtcbjEwOTQ6XHR9XG4xMDk1Olx0XG4xMDk2Olx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcbjEwOTc6XHR7XG4xMDk4Olx0XHRXQVJOX09OX09OQ0UoY3B1X2lzX29mZmxpbmUoY3B1KSk7XG4xMDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTUKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNvZnRJUlFfSE9UUExVR19TQUZFX01BU0sgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHdlJiMzOTtyZSBhZGp1c3RpbmcgdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBiaXRtYXNrIHdpdGhpbiB0aGUgTk9IWiB0aWNrIGNvZGUgc3BlY2lmaWNhbGx5IGZvciBzY2VuYXJpb3MgaW52b2x2aW5nIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgd2hlbiBga3NvZnRpcnFkYCBpcyBwYXJrZWQuIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uIFRoZSBnb2FsIGlzIHRvIGFjY29tbW9kYXRlIHRoZSBgQkxPQ0tfU09GVElSUWAgc29mdGlycS4gQnkgYWRkaW5nIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIHRoaXMgbWFzaywgd2UmIzM5O3JlIHN1cHByZXNzaW5nIGEgd2FybmluZy4gU3BlY2lmaWNhbGx5LCB0aGUgd2FybmluZyBgcHJfd2FybigmIzM0O05PSFogdGljay1zdG9wIGVycm9yOiBsb2NhbCBzb2Z0aXJxIHdvcmsgaXMgcGVuZGluZywgaGFuZGxlciAjJTAyeCEhIVxuJiMzNDssIHBlbmRpbmcpO2AgaXMgYmVpbmcgc3VwcHJlc3NlZCBmb3IgdGhlIGBCTE9DS19TT0ZUSVJRYCBjYXNlLiBUaGUgcmVhc29uIHRoaXMgaXMgc2FmZSBpcyBiZWNhdXNlIGBibGtfc29mdGlycV9jcHVfZGVhZCgpYCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgYW55IHJlbWFpbmluZyBibG9jayBzb2Z0aXJxIHJlcXVlc3RzIHdoZW4gYSBDUFUgZ29lcyBvZmZsaW5lLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIG1lbW9yeSBzYWZldHkgY2hlY2tzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGEgbWFjcm8gZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLiBUaGlzIGlzIGEgaGVhZGVyIGZpbGUgdXBkYXRlLCBhZmZlY3Rpbmcgb25seSB0aGUgQ1BVIGhvdHBsdWcgYW5kIHRpY2sgc3RvcHBpbmcgbG9naWMgcmVsYXRlZCB0byBpZGxlIHNvZnRpcnEgcmVwb3J0aW5nLgoKMS4gICoqTm8gS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4qKiBXZSYjMzk7cmUgbm90IGV4cG9zaW5nIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZTsgdGhlcmVmb3JlLCB0aGUgdXN1YWwgcGFkZGluZyBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvbmNlcm5zIGRvbiYjMzk7dCBhcHBseS4KMi4gICoqTm8gQ29uZGl0aW9uYWwgTG9naWMgd2l0aCBVbmluaXRpYWxpemVkIFZhcmlhYmxlcy4qKiBUaGVyZSYjMzk7cyBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgozLiAgKipObyBDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uLioqIFRoaXMgaXNuJiMzOTt0IGFib3V0IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBhIHNpbXBsZSBiaXRtYXNrIHVwZGF0ZS4KNC4gICoqTm8gQm91bmRzIENoZWNrIFZ1bG5lcmFiaWxpdGllcy4qKiBXZSBhcmVuJiMzOTt0IGRvaW5nIGFueSBib3VuZHMgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbiBvZiBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpTaW5jZSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG1hY3JvIGRlZmluaXRpb24gdXBkYXRlLCB3aXRoIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBhbmQgbm8gcGFkZGluZyByaXNrcywgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmVhc29uIGZvciBjb25jZXJuLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIENQVSBob3RwbHVnIHRlYXJkb3duIGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6cmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBwcmV2ZW50IGZhbHNlLXBvc2l0aXZlIE5PSFogdGljay1zdG9wIHdhcm5pbmdzIGZvciBibG9jayBzb2Z0aXJxcyBoYW5kbGVkIGJ5IGBibGtfc29mdGlycV9jcHVfZGVhZCgpYC4gXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBjb21waWxlLXRpbWUgYml0bWFzayBjb25zdGFudCBmb3Igc29mdGlycSBob3RwbHVnIGhhbmRsaW5nIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6MzQuODYzNDE1NjI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMjI0NzAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTk9fSFpfSURMRVwiLFxuICAgIFwiSE9UUExVR19DUFVcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwb3J0X2lkbGVfc29mdGlycVwiLFxuICAgIFwiYmxrX3NvZnRpcnFfY3B1X2RlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNC44NjM0MjIwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQxNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDo1ODozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxcbmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcXG5AQCAtNTczLDkgKzU3MywxMSBAQCBlbnVtXFxuICAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlXFxuICAqXFxuICAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcXG4rICpcXG4rICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXFxuICAqL1xcbi0jZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8XFxcXFxcbi1cXHRcXHRcXHRcXHQgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXFxuKyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcXG4gXFxuIFxcbiAvKiBtYXAgc29mdGlycSBpbmRleCB0byBzb2Z0aXJxIG5hbWUuIHVwZGF0ZSAnc29mdGlycV90b19uYW1lJyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNS4yOTk2Nzk2NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MzcxMDk1MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE0OjU4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG5AQCAtNTczLDkgKzU3MywxMSBAQCBlbnVtXG4gICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiAgKlxuICAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcbisgKlxuKyAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xuICAqL1xuLSNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKElSUV9QT0xMX1NPRlRJUlEpIHxcXFxuLVx0XHRcdFx0ICAgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuKyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxuK1x0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIFxuIFxuIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICdzb2Z0aXJxX3RvX25hbWUnIGluXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNS4yOTk2ODExOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njg2ODUwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBJbnRlcnJ1cHQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQncyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIExvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AuIEkgcmVjb2duaXplIHRoYXQgbWFjcm87IGl0J3MgdGhlIGJpdG1hc2sgdXNlZCB0byBpZGVudGlmeSBzb2Z0aXJxcyB0aGF0IGFyZSBzYWZlIHRvIG1pZ3JhdGUgZHVyaW5nIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFRoZSBkaWZmIGlzIHByZXR0eSBjbGVhcjogaXQncyBhZGRpbmcgYEJMT0NLX1NPRlRJUlFgIHRvIHRoZSBleGlzdGluZyBtYXNrIGFuZCByZW1vdmluZyBgUkNVX1NPRlRJUlFgLiBJbnRlcmVzdGluZy5cblxuU28sIHRoZSBpbnRlbnQgaGVyZSBpcyB0byBpbmNsdWRlIHRoZSBibG9jayBzb2Z0aXJxIGluIHRoZSBsaXN0IG9mIG9uZXMgdGhhdCB0aGUga2VybmVsIGNvbnNpZGVycyBzYWZlIGZvciBtaWdyYXRpb24gZHVyaW5nIGhvdHBsdWcuIFRoaXMgaW1wbGllcyB0aGF0IHdoYXRldmVyIHdvcmsgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgIGlzIGRvaW5nLCBpdCdzIG5vdyBkZWVtZWQgdG8gYmUgc2FmZSB0byBtb3ZlIHRvIGEgbmV3IENQVSB3aGVuIGFuIG9sZCBvbmUgaXMgZ29pbmcgYXdheS4gQ29udmVyc2VseSwgdGhlIHJlbW92YWwgb2YgYFJDVV9TT0ZUSVJRYCBtZWFucyB0aGF0IGl0J3MgKm5vIGxvbmdlciogY29uc2lkZXJlZCBzYWZlIHRvIG1pZ3JhdGUuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aHkgdGhhdCBkZWNpc2lvbiB3YXMgbWFkZS4gSSBuZWVkIG1vcmUgY29udGV4dC5cblxuQmVmb3JlIEkgZHJhdyBhbnkgY29uY2x1c2lvbnMsIEknbGwgcnVuIGBncmVwcGVyYCBvbiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB3aGV0aGVyIHRoaXMgbWFrZXMgc2Vuc2UuIFRpbWUgdG8gc2VlIHdoZXJlIHRoaXMgbWFzayBpcyByZWZlcmVuY2VkIGFuZCB3aGF0IGNvZGUgaXMgY2hlY2tpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozOS45ODY1MzU0MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2ODgwOTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc4LSAqL1xcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg6NTc5OiNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxcXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01ODAtXFx0XFx0XFx0XFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNjg9c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzctXFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA3ODpcXHRcXHRwZW5kaW5nIFxcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc5LVxcdFxcdGlmICghcGVuZGluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6NDIuNDU1MzUxODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzYzMzA5NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUaWNrIFNjaGVkdWxpbmcgYW5kIEJsb2NrIFNvZnRJUlEgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBteSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUga2VybmVsJ3MgdGljayBzY2hlZHVsaW5nIG1lY2hhbmlzbSBhbmQgdGhlIGhhbmRsaW5nIG9mIGJsb2NrIEkvTyBzb2Z0aXJxcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIENQVSBob3RwbHVnIGV2ZW50cy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgYmVoYXZlIHdoZW4gYSBDUFUgaXMgYnJvdWdodCBvbmxpbmUsIGdvZXMgaWRsZSwgb3IgaXMgdGFrZW4gb2ZmbGluZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGluc3BlY3QgdGhlIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgIGZpbGUsIGFyb3VuZCBsaW5lIDEwNjgsIHdoaWNoIGlzIG9mdGVuIGEgY3JpdGljYWwgYXJlYSBmb3IgdGljay1yZWxhdGVkIGxvZ2ljLiBJIGV4cGVjdCB0aGlzIHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoZSBjb2RlIHBhdGggaW50ZXJzZWN0cyB3aXRoIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSB0aW1lcnMgaW52b2x2ZWQgaW4gdGljayBzY2hlZHVsaW5nLiBGcm9tIHRoZXJlLCBpdCdzIGEgc2hvcnQganVtcCB0byBjb25zaWRlciB0aGUgYmVoYXZpb3Igb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBmdW5jdGlvbiBhbmQgaXRzIGltcGFjdCBvbiB0aGUgYEJMT0NLX1NPRlRJUlFgLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBibG9jayBsYXllcidzIHNvZnRpcnEgaGFuZGxpbmcgaXMgcmVzaWxpZW50IHRvIGNoYW5nZXMgaW4gQ1BVIHN0YXRlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgd2hlbiBhIENQVSBpcyBhYnJ1cHRseSByZW1vdmVkIG9yIGlkbGVkPyBJcyB0aGUgc29mdGlycSBwcm9wZXJseSBtaWdyYXRlZCBvciBkaXNhYmxlZCwgb3IgZG9lcyBpdCBsZWF2ZSBhbiBvcGVuIGxvb3A/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29mdGlycSBpcyByZWdpc3RlcmVkLCB1bnJlZ2lzdGVyZWQsIGFuZCBoYW5kbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBDUFUgaG90cGx1ZyBldmVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBpbiBhIGR5bmFtaWMgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2NoZWR1bGVyLCB0aGUgYmxvY2sgbGF5ZXIsIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0NS4yMTg2NjM1MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvdGljay1zY2hlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0ICogc2hvdWxkIGJlIHdhaXRpbmcgZm9yIGtzb2Z0aXJxZCB0byBoYW5kbGUgaXQuIFRoZXJlZm9yZSB3ZSBzaG91bGRuJ3RcXG4xMDYxOlxcdCAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxcbjEwNjI6XFx0ICpcXG4xMDYzOlxcdCAqIEhvd2V2ZXIgaWYgd2UgYXJlIGJldHdlZW4gQ1BVSFBfQVBfU01QQk9PVF9USFJFQURTIGFuZCBDUFVfVEVBUkRPV05fQ1BVIG9uIHRoZVxcbjEwNjQ6XFx0ICogY3B1X2Rvd24oKSBwcm9jZXNzLCBzb2Z0aXJxcyBjYW4gc3RpbGwgYmUgcmFpc2VkIHdoaWxlIGtzb2Z0aXJxZCBpcyBwYXJrZWQsXFxuMTA2NTpcXHQgKiB0cmlnZ2VyaW5nIHRoZSBjb2RlIGJlbG93LCBzaW5jZSB3YWtlcF9zb2Z0aXJxZCgpIGlzIGlnbm9yZWQuXFxuMTA2NjpcXHQgKlxcbjEwNjc6XFx0ICovXFxuMTA2ODpcXHRzdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXFxuMTA2OTpcXHR7XFxuMTA3MDpcXHRcXHRzdGF0aWMgaW50IHJhdGVsaW1pdDtcXG4xMDcxOlxcdFxcdHVuc2lnbmVkIGludCBwZW5kaW5nID0gbG9jYWxfc29mdGlycV9wZW5kaW5nKCk7XFxuMTA3MjpcXHRcXG4xMDczOlxcdFxcdGlmIChsaWtlbHkoIXBlbmRpbmcpKVxcbjEwNzQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQvKiBTb21lIHNvZnRpcnFzIGNsYWltIHRvIGJlIHNhZmUgYWdhaW5zdCBob3RwbHVnIGFuZCBrc29mdGlycWQgcGFya2luZyAqL1xcbjEwNzc6XFx0XFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcXG4xMDc4OlxcdFxcdFxcdHBlbmRpbmcgXFx1MDAyNj0gflNPRlRJUlFfSE9UUExVR19TQUZFX01BU0s7XFxuMTA3OTpcXHRcXHRcXHRpZiAoIXBlbmRpbmcpXFxuMTA4MDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA4MTpcXHRcXHR9XFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdC8qIE9uIFJULCBzb2Z0aXJxIGhhbmRsaW5nIG1heSBiZSB3YWl0aW5nIG9uIHNvbWUgbG9jayAqL1xcbjEwODQ6XFx0XFx0aWYgKGxvY2FsX2JoX2Jsb2NrZWQoKSlcXG4xMDg1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0aWYgKHJhdGVsaW1pdCBcXHUwMDNjIDEwKSB7XFxuMTA4ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXFxcblxcXCIsXFxuMTA4OTpcXHRcXHRcXHRcXHRwZW5kaW5nKTtcXG4xMDkwOlxcdFxcdFxcdHJhdGVsaW1pdCsrO1xcbjEwOTE6XFx0XFx0fVxcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDk0OlxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcXG4xMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0NS4yMTg3NjU0OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkxMDg2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSWRsZSBTb2Z0SVJRIEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNvZnQgaW50ZXJydXB0cyB3aGVuIGl0J3MgaWRsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBmdW5jdGlvbi4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBzdG9wIHRoZSBpZGxlIHRpY2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aXRoaW4gdGhlIGB0aWNrX25vaHpgIGlkbGUgcGF0aC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgY29tbWVudCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgcmVmZXJlbmNpbmcgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSdkIGJldHRlciBzZWFyY2ggZm9yIHRoYXQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGludGVycnVwdCBjb250ZXh0cy4gSG9wZWZ1bGx5IHRoYXQgc2hlZHMgbGlnaHQgb24gd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0Ny40MDk4NTU4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwODE3ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfc29mdGlycV9jcHVfZGVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0xMjI1PXN0YXRpYyBfX2xhdGVudF9lbnRyb3B5IHZvaWQgYmxrX2RvbmVfc29mdGlycSh2b2lkKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTIyOS1cXG5ibG9jay9ibGstbXEuYzoxMjMwOnN0YXRpYyBpbnQgYmxrX3NvZnRpcnFfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG5ibG9jay9ibGstbXEuYy0xMjMxLXtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTUyODE9c3RhdGljIGludCBfX2luaXQgYmxrX21xX2luaXQodm9pZClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTUyOTMtXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svc29mdGlycTpkZWFkXFxcIiwgTlVMTCxcXG5ibG9jay9ibGstbXEuYzo1Mjk0OlxcdFxcdFxcdFxcdCAgYmxrX3NvZnRpcnFfY3B1X2RlYWQpO1xcbmJsb2NrL2Jsay1tcS5jLTUyOTUtXFx0Y3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQkxLX01RX0RFQUQsIFxcXCJibG9jay9tcTpkZWFkXFxcIiwgTlVMTCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc2LSAqXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzc6ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzgtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU4OjQ5LjgxODAzOTU3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MjMwODM1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiB0aGUgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIHdhcywgd2hhdCBleGFjdGx5IGRvZXMgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGRvPyBUaGUgY29kZSBzaG93cyB0aGF0IGl0IGVzc2VudGlhbGx5IGlzc3VlcyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuYCBpZiB0aGVyZSBhcmUgcGVuZGluZyBzb2Z0aXJxcywgYW5kIHRoZW4gaXQgcmV0dXJucyBgdHJ1ZWAsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgdGhlIHRpY2sgZnJvbSBzdG9wcGluZyBhbmQgdGh1cyBzdXBwcmVzc2luZyBhIHJlbGF0ZWQgdGljay1zdG9wIGVycm9yLlxuXG5UaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBzZW5zaXRpdmUgZHVyaW5nIENQVSBob3QtdW5wbHVnIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGAhY3B1X2FjdGl2ZSgpYCBiZWNvbWVzIHRydWUuIEhpc3RvcmljYWxseSwgaWYgYEJMT0NLX1NPRlRJUlFgIHdhcyBwZW5kaW5nIGR1cmluZyB0aGlzIHN0YXRlLCBgcmVwb3J0X2lkbGVfc29mdGlycWAgd291bGQgdHJpZ2dlciB0aGUgd2FybmluZyBhbmQgcmV0dXJuIGB0cnVlYCwgaW1wYWN0aW5nIHRoZSBgY2FuX3N0b3BfaWRsZV90aWNrYCBkZWNpc2lvbi5cblxuVGhpcyBwYXRjaCwgaG93ZXZlciwgbWFza3Mgb3V0IGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCAod2hpY2ggZW5jb21wYXNzZXMgYEJMT0NLX1NPRlRJUlFgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgXCJzYWZlXCIgc29mdGlycXMpIGZyb20gYHBlbmRpbmdgIHdpdGhpbiB0aGUgYCFjcHVfYWN0aXZlKClgIGNvbmRpdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBpZiAqb25seSogdGhvc2UgXCJzYWZlXCIgc29mdGlycXMgYXJlIHBlbmRpbmcsIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCB3aWxsIG5vdyByZXR1cm4gYGZhbHNlYCBhbmQgc3VwcHJlc3MgdGhlIHdhcm5pbmcuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBmdXp6aW5nLXJlbGV2YW50LiAgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBjYXJlZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIGEgbmVnYXRpdmUgY3JpdGVyaW9uIC0gdGhhdCBpcywgaWYgaXQncyAqbm90KiB3b3J0aHkgb2YgZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgYWZmZWN0cyBjb21waWxlZCBDIGxvZ2ljIGFuZCBjb250cm9sIGZsb3cuIEFuZCB0byBhc2NlcnRhaW4gdGhhdCwgSSBuZWVkIHRvIHJlZmVyIGJhY2sgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMgY2hhbmdlLCBvciBhIGNoYW5nZSB3aGljaCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUga2VybmVsLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlOiAgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGlzIGRpcmVjdGx5IHVzZWQgaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzogcmVwb3J0X2lkbGVfc29mdGlycSgpYC4gRnVydGhlcm1vcmUsIHdpdGhpbiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYDpcblxuYGBgY1xuXHRpZiAoIWNwdV9hY3RpdmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkge1xuXHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcblx0XHRpZiAoIXBlbmRpbmcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbmBgYFxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiBhbHRlcmluZyBjb250cm9sIGZsb3cuICBUaGUgbWFza2luZyBvcGVyYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLCBhbmQgdGhlcmVmb3JlIHRoZSBzdWJzZXF1ZW50IGJlaGF2aW91ciBvZiBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiAgQWxzbywgYENQVSBvZmZsaW5lIC8gaG90cGx1ZyB2aWEgc3lzZnMgKGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL29ubGluZWApIG9yIENQVSBpZGxlIHRpY2sgY2FuIGJlIGV4ZXJjaXNlZCBpbiBRRU1VIC8gc3l6a2FsbGVyYC4gSSBjYW4gcmVhc29uYWJseSB0ZXN0IHRoZSBzY2VuYXJpby4gU28sIHllcywgaXQncyBhIGNoYW5nZSB0byBjb21waWxlZCBDIGxvZ2ljIGFuZCBjb250cm9sIGZsb3cuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGFsdGVycyBjb250cm9sIGZsb3cgYW5kIGlzIHBvdGVudGlhbGx5IGV4ZXJjaXNlZCB2aWEgUUVNVSBvciBzeXprYWxsZXIsIGl0J3MgcmVsZXZhbnQgdG8gZnV6emluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo1NS41NDExMjUzMzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpY2stc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdFxcbjEwOTY6XFx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKHVubGlrZWx5KCF0aWNrX3NjaGVkX2ZsYWdfdGVzdCh0cywgVFNfRkxBR19OT0haKSkpXFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4xMTA0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0aWYgKHVubGlrZWx5KHJlcG9ydF9pZGxlX3NvZnRpcnEoKSkpXFxuMTEwNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdGlmICh0aWNrX25vaHpfZnVsbF9lbmFibGVkKCkpIHtcXG4xMTEwOlxcdFxcdFxcdGludCB0aWNrX2NwdSA9IFJFQURfT05DRSh0aWNrX2RvX3RpbWVyX2NwdSk7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdFxcdC8qXFxuMTExMzpcXHRcXHRcXHQgKiBLZWVwIHRoZSB0aWNrIGFsaXZlIHRvIGd1YXJhbnRlZSB0aW1la2VlcGluZyBwcm9ncmVzc2lvblxcbjExMTQ6XFx0XFx0XFx0ICogaWYgdGhlcmUgYXJlIGZ1bGwgZHludGlja3MgQ1BVcyBhcm91bmRcXG4xMTE1OlxcdFxcdFxcdCAqL1xcbjExMTY6XFx0XFx0XFx0aWYgKHRpY2tfY3B1ID09IGNwdSlcXG4xMTE3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0XFx0LyogU2hvdWxkIG5vdCBoYXBwZW4gZm9yIG5vaHotZnVsbCAqL1xcbjExMjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSh0aWNrX2NwdSA9PSBUSUNLX0RPX1RJTUVSX05PTkUpKVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjExMjI6XFx0XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTI1OlxcdH1cXG4xMTI2OlxcdFxcbjExMjc6XFx0LyoqXFxuMTEyODpcXHQgKiB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2sgLSBzdG9wIHRoZSBpZGxlIHRpY2sgZnJvbSB0aGUgaWRsZSB0YXNrXFxuMTEyOTpcXHQgKlxcbjExMzA6XFx0ICogV2hlbiB0aGUgbmV4dCBldmVudCBpcyBtb3JlIHRoYW4gYSB0aWNrIGludG8gdGhlIGZ1dHVyZSwgc3RvcCB0aGUgaWRsZSB0aWNrXFxuMTEzMTpcXHQgKi9cXG4xMTMyOlxcdHZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXFxuMTEzMzpcXHR7XFxuMTEzNDpcXHRcXHRzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnRpY2tfY3B1X3NjaGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6NTUuNTQxMjM2MTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Mzg2ODk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBCZXR3ZWVuIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGFuZCBJZGxlIFRpY2sgU3RvcHBpbmcqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGZ1bmN0aW9uIGlzIHRoZSBnYXRla2VlcGVyIGZvciBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiBJZiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCByZXR1cm5zIGB0cnVlYCwgdGhlbiB3ZSAqY2Fubm90KiBzdG9wIHRoZSBpZGxlIHRpY2ssIHdoaWNoIG1lYW5zIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgd2lsbCByZXR1cm4gYGZhbHNlYC4gQ29udmVyc2VseSwgd2hlbiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCByZXR1cm5zIGBmYWxzZWAsIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgaXMgYWxsb3dlZCB0byBwcm9jZWVkIGFuZCBwb3RlbnRpYWxseSBzdG9wIHRoZSB0aWNrLiBUaGF0IGNvbnRyb2wgZmxvdyBtYWtlcyBzZW5zZSAtIGl0IHNlZW1zIGxpa2UgdGhpcyBpbnRlcmFjdGlvbiBpcyBtb3N0IHJlbGV2YW50IHdoZW4gYEJMT0NLX1NPRlRJUlFgIGlzIHBlbmRpbmcsIHBhcnRpY3VsYXJseSBkdXJpbmcgQ1BVIGhvdHBsdWcgb3Igd2hlbiB3ZSdyZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciB0aHJvdWdoIGlkbGUgc3RhdGUgdHJhbnNpdGlvbnMuXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBhZmZlY3RlZCBoZXJlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCBpcyBcIldvcnRoRnV6emluZ1wiLiBBaCwgU2VjdGlvbiAzISBJdCBzdGF0ZXMgdGhhdCBjaGFuZ2VzIGluICpjb3JlIHN1YnN5c3RlbXMqIGFyZSBjcml0aWNhbCwgYW5kIHRoaXMgaXMgY2xlYXJseSByZWxldmFudCB0byB0aW1la2VlcGluZywgc29mdGlycSBoYW5kbGluZywgYW5kIHRoZSBzY2hlZHVsZXIuIFRob3NlIGFyZSBhbGwgY29yZSBzdWJzeXN0ZW1zISBJZiB0aGlzIGFmZmVjdHMgdGhhdCBjb2RlLCBpdCdzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIHRpY2stc2NoZWQgb3Igbm9oei1yZWxhdGVkIGNvZGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBga2VybmVsL3RpbWUvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvdGltZS9NYWtlZmlsZWAgZmlsZXMuIFRob3NlIGFyZSB0aGUgYmVzdCBwbGFjZXMgdG8gZmluZCBvdXQgd2hhdCBLY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIHBvdGVudGlhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnZvbHZlZCBjb2RlLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3MgYXJlIHVzZWQgd2lsbCBoZWxwIG1lIGlzb2xhdGUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGludGVyYWN0aW9uIGNvbWVzIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjAwLjQ3OTkyODg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc0MTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aWNrLXNjaGVkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90aW1lL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLKVxcdFxcdCs9IHNjaGVkX2Nsb2NrLm9cXG5rZXJuZWwvdGltZS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfVElDS19PTkVTSE9UKVxcdFxcdFxcdCs9IHRpY2stb25lc2hvdC5vIHRpY2stc2NoZWQub1xcbmtlcm5lbC90aW1lL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19MRUdBQ1lfVElNRVJfVElDSylcXHRcXHRcXHQrPSB0aWNrLWxlZ2FjeS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjAwLjU0NDY3ODQzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY3MTAwNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIHBvdGVudGlhbCBjdWxwcml0czogYENPTkZJR19OT19IWl9DT01NT05gLCBgQ09ORklHX1RJQ0tfT05FU0hPVGAsIGBDT05GSUdfTk9fSFpfSURMRWAsIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGltZWtlZXBpbmcgYW5kIENQVSBpZGxlIHN0YXRlcywgc28gdGhleSdyZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nLlxuXG5Ob3csIHRvIGdldCBzb21lIHJlYWwgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvdGltZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aW1pbmcgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCBzaG91bGQgcHJvdmlkZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGJvdGggYFRJQ0tfT05FU0hPVGAgYW5kIGBOT19IWmAgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgYXQgcGxheS4gVGltZSB0byBnZXQgdGhvc2UgS2NvbmZpZyBmaWxlcyBvcGVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MDIuNTExNzgyNTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0NTAxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRJQ0tfT05FU0hPVHxjb25maWcgTk9fSFpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RpbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvS2NvbmZpZz05NT1pZiBHRU5FUklDX0NMT0NLRVZFTlRTXFxuLS1cXG5rZXJuZWwvdGltZS9LY29uZmlnLTk4LSMgYXJlIHN1cHBvcnRlZCBpbmRlcGVuZGVudCBvZiB0aGlzLlxcbmtlcm5lbC90aW1lL0tjb25maWc6OTk6Y29uZmlnIFRJQ0tfT05FU0hPVFxcbmtlcm5lbC90aW1lL0tjb25maWctMTAwLVxcdGJvb2xcXG5rZXJuZWwvdGltZS9LY29uZmlnLTEwMS1cXG5rZXJuZWwvdGltZS9LY29uZmlnOjEwMjpjb25maWcgTk9fSFpfQ09NTU9OXFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMDMtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RpbWUvS2NvbmZpZz0xMTA9Y29uZmlnIEhaX1BFUklPRElDXFxuLS1cXG5rZXJuZWwvdGltZS9LY29uZmlnLTExNS1cXG5rZXJuZWwvdGltZS9LY29uZmlnOjExNjpjb25maWcgTk9fSFpfSURMRVxcbmtlcm5lbC90aW1lL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIklkbGUgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcyBpZGxlKVxcXCJcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWctMTI1LVxcbmtlcm5lbC90aW1lL0tjb25maWc6MTI2OmNvbmZpZyBOT19IWl9GVUxMXFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMjctXFx0Ym9vbCBcXFwiRnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVxcXCJcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWc9MTY1PWNvbmZpZyBDT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0VcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWctMTkwLVxcbmtlcm5lbC90aW1lL0tjb25maWc6MTkxOmNvbmZpZyBOT19IWlxcbmtlcm5lbC90aW1lL0tjb25maWctMTkyLVxcdGJvb2wgXFxcIk9sZCBJZGxlIGR5bnRpY2tzIGNvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MDIuNjIyMjQwNzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NTIwMjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRXhhbWluaW5nIFRpbWVrZWVwaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aW1la2VlcGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaWRsZSBDUFUgaGFuZGxpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGltbWVkaWF0ZWx5IGZvY3VzZXMgb24gdGhlIGtleSBvcHRpb25zOiBgTk9fSFpfSURMRWAsIGBOT19IWl9DT01NT05gLCBhbmQgYEhPVFBMVUdfQ1BVYC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGlja2xlc3Mgb3BlcmF0aW9uIGFuZCBDUFUgaG90cGx1Zywgd2hpY2gsIG9mIGNvdXJzZSwgZGlyZWN0bHkgaW1wYWN0cyBwb3dlciBtYW5hZ2VtZW50IGFuZCByZXNwb25zaXZlbmVzcy4gSSdtIHJlY2FsbGluZyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGFyZSBvZnRlbiBpbnRlcnJlbGF0ZWQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBlZmZlY3RzLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDAtMTMwIGluIGBrZXJuZWwvdGltZS9LY29uZmlnYCBiZWNhdXNlIHRoZXNlIHR5cGVzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSBvZnRlbiBncm91cGVkIGxvZ2ljYWxseS4gVGhpcyBzZWN0aW9uIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZm9ybWFsIGRlc2NyaXB0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGtlcm5lbCB0aW1lIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowNS4xOTc0NDc4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU1xcbiAgOTY6XFx0IyBDb3JlIGludGVybmFsIHN3aXRjaC4gU2VsZWN0ZWQgYnkgTk9fSFpfQ09NTU9OIC8gSElHSF9SRVNfVElNRVJTLiBUaGlzIGlzXFxuICA5NzpcXHQjIG9ubHkgcmVsYXRlZCB0byB0aGUgdGljayBmdW5jdGlvbmFsaXR5LiBPbmVzaG90IGNsb2NrZXZlbnQgZGV2aWNlc1xcbiAgOTg6XFx0IyBhcmUgc3VwcG9ydGVkIGluZGVwZW5kZW50IG9mIHRoaXMuXFxuICA5OTpcXHRjb25maWcgVElDS19PTkVTSE9UXFxuIDEwMDpcXHRcXHRib29sXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBOT19IWl9DT01NT05cXG4gMTAzOlxcdFxcdGJvb2xcXG4gMTA0OlxcdFxcdHNlbGVjdCBUSUNLX09ORVNIT1RcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y2hvaWNlXFxuIDEwNzpcXHRcXHRwcm9tcHQgXFxcIlRpbWVyIHRpY2sgaGFuZGxpbmdcXFwiXFxuIDEwODpcXHRcXHRkZWZhdWx0IE5PX0haX0lETEUgaWYgTk9fSFpcXG4gMTA5OlxcdFxcbiAxMTA6XFx0Y29uZmlnIEhaX1BFUklPRElDXFxuIDExMTpcXHRcXHRib29sIFxcXCJQZXJpb2RpYyB0aW1lciB0aWNrcyAoY29uc3RhbnQgcmF0ZSwgbm8gZHludGlja3MpXFxcIlxcbiAxMTI6XFx0XFx0aGVscFxcbiAxMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBrZWVwcyB0aGUgdGljayBydW5uaW5nIHBlcmlvZGljYWxseSBhdCBhIGNvbnN0YW50XFxuIDExNDpcXHRcXHQgIHJhdGUsIGV2ZW4gd2hlbiB0aGUgQ1BVIGRvZXNuJ3QgbmVlZCBpdC5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIE5PX0haX0lETEVcXG4gMTE3OlxcdFxcdGJvb2wgXFxcIklkbGUgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcyBpZGxlKVxcXCJcXG4gMTE4OlxcdFxcdHNlbGVjdCBOT19IWl9DT01NT05cXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRpY2tsZXNzIGlkbGUgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzXFxuIDEyMTpcXHRcXHQgIHdpbGwgb25seSB0cmlnZ2VyIG9uIGFuIGFzLW5lZWRlZCBiYXNpcyB3aGVuIHRoZSBzeXN0ZW0gaXMgaWRsZS5cXG4gMTIyOlxcdFxcdCAgVGhpcyBpcyB1c3VhbGx5IGludGVyZXN0aW5nIGZvciBlbmVyZ3kgc2F2aW5nLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHQgIE1vc3Qgb2YgdGhlIHRpbWUgeW91IHdhbnQgdG8gc2F5IFkgaGVyZS5cXG4gMTI1OlxcdFxcbiAxMjY6XFx0Y29uZmlnIE5PX0haX0ZVTExcXG4gMTI3OlxcdFxcdGJvb2wgXFxcIkZ1bGwgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcylcXFwiXFxuIDEyODpcXHRcXHQjIE5PX0haX0NPTU1PTiBkZXBlbmRlbmN5XFxuIDEyOTpcXHRcXHQjIFdlIG5lZWQgYXQgbGVhc3Qgb25lIHBlcmlvZGljIENQVSBmb3IgdGltZWtlZXBpbmdcXG4gMTMwOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuIDEzMTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ09OVEVYVF9UUkFDS0lOR19VU0VSXFxuIDEzMjpcXHRcXHQjIFZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGRlcGVuZGVuY3lcXG4gMTMzOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE5PX0haX0NPTU1PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowNS4xOTc1Njc2ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1NDczMjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQ1BVIEhvdHBsdWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIENQVSBob3RwbHVnIHRlYXJkb3duIGNvZGUsIGFuZCBpdCdzIG1ha2luZyBtZSB0aGluayB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgSE9UUExVR19DUFVgIGNvbmZpZ3VyYXRpb24uIFRoZSBgIWNwdV9hY3RpdmUoLi4uKWAgY2hlY2sgaW4gdGhlIGNvZGUgc2VlbXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGF0IGhvdHBsdWcgcHJvY2Vzcy4gSXQgd291bGQgYmUgYSBtaXN0YWtlIHRvIG92ZXJsb29rIGhvdyB3ZSBhcmUgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIGBjcHVfYWN0aXZlYCBiZWhhdmlvciBhcyB3ZSB0ZWFyIGRvd24gb3IgYnJpbmcgdXAgQ1BVcywgc2luY2UgaG90cGx1ZyBkaXJlY3RseSBhZmZlY3RzIHRoZSBhY3RpdmUgc2V0LlxuXG5UaGVyZWZvcmUsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIGdvIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGh1bnQgZm9yIGBIT1RQTFVHX0NQVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBjcHVfYWN0aXZlYCBzdGF0ZS4gTGV0J3MgbWFrZSBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4gSSBiZXQgdGhhdCB3aWxsIGNsYXJpZnkgYSBsb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjA3LjU1MjMwNTA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4MDkyMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIT1RQTFVHX0NQVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEwNjU9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTA3Ni1cXG5hcmNoL2FybS9LY29uZmlnOjEwNzc6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjIxPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTYyNS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTYyNjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2FybTY0L0tjb25maWctMTYyNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMzMzLVxcbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTU9Y29uZmlnIFNNUFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzItXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzM6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjcwMz1jb25maWcgU01QXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI0LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI3MjU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9taXBzL0tjb25maWctMjcyNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTMzOC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODM9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5NC1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTk2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1Mz1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2Mi1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYzOmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00NjQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTM1PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NDYtXFxuYXJjaC9zMzkwL0tjb25maWc6NTQ3OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvczM5MC9LY29uZmlnLTU0OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3NoL0tjb25maWc9NTkyPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNjA1LVxcbmFyY2gvc2gvS2NvbmZpZzo2MDY6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zaC9LY29uZmlnLTYwNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjIwPWNvbmZpZyBFQVJMWUZCXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyMjk6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTIxNTQ9Y29uZmlnIEFERFJFU1NfTUFTS0lOR1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTY1LVxcbmFyY2gveDg2L0tjb25maWc6MjE2Njpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctMjU4LVxcbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIkVuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowOS45OTA0MDc3MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExMTc1NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCbG9jayBMYXllcidzIFNvZnRJUlEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBzb2Z0aXJxIGZvciB0aGUgYmxvY2sgbGF5ZXIgaXMgc2V0IHVwLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgQkxPQ0tgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZTsgdGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgQkxPQ0tfU09GVElSUWAgYmVpbmcgZGVmaW5lZCwgYW5kIGlmIG1lbW9yeSBzZXJ2ZXMsIGl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX0JMT0NLYCBndWFyZC4gTGV0J3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIFNwZWNpZmljYWxseSwgSSdsbCBob25lIGluIG9uIGxpbmVzIGFyb3VuZCA1NTAgdG8gNTgwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJJ20gbG9va2luZyBmb3IuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjEzLjEwMjE2NzgyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0ICAgZnJlcXVlbmN5IHRocmVhZGVkIGpvYiBzY2hlZHVsaW5nLiBGb3IgYWxtb3N0IGFsbCB0aGUgcHVycG9zZXNcXG4gNTQ2OlxcdCAgIHRhc2tsZXRzIGFyZSBtb3JlIHRoYW4gZW5vdWdoLiBGLmUuIGFsbCBzZXJpYWwgZGV2aWNlIEJIcyBldFxcbiA1NDc6XFx0ICAgYWwuIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdGFza2xldHMsIG5vdCB0byBzb2Z0aXJxcy5cXG4gNTQ4OlxcdCAqL1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRlbnVtXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRISV9TT0ZUSVJRPTAsXFxuIDU1MzpcXHRcXHRUSU1FUl9TT0ZUSVJRLFxcbiA1NTQ6XFx0XFx0TkVUX1RYX1NPRlRJUlEsXFxuIDU1NTpcXHRcXHRORVRfUlhfU09GVElSUSxcXG4gNTU2OlxcdFxcdEJMT0NLX1NPRlRJUlEsXFxuIDU1NzpcXHRcXHRJUlFfUE9MTF9TT0ZUSVJRLFxcbiA1NTg6XFx0XFx0VEFTS0xFVF9TT0ZUSVJRLFxcbiA1NTk6XFx0XFx0U0NIRURfU09GVElSUSxcXG4gNTYwOlxcdFxcdEhSVElNRVJfU09GVElSUSxcXG4gNTYxOlxcdFxcdFJDVV9TT0ZUSVJRLCAgICAvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi9cXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0TlJfU09GVElSUVNcXG4gNTY0OlxcdH07XFxuIDU2NTpcXHRcXG4gNTY2OlxcdC8qXFxuIDU2NzpcXHQgKiBUaGUgZm9sbG93aW5nIHZlY3RvcnMgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGFmdGVyIGtzb2Z0aXJxZCBpcyBwYXJrZWQ6XFxuIDU2ODpcXHQgKlxcbiA1Njk6XFx0ICogXyBSQ1U6XFxuIDU3MDpcXHQgKiBcXHQxKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgbWlncmF0ZXMgdGhlIHF1ZXVlLlxcbiA1NzE6XFx0ICogXFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxcbiA1NzI6XFx0ICpcXG4gNTczOlxcdCAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlXFxuIDU3NDpcXHQgKlxcbiA1NzU6XFx0ICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxcbiA1NzY6XFx0ICpcXG4gNTc3OlxcdCAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xcbiA1Nzg6XFx0ICovXFxuIDU3OTpcXHQjZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcXFxcbiA1ODA6XFx0XFx0XFx0XFx0XFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXG4gNTgzOlxcdC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICdzb2Z0aXJxX3RvX25hbWUnIGluXFxuIDU4NDpcXHQgKiBrZXJuZWwvc29mdGlycS5jIHdoZW4gYWRkaW5nIGEgbmV3IHNvZnRpcnEuXFxuIDU4NTpcXHQgKi9cXG4gNTg2OlxcdGV4dGVybiBjb25zdCBjaGFyICogY29uc3Qgc29mdGlycV90b19uYW1lW05SX1NPRlRJUlFTXTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0Lyogc29mdGlycSBtYXNrIGFuZCBhY3RpdmUgZmllbGRzIG1vdmVkIHRvIGlycV9jcHVzdGF0X3QgaW5cXG4gNTg5OlxcdCAqIGFzbS9oYXJkaXJxLmggdG8gZ2V0IGJldHRlciBjYWNoZSB1c2FnZS4gIEtBT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToxMy4xMDIzODg1NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyMjIyNTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29mdElSUSBVc2FnZSBBY3Jvc3MgdGhlIEJsb2NrIExheWVyIGFuZCBUaWNrIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIGBCTE9DS19TT0ZUSVJRYCBpcyBqdXN0IGhhbmdpbmcgb3V0IGluIHRoZSBlbnVtIHdpdGhvdXQgYW55IHF1YWxpZmljYXRpb24sIGJ1dCB0aGUgYmxvY2sgbGF5ZXIgZGVmaW5pdGVseSB1c2VzIGl0IHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuIEZpcnN0LCBJJ2xsIHRyYWNlIGRvd24gd2hlcmUgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMb29rcyBsaWtlIGl0J3MgaW4gYGJsb2NrL2Jsay1tcS5jYC4gSG1tLCBpdCBhcHBlYXJzIHRvIGJlIGNsZWFuaW5nIHVwIHJlcXVlc3RzIG9uIGEgZGVhZCBDUFUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHRpbWUgc2NoZWR1bGVyIHNpZGUuIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEl0J3Mgc3RhdGljLCBhbmQgY2FsbGVkIGJ5IGBjYW5fc3RvcF9pZGxlX3RpY2soKWAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIGB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2soKWAgYW5kIGB0aWNrX25vaHpfZnVsbF91cGRhdGVfdGljaygpYC4gXG5cbkFscmlnaHQsIGZvciBhcHByb3ByaWF0ZSBcIkZvY3VzU3ltYm9scyxcIiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgYnV0IHRoYXQncyBzdGF0aWMuIExldCdzIGxvb2sgYXQgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGljaygpYCwgYHRpY2tfbm9oel9pZGxlX2VudGVyKClgLCBldGMuLiBUaG9zZSBhcmUgdGhlIHJlYWwgZW50cnkgcG9pbnRzLiBPYnZpb3VzbHksIGBibGtfc29mdGlycV9jcHVfZGVhZGAgaXMgaW1wb3J0YW50IHRvby4gQW5kIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhcyB3ZWxsLCBldmVuIGlmIGl0J3Mgc3RhdGljLlxuXG5XYWl0LCBiZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHZpc2liaWxpdHkgb2YgYGNhbl9zdG9wX2lkbGVfdGljaygpYCBhbmQgaXRzIGNhbGxlcnMgd2l0aGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgLiBHb3R0YSBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToxNi43MjQ2MTY3NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTE4OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYW5fc3RvcF9pZGxlX3RpY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RpbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNDc9c3RhdGljIHZvaWQgdGlja19ub2h6X2Z1bGxfdXBkYXRlX3RpY2soc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNjAtICogc2hvdWxkIGJlIHdhaXRpbmcgZm9yIGtzb2Z0aXJxZCB0byBoYW5kbGUgaXQuIFRoZXJlZm9yZSB3ZSBzaG91bGRuJ3RcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA2MTogKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA2Mi0gKlxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNjg9c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTUtXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwOTY6c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA5Ny17XFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTEzMj12b2lkIHRpY2tfbm9oel9pZGxlX3N0b3BfdGljayh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTExNDMtXFx0XFx0ZXhwaXJlcyA9IHRzLVxcdTAwM2V0aW1lcl9leHBpcmVzO1xcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMTQ0OlxcdGVsc2UgaWYgKGNhbl9zdG9wX2lkbGVfdGljayhjcHUsIHRzKSlcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTE0NS1cXHRcXHRleHBpcmVzID0gdGlja19ub2h6X25leHRfZXZlbnQodHMsIGNwdSk7XFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTI4ND1rdGltZV90IHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKGt0aW1lX3QgKmRlbHRhX25leHQpXFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTI5OS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTMwMDpcXHRpZiAoIWNhbl9zdG9wX2lkbGVfdGljayhjcHUsIHRzKSlcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTMwMS1cXHRcXHRyZXR1cm4gKmRlbHRhX25leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjE3LjE3MzgxNjQ2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzYxOTA0Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBTb2Z0SVJRIGFuZCBJZGxlIFRpY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBnZW5lcmFsIGlkbGUgZnVuY3Rpb24sIGB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2tgLCBhbmQgdGhlIG1vcmUgc3BlY2lmaWMgY2FsbGJhY2sgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhbmQgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBhcmUgZGlzdGluY3Qgc3ltYm9scyB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UuIEdvb2QsIHRoZXkgYXJlLiBTdGF0aWMgZnVuY3Rpb25zLCBldmVuIHdpdGhpbiAuYyBmaWxlcywgZ2V0IHN5bWJvbHMsIG9yIGF0IGxlYXN0IHRoZWlyIGNhbGxlcnMgZG8gaWYgaW5saW5lZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBzeW1ib2xzOiBgcmVwb3J0X2lkbGVfc29mdGlycWAsIGBibGtfc29mdGlycV9jcHVfZGVhZGAsIGFuZCBgY2FuX3N0b3BfaWRsZV90aWNrYC4gR290IGl0LiBNb3Zpbmcgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIGluIHBsYWNlLiBXZSdyZSBsb29raW5nIGZvciBgTk9fSFpfSURMRWAgKG9yIGBOT19IWl9DT01NT05gIHdoaWNoIGltcGxpZXMgaXQpLCBgSE9UUExVR19DUFVgLCBhbmQgYEJMT0NLYC4gQWxsIHRoZSBrZXkgb25lcy5cblxuQWxyaWdodCwgbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zLiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBhY2N1cmF0ZTogYE5PX0haX0lETEVgLCBgSE9UUExVR19DUFVgLCBhbmQgYEJMT0NLYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IHRvbzogYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLlxuXG5GaW5hbGx5LCB0aGUgcmVhc29uaW5nIHNlZW1zIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIHRvIGluY2x1ZGUgYEJMT0NLX1NPRlRJUlFgLiBUaGlzIGFsbG93cyBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBjb25zaWRlciBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIHNhZmUgZHVyaW5nIENQVSBob3RwbHVnIG9mZmxpbmUgd2hlbiBrc29mdGlycWQgaXMgcGFya2VkLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgYGNhbl9zdG9wX2lkbGVfdGljaygpYCdzIGNvbnRyb2wgZmxvdyBhbmQgdGhlcmVmb3JlIGFmZmVjdHMgd2FybmluZyBzdXBwcmVzc2lvbi5cblxuSnVzdCBhIGRvdWJsZS1jaGVjayBvbiB0aGVzZSBjb25maWdzLiBgTk9fSFpfSURMRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYE5PX0haYC4gYEhPVFBMVUdfQ1BVYCBlbmFibGVzIENQVSBob3RwbHVnZ2luZywgYW5kIGBCTE9DS2Agb2YgY291cnNlIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBgQkxPQ0tfU09GVElSUWAgYW5kIGBibGtfc29mdGlycV9jcHVfZGVhZGAuXG5cblllcCwgZXZlcnl0aGluZyBsaW5lcyB1cCBwZXJmZWN0bHkuIFJlYWR5IHRvIHN1Ym1pdCB0aGlzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA2LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToyMS41MzU3MjM5NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNDY1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToyMS42NzA3ODA3NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE1MDkzODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MjEuNjcxNjE1MDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgzMTQyNTQ1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTY3MGUzNzMwM2M3NTY0MWJkMWQ4YmUxYWEwNDI2NjRjYjczYjE1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTQ6NTg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuaW5kZXggM2JmOTY5YWQ4ZmUwNy4uNTJiYjY4NDA5MGMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbkBAIC01NzMsOSArNTczLDExIEBAIGVudW1cbiAgKiBfIElSUV9QT0xMOiBpcnFfcG9sbF9jcHVfZGVhZCgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuICAqXG4gICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuKyAqXG4rICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXG4gICovXG4tI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoSVJRX1BPTExfU09GVElSUSkgfFxcXG4tXHRcdFx0XHQgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXG4rI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG4rXHRcdFx0XHQgICBCSVQoSVJRX1BPTExfU09GVElSUSkgfCBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXG4gXG4gXG4gLyogbWFwIHNvZnRpcnEgaW5kZXggdG8gc29mdGlycSBuYW1lLiB1cGRhdGUgJ3NvZnRpcnFfdG9fbmFtZScgaW5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjIxLjY3MTYxNzA0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDkyNDA4NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBJbnRlcnJ1cHQgSGVhZGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIFNwZWNpZmljYWxseSwgdGhlIGFsdGVyYXRpb24gb2YgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGFuZCB0aGUgYWRkaXRpb24gb2YgYEJMT0NLX1NPRlRJUlFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYEJMT0NLX1NPRlRJUlFgIGlzIGJlaW5nIGluY2x1ZGVkIGFuZCB3aGF0IHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpcyBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGUgYWRkaXRpb24gb2YgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlbW92YWwgb2YgdGhlIG1hc2sgZWxlbWVudCBmb3IgdGhlIGJsb2NrJ3Mgd29yayBxdWV1ZSBtaWdyYXRpb24uIE15IGFzc3VtcHRpb24gaXMgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2Ygc29mdCBpbnRlcnJ1cHQgaGFuZGxpbmcgZHVyaW5nIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBub3cgaGFuZGxlcyBibG9jayByZXF1ZXN0cyBkdXJpbmcgQ1BVIHJlbW92YWwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB1c2VzIG9mIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiB0aGUgY29kZSBiYXNlLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZmlsZSB0byBjaGVjay4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIHJvdXRpbmVzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQWxzbywgSSBuZWVkIHRvIGtub3cgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGNydWNpYWwgdG8gaG93IGJsb2NrIHJlcXVlc3RzIGFyZSBub3cgaGFuZGxlZCBhZnRlciB0aGlzIGNoYW5nZS4gSSdsbCBsb29rIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgXCJjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0cy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbmV3IGJlaGF2aW9yIGhhcyBhbnkgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSBtdXN0IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2UgdG8gY29ycmVjdGx5IGFzc2VzcyBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MjkuMTY0MDI5NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjUzMjk2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3OC0gKi9cXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3OTojZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcXFxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTgwLVxcdFxcdFxcdFxcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDY4PXN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc3LVxcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwNzg6XFx0XFx0cGVuZGluZyBcXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA3OS1cXHRcXHRpZiAoIXBlbmRpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjMxLjQ4OTM3MzU2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0OTI2Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUaWNrIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBzY2hlZHVsaW5nIGlzc3VlLi4ubXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGllcyBzb21ld2hlcmUgaW4gdGhlIHRpY2sgc2NoZWR1bGVyLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIGhvdyBpdCBtYW5hZ2VzIHRoZSB0aW1lciB0aWNrcy4gTGV0J3Mgc2VlLi4uIHRoZSBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEwNjguIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgbGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSAqdGhlcmUqIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTozMy4zOTQzMDM4MDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpY2stc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdCAqIHNob3VsZCBiZSB3YWl0aW5nIGZvciBrc29mdGlycWQgdG8gaGFuZGxlIGl0LiBUaGVyZWZvcmUgd2Ugc2hvdWxkbid0XFxuMTA2MTpcXHQgKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cXG4xMDYyOlxcdCAqXFxuMTA2MzpcXHQgKiBIb3dldmVyIGlmIHdlIGFyZSBiZXR3ZWVuIENQVUhQX0FQX1NNUEJPT1RfVEhSRUFEUyBhbmQgQ1BVX1RFQVJET1dOX0NQVSBvbiB0aGVcXG4xMDY0OlxcdCAqIGNwdV9kb3duKCkgcHJvY2Vzcywgc29mdGlycXMgY2FuIHN0aWxsIGJlIHJhaXNlZCB3aGlsZSBrc29mdGlycWQgaXMgcGFya2VkLFxcbjEwNjU6XFx0ICogdHJpZ2dlcmluZyB0aGUgY29kZSBiZWxvdywgc2luY2Ugd2FrZXBfc29mdGlycWQoKSBpcyBpZ25vcmVkLlxcbjEwNjY6XFx0ICpcXG4xMDY3OlxcdCAqL1xcbjEwNjg6XFx0c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbjEwNjk6XFx0e1xcbjEwNzA6XFx0XFx0c3RhdGljIGludCByYXRlbGltaXQ7XFxuMTA3MTpcXHRcXHR1bnNpZ25lZCBpbnQgcGVuZGluZyA9IGxvY2FsX3NvZnRpcnFfcGVuZGluZygpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRpZiAobGlrZWx5KCFwZW5kaW5nKSlcXG4xMDc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0LyogU29tZSBzb2Z0aXJxcyBjbGFpbSB0byBiZSBzYWZlIGFnYWluc3QgaG90cGx1ZyBhbmQga3NvZnRpcnFkIHBhcmtpbmcgKi9cXG4xMDc3OlxcdFxcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XFxuMTA3ODpcXHRcXHRcXHRwZW5kaW5nIFxcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xcbjEwNzk6XFx0XFx0XFx0aWYgKCFwZW5kaW5nKVxcbjEwODA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwODE6XFx0XFx0fVxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQvKiBPbiBSVCwgc29mdGlycSBoYW5kbGluZyBtYXkgYmUgd2FpdGluZyBvbiBzb21lIGxvY2sgKi9cXG4xMDg0OlxcdFxcdGlmIChsb2NhbF9iaF9ibG9ja2VkKCkpXFxuMTA4NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA4NjpcXHRcXG4xMDg3OlxcdFxcdGlmIChyYXRlbGltaXQgXFx1MDAzYyAxMCkge1xcbjEwODg6XFx0XFx0XFx0cHJfd2FybihcXFwiTk9IWiB0aWNrLXN0b3AgZXJyb3I6IGxvY2FsIHNvZnRpcnEgd29yayBpcyBwZW5kaW5nLCBoYW5kbGVyICMlMDJ4ISEhXFxcXG5cXFwiLFxcbjEwODk6XFx0XFx0XFx0XFx0cGVuZGluZyk7XFxuMTA5MDpcXHRcXHRcXHRyYXRlbGltaXQrKztcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTA5NDpcXHR9XFxuMTA5NTpcXHRcXG4xMDk2OlxcdHN0YXRpYyBib29sIGNhbl9zdG9wX2lkbGVfdGljayhpbnQgY3B1LCBzdHJ1Y3QgdGlja19zY2hlZCAqdHMpXFxuMTA5NzpcXHR7XFxuMTA5ODpcXHRcXHRXQVJOX09OX09OQ0UoY3B1X2lzX29mZmxpbmUoY3B1KSk7XFxuMTA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MzMuMzk0NTIzNzUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1OTEzMjI1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU29mdElSUV9IT1RQTFVHX1NBRkVfTUFTSyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHdlJ3JlIGFkanVzdGluZyB0aGUgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGJpdG1hc2sgd2l0aGluIHRoZSBOT0haIHRpY2sgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHNjZW5hcmlvcyBpbnZvbHZpbmcgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSB3aGVuIGBrc29mdGlycWRgIGlzIHBhcmtlZC4gYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gVGhlIGdvYWwgaXMgdG8gYWNjb21tb2RhdGUgdGhlIGBCTE9DS19TT0ZUSVJRYCBzb2Z0aXJxLiBCeSBhZGRpbmcgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhpcyBtYXNrLCB3ZSdyZSBzdXBwcmVzc2luZyBhIHdhcm5pbmcuIFNwZWNpZmljYWxseSwgdGhlIHdhcm5pbmcgYHByX3dhcm4oXCJOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXG5cIiwgcGVuZGluZyk7YCBpcyBiZWluZyBzdXBwcmVzc2VkIGZvciB0aGUgYEJMT0NLX1NPRlRJUlFgIGNhc2UuIFRoZSByZWFzb24gdGhpcyBpcyBzYWZlIGlzIGJlY2F1c2UgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgIGhhbmRsZXMgY29tcGxldGlvbiBvZiBhbnkgcmVtYWluaW5nIGJsb2NrIHNvZnRpcnEgcmVxdWVzdHMgd2hlbiBhIENQVSBnb2VzIG9mZmxpbmUuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIG1lbW9yeSBzYWZldHkgY2hlY2tzLiBXZSdyZSBtb2RpZnlpbmcgYSBtYWNybyBkZWZpbml0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIFRoaXMgaXMgYSBoZWFkZXIgZmlsZSB1cGRhdGUsIGFmZmVjdGluZyBvbmx5IHRoZSBDUFUgaG90cGx1ZyBhbmQgdGljayBzdG9wcGluZyBsb2dpYyByZWxhdGVkIHRvIGlkbGUgc29mdGlycSByZXBvcnRpbmcuXG5cbjEuICAqKk5vIEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuKiogV2UncmUgbm90IGV4cG9zaW5nIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZTsgdGhlcmVmb3JlLCB0aGUgdXN1YWwgcGFkZGluZyBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvbmNlcm5zIGRvbid0IGFwcGx5LlxuMi4gICoqTm8gQ29uZGl0aW9uYWwgTG9naWMgd2l0aCBVbmluaXRpYWxpemVkIFZhcmlhYmxlcy4qKiBUaGVyZSdzIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgc28gd2UncmUgZ29vZCB0aGVyZS5cbjMuICAqKk5vIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24uKiogVGhpcyBpc24ndCBhYm91dCBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgYSBzaW1wbGUgYml0bWFzayB1cGRhdGUuXG40LiAgKipObyBCb3VuZHMgQ2hlY2sgVnVsbmVyYWJpbGl0aWVzLioqIFdlIGFyZW4ndCBkb2luZyBhbnkgYm91bmRzIGNoZWNrcyBvciBtYW5pcHVsYXRpb24gb2YgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLlxuXG5TaW5jZSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG1hY3JvIGRlZmluaXRpb24gdXBkYXRlLCB3aXRoIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBhbmQgbm8gcGFkZGluZyByaXNrcywgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gZm9yIGNvbmNlcm4uIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk1LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjM5Ljk4NTg0ODgzOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBjb21waWxlLXRpbWUgYml0bWFzayBjb25zdGFudCBmb3Igc29mdGlycSBob3RwbHVnIGhhbmRsaW5nIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIENQVSBob3RwbHVnIHRlYXJkb3duIGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6cmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBwcmV2ZW50IGZhbHNlLXBvc2l0aXZlIE5PSFogdGljay1zdG9wIHdhcm5pbmdzIGZvciBibG9jayBzb2Z0aXJxcyBoYW5kbGVkIGJ5IGBibGtfc29mdGlycV9jcHVfZGVhZCgpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGNvbXBpbGUtdGltZSBiaXRtYXNrIGNvbnN0YW50IGZvciBzb2Z0aXJxIGhvdHBsdWcgaGFuZGxpbmcgbG9naWMuIEl0IGludHJvZHVjZXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgbm8gc3RydWN0IHBhZGRpbmcgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-05 14:33:23 +0000 UTC FinishedAt: 2026-09-05 14:59:41 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NO_HZ_IDLE", "HOTPLUG_CPU", "BLOCK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "ba285edf3fd1a27f8ec739b5b396d45c98eabee0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NO_HZ_IDLE", "HOTPLUG_CPU", "BLOCK" ], "series_id": "13e60954-845a-4567-a291-3b60e1d0da81" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "report_idle_softirq", "blk_softirq_cpu_dead" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05PX0haX0lETEUmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfaWRsZV9zb2Z0aXJxJiMzNDssCiAgICAmIzM0O2Jsa19zb2Z0aXJxX2NwdV9kZWFkJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQkxPQ0tfU09GVElSUSB0byBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLLCB3aGljaCBhbHRlcnMgY29udHJvbCBmbG93IGluIHJlcG9ydF9pZGxlX3NvZnRpcnEoKSBhbmQgY2FuX3N0b3BfaWRsZV90aWNrKCkgd2hlbiBhIENQVSBpcyB0YWtlbiBvZmZsaW5lIGR1cmluZyBDUFUgaG90cGx1ZywgZW5zdXJpbmcgcGVuZGluZyBibG9jayBzb2Z0aXJxcyBhcmUgaWdub3JlZCByYXRoZXIgdGhhbiB0cmlnZ2VyaW5nIHRpY2stc3RvcCB3YXJuaW5ncyBiZWZvcmUgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjbGVhbnMgdGhlbSB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE0OjU4OjM0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG5pbmRleCAzYmY5NjlhZDhmZTA3Li41MmJiNjg0MDkwYzBkIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuQEAgLTU3Myw5ICYjNDM7NTczLDExIEBAIGVudW1cbiAgKiBfIElSUV9QT0xMOiBpcnFfcG9sbF9jcHVfZGVhZCgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuICAqXG4gICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuJiM0MzsgKlxuJiM0MzsgKiBfIEJMT0NLX1NPRlRJUlE6IGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHNcbiAgKi9cbi0jZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8XFxcbi1cdFx0XHRcdCAgIEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcbiYjNDM7I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG4mIzQzO1x0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIFxuIFxuIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOT19IWl9JRExFJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X2lkbGVfc29mdGlycSYjMzQ7LAogICAgJiMzNDtibGtfc29mdGlycV9jcHVfZGVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJMT0NLX1NPRlRJUlEgdG8gU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSywgd2hpY2ggYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiByZXBvcnRfaWRsZV9zb2Z0aXJxKCkgYW5kIGNhbl9zdG9wX2lkbGVfdGljaygpIHdoZW4gYSBDUFUgaXMgdGFrZW4gb2ZmbGluZSBkdXJpbmcgQ1BVIGhvdHBsdWcsIGVuc3VyaW5nIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdHJpZ2dlcmluZyB0aWNrLXN0b3Agd2FybmluZ3MgYmVmb3JlIGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY2xlYW5zIHRoZW0gdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlNjcwZTM3MzAzYzc1NjQxYmQxZDhiZTFhYTA0MjY2NGNiNzNiMTU5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBTZXAgNSAxNDo1ODozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmggYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaApAQCAtNTczLDkgJiM0Mzs1NzMsMTEgQEAgZW51bQogICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWUKICAqCiAgKiBfIChIUilUSU1FUl9TT0ZUSVJROiAoaHIpdGltZXJzX2RlYWRfY3B1KCkgbWlncmF0ZXMgdGhlIHF1ZXVlCiYjNDM7ICoKJiM0MzsgKiBfIEJMT0NLX1NPRlRJUlE6IGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHMKICAqLwotI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoSVJRX1BPTExfU09GVElSUSkgfFwKLQkJCQkgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpCiYjNDM7I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFwKJiM0MzsJCQkJICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKQogCiAKIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk3OQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgSW50ZXJydXB0IFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQmIzM5O3MgdG91Y2hpbmcgYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLiBMb29rcyBsaWtlIGEgZmFpcmx5IHN0cmFpZ2h0Zm9yd2FyZCBtb2RpZmljYXRpb24gdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgLiBJIHJlY29nbml6ZSB0aGF0IG1hY3JvOyBpdCYjMzk7cyB0aGUgYml0bWFzayB1c2VkIHRvIGlkZW50aWZ5IHNvZnRpcnFzIHRoYXQgYXJlIHNhZmUgdG8gbWlncmF0ZSBkdXJpbmcgQ1BVIGhvdHBsdWcgb3BlcmF0aW9ucy4gVGhlIGRpZmYgaXMgcHJldHR5IGNsZWFyOiBpdCYjMzk7cyBhZGRpbmcgYEJMT0NLX1NPRlRJUlFgIHRvIHRoZSBleGlzdGluZyBtYXNrIGFuZCByZW1vdmluZyBgUkNVX1NPRlRJUlFgLiBJbnRlcmVzdGluZy4KClNvLCB0aGUgaW50ZW50IGhlcmUgaXMgdG8gaW5jbHVkZSB0aGUgYmxvY2sgc29mdGlycSBpbiB0aGUgbGlzdCBvZiBvbmVzIHRoYXQgdGhlIGtlcm5lbCBjb25zaWRlcnMgc2FmZSBmb3IgbWlncmF0aW9uIGR1cmluZyBob3RwbHVnLiBUaGlzIGltcGxpZXMgdGhhdCB3aGF0ZXZlciB3b3JrIGBibGtfc29mdGlycV9jcHVfZGVhZCgpYCBpcyBkb2luZywgaXQmIzM5O3Mgbm93IGRlZW1lZCB0byBiZSBzYWZlIHRvIG1vdmUgdG8gYSBuZXcgQ1BVIHdoZW4gYW4gb2xkIG9uZSBpcyBnb2luZyBhd2F5LiBDb252ZXJzZWx5LCB0aGUgcmVtb3ZhbCBvZiBgUkNVX1NPRlRJUlFgIG1lYW5zIHRoYXQgaXQmIzM5O3MgKm5vIGxvbmdlciogY29uc2lkZXJlZCBzYWZlIHRvIG1pZ3JhdGUuIEkmIzM5O2xsIG5lZWQgdG8gdGhpbmsgYWJvdXQgd2h5IHRoYXQgZGVjaXNpb24gd2FzIG1hZGUuIEkgbmVlZCBtb3JlIGNvbnRleHQuCgpCZWZvcmUgSSBkcmF3IGFueSBjb25jbHVzaW9ucywgSSYjMzk7bGwgcnVuIGBncmVwcGVyYCBvbiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGl0JiMzOTtzIGFjdHVhbGx5ICp1c2VkKiBpbiB0aGUga2VybmVsLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBhbmQgd2hldGhlciB0aGlzIG1ha2VzIHNlbnNlLiBUaW1lIHRvIHNlZSB3aGVyZSB0aGlzIG1hc2sgaXMgcmVmZXJlbmNlZCBhbmQgd2hhdCBjb2RlIGlzIGNoZWNraW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NPRlRJUlFfSE9UUExVR19TQUZFX01BU0smIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaD01NTA9ZW51bVxuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc4LSAqL1xuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzk6I2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU4MC1cdFx0XHRcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTA2OD1zdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzctXHRpZiAoIWNwdV9hY3RpdmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkge1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwNzg6XHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc5LVx0XHRpZiAoIXBlbmRpbmcpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkwMQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDU1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczoKCioqSW52ZXN0aWdhdGluZyBLZXJuZWwgVGljayBTY2hlZHVsaW5nIGFuZCBCbG9jayBTb2Z0SVJRIEJlaGF2aW9yKioKCkFscmlnaHQsIG15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBrZXJuZWwmIzM5O3MgdGljayBzY2hlZHVsaW5nIG1lY2hhbmlzbSBhbmQgdGhlIGhhbmRsaW5nIG9mIGJsb2NrIEkvTyBzb2Z0aXJxcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIENQVSBob3RwbHVnIGV2ZW50cy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgYmVoYXZlIHdoZW4gYSBDUFUgaXMgYnJvdWdodCBvbmxpbmUsIGdvZXMgaWRsZSwgb3IgaXMgdGFrZW4gb2ZmbGluZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIEkgbmVlZCB0byBpbnNwZWN0IHRoZSBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYCBmaWxlLCBhcm91bmQgbGluZSAxMDY4LCB3aGljaCBpcyBvZnRlbiBhIGNyaXRpY2FsIGFyZWEgZm9yIHRpY2stcmVsYXRlZCBsb2dpYy4gSSBleHBlY3QgdGhpcyB3aWxsIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyB3aGVyZSB0aGUgY29kZSBwYXRoIGludGVyc2VjdHMgd2l0aCB0aGUgbWFuYWdlbWVudCBvZiB0aGUgdGltZXJzIGludm9sdmVkIGluIHRpY2sgc2NoZWR1bGluZy4gRnJvbSB0aGVyZSwgaXQmIzM5O3MgYSBzaG9ydCBqdW1wIHRvIGNvbnNpZGVyIHRoZSBiZWhhdmlvciBvZiBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgIGZ1bmN0aW9uIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBgQkxPQ0tfU09GVElSUWAuIEkgd2FudCB0byBzZWUgaWYgdGhlIGJsb2NrIGxheWVyJiMzOTtzIHNvZnRpcnEgaGFuZGxpbmcgaXMgcmVzaWxpZW50IHRvIGNoYW5nZXMgaW4gQ1BVIHN0YXRlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgd2hlbiBhIENQVSBpcyBhYnJ1cHRseSByZW1vdmVkIG9yIGlkbGVkPyBJcyB0aGUgc29mdGlycSBwcm9wZXJseSBtaWdyYXRlZCBvciBkaXNhYmxlZCwgb3IgZG9lcyBpdCBsZWF2ZSBhbiBvcGVuIGxvb3A/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29mdGlycSBpcyByZWdpc3RlcmVkLCB1bnJlZ2lzdGVyZWQsIGFuZCBoYW5kbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBDUFUgaG90cGx1ZyBldmVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJiMzOTtzIHN0YWJpbGl0eSBhbmQgcGVyZm9ybWFuY2UgaW4gYSBkeW5hbWljIGVudmlyb25tZW50LiBJJiMzOTtsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBzY2hlZHVsZXIsIHRoZSBibG9jayBsYXllciwgYW5kIHRoZSBpbnRlcnJ1cHQgaGFuZGxpbmcgdG8gZ2V0IGEgY29tcGxldGUgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA2MDpcdCAqIHNob3VsZCBiZSB3YWl0aW5nIGZvciBrc29mdGlycWQgdG8gaGFuZGxlIGl0LiBUaGVyZWZvcmUgd2Ugc2hvdWxkbiYjMzk7dFxuMTA2MTpcdCAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxuMTA2MjpcdCAqXG4xMDYzOlx0ICogSG93ZXZlciBpZiB3ZSBhcmUgYmV0d2VlbiBDUFVIUF9BUF9TTVBCT09UX1RIUkVBRFMgYW5kIENQVV9URUFSRE9XTl9DUFUgb24gdGhlXG4xMDY0Olx0ICogY3B1X2Rvd24oKSBwcm9jZXNzLCBzb2Z0aXJxcyBjYW4gc3RpbGwgYmUgcmFpc2VkIHdoaWxlIGtzb2Z0aXJxZCBpcyBwYXJrZWQsXG4xMDY1Olx0ICogdHJpZ2dlcmluZyB0aGUgY29kZSBiZWxvdywgc2luY2Ugd2FrZXBfc29mdGlycWQoKSBpcyBpZ25vcmVkLlxuMTA2NjpcdCAqXG4xMDY3Olx0ICovXG4xMDY4Olx0c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxuMTA2OTpcdHtcbjEwNzA6XHRcdHN0YXRpYyBpbnQgcmF0ZWxpbWl0O1xuMTA3MTpcdFx0dW5zaWduZWQgaW50IHBlbmRpbmcgPSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKTtcbjEwNzI6XHRcbjEwNzM6XHRcdGlmIChsaWtlbHkoIXBlbmRpbmcpKVxuMTA3NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDc1Olx0XG4xMDc2Olx0XHQvKiBTb21lIHNvZnRpcnFzIGNsYWltIHRvIGJlIHNhZmUgYWdhaW5zdCBob3RwbHVnIGFuZCBrc29mdGlycWQgcGFya2luZyAqL1xuMTA3NzpcdFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcbjEwNzg6XHRcdFx0cGVuZGluZyBcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xuMTA3OTpcdFx0XHRpZiAoIXBlbmRpbmcpXG4xMDgwOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4MTpcdFx0fVxuMTA4MjpcdFxuMTA4MzpcdFx0LyogT24gUlQsIHNvZnRpcnEgaGFuZGxpbmcgbWF5IGJlIHdhaXRpbmcgb24gc29tZSBsb2NrICovXG4xMDg0Olx0XHRpZiAobG9jYWxfYmhfYmxvY2tlZCgpKVxuMTA4NTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMDg2Olx0XG4xMDg3Olx0XHRpZiAocmF0ZWxpbWl0IFx1MDAzYyAxMCkge1xuMTA4ODpcdFx0XHRwcl93YXJuKFwmIzM0O05PSFogdGljay1zdG9wIGVycm9yOiBsb2NhbCBzb2Z0aXJxIHdvcmsgaXMgcGVuZGluZywgaGFuZGxlciAjJTAyeCEhIVxcblwmIzM0OyxcbjEwODk6XHRcdFx0XHRwZW5kaW5nKTtcbjEwOTA6XHRcdFx0cmF0ZWxpbWl0JiM0MzsmIzQzOztcbjEwOTE6XHRcdH1cbjEwOTI6XHRcbjEwOTM6XHRcdHJldHVybiB0cnVlO1xuMTA5NDpcdH1cbjEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxuMTA5NzpcdHtcbjEwOTg6XHRcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcbjEwOTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0OTM3CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OgoKKipEaWdnaW5nIGludG8gdGhlIElkbGUgU29mdElSUSBCZWhhdmlvcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNvZnQgaW50ZXJydXB0cyB3aGVuIGl0JiMzOTtzIGlkbGUuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyB0aGF0IHRoaXMgZnVuY3Rpb24gZ2V0cyBjYWxsZWQgd2hlbiB0aGUgc3lzdGVtIGlzIHRyeWluZyB0byBkZXRlcm1pbmUgaWYgaXQgY2FuIHN0b3AgdGhlIGlkbGUgdGljaywgb3Igc29tZXRoaW5nIHNpbWlsYXIsIHdpdGhpbiB0aGUgYHRpY2tfbm9oemAgaWRsZSBwYXRoLiBUaGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgY29tbWVudCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgcmVmZXJlbmNpbmcgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSYjMzk7ZCBiZXR0ZXIgc2VhcmNoIGZvciB0aGF0IHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIGRpZmZlcmVudCBpbnRlcnJ1cHQgY29udGV4dHMuIEhvcGVmdWxseSB0aGF0IHNoZWRzIGxpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YmxrX3NvZnRpcnFfY3B1X2RlYWQmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YmxvY2svYmxrLW1xLmM9MTIyNT1zdGF0aWMgX19sYXRlbnRfZW50cm9weSB2b2lkIGJsa19kb25lX3NvZnRpcnEodm9pZClcbi0tXG5ibG9jay9ibGstbXEuYy0xMjI5LVxuYmxvY2svYmxrLW1xLmM6MTIzMDpzdGF0aWMgaW50IGJsa19zb2Z0aXJxX2NwdV9kZWFkKHVuc2lnbmVkIGludCBjcHUpXG5ibG9jay9ibGstbXEuYy0xMjMxLXtcbi0tXG5ibG9jay9ibGstbXEuYz01MjgxPXN0YXRpYyBpbnQgX19pbml0IGJsa19tcV9pbml0KHZvaWQpXG4tLVxuYmxvY2svYmxrLW1xLmMtNTI5My1cdFx0XHRcdCAgXCYjMzQ7YmxvY2svc29mdGlycTpkZWFkXCYjMzQ7LCBOVUxMLFxuYmxvY2svYmxrLW1xLmM6NTI5NDpcdFx0XHRcdCAgYmxrX3NvZnRpcnFfY3B1X2RlYWQpO1xuYmxvY2svYmxrLW1xLmMtNTI5NS1cdGNwdWhwX3NldHVwX3N0YXRlX211bHRpKENQVUhQX0JMS19NUV9ERUFELCBcJiMzNDtibG9jay9tcTpkZWFkXCYjMzQ7LCBOVUxMLFxuLS1cbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cbi0tXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3Ni0gKlxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzc6ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3OC0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEyCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNzU4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBJbXBsaWNhdGlvbnMgb2YgdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIHdhcywgd2hhdCBleGFjdGx5IGRvZXMgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGRvPyBUaGUgY29kZSBzaG93cyB0aGF0IGl0IGVzc2VudGlhbGx5IGlzc3VlcyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuYCBpZiB0aGVyZSBhcmUgcGVuZGluZyBzb2Z0aXJxcywgYW5kIHRoZW4gaXQgcmV0dXJucyBgdHJ1ZWAsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgdGhlIHRpY2sgZnJvbSBzdG9wcGluZyBhbmQgdGh1cyBzdXBwcmVzc2luZyBhIHJlbGF0ZWQgdGljay1zdG9wIGVycm9yLgoKVGhlIGtleSBvYnNlcnZhdGlvbiBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgc2Vuc2l0aXZlIGR1cmluZyBDUFUgaG90LXVucGx1ZyBvcGVyYXRpb25zLCBwYXJ0aWN1bGFybHkgd2hlbiBgIWNwdV9hY3RpdmUoKWAgYmVjb21lcyB0cnVlLiBIaXN0b3JpY2FsbHksIGlmIGBCTE9DS19TT0ZUSVJRYCB3YXMgcGVuZGluZyBkdXJpbmcgdGhpcyBzdGF0ZSwgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIHdvdWxkIHRyaWdnZXIgdGhlIHdhcm5pbmcgYW5kIHJldHVybiBgdHJ1ZWAsIGltcGFjdGluZyB0aGUgYGNhbl9zdG9wX2lkbGVfdGlja2AgZGVjaXNpb24uCgpUaGlzIHBhdGNoLCBob3dldmVyLCBtYXNrcyBvdXQgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgICh3aGljaCBlbmNvbXBhc3NlcyBgQkxPQ0tfU09GVElSUWAsIGFuZCBwb3RlbnRpYWxseSBvdGhlciAmIzM0O3NhZmUmIzM0OyBzb2Z0aXJxcykgZnJvbSBgcGVuZGluZ2Agd2l0aGluIHRoZSBgIWNwdV9hY3RpdmUoKWAgY29uZGl0aW9uLiAgVGhpcyBtZWFucyB0aGF0IGlmICpvbmx5KiB0aG9zZSAmIzM0O3NhZmUmIzM0OyBzb2Z0aXJxcyBhcmUgcGVuZGluZywgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIHdpbGwgbm93IHJldHVybiBgZmFsc2VgIGFuZCBzdXBwcmVzcyB0aGUgd2FybmluZy4KCk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBmdXp6aW5nLXJlbGV2YW50LiAgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBjYXJlZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIGEgbmVnYXRpdmUgY3JpdGVyaW9uIC0gdGhhdCBpcywgaWYgaXQmIzM5O3MgKm5vdCogd29ydGh5IG9mIGZ1enppbmcuCgpNeSBwcmltYXJ5IGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBhZmZlY3RzIGNvbXBpbGVkIEMgbG9naWMgYW5kIGNvbnRyb2wgZmxvdy4gQW5kIHRvIGFzY2VydGFpbiB0aGF0LCBJIG5lZWQgdG8gcmVmZXIgYmFjayB0byB0aGUgbmVnYXRpdmUgY3JpdGVyaWEuCgpTcGVjaWZpY2FsbHksIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaWYgdGhpcyBjaGFuZ2UgaXMgYSBwdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIG9yIHRyYWNlcG9pbnRzIGNoYW5nZSwgb3IgYSBjaGFuZ2Ugd2hpY2ggYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgb2YgdGhlIGtlcm5lbC4KCkxvb2tpbmcgYXQgdGhlIGNvZGU6ICBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaXMgZGlyZWN0bHkgdXNlZCBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOiByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLiBGdXJ0aGVybW9yZSwgd2l0aGluIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgOgoKYGBgYwoJaWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHsKCQlwZW5kaW5nICZhbXA7PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSzsKCQlpZiAoIXBlbmRpbmcpCgkJCXJldHVybiBmYWxzZTsKCX0KYGBgCgpUaGlzIGlzICpkZWZpbml0ZWx5KiBhbHRlcmluZyBjb250cm9sIGZsb3cuICBUaGUgbWFza2luZyBvcGVyYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLCBhbmQgdGhlcmVmb3JlIHRoZSBzdWJzZXF1ZW50IGJlaGF2aW91ciBvZiBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiAgQWxzbywgYENQVSBvZmZsaW5lIC8gaG90cGx1ZyB2aWEgc3lzZnMgKGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL29ubGluZWApIG9yIENQVSBpZGxlIHRpY2sgY2FuIGJlIGV4ZXJjaXNlZCBpbiBRRU1VIC8gc3l6a2FsbGVyYC4gSSBjYW4gcmVhc29uYWJseSB0ZXN0IHRoZSBzY2VuYXJpby4gU28sIHllcywgaXQmIzM5O3MgYSBjaGFuZ2UgdG8gY29tcGlsZWQgQyBsb2dpYyBhbmQgY29udHJvbCBmbG93LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHRoaXMgYWx0ZXJzIGNvbnRyb2wgZmxvdyBhbmQgaXMgcG90ZW50aWFsbHkgZXhlcmNpc2VkIHZpYSBRRU1VIG9yIHN5emthbGxlciwgaXQmIzM5O3MgcmVsZXZhbnQgdG8gZnV6emluZyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aWNrLXNjaGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwOTU6XHRcbjEwOTY6XHRzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxuMTA5NzpcdHtcbjEwOTg6XHRcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcbjEwOTk6XHRcbjExMDA6XHRcdGlmICh1bmxpa2VseSghdGlja19zY2hlZF9mbGFnX3Rlc3QodHMsIFRTX0ZMQUdfTk9IWikpKVxuMTEwMTpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTAyOlx0XG4xMTAzOlx0XHRpZiAobmVlZF9yZXNjaGVkKCkpXG4xMTA0Olx0XHRcdHJldHVybiBmYWxzZTtcbjExMDU6XHRcbjExMDY6XHRcdGlmICh1bmxpa2VseShyZXBvcnRfaWRsZV9zb2Z0aXJxKCkpKVxuMTEwNzpcdFx0XHRyZXR1cm4gZmFsc2U7XG4xMTA4Olx0XG4xMTA5Olx0XHRpZiAodGlja19ub2h6X2Z1bGxfZW5hYmxlZCgpKSB7XG4xMTEwOlx0XHRcdGludCB0aWNrX2NwdSA9IFJFQURfT05DRSh0aWNrX2RvX3RpbWVyX2NwdSk7XG4xMTExOlx0XG4xMTEyOlx0XHRcdC8qXG4xMTEzOlx0XHRcdCAqIEtlZXAgdGhlIHRpY2sgYWxpdmUgdG8gZ3VhcmFudGVlIHRpbWVrZWVwaW5nIHByb2dyZXNzaW9uXG4xMTE0Olx0XHRcdCAqIGlmIHRoZXJlIGFyZSBmdWxsIGR5bnRpY2tzIENQVXMgYXJvdW5kXG4xMTE1Olx0XHRcdCAqL1xuMTExNjpcdFx0XHRpZiAodGlja19jcHUgPT0gY3B1KVxuMTExNzpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjExMTg6XHRcbjExMTk6XHRcdFx0LyogU2hvdWxkIG5vdCBoYXBwZW4gZm9yIG5vaHotZnVsbCAqL1xuMTEyMDpcdFx0XHRpZiAoV0FSTl9PTl9PTkNFKHRpY2tfY3B1ID09IFRJQ0tfRE9fVElNRVJfTk9ORSkpXG4xMTIxOlx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTEyMjpcdFx0fVxuMTEyMzpcdFxuMTEyNDpcdFx0cmV0dXJuIHRydWU7XG4xMTI1Olx0fVxuMTEyNjpcdFxuMTEyNzpcdC8qKlxuMTEyODpcdCAqIHRpY2tfbm9oel9pZGxlX3N0b3BfdGljayAtIHN0b3AgdGhlIGlkbGUgdGljayBmcm9tIHRoZSBpZGxlIHRhc2tcbjExMjk6XHQgKlxuMTEzMDpcdCAqIFdoZW4gdGhlIG5leHQgZXZlbnQgaXMgbW9yZSB0aGFuIGEgdGljayBpbnRvIHRoZSBmdXR1cmUsIHN0b3AgdGhlIGlkbGUgdGlja1xuMTEzMTpcdCAqL1xuMTEzMjpcdHZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXG4xMTMzOlx0e1xuMTEzNDpcdFx0c3RydWN0IHRpY2tfc2NoZWQgKnRzID0gdGhpc19jcHVfcHRyKFx1MDAyNnRpY2tfY3B1X3NjaGVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzUwMAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDMyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEludGVyYWN0aW9uIEJldHdlZW4gYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgYW5kIElkbGUgVGljayBTdG9wcGluZyoqCgpPa2F5LCBzbyBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJdCBsb29rcyBsaWtlIHRoZSBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCBmdW5jdGlvbiBpcyB0aGUgZ2F0ZWtlZXBlciBmb3IgYGNhbl9zdG9wX2lkbGVfdGljaygpYC4gSWYgYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgcmV0dXJucyBgdHJ1ZWAsIHRoZW4gd2UgKmNhbm5vdCogc3RvcCB0aGUgaWRsZSB0aWNrLCB3aGljaCBtZWFucyBgY2FuX3N0b3BfaWRsZV90aWNrKClgIHdpbGwgcmV0dXJuIGBmYWxzZWAuIENvbnZlcnNlbHksIHdoZW4gYHJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgcmV0dXJucyBgZmFsc2VgLCBgY2FuX3N0b3BfaWRsZV90aWNrKClgIGlzIGFsbG93ZWQgdG8gcHJvY2VlZCBhbmQgcG90ZW50aWFsbHkgc3RvcCB0aGUgdGljay4gVGhhdCBjb250cm9sIGZsb3cgbWFrZXMgc2Vuc2UgLSBpdCBzZWVtcyBsaWtlIHRoaXMgaW50ZXJhY3Rpb24gaXMgbW9zdCByZWxldmFudCB3aGVuIGBCTE9DS19TT0ZUSVJRYCBpcyBwZW5kaW5nLCBwYXJ0aWN1bGFybHkgZHVyaW5nIENQVSBob3RwbHVnIG9yIHdoZW4gd2UmIzM5O3JlIHRyeWluZyB0byBzYXZlIHBvd2VyIHRocm91Z2ggaWRsZSBzdGF0ZSB0cmFuc2l0aW9ucy4KClRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBhZmZlY3RlZCBoZXJlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZyYjMzQ7LiBBaCwgU2VjdGlvbiAzISBJdCBzdGF0ZXMgdGhhdCBjaGFuZ2VzIGluICpjb3JlIHN1YnN5c3RlbXMqIGFyZSBjcml0aWNhbCwgYW5kIHRoaXMgaXMgY2xlYXJseSByZWxldmFudCB0byB0aW1la2VlcGluZywgc29mdGlycSBoYW5kbGluZywgYW5kIHRoZSBzY2hlZHVsZXIuIFRob3NlIGFyZSBhbGwgY29yZSBzdWJzeXN0ZW1zISBJZiB0aGlzIGFmZmVjdHMgdGhhdCBjb2RlLCBpdCYjMzk7cyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBkZWVwZXIgYW5hbHlzaXMuCgpOb3csIEkgbmVlZCB0byBzZWUgd2hhdCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbWlnaHQgY29udHJvbCB0aGUgY29tcGlsYXRpb24gb2YgdGljay1zY2hlZCBvciBub2h6LXJlbGF0ZWQgY29kZS4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIGBrZXJuZWwvdGltZS9LY29uZmlnYCBhbmQgYGtlcm5lbC90aW1lL01ha2VmaWxlYCBmaWxlcy4gVGhvc2UgYXJlIHRoZSBiZXN0IHBsYWNlcyB0byBmaW5kIG91dCB3aGF0IEtjb25maWdzIGFyZSByZWxldmFudCBhbmQgcG90ZW50aWFsbHkgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGludm9sdmVkIGNvZGUuIFVuZGVyc3RhbmRpbmcgd2hpY2ggY29uZmlncyBhcmUgdXNlZCB3aWxsIGhlbHAgbWUgaXNvbGF0ZSB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIHdoZXJlIHRoaXMgaW50ZXJhY3Rpb24gY29tZXMgaW50byBwbGF5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aWNrLXNjaGVkXFwubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLKVx0XHQmIzQzOz0gc2NoZWRfY2xvY2sub1xua2VybmVsL3RpbWUvTWFrZWZpbGU6MjQ6b2JqLSQoQ09ORklHX1RJQ0tfT05FU0hPVClcdFx0XHQmIzQzOz0gdGljay1vbmVzaG90Lm8gdGljay1zY2hlZC5vXG5rZXJuZWwvdGltZS9NYWtlZmlsZS0yNS1vYmotJChDT05GSUdfTEVHQUNZX1RJTUVSX1RJQ0spXHRcdFx0JiM0Mzs9IHRpY2stbGVnYWN5Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODMxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDc0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbToKCioqS2VybmVsIENvbmZpZ3VyYXRpb24gSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gcHV6emxlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGVzZSBwb3RlbnRpYWwgY3VscHJpdHM6IGBDT05GSUdfTk9fSFpfQ09NTU9OYCwgYENPTkZJR19USUNLX09ORVNIT1RgLCBgQ09ORklHX05PX0haX0lETEVgLCBhbmQgYENPTkZJR19IT1RQTFVHX0NQVWAuIFRoZXNlIGFyZSBhbGwgcmVsYXRlZCB0byBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIHRpbWVrZWVwaW5nIGFuZCBDUFUgaWRsZSBzdGF0ZXMsIHNvIHRoZXkmIzM5O3JlIHRoZSBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBkZWJ1Z2dpbmcuCgpOb3csIHRvIGdldCBzb21lIHJlYWwgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgaW50byBga2VybmVsL3RpbWUvS2NvbmZpZ2AuIFRoYXQmIzM5O3MgdGhlIGdvLXRvIGxvY2F0aW9uIGZvciBhbnl0aGluZyByZWxhdGVkIHRvIHRpbWluZyBhbmQgY2xvY2sgY29uZmlndXJhdGlvbiwgYW5kIHNob3VsZCBwcm92aWRlIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGRlc2NyaXB0aW9ucyBmb3IgYm90aCBgVElDS19PTkVTSE9UYCBhbmQgYE5PX0haYCBvcHRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3QgYW5kIHdoYXQgb3RoZXIgcmVsYXRlZCBvcHRpb25zIGFyZSBhdCBwbGF5LiBUaW1lIHRvIGdldCB0aG9zZSBLY29uZmlnIGZpbGVzIG9wZW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUSUNLX09ORVNIT1R8Y29uZmlnIE5PX0haJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvS2NvbmZpZz05NT1pZiBHRU5FUklDX0NMT0NLRVZFTlRTXG4tLVxua2VybmVsL3RpbWUvS2NvbmZpZy05OC0jIGFyZSBzdXBwb3J0ZWQgaW5kZXBlbmRlbnQgb2YgdGhpcy5cbmtlcm5lbC90aW1lL0tjb25maWc6OTk6Y29uZmlnIFRJQ0tfT05FU0hPVFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMDAtXHRib29sXG5rZXJuZWwvdGltZS9LY29uZmlnLTEwMS1cbmtlcm5lbC90aW1lL0tjb25maWc6MTAyOmNvbmZpZyBOT19IWl9DT01NT05cbmtlcm5lbC90aW1lL0tjb25maWctMTAzLVx0Ym9vbFxuLS1cbmtlcm5lbC90aW1lL0tjb25maWc9MTEwPWNvbmZpZyBIWl9QRVJJT0RJQ1xuLS1cbmtlcm5lbC90aW1lL0tjb25maWctMTE1LVxua2VybmVsL3RpbWUvS2NvbmZpZzoxMTY6Y29uZmlnIE5PX0haX0lETEVcbmtlcm5lbC90aW1lL0tjb25maWctMTE3LVx0Ym9vbCBcJiMzNDtJZGxlIGR5bnRpY2tzIHN5c3RlbSAodGlja2xlc3MgaWRsZSlcJiMzNDtcbi0tXG5rZXJuZWwvdGltZS9LY29uZmlnLTEyNS1cbmtlcm5lbC90aW1lL0tjb25maWc6MTI2OmNvbmZpZyBOT19IWl9GVUxMXG5rZXJuZWwvdGltZS9LY29uZmlnLTEyNy1cdGJvb2wgXCYjMzQ7RnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVwmIzM0O1xuLS1cbmtlcm5lbC90aW1lL0tjb25maWc9MTY1PWNvbmZpZyBDT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0Vcbi0tXG5rZXJuZWwvdGltZS9LY29uZmlnLTE5MC1cbmtlcm5lbC90aW1lL0tjb25maWc6MTkxOmNvbmZpZyBOT19IWlxua2VybmVsL3RpbWUvS2NvbmZpZy0xOTItXHRib29sIFwmIzM0O09sZCBJZGxlIGR5bnRpY2tzIGNvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4OTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhpbmtpbmcgcHJvY2VzczoKCioqRXhhbWluaW5nIFRpbWVrZWVwaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIHRpbWVrZWVwaW5nLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBpZGxlIENQVSBoYW5kbGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaW1tZWRpYXRlbHkgZm9jdXNlcyBvbiB0aGUga2V5IG9wdGlvbnM6IGBOT19IWl9JRExFYCwgYE5PX0haX0NPTU1PTmAsIGFuZCBgSE9UUExVR19DUFVgLiBUaGVzZSBhcmUgbGlrZWx5IHRvIGJlIHJlbGF0ZWQgdG8gaG93IHRoZSBrZXJuZWwgaGFuZGxlcyB0aWNrbGVzcyBvcGVyYXRpb24gYW5kIENQVSBob3RwbHVnLCB3aGljaCwgb2YgY291cnNlLCBkaXJlY3RseSBpbXBhY3RzIHBvd2VyIG1hbmFnZW1lbnQgYW5kIHJlc3BvbnNpdmVuZXNzLiBJJiMzOTttIHJlY2FsbGluZyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGFyZSBvZnRlbiBpbnRlcnJlbGF0ZWQuCgpUbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUgb2YgdGhlaXIgaW50ZXJhY3Rpb25zIGFuZCBwb3RlbnRpYWwgZWZmZWN0cywgbXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZS4gSSYjMzk7bSB6ZXJvaW5nIGluIG9uIGxpbmVzIDEwMC0xMzAgaW4gYGtlcm5lbC90aW1lL0tjb25maWdgIGJlY2F1c2UgdGhlc2UgdHlwZXMgb2YgY29uZmlndXJhdGlvbnMgYXJlIG9mdGVuIGdyb3VwZWQgbG9naWNhbGx5LiBUaGlzIHNlY3Rpb24gaXMgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgZm9ybWFsIGRlc2NyaXB0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGtlcm5lbCB0aW1lIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7a2VybmVsL3RpbWUvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgOTU6XHRpZiBHRU5FUklDX0NMT0NLRVZFTlRTXG4gIDk2Olx0IyBDb3JlIGludGVybmFsIHN3aXRjaC4gU2VsZWN0ZWQgYnkgTk9fSFpfQ09NTU9OIC8gSElHSF9SRVNfVElNRVJTLiBUaGlzIGlzXG4gIDk3Olx0IyBvbmx5IHJlbGF0ZWQgdG8gdGhlIHRpY2sgZnVuY3Rpb25hbGl0eS4gT25lc2hvdCBjbG9ja2V2ZW50IGRldmljZXNcbiAgOTg6XHQjIGFyZSBzdXBwb3J0ZWQgaW5kZXBlbmRlbnQgb2YgdGhpcy5cbiAgOTk6XHRjb25maWcgVElDS19PTkVTSE9UXG4gMTAwOlx0XHRib29sXG4gMTAxOlx0XG4gMTAyOlx0Y29uZmlnIE5PX0haX0NPTU1PTlxuIDEwMzpcdFx0Ym9vbFxuIDEwNDpcdFx0c2VsZWN0IFRJQ0tfT05FU0hPVFxuIDEwNTpcdFxuIDEwNjpcdGNob2ljZVxuIDEwNzpcdFx0cHJvbXB0IFwmIzM0O1RpbWVyIHRpY2sgaGFuZGxpbmdcJiMzNDtcbiAxMDg6XHRcdGRlZmF1bHQgTk9fSFpfSURMRSBpZiBOT19IWlxuIDEwOTpcdFxuIDExMDpcdGNvbmZpZyBIWl9QRVJJT0RJQ1xuIDExMTpcdFx0Ym9vbCBcJiMzNDtQZXJpb2RpYyB0aW1lciB0aWNrcyAoY29uc3RhbnQgcmF0ZSwgbm8gZHludGlja3MpXCYjMzQ7XG4gMTEyOlx0XHRoZWxwXG4gMTEzOlx0XHQgIFRoaXMgb3B0aW9uIGtlZXBzIHRoZSB0aWNrIHJ1bm5pbmcgcGVyaW9kaWNhbGx5IGF0IGEgY29uc3RhbnRcbiAxMTQ6XHRcdCAgcmF0ZSwgZXZlbiB3aGVuIHRoZSBDUFUgZG9lc24mIzM5O3QgbmVlZCBpdC5cbiAxMTU6XHRcbiAxMTY6XHRjb25maWcgTk9fSFpfSURMRVxuIDExNzpcdFx0Ym9vbCBcJiMzNDtJZGxlIGR5bnRpY2tzIHN5c3RlbSAodGlja2xlc3MgaWRsZSlcJiMzNDtcbiAxMTg6XHRcdHNlbGVjdCBOT19IWl9DT01NT05cbiAxMTk6XHRcdGhlbHBcbiAxMjA6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRpY2tsZXNzIGlkbGUgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzXG4gMTIxOlx0XHQgIHdpbGwgb25seSB0cmlnZ2VyIG9uIGFuIGFzLW5lZWRlZCBiYXNpcyB3aGVuIHRoZSBzeXN0ZW0gaXMgaWRsZS5cbiAxMjI6XHRcdCAgVGhpcyBpcyB1c3VhbGx5IGludGVyZXN0aW5nIGZvciBlbmVyZ3kgc2F2aW5nLlxuIDEyMzpcdFxuIDEyNDpcdFx0ICBNb3N0IG9mIHRoZSB0aW1lIHlvdSB3YW50IHRvIHNheSBZIGhlcmUuXG4gMTI1Olx0XG4gMTI2Olx0Y29uZmlnIE5PX0haX0ZVTExcbiAxMjc6XHRcdGJvb2wgXCYjMzQ7RnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVwmIzM0O1xuIDEyODpcdFx0IyBOT19IWl9DT01NT04gZGVwZW5kZW5jeVxuIDEyOTpcdFx0IyBXZSBuZWVkIGF0IGxlYXN0IG9uZSBwZXJpb2RpYyBDUFUgZm9yIHRpbWVrZWVwaW5nXG4gMTMwOlx0XHRkZXBlbmRzIG9uIFNNUFxuIDEzMTpcdFx0ZGVwZW5kcyBvbiBIQVZFX0NPTlRFWFRfVFJBQ0tJTkdfVVNFUlxuIDEzMjpcdFx0IyBWSVJUX0NQVV9BQ0NPVU5USU5HX0dFTiBkZXBlbmRlbmN5XG4gMTMzOlx0XHRkZXBlbmRzIG9uIEhBVkVfVklSVF9DUFVfQUNDT1VOVElOR19HRU5cbiAxMzQ6XHRcdHNlbGVjdCBOT19IWl9DT01NT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTg4MQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkV4YW1pbmluZyBDUFUgSG90cGx1ZyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBDUFUgaG90cGx1ZyB0ZWFyZG93biBjb2RlLCBhbmQgaXQmIzM5O3MgbWFraW5nIG1lIHRoaW5rIHdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGBIT1RQTFVHX0NQVWAgY29uZmlndXJhdGlvbi4gVGhlIGAhY3B1X2FjdGl2ZSguLi4pYCBjaGVjayBpbiB0aGUgY29kZSBzZWVtcyBkaXJlY3RseSByZWxhdGVkIHRvIHRoYXQgaG90cGx1ZyBwcm9jZXNzLiBJdCB3b3VsZCBiZSBhIG1pc3Rha2UgdG8gb3Zlcmxvb2sgaG93IHdlIGFyZSBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgYGNwdV9hY3RpdmVgIGJlaGF2aW9yIGFzIHdlIHRlYXIgZG93biBvciBicmluZyB1cCBDUFVzLCBzaW5jZSBob3RwbHVnIGRpcmVjdGx5IGFmZmVjdHMgdGhlIGFjdGl2ZSBzZXQuCgpUaGVyZWZvcmUsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIGdvIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGh1bnQgZm9yIGBIT1RQTFVHX0NQVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBjcHVfYWN0aXZlYCBzdGF0ZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBvdXIgYmFzZXMgYXJlIGNvdmVyZWQuIEkgYmV0IHRoYXQgd2lsbCBjbGFyaWZ5IGEgbG90LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSE9UUExVR19DUFUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0vS2NvbmZpZz0xMDY1PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9hcm0vS2NvbmZpZy0xMDc2LVxuYXJjaC9hcm0vS2NvbmZpZzoxMDc3OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9hcm0vS2NvbmZpZy0xMDc4LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcJiMzNDtcbi0tXG5hcmNoL2FybTY0L0tjb25maWc9MTYyMT1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvYXJtNjQvS2NvbmZpZy0xNjI1LVxuYXJjaC9hcm02NC9LY29uZmlnOjE2MjY6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2FybTY0L0tjb25maWctMTYyNy1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9jc2t5L0tjb25maWc9MzMwPWNvbmZpZyBEUkFNX0JBU0Vcbi0tXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzMtXG5hcmNoL2Nza3kvS2NvbmZpZzozMzQ6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc9NTE1PWNvbmZpZyBTTVBcbi0tXG5hcmNoL2xvb25nYXJjaC9LY29uZmlnLTUzMi1cbmFyY2gvbG9vbmdhcmNoL0tjb25maWc6NTMzOmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzQtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gvbWlwcy9LY29uZmlnPTI3MDM9Y29uZmlnIFNNUFxuLS1cbmFyY2gvbWlwcy9LY29uZmlnLTI3MjQtXG5hcmNoL21pcHMvS2NvbmZpZzoyNzI1OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9taXBzL0tjb25maWctMjcyNi1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9wYXJpc2MvS2NvbmZpZz0zMzE9Y29uZmlnIElSUVNUQUNLU1xuLS1cbmFyY2gvcGFyaXNjL0tjb25maWctMzM4LVxuYXJjaC9wYXJpc2MvS2NvbmZpZzozMzk6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cdGJvb2xcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODM9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcbi0tXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01OTQtXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTU6Y29uZmlnIEhPVFBMVUdfQ1BVXG5hcmNoL3Bvd2VycGMvS2NvbmZpZy01OTYtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1Mz1jb25maWcgTlJfQ1BVU1xuLS1cbmFyY2gvcmlzY3YvS2NvbmZpZy00NjItXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYzOmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2NC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXCYjMzQ7XG4tLVxuYXJjaC9zMzkwL0tjb25maWc9NTM1PWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC9zMzkwL0tjb25maWctNTQ2LVxuYXJjaC9zMzkwL0tjb25maWc6NTQ3OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC9zMzkwL0tjb25maWctNTQ4LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gvc2gvS2NvbmZpZz01OTI9Y29uZmlnIE5SX0NQVVNcbi0tXG5hcmNoL3NoL0tjb25maWctNjA1LVxuYXJjaC9zaC9LY29uZmlnOjYwNjpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvc2gvS2NvbmZpZy02MDctXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVcyAoRVhQRVJJTUVOVEFMKVwmIzM0O1xuLS1cbmFyY2gvc3BhcmMvS2NvbmZpZz0yMjA9Y29uZmlnIEVBUkxZRkJcbi0tXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxuYXJjaC9zcGFyYy9LY29uZmlnOjIyOTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gvc3BhcmMvS2NvbmZpZy0yMzAtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1wmIzM0O1xuLS1cbmFyY2gveDg2L0tjb25maWc9MjE1ND1jb25maWcgQUREUkVTU19NQVNLSU5HXG4tLVxuYXJjaC94ODYvS2NvbmZpZy0yMTY1LVxuYXJjaC94ODYvS2NvbmZpZzoyMTY2OmNvbmZpZyBIT1RQTFVHX0NQVVxuYXJjaC94ODYvS2NvbmZpZy0yMTY3LVx0ZGVmX2Jvb2wgeVxuLS1cbmFyY2gveHRlbnNhL0tjb25maWc9MjUzPWNvbmZpZyBOUl9DUFVTXG4tLVxuYXJjaC94dGVuc2EvS2NvbmZpZy0yNTgtXG5hcmNoL3h0ZW5zYS9LY29uZmlnOjI1OTpjb25maWcgSE9UUExVR19DUFVcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVx0Ym9vbCBcJiMzNDtFbmFibGUgQ1BVIGhvdHBsdWcgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTE3MwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDYyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEJsb2NrIExheWVyJiMzOTtzIFNvZnRJUlEgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGUgc29mdGlycSBmb3IgdGhlIGJsb2NrIGxheWVyIGlzIHNldCB1cC4gRmlyc3QsIEkgbmVlZCB0byBjaGVjayB0aGUgYEJMT0NLYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTWFrZXMgc2Vuc2U7IHRoYXTigJlzIHRoZSBzdGFydGluZyBwb2ludC4gSSBzZWVtIHRvIHJlY2FsbCBzb21ldGhpbmcgYWJvdXQgYEJMT0NLX1NPRlRJUlFgIGJlaW5nIGRlZmluZWQsIGFuZCBpZiBtZW1vcnkgc2VydmVzLCBpdCBzaG91bGQgYmUgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19CTE9DS2AgZ3VhcmQuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcy4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBob25lIGluIG9uIGxpbmVzIGFyb3VuZCA1NTAgdG8gNTgwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJJiMzOTttIGxvb2tpbmcgZm9yLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTQ1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQ1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA1NDU6XHQgICBmcmVxdWVuY3kgdGhyZWFkZWQgam9iIHNjaGVkdWxpbmcuIEZvciBhbG1vc3QgYWxsIHRoZSBwdXJwb3Nlc1xuIDU0NjpcdCAgIHRhc2tsZXRzIGFyZSBtb3JlIHRoYW4gZW5vdWdoLiBGLmUuIGFsbCBzZXJpYWwgZGV2aWNlIEJIcyBldFxuIDU0NzpcdCAgIGFsLiBzaG91bGQgYmUgY29udmVydGVkIHRvIHRhc2tsZXRzLCBub3QgdG8gc29mdGlycXMuXG4gNTQ4Olx0ICovXG4gNTQ5Olx0XG4gNTUwOlx0ZW51bVxuIDU1MTpcdHtcbiA1NTI6XHRcdEhJX1NPRlRJUlE9MCxcbiA1NTM6XHRcdFRJTUVSX1NPRlRJUlEsXG4gNTU0Olx0XHRORVRfVFhfU09GVElSUSxcbiA1NTU6XHRcdE5FVF9SWF9TT0ZUSVJRLFxuIDU1NjpcdFx0QkxPQ0tfU09GVElSUSxcbiA1NTc6XHRcdElSUV9QT0xMX1NPRlRJUlEsXG4gNTU4Olx0XHRUQVNLTEVUX1NPRlRJUlEsXG4gNTU5Olx0XHRTQ0hFRF9TT0ZUSVJRLFxuIDU2MDpcdFx0SFJUSU1FUl9TT0ZUSVJRLFxuIDU2MTpcdFx0UkNVX1NPRlRJUlEsICAgIC8qIFByZWZlcmFibGUgUkNVIHNob3VsZCBhbHdheXMgYmUgdGhlIGxhc3Qgc29mdGlycSAqL1xuIDU2MjpcdFxuIDU2MzpcdFx0TlJfU09GVElSUVNcbiA1NjQ6XHR9O1xuIDU2NTpcdFxuIDU2NjpcdC8qXG4gNTY3Olx0ICogVGhlIGZvbGxvd2luZyB2ZWN0b3JzIGNhbiBiZSBzYWZlbHkgaWdub3JlZCBhZnRlciBrc29mdGlycWQgaXMgcGFya2VkOlxuIDU2ODpcdCAqXG4gNTY5Olx0ICogXyBSQ1U6XG4gNTcwOlx0ICogXHQxKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgbWlncmF0ZXMgdGhlIHF1ZXVlLlxuIDU3MTpcdCAqIFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxuIDU3MjpcdCAqXG4gNTczOlx0ICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiA1NzQ6XHQgKlxuIDU3NTpcdCAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiA1NzY6XHQgKlxuIDU3NzpcdCAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xuIDU3ODpcdCAqL1xuIDU3OTpcdCNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxuIDU4MDpcdFx0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIDU4MTpcdFxuIDU4MjpcdFxuIDU4MzpcdC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICYjMzk7c29mdGlycV90b19uYW1lJiMzOTsgaW5cbiA1ODQ6XHQgKiBrZXJuZWwvc29mdGlycS5jIHdoZW4gYWRkaW5nIGEgbmV3IHNvZnRpcnEuXG4gNTg1Olx0ICovXG4gNTg2Olx0ZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBzb2Z0aXJxX3RvX25hbWVbTlJfU09GVElSUVNdO1xuIDU4NzpcdFxuIDU4ODpcdC8qIHNvZnRpcnEgbWFzayBhbmQgYWN0aXZlIGZpZWxkcyBtb3ZlZCB0byBpcnFfY3B1c3RhdF90IGluXG4gNTg5Olx0ICogYXNtL2hhcmRpcnEuaCB0byBnZXQgYmV0dGVyIGNhY2hlIHVzYWdlLiAgS0FPXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMTcwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzg2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTb2Z0SVJRIFVzYWdlIEFjcm9zcyB0aGUgQmxvY2sgTGF5ZXIgYW5kIFRpY2sgU2NoZWR1bGVyKioKCk9rYXksIHNvIGBCTE9DS19TT0ZUSVJRYCBpcyBqdXN0IGhhbmdpbmcgb3V0IGluIHRoZSBlbnVtIHdpdGhvdXQgYW55IHF1YWxpZmljYXRpb24sIGJ1dCB0aGUgYmxvY2sgbGF5ZXIgZGVmaW5pdGVseSB1c2VzIGl0IHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuIEZpcnN0LCBJJiMzOTtsbCB0cmFjZSBkb3duIHdoZXJlIGBibGtfc29mdGlycV9jcHVfZGVhZGAgaXMgZGVmaW5lZCBhbmQgdXNlZC4gTG9va3MgbGlrZSBpdCYjMzk7cyBpbiBgYmxvY2svYmxrLW1xLmNgLiBIbW0sIGl0IGFwcGVhcnMgdG8gYmUgY2xlYW5pbmcgdXAgcmVxdWVzdHMgb24gYSBkZWFkIENQVS4gTWFrZXMgc2Vuc2UuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSB0aW1lIHNjaGVkdWxlciBzaWRlLiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCBhbHNvIHNlZW1zIGludGVyZXN0aW5nLiBJdCYjMzk7cyBzdGF0aWMsIGFuZCBjYWxsZWQgYnkgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgd2hpY2gsIGluIHR1cm4sIGlzIHVzZWQgYnkgZnVuY3Rpb25zIGxpa2UgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGljaygpYCBhbmQgYHRpY2tfbm9oel9mdWxsX3VwZGF0ZV90aWNrKClgLiAKCkFscmlnaHQsIGZvciBhcHByb3ByaWF0ZSAmIzM0O0ZvY3VzU3ltYm9scywmIzM0OyBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgYnV0IHRoYXQmIzM5O3Mgc3RhdGljLiBMZXQmIzM5O3MgbG9vayBhdCBgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKClgLCBgdGlja19ub2h6X2lkbGVfZW50ZXIoKWAsIGV0Yy4uIFRob3NlIGFyZSB0aGUgcmVhbCBlbnRyeSBwb2ludHMuIE9idmlvdXNseSwgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBpcyBpbXBvcnRhbnQgdG9vLiBBbmQgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFzIHdlbGwsIGV2ZW4gaWYgaXQmIzM5O3Mgc3RhdGljLgoKV2FpdCwgYmVmb3JlIEkgZ28gZnVydGhlciwgSSBzaG91bGQgdmVyaWZ5IHRoZSB2aXNpYmlsaXR5IG9mIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgYW5kIGl0cyBjYWxsZXJzIHdpdGhpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYC4gR290dGEgYmUgdGhvcm91Z2ghCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Nhbl9zdG9wX2lkbGVfdGljayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDQ3PXN0YXRpYyB2b2lkIHRpY2tfbm9oel9mdWxsX3VwZGF0ZV90aWNrKHN0cnVjdCB0aWNrX3NjaGVkICp0cylcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA2MC0gKiBzaG91bGQgYmUgd2FpdGluZyBmb3Iga3NvZnRpcnFkIHRvIGhhbmRsZSBpdC4gVGhlcmVmb3JlIHdlIHNob3VsZG4mIzM5O3Rcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMDYxOiAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNjItICpcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTA2OD1zdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTUtXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA5NjpzdGF0aWMgYm9vbCBjYW5fc3RvcF9pZGxlX3RpY2soaW50IGNwdSwgc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTcte1xuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMTMyPXZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXG4tLVxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTExNDMtXHRcdGV4cGlyZXMgPSB0cy1cdTAwM2V0aW1lcl9leHBpcmVzO1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjExNDQ6XHRlbHNlIGlmIChjYW5fc3RvcF9pZGxlX3RpY2soY3B1LCB0cykpXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTE0NS1cdFx0ZXhwaXJlcyA9IHRpY2tfbm9oel9uZXh0X2V2ZW50KHRzLCBjcHUpO1xuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMjg0PWt0aW1lX3QgdGlja19ub2h6X2dldF9zbGVlcF9sZW5ndGgoa3RpbWVfdCAqZGVsdGFfbmV4dClcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTI5OS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMzAwOlx0aWYgKCFjYW5fc3RvcF9pZGxlX3RpY2soY3B1LCB0cykpXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTMwMS1cdFx0cmV0dXJuICpkZWx0YV9uZXh0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQwNgoJCQkJCQkJb3V0cHV0OiAxNTUKCQkJCQkJCXRob3VnaHRzOiA0MjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEJsb2NrIFNvZnRJUlEgYW5kIElkbGUgVGljayBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBub3RpbmcgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhIGdlbmVyYWwgaWRsZSBmdW5jdGlvbiwgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGlja2AsIGFuZCB0aGUgbW9yZSBzcGVjaWZpYyBjYWxsYmFjayBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgIGFyZSBkaXN0aW5jdCBzeW1ib2xzIHdpdGhpbiB0aGUgdm1saW51eCBpbWFnZS4gR29vZCwgdGhleSBhcmUuIFN0YXRpYyBmdW5jdGlvbnMsIGV2ZW4gd2l0aGluIC5jIGZpbGVzLCBnZXQgc3ltYm9scywgb3IgYXQgbGVhc3QgdGhlaXIgY2FsbGVycyBkbyBpZiBpbmxpbmVkLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgc3ltYm9sczogYHJlcG9ydF9pZGxlX3NvZnRpcnFgLCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLCBhbmQgYGNhbl9zdG9wX2lkbGVfdGlja2AuIEdvdCBpdC4gTW92aW5nIG9uIHRvIHRoZSBjb25maWd1cmF0aW9uIGNoZWNrcy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zIGFyZSBpbiBwbGFjZS4gV2UmIzM5O3JlIGxvb2tpbmcgZm9yIGBOT19IWl9JRExFYCAob3IgYE5PX0haX0NPTU1PTmAgd2hpY2ggaW1wbGllcyBpdCksIGBIT1RQTFVHX0NQVWAsIGFuZCBgQkxPQ0tgLiBBbGwgdGhlIGtleSBvbmVzLgoKQWxyaWdodCwgbGV0JiMzOTtzIGNyb3NzLXJlZmVyZW5jZSB0aGlzIGFnYWluc3QgdGhlIGluc3RydWN0aW9ucy4gV29ydGhGdXp6aW5nIGlzIHNldCB0byB0cnVlLCB3aGljaCBhbGlnbnMgd2l0aCBteSB1bmRlcnN0YW5kaW5nLiBUaGUgYEVuYWJsZUNvbmZpZ3NgIGxpc3QgaXMgYWNjdXJhdGU6IGBOT19IWl9JRExFYCwgYEhPVFBMVUdfQ1BVYCwgYW5kIGBCTE9DS2AuIFRoZSBgRm9jdXNTeW1ib2xzYCBhcmUgY29ycmVjdCB0b286IGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhbmQgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4KCkZpbmFsbHksIHRoZSByZWFzb25pbmcgc2VlbXMgc291bmQ6IHRoZSBwYXRjaCBtb2RpZmllcyBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gaW5jbHVkZSBgQkxPQ0tfU09GVElSUWAuIFRoaXMgYWxsb3dzIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIGNvbnNpZGVyIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgc2FmZSBkdXJpbmcgQ1BVIGhvdHBsdWcgb2ZmbGluZSB3aGVuIGtzb2Z0aXJxZCBpcyBwYXJrZWQuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyBgY2FuX3N0b3BfaWRsZV90aWNrKClgJiMzOTtzIGNvbnRyb2wgZmxvdyBhbmQgdGhlcmVmb3JlIGFmZmVjdHMgd2FybmluZyBzdXBwcmVzc2lvbi4KCkp1c3QgYSBkb3VibGUtY2hlY2sgb24gdGhlc2UgY29uZmlncy4gYE5PX0haX0lETEVgIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCB3aXRoIGBOT19IWmAuIGBIT1RQTFVHX0NQVWAgZW5hYmxlcyBDUFUgaG90cGx1Z2dpbmcsIGFuZCBgQkxPQ0tgIG9mIGNvdXJzZSBlbmFibGVzIHRoZSBibG9jayBsYXllciBhbmQgYEJMT0NLX1NPRlRJUlFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLgoKWWVwLCBldmVyeXRoaW5nIGxpbmVzIHVwIHBlcmZlY3RseS4gUmVhZHkgdG8gc3VibWl0IHRoaXMuIExldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOT19IWl9JRExFJiMzNDssCiAgICAmIzM0O0hPVFBMVUdfQ1BVJiMzNDssCiAgICAmIzM0O0JMT0NLJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwb3J0X2lkbGVfc29mdGlycSYjMzQ7LAogICAgJiMzNDtibGtfc29mdGlycV9jcHVfZGVhZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIEJMT0NLX1NPRlRJUlEgdG8gU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSywgd2hpY2ggYWx0ZXJzIGNvbnRyb2wgZmxvdyBpbiByZXBvcnRfaWRsZV9zb2Z0aXJxKCkgYW5kIGNhbl9zdG9wX2lkbGVfdGljaygpIHdoZW4gYSBDUFUgaXMgdGFrZW4gb2ZmbGluZSBkdXJpbmcgQ1BVIGhvdHBsdWcsIGVuc3VyaW5nIHBlbmRpbmcgYmxvY2sgc29mdGlycXMgYXJlIGlnbm9yZWQgcmF0aGVyIHRoYW4gdHJpZ2dlcmluZyB0aWNrLXN0b3Agd2FybmluZ3MgYmVmb3JlIGJsa19zb2Z0aXJxX2NwdV9kZWFkKCkgY2xlYW5zIHRoZW0gdXAuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05PX0haX0lETEUmIzM0OywKICAgICYjMzQ7SE9UUExVR19DUFUmIzM0OywKICAgICYjMzQ7QkxPQ0smIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBvcnRfaWRsZV9zb2Z0aXJxJiMzNDssCiAgICAmIzM0O2Jsa19zb2Z0aXJxX2NwdV9kZWFkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgQkxPQ0tfU09GVElSUSB0byBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLLCB3aGljaCBhbHRlcnMgY29udHJvbCBmbG93IGluIHJlcG9ydF9pZGxlX3NvZnRpcnEoKSBhbmQgY2FuX3N0b3BfaWRsZV90aWNrKCkgd2hlbiBhIENQVSBpcyB0YWtlbiBvZmZsaW5lIGR1cmluZyBDUFUgaG90cGx1ZywgZW5zdXJpbmcgcGVuZGluZyBibG9jayBzb2Z0aXJxcyBhcmUgaWdub3JlZCByYXRoZXIgdGhhbiB0cmlnZ2VyaW5nIHRpY2stc3RvcCB3YXJuaW5ncyBiZWZvcmUgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjbGVhbnMgdGhlbSB1cC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcblxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGNvbXBpbGUtdGltZSBiaXRtYXNrIGNvbnN0YW50IGZvciBzb2Z0aXJxIGhvdHBsdWcgaGFuZGxpbmcgbG9naWMuIEl0IGludHJvZHVjZXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgbm8gc3RydWN0IHBhZGRpbmcgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZTY3MGUzNzMwM2M3NTY0MWJkMWQ4YmUxYWEwNDI2NjRjYjczYjE1OQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDUgMTQ6NTg6MzQgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAppbmRleCAzYmY5NjlhZDhmZTA3Li41MmJiNjg0MDkwYzBkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKQEAgLTU3Myw5ICYjNDM7NTczLDExIEBAIGVudW0KICAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlCiAgKgogICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZQomIzQzOyAqCiYjNDM7ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzCiAgKi8KLSNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKElSUV9QT0xMX1NPRlRJUlEpIHxcCi0JCQkJICAgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKQomIzQzOyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcCiYjNDM7CQkJCSAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSkKIAogCiAvKiBtYXAgc29mdGlycSBpbmRleCB0byBzb2Z0aXJxIG5hbWUuIHVwZGF0ZSAmIzM5O3NvZnRpcnFfdG9fbmFtZSYjMzk7IGluCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNSAxNDo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTkxCgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMjkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBJbnRlcnJ1cHQgSGVhZGVyIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY2hhbmdlIHRvIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYC4gU3BlY2lmaWNhbGx5LCB0aGUgYWx0ZXJhdGlvbiBvZiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgQkxPQ0tfU09GVElSUWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoeSBgQkxPQ0tfU09GVElSUWAgaXMgYmVpbmcgaW5jbHVkZWQgYW5kIHdoYXQgdGhlIGZ1bmN0aW9uYWwgaW1wYWN0IGlzIG9mIHRoaXMgbW9kaWZpY2F0aW9uLgoKVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGUgYWRkaXRpb24gb2YgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlbW92YWwgb2YgdGhlIG1hc2sgZWxlbWVudCBmb3IgdGhlIGJsb2NrJiMzOTtzIHdvcmsgcXVldWUgbWlncmF0aW9uLiBNeSBhc3N1bXB0aW9uIGlzIHRoaXMgY2hhbmdlIGltcGFjdHMgdGhlIGJlaGF2aW9yIG9mIHNvZnQgaW50ZXJydXB0IGhhbmRsaW5nIGR1cmluZyBDUFUgaG90cGx1ZyBvcGVyYXRpb25zLiBTbywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0gbm93IGhhbmRsZXMgYmxvY2sgcmVxdWVzdHMgZHVyaW5nIENQVSByZW1vdmFsLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgdGhlIHVzZXMgb2YgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIHRoZSBjb2RlIGJhc2UuIEkmIzM5O2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZmlsZSB0byBjaGVjay4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIHJvdXRpbmVzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQWxzbywgSSBuZWVkIHRvIGtub3cgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGNydWNpYWwgdG8gaG93IGJsb2NrIHJlcXVlc3RzIGFyZSBub3cgaGFuZGxlZCBhZnRlciB0aGlzIGNoYW5nZS4gSSYjMzk7bGwgbG9vayBpbnRvIGl0cyBpbXBsZW1lbnRhdGlvbiB0byBzZWUgaG93IGl0ICYjMzQ7Y29tcGxldGVzIHRoZSByZW1haW5pbmcgcmVxdWVzdHMuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgdGhlIG5ldyBiZWhhdmlvciBoYXMgYW55IHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyBvciBwb3RlbnRpYWwgZm9yIHJlZ3Jlc3Npb25zLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGlzIHNhZmUuIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSByZWFzb25pbmcgZm9yIHRoaXMgY2hhbmdlIHRvIGNvcnJlY3RseSBhc3Nlc3MgaXRzIGltcGFjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXG4tLVxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzgtICovXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3OTojZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTgwLVx0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuLS1cbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDY4PXN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcbi0tXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA3Ny1cdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA3ODpcdFx0cGVuZGluZyBcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzktXHRcdGlmICghcGVuZGluZylcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzA4MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyB0aGVzZSB0aG91Z2h0czoKCioqRGl2aW5nIGludG8gdGhlIFRpY2sgU2NoZWR1bGVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIHRoaXMgc2NoZWR1bGluZyBpc3N1ZS4uLm15IGd1dCBzYXlzIHRoZSBwcm9ibGVtIGxpZXMgc29tZXdoZXJlIGluIHRoZSB0aWNrIHNjaGVkdWxlci4gSSBuZWVkIHRvIGdldCB0byB0aGUgY29yZSBvZiBob3cgaXQgbWFuYWdlcyB0aGUgdGltZXIgdGlja3MuIExldCYjMzk7cyBzZWUuLi4gdGhlIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgIGZpbGUgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEwNjguIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgbGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5ICp0aGVyZSogYmVmb3JlIEkganVtcCB0byBhbnkgY29uY2x1c2lvbnMuIFRpbWUgdG8gcm9sbCB1cCBteSBzbGVldmVzIGFuZCBnZXQgaW50byB0aGUgY29kZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtrZXJuZWwvdGltZS90aWNrLXNjaGVkLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEwNjA6XHQgKiBzaG91bGQgYmUgd2FpdGluZyBmb3Iga3NvZnRpcnFkIHRvIGhhbmRsZSBpdC4gVGhlcmVmb3JlIHdlIHNob3VsZG4mIzM5O3RcbjEwNjE6XHQgKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cbjEwNjI6XHQgKlxuMTA2MzpcdCAqIEhvd2V2ZXIgaWYgd2UgYXJlIGJldHdlZW4gQ1BVSFBfQVBfU01QQk9PVF9USFJFQURTIGFuZCBDUFVfVEVBUkRPV05fQ1BVIG9uIHRoZVxuMTA2NDpcdCAqIGNwdV9kb3duKCkgcHJvY2Vzcywgc29mdGlycXMgY2FuIHN0aWxsIGJlIHJhaXNlZCB3aGlsZSBrc29mdGlycWQgaXMgcGFya2VkLFxuMTA2NTpcdCAqIHRyaWdnZXJpbmcgdGhlIGNvZGUgYmVsb3csIHNpbmNlIHdha2VwX3NvZnRpcnFkKCkgaXMgaWdub3JlZC5cbjEwNjY6XHQgKlxuMTA2NzpcdCAqL1xuMTA2ODpcdHN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcbjEwNjk6XHR7XG4xMDcwOlx0XHRzdGF0aWMgaW50IHJhdGVsaW1pdDtcbjEwNzE6XHRcdHVuc2lnbmVkIGludCBwZW5kaW5nID0gbG9jYWxfc29mdGlycV9wZW5kaW5nKCk7XG4xMDcyOlx0XG4xMDczOlx0XHRpZiAobGlrZWx5KCFwZW5kaW5nKSlcbjEwNzQ6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA3NTpcdFxuMTA3NjpcdFx0LyogU29tZSBzb2Z0aXJxcyBjbGFpbSB0byBiZSBzYWZlIGFnYWluc3QgaG90cGx1ZyBhbmQga3NvZnRpcnFkIHBhcmtpbmcgKi9cbjEwNzc6XHRcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XG4xMDc4Olx0XHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcbjEwNzk6XHRcdFx0aWYgKCFwZW5kaW5nKVxuMTA4MDpcdFx0XHRcdHJldHVybiBmYWxzZTtcbjEwODE6XHRcdH1cbjEwODI6XHRcbjEwODM6XHRcdC8qIE9uIFJULCBzb2Z0aXJxIGhhbmRsaW5nIG1heSBiZSB3YWl0aW5nIG9uIHNvbWUgbG9jayAqL1xuMTA4NDpcdFx0aWYgKGxvY2FsX2JoX2Jsb2NrZWQoKSlcbjEwODU6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMTA4NjpcdFxuMTA4NzpcdFx0aWYgKHJhdGVsaW1pdCBcdTAwM2MgMTApIHtcbjEwODg6XHRcdFx0cHJfd2FybihcJiMzNDtOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXG5cJiMzNDssXG4xMDg5Olx0XHRcdFx0cGVuZGluZyk7XG4xMDkwOlx0XHRcdHJhdGVsaW1pdCYjNDM7JiM0Mzs7XG4xMDkxOlx0XHR9XG4xMDkyOlx0XG4xMDkzOlx0XHRyZXR1cm4gdHJ1ZTtcbjEwOTQ6XHR9XG4xMDk1Olx0XG4xMDk2Olx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcbjEwOTc6XHR7XG4xMDk4Olx0XHRXQVJOX09OX09OQ0UoY3B1X2lzX29mZmxpbmUoY3B1KSk7XG4xMDk5Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA1IDE0OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4OTUKCQkJCQkJCW91dHB1dDogMTkyCgkJCQkJCQl0aG91Z2h0czogMzYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFNvZnRJUlFfSE9UUExVR19TQUZFX01BU0sgTW9kaWZpY2F0aW9uKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHdlJiMzOTtyZSBhZGp1c3RpbmcgdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBiaXRtYXNrIHdpdGhpbiB0aGUgTk9IWiB0aWNrIGNvZGUgc3BlY2lmaWNhbGx5IGZvciBzY2VuYXJpb3MgaW52b2x2aW5nIENQVSBob3RwbHVnLCBwYXJ0aWN1bGFybHkgd2hlbiBga3NvZnRpcnFkYCBpcyBwYXJrZWQuIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBpcyB0aGUgZnVuY3Rpb24gaW4gcXVlc3Rpb24uIFRoZSBnb2FsIGlzIHRvIGFjY29tbW9kYXRlIHRoZSBgQkxPQ0tfU09GVElSUWAgc29mdGlycS4gQnkgYWRkaW5nIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIHRoaXMgbWFzaywgd2UmIzM5O3JlIHN1cHByZXNzaW5nIGEgd2FybmluZy4gU3BlY2lmaWNhbGx5LCB0aGUgd2FybmluZyBgcHJfd2FybigmIzM0O05PSFogdGljay1zdG9wIGVycm9yOiBsb2NhbCBzb2Z0aXJxIHdvcmsgaXMgcGVuZGluZywgaGFuZGxlciAjJTAyeCEhIVxuJiMzNDssIHBlbmRpbmcpO2AgaXMgYmVpbmcgc3VwcHJlc3NlZCBmb3IgdGhlIGBCTE9DS19TT0ZUSVJRYCBjYXNlLiBUaGUgcmVhc29uIHRoaXMgaXMgc2FmZSBpcyBiZWNhdXNlIGBibGtfc29mdGlycV9jcHVfZGVhZCgpYCBoYW5kbGVzIGNvbXBsZXRpb24gb2YgYW55IHJlbWFpbmluZyBibG9jayBzb2Z0aXJxIHJlcXVlc3RzIHdoZW4gYSBDUFUgZ29lcyBvZmZsaW5lLgoKTm93LCBsZXQmIzM5O3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIG1lbW9yeSBzYWZldHkgY2hlY2tzLiBXZSYjMzk7cmUgbW9kaWZ5aW5nIGEgbWFjcm8gZGVmaW5pdGlvbiB3aXRoaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLiBUaGlzIGlzIGEgaGVhZGVyIGZpbGUgdXBkYXRlLCBhZmZlY3Rpbmcgb25seSB0aGUgQ1BVIGhvdHBsdWcgYW5kIHRpY2sgc3RvcHBpbmcgbG9naWMgcmVsYXRlZCB0byBpZGxlIHNvZnRpcnEgcmVwb3J0aW5nLgoKMS4gICoqTm8gS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZS4qKiBXZSYjMzk7cmUgbm90IGV4cG9zaW5nIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZTsgdGhlcmVmb3JlLCB0aGUgdXN1YWwgcGFkZGluZyBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvbmNlcm5zIGRvbiYjMzk7dCBhcHBseS4KMi4gICoqTm8gQ29uZGl0aW9uYWwgTG9naWMgd2l0aCBVbmluaXRpYWxpemVkIFZhcmlhYmxlcy4qKiBUaGVyZSYjMzk7cyBubyBuZXcgY29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgcmVsaWVzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIG9yIHN0cnVjdCBmaWVsZHMsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLgozLiAgKipObyBDb21wbGV4IERhdGEgU3RydWN0dXJlIEluaXRpYWxpemF0aW9uLioqIFRoaXMgaXNuJiMzOTt0IGFib3V0IGFsbG9jYXRpbmcgb3IgaW5pdGlhbGl6aW5nIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIGEgcHJvYmxlbS4gVGhpcyBpcyBhIHNpbXBsZSBiaXRtYXNrIHVwZGF0ZS4KNC4gICoqTm8gQm91bmRzIENoZWNrIFZ1bG5lcmFiaWxpdGllcy4qKiBXZSBhcmVuJiMzOTt0IGRvaW5nIGFueSBib3VuZHMgY2hlY2tzIG9yIG1hbmlwdWxhdGlvbiBvZiBsZW5ndGhzIGluIGEgd2F5IHRoYXQgY291bGQgbGVhZCB0byBhY2Nlc3NpbmcgdW5pbml0aWFsaXplZCBidWZmZXIgYnl0ZXMuCgpTaW5jZSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG1hY3JvIGRlZmluaXRpb24gdXBkYXRlLCB3aXRoIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBhbmQgbm8gcGFkZGluZyByaXNrcywgSSBkb24mIzM5O3Qgc2VlIGFueSBpbW1lZGlhdGUgcmVhc29uIGZvciBjb25jZXJuLiBLTVNBTiBpc24mIzM5O3QgbmVlZGVkIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDUgMTQ6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxuXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIENQVSBob3RwbHVnIHRlYXJkb3duIGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6cmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBwcmV2ZW50IGZhbHNlLXBvc2l0aXZlIE5PSFogdGljay1zdG9wIHdhcm5pbmdzIGZvciBibG9jayBzb2Z0aXJxcyBoYW5kbGVkIGJ5IGBibGtfc29mdGlycV9jcHVfZGVhZCgpYC4gXG5cblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBjb21waWxlLXRpbWUgYml0bWFzayBjb25zdGFudCBmb3Igc29mdGlycSBob3RwbHVnIGhhbmRsaW5nIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6MzQuODYzNDE1NjI5WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjUxMjI0NzAyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTk9fSFpfSURMRVwiLFxuICAgIFwiSE9UUExVR19DUFVcIixcbiAgICBcIkJMT0NLXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwb3J0X2lkbGVfc29mdGlycVwiLFxuICAgIFwiYmxrX3NvZnRpcnFfY3B1X2RlYWRcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNC44NjM0MjIwNThaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNTQxNTE2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFNhdCBTZXAgNSAxNDo1ODozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxcbmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcXG5AQCAtNTczLDkgKzU3MywxMSBAQCBlbnVtXFxuICAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlXFxuICAqXFxuICAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcXG4rICpcXG4rICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXFxuICAqL1xcbi0jZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8XFxcXFxcbi1cXHRcXHRcXHRcXHQgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXFxuKyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxcXFxuK1xcdFxcdFxcdFxcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcXG4gXFxuIFxcbiAvKiBtYXAgc29mdGlycSBpbmRleCB0byBzb2Z0aXJxIG5hbWUuIHVwZGF0ZSAnc29mdGlycV90b19uYW1lJyBpblxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNS4yOTk2Nzk2NTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ2MzcxMDk1MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGU2NzBlMzczMDNjNzU2NDFiZDFkOGJlMWFhMDQyNjY0Y2I3M2IxNTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCA1IDE0OjU4OjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbmluZGV4IDNiZjk2OWFkOGZlMDcuLjUyYmI2ODQwOTBjMGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oXG5AQCAtNTczLDkgKzU3MywxMSBAQCBlbnVtXG4gICogXyBJUlFfUE9MTDogaXJxX3BvbGxfY3B1X2RlYWQoKSBtaWdyYXRlcyB0aGUgcXVldWVcbiAgKlxuICAqIF8gKEhSKVRJTUVSX1NPRlRJUlE6IChocil0aW1lcnNfZGVhZF9jcHUoKSBtaWdyYXRlcyB0aGUgcXVldWVcbisgKlxuKyAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xuICAqL1xuLSNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKElSUV9QT0xMX1NPRlRJUlEpIHxcXFxuLVx0XHRcdFx0ICAgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuKyNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxuK1x0XHRcdFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxuIFxuIFxuIC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICdzb2Z0aXJxX3RvX25hbWUnIGluXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozNS4yOTk2ODExOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0Njg2ODUwMjM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIEtlcm5lbCBJbnRlcnJ1cHQgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQncyB0b3VjaGluZyBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIExvb2tzIGxpa2UgYSBmYWlybHkgc3RyYWlnaHRmb3J3YXJkIG1vZGlmaWNhdGlvbiB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AuIEkgcmVjb2duaXplIHRoYXQgbWFjcm87IGl0J3MgdGhlIGJpdG1hc2sgdXNlZCB0byBpZGVudGlmeSBzb2Z0aXJxcyB0aGF0IGFyZSBzYWZlIHRvIG1pZ3JhdGUgZHVyaW5nIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFRoZSBkaWZmIGlzIHByZXR0eSBjbGVhcjogaXQncyBhZGRpbmcgYEJMT0NLX1NPRlRJUlFgIHRvIHRoZSBleGlzdGluZyBtYXNrIGFuZCByZW1vdmluZyBgUkNVX1NPRlRJUlFgLiBJbnRlcmVzdGluZy5cblxuU28sIHRoZSBpbnRlbnQgaGVyZSBpcyB0byBpbmNsdWRlIHRoZSBibG9jayBzb2Z0aXJxIGluIHRoZSBsaXN0IG9mIG9uZXMgdGhhdCB0aGUga2VybmVsIGNvbnNpZGVycyBzYWZlIGZvciBtaWdyYXRpb24gZHVyaW5nIGhvdHBsdWcuIFRoaXMgaW1wbGllcyB0aGF0IHdoYXRldmVyIHdvcmsgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgIGlzIGRvaW5nLCBpdCdzIG5vdyBkZWVtZWQgdG8gYmUgc2FmZSB0byBtb3ZlIHRvIGEgbmV3IENQVSB3aGVuIGFuIG9sZCBvbmUgaXMgZ29pbmcgYXdheS4gQ29udmVyc2VseSwgdGhlIHJlbW92YWwgb2YgYFJDVV9TT0ZUSVJRYCBtZWFucyB0aGF0IGl0J3MgKm5vIGxvbmdlciogY29uc2lkZXJlZCBzYWZlIHRvIG1pZ3JhdGUuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB3aHkgdGhhdCBkZWNpc2lvbiB3YXMgbWFkZS4gSSBuZWVkIG1vcmUgY29udGV4dC5cblxuQmVmb3JlIEkgZHJhdyBhbnkgY29uY2x1c2lvbnMsIEknbGwgcnVuIGBncmVwcGVyYCBvbiBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgdG8gZ2V0IGEgYmV0dGVyIHBpY3R1cmUgb2YgaG93IGl0J3MgYWN0dWFsbHkgKnVzZWQqIGluIHRoZSBrZXJuZWwuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGFuZCB3aGV0aGVyIHRoaXMgbWFrZXMgc2Vuc2UuIFRpbWUgdG8gc2VlIHdoZXJlIHRoaXMgbWFzayBpcyByZWZlcmVuY2VkIGFuZCB3aGF0IGNvZGUgaXMgY2hlY2tpbmcgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NzksIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODozOS45ODY1MzU0MTVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ2ODgwOTM3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc4LSAqL1xcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg6NTc5OiNkZWZpbmUgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSyAoQklUKFRJTUVSX1NPRlRJUlEpIHwgQklUKEJMT0NLX1NPRlRJUlEpIHxcXFxcXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01ODAtXFx0XFx0XFx0XFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNjg9c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNzctXFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA3ODpcXHRcXHRwZW5kaW5nIFxcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc5LVxcdFxcdGlmICghcGVuZGluZylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6NDIuNDU1MzUxODlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzYzMzA5NjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggdGhpcyBhbmFseXNpczpcblxuKipJbnZlc3RpZ2F0aW5nIEtlcm5lbCBUaWNrIFNjaGVkdWxpbmcgYW5kIEJsb2NrIFNvZnRJUlEgQmVoYXZpb3IqKlxuXG5BbHJpZ2h0LCBteSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aGUga2VybmVsJ3MgdGljayBzY2hlZHVsaW5nIG1lY2hhbmlzbSBhbmQgdGhlIGhhbmRsaW5nIG9mIGJsb2NrIEkvTyBzb2Z0aXJxcywgcGFydGljdWxhcmx5IGluIHRoZSBjb250ZXh0IG9mIENQVSBob3RwbHVnIGV2ZW50cy4gSSB3YW50IHRvIHplcm8gaW4gb24gaG93IHRoZXNlIGNvbXBvbmVudHMgYmVoYXZlIHdoZW4gYSBDUFUgaXMgYnJvdWdodCBvbmxpbmUsIGdvZXMgaWRsZSwgb3IgaXMgdGFrZW4gb2ZmbGluZS4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGluc3BlY3QgdGhlIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgIGZpbGUsIGFyb3VuZCBsaW5lIDEwNjgsIHdoaWNoIGlzIG9mdGVuIGEgY3JpdGljYWwgYXJlYSBmb3IgdGljay1yZWxhdGVkIGxvZ2ljLiBJIGV4cGVjdCB0aGlzIHdpbGwgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB1bmRlcnN0YW5kaW5nIHdoZXJlIHRoZSBjb2RlIHBhdGggaW50ZXJzZWN0cyB3aXRoIHRoZSBtYW5hZ2VtZW50IG9mIHRoZSB0aW1lcnMgaW52b2x2ZWQgaW4gdGljayBzY2hlZHVsaW5nLiBGcm9tIHRoZXJlLCBpdCdzIGEgc2hvcnQganVtcCB0byBjb25zaWRlciB0aGUgYmVoYXZpb3Igb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBmdW5jdGlvbiBhbmQgaXRzIGltcGFjdCBvbiB0aGUgYEJMT0NLX1NPRlRJUlFgLiBJIHdhbnQgdG8gc2VlIGlmIHRoZSBibG9jayBsYXllcidzIHNvZnRpcnEgaGFuZGxpbmcgaXMgcmVzaWxpZW50IHRvIGNoYW5nZXMgaW4gQ1BVIHN0YXRlLiBBcmUgdGhlcmUgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBvdGhlciBpc3N1ZXMgd2hlbiBhIENQVSBpcyBhYnJ1cHRseSByZW1vdmVkIG9yIGlkbGVkPyBJcyB0aGUgc29mdGlycSBwcm9wZXJseSBtaWdyYXRlZCBvciBkaXNhYmxlZCwgb3IgZG9lcyBpdCBsZWF2ZSBhbiBvcGVuIGxvb3A/IEkgbmVlZCB0byBhbmFseXplIGhvdyB0aGUgc29mdGlycSBpcyByZWdpc3RlcmVkLCB1bnJlZ2lzdGVyZWQsIGFuZCBoYW5kbGVkIGluIHRoZSBwcmVzZW5jZSBvZiBDUFUgaG90cGx1ZyBldmVudHMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgc3lzdGVtJ3Mgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBpbiBhIGR5bmFtaWMgZW52aXJvbm1lbnQuIEknbGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgc2NoZWR1bGVyLCB0aGUgYmxvY2sgbGF5ZXIsIGFuZCB0aGUgaW50ZXJydXB0IGhhbmRsaW5nIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5MDEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0NS4yMTg2NjM1MzNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDAxNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwia2VybmVsL3RpbWUvdGljay1zY2hlZC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEwNjAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEwNjA6XFx0ICogc2hvdWxkIGJlIHdhaXRpbmcgZm9yIGtzb2Z0aXJxZCB0byBoYW5kbGUgaXQuIFRoZXJlZm9yZSB3ZSBzaG91bGRuJ3RcXG4xMDYxOlxcdCAqIHJlYWNoIHRoaXMgY29kZSBkdWUgdG8gdGhlIG5lZWRfcmVzY2hlZCgpIGVhcmx5IGNoZWNrIGluIGNhbl9zdG9wX2lkbGVfdGljaygpLlxcbjEwNjI6XFx0ICpcXG4xMDYzOlxcdCAqIEhvd2V2ZXIgaWYgd2UgYXJlIGJldHdlZW4gQ1BVSFBfQVBfU01QQk9PVF9USFJFQURTIGFuZCBDUFVfVEVBUkRPV05fQ1BVIG9uIHRoZVxcbjEwNjQ6XFx0ICogY3B1X2Rvd24oKSBwcm9jZXNzLCBzb2Z0aXJxcyBjYW4gc3RpbGwgYmUgcmFpc2VkIHdoaWxlIGtzb2Z0aXJxZCBpcyBwYXJrZWQsXFxuMTA2NTpcXHQgKiB0cmlnZ2VyaW5nIHRoZSBjb2RlIGJlbG93LCBzaW5jZSB3YWtlcF9zb2Z0aXJxZCgpIGlzIGlnbm9yZWQuXFxuMTA2NjpcXHQgKlxcbjEwNjc6XFx0ICovXFxuMTA2ODpcXHRzdGF0aWMgYm9vbCByZXBvcnRfaWRsZV9zb2Z0aXJxKHZvaWQpXFxuMTA2OTpcXHR7XFxuMTA3MDpcXHRcXHRzdGF0aWMgaW50IHJhdGVsaW1pdDtcXG4xMDcxOlxcdFxcdHVuc2lnbmVkIGludCBwZW5kaW5nID0gbG9jYWxfc29mdGlycV9wZW5kaW5nKCk7XFxuMTA3MjpcXHRcXG4xMDczOlxcdFxcdGlmIChsaWtlbHkoIXBlbmRpbmcpKVxcbjEwNzQ6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwNzU6XFx0XFxuMTA3NjpcXHRcXHQvKiBTb21lIHNvZnRpcnFzIGNsYWltIHRvIGJlIHNhZmUgYWdhaW5zdCBob3RwbHVnIGFuZCBrc29mdGlycWQgcGFya2luZyAqL1xcbjEwNzc6XFx0XFx0aWYgKCFjcHVfYWN0aXZlKHNtcF9wcm9jZXNzb3JfaWQoKSkpIHtcXG4xMDc4OlxcdFxcdFxcdHBlbmRpbmcgXFx1MDAyNj0gflNPRlRJUlFfSE9UUExVR19TQUZFX01BU0s7XFxuMTA3OTpcXHRcXHRcXHRpZiAoIXBlbmRpbmcpXFxuMTA4MDpcXHRcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA4MTpcXHRcXHR9XFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdC8qIE9uIFJULCBzb2Z0aXJxIGhhbmRsaW5nIG1heSBiZSB3YWl0aW5nIG9uIHNvbWUgbG9jayAqL1xcbjEwODQ6XFx0XFx0aWYgKGxvY2FsX2JoX2Jsb2NrZWQoKSlcXG4xMDg1OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDg2OlxcdFxcbjEwODc6XFx0XFx0aWYgKHJhdGVsaW1pdCBcXHUwMDNjIDEwKSB7XFxuMTA4ODpcXHRcXHRcXHRwcl93YXJuKFxcXCJOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXFxcblxcXCIsXFxuMTA4OTpcXHRcXHRcXHRcXHRwZW5kaW5nKTtcXG4xMDkwOlxcdFxcdFxcdHJhdGVsaW1pdCsrO1xcbjEwOTE6XFx0XFx0fVxcbjEwOTI6XFx0XFxuMTA5MzpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMDk0OlxcdH1cXG4xMDk1OlxcdFxcbjEwOTY6XFx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcXG4xMDk5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0NS4yMTg3NjU0OTNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTkxMDg2MDg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgSWRsZSBTb2Z0SVJRIEJlaGF2aW9yKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgaW50byBob3cgdGhlIHN5c3RlbSBoYW5kbGVzIHNvZnQgaW50ZXJydXB0cyB3aGVuIGl0J3MgaWRsZS4gU3BlY2lmaWNhbGx5LCBJJ20gZm9jdXNpbmcgb24gdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBmdW5jdGlvbi4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIGdldHMgY2FsbGVkIHdoZW4gdGhlIHN5c3RlbSBpcyB0cnlpbmcgdG8gZGV0ZXJtaW5lIGlmIGl0IGNhbiBzdG9wIHRoZSBpZGxlIHRpY2ssIG9yIHNvbWV0aGluZyBzaW1pbGFyLCB3aXRoaW4gdGhlIGB0aWNrX25vaHpgIGlkbGUgcGF0aC4gVGhhdCdzIHRoZSBlbnRyeSBwb2ludC4gTm93LCBsZXQgbWUgc2VlLi4uIEkgcmVjYWxsIGEgY29tbWVudCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgcmVmZXJlbmNpbmcgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSdkIGJldHRlciBzZWFyY2ggZm9yIHRoYXQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZGlmZmVyZW50IGludGVycnVwdCBjb250ZXh0cy4gSG9wZWZ1bGx5IHRoYXQgc2hlZHMgbGlnaHQgb24gd2hhdCdzIGdvaW5nIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0OTM3LCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo0Ny40MDk4NTU4NjlaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQwODE3ODEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJibGtfc29mdGlycV9jcHVfZGVhZFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJibG9jay9ibGstbXEuYz0xMjI1PXN0YXRpYyBfX2xhdGVudF9lbnRyb3B5IHZvaWQgYmxrX2RvbmVfc29mdGlycSh2b2lkKVxcbi0tXFxuYmxvY2svYmxrLW1xLmMtMTIyOS1cXG5ibG9jay9ibGstbXEuYzoxMjMwOnN0YXRpYyBpbnQgYmxrX3NvZnRpcnFfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG5ibG9jay9ibGstbXEuYy0xMjMxLXtcXG4tLVxcbmJsb2NrL2Jsay1tcS5jPTUyODE9c3RhdGljIGludCBfX2luaXQgYmxrX21xX2luaXQodm9pZClcXG4tLVxcbmJsb2NrL2Jsay1tcS5jLTUyOTMtXFx0XFx0XFx0XFx0ICBcXFwiYmxvY2svc29mdGlycTpkZWFkXFxcIiwgTlVMTCxcXG5ibG9jay9ibGstbXEuYzo1Mjk0OlxcdFxcdFxcdFxcdCAgYmxrX3NvZnRpcnFfY3B1X2RlYWQpO1xcbmJsb2NrL2Jsay1tcS5jLTUyOTUtXFx0Y3B1aHBfc2V0dXBfc3RhdGVfbXVsdGkoQ1BVSFBfQkxLX01RX0RFQUQsIFxcXCJibG9jay9tcTpkZWFkXFxcIiwgTlVMTCxcXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0Lmg9NTUwPWVudW1cXG4tLVxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTc2LSAqXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaDo1Nzc6ICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXFxuaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaC01NzgtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU4OjQ5LjgxODAzOTU3OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU3MjMwODM1OTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIEltcGxpY2F0aW9ucyBvZiB0aGUgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHF1ZXN0aW9uIHdhcywgd2hhdCBleGFjdGx5IGRvZXMgYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGRvPyBUaGUgY29kZSBzaG93cyB0aGF0IGl0IGVzc2VudGlhbGx5IGlzc3VlcyBhIHdhcm5pbmcgdmlhIGBwcl93YXJuYCBpZiB0aGVyZSBhcmUgcGVuZGluZyBzb2Z0aXJxcywgYW5kIHRoZW4gaXQgcmV0dXJucyBgdHJ1ZWAsIHdoaWNoIGhhcyB0aGUgZWZmZWN0IG9mIHByZXZlbnRpbmcgdGhlIHRpY2sgZnJvbSBzdG9wcGluZyBhbmQgdGh1cyBzdXBwcmVzc2luZyBhIHJlbGF0ZWQgdGljay1zdG9wIGVycm9yLlxuXG5UaGUga2V5IG9ic2VydmF0aW9uIGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpcyBzZW5zaXRpdmUgZHVyaW5nIENQVSBob3QtdW5wbHVnIG9wZXJhdGlvbnMsIHBhcnRpY3VsYXJseSB3aGVuIGAhY3B1X2FjdGl2ZSgpYCBiZWNvbWVzIHRydWUuIEhpc3RvcmljYWxseSwgaWYgYEJMT0NLX1NPRlRJUlFgIHdhcyBwZW5kaW5nIGR1cmluZyB0aGlzIHN0YXRlLCBgcmVwb3J0X2lkbGVfc29mdGlycWAgd291bGQgdHJpZ2dlciB0aGUgd2FybmluZyBhbmQgcmV0dXJuIGB0cnVlYCwgaW1wYWN0aW5nIHRoZSBgY2FuX3N0b3BfaWRsZV90aWNrYCBkZWNpc2lvbi5cblxuVGhpcyBwYXRjaCwgaG93ZXZlciwgbWFza3Mgb3V0IGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCAod2hpY2ggZW5jb21wYXNzZXMgYEJMT0NLX1NPRlRJUlFgLCBhbmQgcG90ZW50aWFsbHkgb3RoZXIgXCJzYWZlXCIgc29mdGlycXMpIGZyb20gYHBlbmRpbmdgIHdpdGhpbiB0aGUgYCFjcHVfYWN0aXZlKClgIGNvbmRpdGlvbi4gIFRoaXMgbWVhbnMgdGhhdCBpZiAqb25seSogdGhvc2UgXCJzYWZlXCIgc29mdGlycXMgYXJlIHBlbmRpbmcsIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCB3aWxsIG5vdyByZXR1cm4gYGZhbHNlYCBhbmQgc3VwcHJlc3MgdGhlIHdhcm5pbmcuXG5cbk5vdywgdGhlIHJlYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGNoYW5nZSBpcyBmdXp6aW5nLXJlbGV2YW50LiAgSSBuZWVkIHRvIGdvIHRocm91Z2ggdGhlIGNoZWNrbGlzdCBjYXJlZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgdGhpcyBmYWxscyBpbnRvIGEgbmVnYXRpdmUgY3JpdGVyaW9uIC0gdGhhdCBpcywgaWYgaXQncyAqbm90KiB3b3J0aHkgb2YgZnV6emluZy5cblxuTXkgcHJpbWFyeSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBjaGFuZ2UgYWZmZWN0cyBjb21waWxlZCBDIGxvZ2ljIGFuZCBjb250cm9sIGZsb3cuIEFuZCB0byBhc2NlcnRhaW4gdGhhdCwgSSBuZWVkIHRvIHJlZmVyIGJhY2sgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhLlxuXG5TcGVjaWZpY2FsbHksIEknbSB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiB0aGlzIGNoYW5nZSBpcyBhIHB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgb3IgdHJhY2Vwb2ludHMgY2hhbmdlLCBvciBhIGNoYW5nZSB3aGljaCBhbHRlcnMgdGhlIGNvbnRyb2wgZmxvdyBvZiB0aGUga2VybmVsLlxuXG5Mb29raW5nIGF0IHRoZSBjb2RlOiAgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGlzIGRpcmVjdGx5IHVzZWQgaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzogcmVwb3J0X2lkbGVfc29mdGlycSgpYC4gRnVydGhlcm1vcmUsIHdpdGhpbiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYDpcblxuYGBgY1xuXHRpZiAoIWNwdV9hY3RpdmUoc21wX3Byb2Nlc3Nvcl9pZCgpKSkge1xuXHRcdHBlbmRpbmcgXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcblx0XHRpZiAoIXBlbmRpbmcpXG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cbmBgYFxuXG5UaGlzIGlzICpkZWZpbml0ZWx5KiBhbHRlcmluZyBjb250cm9sIGZsb3cuICBUaGUgbWFza2luZyBvcGVyYXRpb24gZGlyZWN0bHkgYWZmZWN0cyB0aGUgcmV0dXJuIHZhbHVlIG9mIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgLCBhbmQgdGhlcmVmb3JlIHRoZSBzdWJzZXF1ZW50IGJlaGF2aW91ciBvZiBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiAgQWxzbywgYENQVSBvZmZsaW5lIC8gaG90cGx1ZyB2aWEgc3lzZnMgKGAvc3lzL2RldmljZXMvc3lzdGVtL2NwdS9jcHUqL29ubGluZWApIG9yIENQVSBpZGxlIHRpY2sgY2FuIGJlIGV4ZXJjaXNlZCBpbiBRRU1VIC8gc3l6a2FsbGVyYC4gSSBjYW4gcmVhc29uYWJseSB0ZXN0IHRoZSBzY2VuYXJpby4gU28sIHllcywgaXQncyBhIGNoYW5nZSB0byBjb21waWxlZCBDIGxvZ2ljIGFuZCBjb250cm9sIGZsb3cuXG5cblRoZXJlZm9yZSwgYmVjYXVzZSB0aGlzIGFsdGVycyBjb250cm9sIGZsb3cgYW5kIGlzIHBvdGVudGlhbGx5IGV4ZXJjaXNlZCB2aWEgUUVNVSBvciBzeXprYWxsZXIsIGl0J3MgcmVsZXZhbnQgdG8gZnV6emluZyFcblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1ODo1NS41NDExMjUzMzFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA4ODAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpY2stc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDk1LFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDk1OlxcdFxcbjEwOTY6XFx0c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG4xMDk3OlxcdHtcXG4xMDk4OlxcdFxcdFdBUk5fT05fT05DRShjcHVfaXNfb2ZmbGluZShjcHUpKTtcXG4xMDk5OlxcdFxcbjExMDA6XFx0XFx0aWYgKHVubGlrZWx5KCF0aWNrX3NjaGVkX2ZsYWdfdGVzdCh0cywgVFNfRkxBR19OT0haKSkpXFxuMTEwMTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwMjpcXHRcXG4xMTAzOlxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSlcXG4xMTA0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTA1OlxcdFxcbjExMDY6XFx0XFx0aWYgKHVubGlrZWx5KHJlcG9ydF9pZGxlX3NvZnRpcnEoKSkpXFxuMTEwNzpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTEwODpcXHRcXG4xMTA5OlxcdFxcdGlmICh0aWNrX25vaHpfZnVsbF9lbmFibGVkKCkpIHtcXG4xMTEwOlxcdFxcdFxcdGludCB0aWNrX2NwdSA9IFJFQURfT05DRSh0aWNrX2RvX3RpbWVyX2NwdSk7XFxuMTExMTpcXHRcXG4xMTEyOlxcdFxcdFxcdC8qXFxuMTExMzpcXHRcXHRcXHQgKiBLZWVwIHRoZSB0aWNrIGFsaXZlIHRvIGd1YXJhbnRlZSB0aW1la2VlcGluZyBwcm9ncmVzc2lvblxcbjExMTQ6XFx0XFx0XFx0ICogaWYgdGhlcmUgYXJlIGZ1bGwgZHludGlja3MgQ1BVcyBhcm91bmRcXG4xMTE1OlxcdFxcdFxcdCAqL1xcbjExMTY6XFx0XFx0XFx0aWYgKHRpY2tfY3B1ID09IGNwdSlcXG4xMTE3OlxcdFxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMTE4OlxcdFxcbjExMTk6XFx0XFx0XFx0LyogU2hvdWxkIG5vdCBoYXBwZW4gZm9yIG5vaHotZnVsbCAqL1xcbjExMjA6XFx0XFx0XFx0aWYgKFdBUk5fT05fT05DRSh0aWNrX2NwdSA9PSBUSUNLX0RPX1RJTUVSX05PTkUpKVxcbjExMjE6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjExMjI6XFx0XFx0fVxcbjExMjM6XFx0XFxuMTEyNDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4xMTI1OlxcdH1cXG4xMTI2OlxcdFxcbjExMjc6XFx0LyoqXFxuMTEyODpcXHQgKiB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2sgLSBzdG9wIHRoZSBpZGxlIHRpY2sgZnJvbSB0aGUgaWRsZSB0YXNrXFxuMTEyOTpcXHQgKlxcbjExMzA6XFx0ICogV2hlbiB0aGUgbmV4dCBldmVudCBpcyBtb3JlIHRoYW4gYSB0aWNrIGludG8gdGhlIGZ1dHVyZSwgc3RvcCB0aGUgaWRsZSB0aWNrXFxuMTEzMTpcXHQgKi9cXG4xMTMyOlxcdHZvaWQgdGlja19ub2h6X2lkbGVfc3RvcF90aWNrKHZvaWQpXFxuMTEzMzpcXHR7XFxuMTEzNDpcXHRcXHRzdHJ1Y3QgdGlja19zY2hlZCAqdHMgPSB0aGlzX2NwdV9wdHIoXFx1MDAyNnRpY2tfY3B1X3NjaGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTg6NTUuNTQxMjM2MTUxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5Mzg2ODk3MTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbnRlcmFjdGlvbiBCZXR3ZWVuIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGFuZCBJZGxlIFRpY2sgU3RvcHBpbmcqKlxuXG5Pa2F5LCBzbyBsZXQncyBicmVhayB0aGlzIGRvd24uIEl0IGxvb2tzIGxpa2UgdGhlIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGZ1bmN0aW9uIGlzIHRoZSBnYXRla2VlcGVyIGZvciBgY2FuX3N0b3BfaWRsZV90aWNrKClgLiBJZiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCByZXR1cm5zIGB0cnVlYCwgdGhlbiB3ZSAqY2Fubm90KiBzdG9wIHRoZSBpZGxlIHRpY2ssIHdoaWNoIG1lYW5zIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgd2lsbCByZXR1cm4gYGZhbHNlYC4gQ29udmVyc2VseSwgd2hlbiBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCByZXR1cm5zIGBmYWxzZWAsIGBjYW5fc3RvcF9pZGxlX3RpY2soKWAgaXMgYWxsb3dlZCB0byBwcm9jZWVkIGFuZCBwb3RlbnRpYWxseSBzdG9wIHRoZSB0aWNrLiBUaGF0IGNvbnRyb2wgZmxvdyBtYWtlcyBzZW5zZSAtIGl0IHNlZW1zIGxpa2UgdGhpcyBpbnRlcmFjdGlvbiBpcyBtb3N0IHJlbGV2YW50IHdoZW4gYEJMT0NLX1NPRlRJUlFgIGlzIHBlbmRpbmcsIHBhcnRpY3VsYXJseSBkdXJpbmcgQ1BVIGhvdHBsdWcgb3Igd2hlbiB3ZSdyZSB0cnlpbmcgdG8gc2F2ZSBwb3dlciB0aHJvdWdoIGlkbGUgc3RhdGUgdHJhbnNpdGlvbnMuXG5cblRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gbm93IGlzLCB3aGF0IHBhcnQgb2YgdGhlIGtlcm5lbCBpcyBhZmZlY3RlZCBoZXJlPyBMZXQgbWUgcXVpY2tseSBjaGVjayB0aGUgY3JpdGVyaWEgZm9yIHdoZW4gYSBwYXRjaCBpcyBcIldvcnRoRnV6emluZ1wiLiBBaCwgU2VjdGlvbiAzISBJdCBzdGF0ZXMgdGhhdCBjaGFuZ2VzIGluICpjb3JlIHN1YnN5c3RlbXMqIGFyZSBjcml0aWNhbCwgYW5kIHRoaXMgaXMgY2xlYXJseSByZWxldmFudCB0byB0aW1la2VlcGluZywgc29mdGlycSBoYW5kbGluZywgYW5kIHRoZSBzY2hlZHVsZXIuIFRob3NlIGFyZSBhbGwgY29yZSBzdWJzeXN0ZW1zISBJZiB0aGlzIGFmZmVjdHMgdGhhdCBjb2RlLCBpdCdzIGRlZmluaXRlbHkgYSBjYW5kaWRhdGUgZm9yIGRlZXBlciBhbmFseXNpcy5cblxuTm93LCBJIG5lZWQgdG8gc2VlIHdoYXQgY29uZmlndXJhdGlvbiBvcHRpb25zIG1pZ2h0IGNvbnRyb2wgdGhlIGNvbXBpbGF0aW9uIG9mIHRpY2stc2NoZWQgb3Igbm9oei1yZWxhdGVkIGNvZGUuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSBga2VybmVsL3RpbWUvS2NvbmZpZ2AgYW5kIGBrZXJuZWwvdGltZS9NYWtlZmlsZWAgZmlsZXMuIFRob3NlIGFyZSB0aGUgYmVzdCBwbGFjZXMgdG8gZmluZCBvdXQgd2hhdCBLY29uZmlncyBhcmUgcmVsZXZhbnQgYW5kIHBvdGVudGlhbGx5IGVuYWJsZSBvciBkaXNhYmxlIHRoZSBpbnZvbHZlZCBjb2RlLiBVbmRlcnN0YW5kaW5nIHdoaWNoIGNvbmZpZ3MgYXJlIHVzZWQgd2lsbCBoZWxwIG1lIGlzb2xhdGUgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyB3aGVyZSB0aGlzIGludGVyYWN0aW9uIGNvbWVzIGludG8gcGxheS5cblxuXG4iLCJJbnB1dFRva2VucyI6NzUwMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMyMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjAwLjQ3OTkyODg2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NDc0MTc0NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aWNrLXNjaGVkXFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90aW1lXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90aW1lL01ha2VmaWxlPTIzPW9iai0kKENPTkZJR19HRU5FUklDX1NDSEVEX0NMT0NLKVxcdFxcdCs9IHNjaGVkX2Nsb2NrLm9cXG5rZXJuZWwvdGltZS9NYWtlZmlsZToyNDpvYmotJChDT05GSUdfVElDS19PTkVTSE9UKVxcdFxcdFxcdCs9IHRpY2stb25lc2hvdC5vIHRpY2stc2NoZWQub1xcbmtlcm5lbC90aW1lL01ha2VmaWxlLTI1LW9iai0kKENPTkZJR19MRUdBQ1lfVElNRVJfVElDSylcXHRcXHRcXHQrPSB0aWNrLWxlZ2FjeS5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjAwLjU0NDY3ODQzNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTY3MTAwNTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkgd2VyZSB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9ibGVtOlxuXG4qKktlcm5lbCBDb25maWd1cmF0aW9uIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBwdXp6bGUuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZXNlIHBvdGVudGlhbCBjdWxwcml0czogYENPTkZJR19OT19IWl9DT01NT05gLCBgQ09ORklHX1RJQ0tfT05FU0hPVGAsIGBDT05GSUdfTk9fSFpfSURMRWAsIGFuZCBgQ09ORklHX0hPVFBMVUdfQ1BVYC4gVGhlc2UgYXJlIGFsbCByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGltZWtlZXBpbmcgYW5kIENQVSBpZGxlIHN0YXRlcywgc28gdGhleSdyZSB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgZGVidWdnaW5nLlxuXG5Ob3csIHRvIGdldCBzb21lIHJlYWwgY29udGV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGVzZSBzeW1ib2xzLiBJJ20gZ29pbmcgdG8ganVtcCBzdHJhaWdodCBpbnRvIGBrZXJuZWwvdGltZS9LY29uZmlnYC4gVGhhdCdzIHRoZSBnby10byBsb2NhdGlvbiBmb3IgYW55dGhpbmcgcmVsYXRlZCB0byB0aW1pbmcgYW5kIGNsb2NrIGNvbmZpZ3VyYXRpb24sIGFuZCBzaG91bGQgcHJvdmlkZSB0aGUgZGVwZW5kZW5jaWVzIGFuZCBkZXNjcmlwdGlvbnMgZm9yIGJvdGggYFRJQ0tfT05FU0hPVGAgYW5kIGBOT19IWmAgb3B0aW9ucy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIGZlYXR1cmVzIGludGVyYWN0IGFuZCB3aGF0IG90aGVyIHJlbGF0ZWQgb3B0aW9ucyBhcmUgYXQgcGxheS4gVGltZSB0byBnZXQgdGhvc2UgS2NvbmZpZyBmaWxlcyBvcGVuIVxuXG5cbiIsIklucHV0VG9rZW5zIjo4MzE0LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MDIuNTExNzgyNTk5WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTA0NTAxOTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRJQ0tfT05FU0hPVHxjb25maWcgTk9fSFpcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RpbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvS2NvbmZpZz05NT1pZiBHRU5FUklDX0NMT0NLRVZFTlRTXFxuLS1cXG5rZXJuZWwvdGltZS9LY29uZmlnLTk4LSMgYXJlIHN1cHBvcnRlZCBpbmRlcGVuZGVudCBvZiB0aGlzLlxcbmtlcm5lbC90aW1lL0tjb25maWc6OTk6Y29uZmlnIFRJQ0tfT05FU0hPVFxcbmtlcm5lbC90aW1lL0tjb25maWctMTAwLVxcdGJvb2xcXG5rZXJuZWwvdGltZS9LY29uZmlnLTEwMS1cXG5rZXJuZWwvdGltZS9LY29uZmlnOjEwMjpjb25maWcgTk9fSFpfQ09NTU9OXFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMDMtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RpbWUvS2NvbmZpZz0xMTA9Y29uZmlnIEhaX1BFUklPRElDXFxuLS1cXG5rZXJuZWwvdGltZS9LY29uZmlnLTExNS1cXG5rZXJuZWwvdGltZS9LY29uZmlnOjExNjpjb25maWcgTk9fSFpfSURMRVxcbmtlcm5lbC90aW1lL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIklkbGUgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcyBpZGxlKVxcXCJcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWctMTI1LVxcbmtlcm5lbC90aW1lL0tjb25maWc6MTI2OmNvbmZpZyBOT19IWl9GVUxMXFxua2VybmVsL3RpbWUvS2NvbmZpZy0xMjctXFx0Ym9vbCBcXFwiRnVsbCBkeW50aWNrcyBzeXN0ZW0gKHRpY2tsZXNzKVxcXCJcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWc9MTY1PWNvbmZpZyBDT05URVhUX1RSQUNLSU5HX1VTRVJfRk9SQ0VcXG4tLVxcbmtlcm5lbC90aW1lL0tjb25maWctMTkwLVxcbmtlcm5lbC90aW1lL0tjb25maWc6MTkxOmNvbmZpZyBOT19IWlxcbmtlcm5lbC90aW1lL0tjb25maWctMTkyLVxcdGJvb2wgXFxcIk9sZCBJZGxlIGR5bnRpY2tzIGNvbmZpZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MDIuNjIyMjQwNzhaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU3NTIwMjkwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRoaW5raW5nIHByb2Nlc3M6XG5cbioqRXhhbWluaW5nIFRpbWVrZWVwaW5nIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byB0aW1la2VlcGluZywgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgaWRsZSBDUFUgaGFuZGxpbmcuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGltbWVkaWF0ZWx5IGZvY3VzZXMgb24gdGhlIGtleSBvcHRpb25zOiBgTk9fSFpfSURMRWAsIGBOT19IWl9DT01NT05gLCBhbmQgYEhPVFBMVUdfQ1BVYC4gVGhlc2UgYXJlIGxpa2VseSB0byBiZSByZWxhdGVkIHRvIGhvdyB0aGUga2VybmVsIGhhbmRsZXMgdGlja2xlc3Mgb3BlcmF0aW9uIGFuZCBDUFUgaG90cGx1Zywgd2hpY2gsIG9mIGNvdXJzZSwgZGlyZWN0bHkgaW1wYWN0cyBwb3dlciBtYW5hZ2VtZW50IGFuZCByZXNwb25zaXZlbmVzcy4gSSdtIHJlY2FsbGluZyBmcm9tIHBhc3QgZXhwZXJpZW5jZSB0aGF0IHRoZXNlIGFyZSBvZnRlbiBpbnRlcnJlbGF0ZWQuXG5cblRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiB0aGVpciBpbnRlcmFjdGlvbnMgYW5kIHBvdGVudGlhbCBlZmZlY3RzLCBteSBuZXh0IHN0ZXAgaXMgdG8gZXhhbWluZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlLiBJJ20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDAtMTMwIGluIGBrZXJuZWwvdGltZS9LY29uZmlnYCBiZWNhdXNlIHRoZXNlIHR5cGVzIG9mIGNvbmZpZ3VyYXRpb25zIGFyZSBvZnRlbiBncm91cGVkIGxvZ2ljYWxseS4gVGhpcyBzZWN0aW9uIGlzIHdoZXJlIEknbGwgZmluZCB0aGUgZm9ybWFsIGRlc2NyaXB0aW9ucywgZGVwZW5kZW5jaWVzLCBhbmQgZGVmYXVsdCBzZXR0aW5ncyBmb3IgdGhlc2Ugb3B0aW9ucy4gSSBleHBlY3QgdG8gYmUgbG9va2luZyBmb3IgY2x1ZXMgYXMgdG8gdGhlaXIgaW50ZW5kZWQgdXNlIGNhc2VzLCBkZXBlbmRlbmNpZXMgb24gb3RoZXIgZmVhdHVyZXMsIGFuZCBhbnkgcG90ZW50aWFsIGNvbmZsaWN0cy4gVGhpcyB3aWxsIGFsbG93IG1lIHRvIGJ1aWxkIGFuIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIG9wdGlvbnMgZml0IGludG8gdGhlIGJpZ2dlciBwaWN0dXJlIG9mIGtlcm5lbCB0aW1lIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowNS4xOTc0NDc4NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE3MDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogOTUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgOTU6XFx0aWYgR0VORVJJQ19DTE9DS0VWRU5UU1xcbiAgOTY6XFx0IyBDb3JlIGludGVybmFsIHN3aXRjaC4gU2VsZWN0ZWQgYnkgTk9fSFpfQ09NTU9OIC8gSElHSF9SRVNfVElNRVJTLiBUaGlzIGlzXFxuICA5NzpcXHQjIG9ubHkgcmVsYXRlZCB0byB0aGUgdGljayBmdW5jdGlvbmFsaXR5LiBPbmVzaG90IGNsb2NrZXZlbnQgZGV2aWNlc1xcbiAgOTg6XFx0IyBhcmUgc3VwcG9ydGVkIGluZGVwZW5kZW50IG9mIHRoaXMuXFxuICA5OTpcXHRjb25maWcgVElDS19PTkVTSE9UXFxuIDEwMDpcXHRcXHRib29sXFxuIDEwMTpcXHRcXG4gMTAyOlxcdGNvbmZpZyBOT19IWl9DT01NT05cXG4gMTAzOlxcdFxcdGJvb2xcXG4gMTA0OlxcdFxcdHNlbGVjdCBUSUNLX09ORVNIT1RcXG4gMTA1OlxcdFxcbiAxMDY6XFx0Y2hvaWNlXFxuIDEwNzpcXHRcXHRwcm9tcHQgXFxcIlRpbWVyIHRpY2sgaGFuZGxpbmdcXFwiXFxuIDEwODpcXHRcXHRkZWZhdWx0IE5PX0haX0lETEUgaWYgTk9fSFpcXG4gMTA5OlxcdFxcbiAxMTA6XFx0Y29uZmlnIEhaX1BFUklPRElDXFxuIDExMTpcXHRcXHRib29sIFxcXCJQZXJpb2RpYyB0aW1lciB0aWNrcyAoY29uc3RhbnQgcmF0ZSwgbm8gZHludGlja3MpXFxcIlxcbiAxMTI6XFx0XFx0aGVscFxcbiAxMTM6XFx0XFx0ICBUaGlzIG9wdGlvbiBrZWVwcyB0aGUgdGljayBydW5uaW5nIHBlcmlvZGljYWxseSBhdCBhIGNvbnN0YW50XFxuIDExNDpcXHRcXHQgIHJhdGUsIGV2ZW4gd2hlbiB0aGUgQ1BVIGRvZXNuJ3QgbmVlZCBpdC5cXG4gMTE1OlxcdFxcbiAxMTY6XFx0Y29uZmlnIE5PX0haX0lETEVcXG4gMTE3OlxcdFxcdGJvb2wgXFxcIklkbGUgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcyBpZGxlKVxcXCJcXG4gMTE4OlxcdFxcdHNlbGVjdCBOT19IWl9DT01NT05cXG4gMTE5OlxcdFxcdGhlbHBcXG4gMTIwOlxcdFxcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBhIHRpY2tsZXNzIGlkbGUgc3lzdGVtOiB0aW1lciBpbnRlcnJ1cHRzXFxuIDEyMTpcXHRcXHQgIHdpbGwgb25seSB0cmlnZ2VyIG9uIGFuIGFzLW5lZWRlZCBiYXNpcyB3aGVuIHRoZSBzeXN0ZW0gaXMgaWRsZS5cXG4gMTIyOlxcdFxcdCAgVGhpcyBpcyB1c3VhbGx5IGludGVyZXN0aW5nIGZvciBlbmVyZ3kgc2F2aW5nLlxcbiAxMjM6XFx0XFxuIDEyNDpcXHRcXHQgIE1vc3Qgb2YgdGhlIHRpbWUgeW91IHdhbnQgdG8gc2F5IFkgaGVyZS5cXG4gMTI1OlxcdFxcbiAxMjY6XFx0Y29uZmlnIE5PX0haX0ZVTExcXG4gMTI3OlxcdFxcdGJvb2wgXFxcIkZ1bGwgZHludGlja3Mgc3lzdGVtICh0aWNrbGVzcylcXFwiXFxuIDEyODpcXHRcXHQjIE5PX0haX0NPTU1PTiBkZXBlbmRlbmN5XFxuIDEyOTpcXHRcXHQjIFdlIG5lZWQgYXQgbGVhc3Qgb25lIHBlcmlvZGljIENQVSBmb3IgdGltZWtlZXBpbmdcXG4gMTMwOlxcdFxcdGRlcGVuZHMgb24gU01QXFxuIDEzMTpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfQ09OVEVYVF9UUkFDS0lOR19VU0VSXFxuIDEzMjpcXHRcXHQjIFZJUlRfQ1BVX0FDQ09VTlRJTkdfR0VOIGRlcGVuZGVuY3lcXG4gMTMzOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9WSVJUX0NQVV9BQ0NPVU5USU5HX0dFTlxcbiAxMzQ6XFx0XFx0c2VsZWN0IE5PX0haX0NPTU1PTlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowNS4xOTc1Njc2ODdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM1NDczMjg2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFeGFtaW5pbmcgQ1BVIEhvdHBsdWcgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIENQVSBob3RwbHVnIHRlYXJkb3duIGNvZGUsIGFuZCBpdCdzIG1ha2luZyBtZSB0aGluayB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBgSE9UUExVR19DUFVgIGNvbmZpZ3VyYXRpb24uIFRoZSBgIWNwdV9hY3RpdmUoLi4uKWAgY2hlY2sgaW4gdGhlIGNvZGUgc2VlbXMgZGlyZWN0bHkgcmVsYXRlZCB0byB0aGF0IGhvdHBsdWcgcHJvY2Vzcy4gSXQgd291bGQgYmUgYSBtaXN0YWtlIHRvIG92ZXJsb29rIGhvdyB3ZSBhcmUgc2V0dGluZyB0aGUgc3RhZ2UgZm9yIGBjcHVfYWN0aXZlYCBiZWhhdmlvciBhcyB3ZSB0ZWFyIGRvd24gb3IgYnJpbmcgdXAgQ1BVcywgc2luY2UgaG90cGx1ZyBkaXJlY3RseSBhZmZlY3RzIHRoZSBhY3RpdmUgc2V0LlxuXG5UaGVyZWZvcmUsIHRoZSBsb2dpY2FsIGZpcnN0IHN0ZXAgZm9yIG1lIGlzIHRvIGdvIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGh1bnQgZm9yIGBIT1RQTFVHX0NQVWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgY29uZmlndXJhdGlvbiBvcHRpb24gaXMgZGVmaW5lZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgaG93IGl0IGltcGFjdHMgdGhlIGBjcHVfYWN0aXZlYCBzdGF0ZS4gTGV0J3MgbWFrZSBzdXJlIG91ciBiYXNlcyBhcmUgY292ZXJlZC4gSSBiZXQgdGhhdCB3aWxsIGNsYXJpZnkgYSBsb3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk4ODEsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjA3LjU1MjMwNTA2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDM4MDkyMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBIT1RQTFVHX0NQVVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9LY29uZmlnPTEwNjU9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gvYXJtL0tjb25maWctMTA3Ni1cXG5hcmNoL2FybS9LY29uZmlnOjEwNzc6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9hcm0vS2NvbmZpZy0xMDc4LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGhvdC1wbHVnZ2FibGUgQ1BVc1xcXCJcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZz0xNjIxPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL2FybTY0L0tjb25maWctMTYyNS1cXG5hcmNoL2FybTY0L0tjb25maWc6MTYyNjpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2FybTY0L0tjb25maWctMTYyNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL2Nza3kvS2NvbmZpZz0zMzA9Y29uZmlnIERSQU1fQkFTRVxcbi0tXFxuYXJjaC9jc2t5L0tjb25maWctMzMzLVxcbmFyY2gvY3NreS9LY29uZmlnOjMzNDpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL2Nza3kvS2NvbmZpZy0zMzUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZz01MTU9Y29uZmlnIFNNUFxcbi0tXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzItXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZzo1MzM6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9sb29uZ2FyY2gvS2NvbmZpZy01MzQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9taXBzL0tjb25maWc9MjcwMz1jb25maWcgU01QXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0yNzI0LVxcbmFyY2gvbWlwcy9LY29uZmlnOjI3MjU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9taXBzL0tjb25maWctMjcyNi1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnPTMzMT1jb25maWcgSVJRU1RBQ0tTXFxuLS1cXG5hcmNoL3BhcmlzYy9LY29uZmlnLTMzOC1cXG5hcmNoL3BhcmlzYy9LY29uZmlnOjMzOTpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3BhcmlzYy9LY29uZmlnLTM0MC1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZz01ODM9Y29uZmlnIFBQQ19GVFJBQ0VfT1VUX09GX0xJTkVfTlVNX1JFU0VSVkVcXG4tLVxcbmFyY2gvcG93ZXJwYy9LY29uZmlnLTU5NC1cXG5hcmNoL3Bvd2VycGMvS2NvbmZpZzo1OTU6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9wb3dlcnBjL0tjb25maWctNTk2LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDUFVzXFxcIlxcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnPTQ1Mz1jb25maWcgTlJfQ1BVU1xcbi0tXFxuYXJjaC9yaXNjdi9LY29uZmlnLTQ2Mi1cXG5hcmNoL3Jpc2N2L0tjb25maWc6NDYzOmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvcmlzY3YvS2NvbmZpZy00NjQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgaG90LXBsdWdnYWJsZSBDUFVzXFxcIlxcbi0tXFxuYXJjaC9zMzkwL0tjb25maWc9NTM1PWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3MzOTAvS2NvbmZpZy01NDYtXFxuYXJjaC9zMzkwL0tjb25maWc6NTQ3OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gvczM5MC9LY29uZmlnLTU0OC1cXHRkZWZfYm9vbCB5XFxuLS1cXG5hcmNoL3NoL0tjb25maWc9NTkyPWNvbmZpZyBOUl9DUFVTXFxuLS1cXG5hcmNoL3NoL0tjb25maWctNjA1LVxcbmFyY2gvc2gvS2NvbmZpZzo2MDY6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zaC9LY29uZmlnLTYwNy1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXMgKEVYUEVSSU1FTlRBTClcXFwiXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWc9MjIwPWNvbmZpZyBFQVJMWUZCXFxuLS1cXG5hcmNoL3NwYXJjL0tjb25maWctMjI4LVxcbmFyY2gvc3BhcmMvS2NvbmZpZzoyMjk6Y29uZmlnIEhPVFBMVUdfQ1BVXFxuYXJjaC9zcGFyYy9LY29uZmlnLTIzMC1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBob3QtcGx1Z2dhYmxlIENQVXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTIxNTQ9Y29uZmlnIEFERFJFU1NfTUFTS0lOR1xcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTY1LVxcbmFyY2gveDg2L0tjb25maWc6MjE2Njpjb25maWcgSE9UUExVR19DUFVcXG5hcmNoL3g4Ni9LY29uZmlnLTIxNjctXFx0ZGVmX2Jvb2wgeVxcbi0tXFxuYXJjaC94dGVuc2EvS2NvbmZpZz0yNTM9Y29uZmlnIE5SX0NQVVNcXG4tLVxcbmFyY2gveHRlbnNhL0tjb25maWctMjU4LVxcbmFyY2gveHRlbnNhL0tjb25maWc6MjU5OmNvbmZpZyBIT1RQTFVHX0NQVVxcbmFyY2gveHRlbnNhL0tjb25maWctMjYwLVxcdGJvb2wgXFxcIkVuYWJsZSBDUFUgaG90cGx1ZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTowOS45OTA0MDc3MzhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzExMTc1NTU0NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIHRoZSBCbG9jayBMYXllcidzIFNvZnRJUlEgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IHRoZSBzb2Z0aXJxIGZvciB0aGUgYmxvY2sgbGF5ZXIgaXMgc2V0IHVwLiBGaXJzdCwgSSBuZWVkIHRvIGNoZWNrIHRoZSBgQkxPQ0tgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBNYWtlcyBzZW5zZTsgdGhhdOKAmXMgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIHNlZW0gdG8gcmVjYWxsIHNvbWV0aGluZyBhYm91dCBgQkxPQ0tfU09GVElSUWAgYmVpbmcgZGVmaW5lZCwgYW5kIGlmIG1lbW9yeSBzZXJ2ZXMsIGl0IHNob3VsZCBiZSBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX0JMT0NLYCBndWFyZC4gTGV0J3MgY29uZmlybSB0aGF0IGh5cG90aGVzaXMuIFNwZWNpZmljYWxseSwgSSdsbCBob25lIGluIG9uIGxpbmVzIGFyb3VuZCA1NTAgdG8gNTgwIGluIHRoYXQgZmlsZS4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGV0YWlscyBJJ20gbG9va2luZyBmb3IuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE3MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjEzLjEwMjE2NzgyNFoiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTc1MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFwiLFxuICBcIkZpcnN0TGluZVwiOiA1NDUsXG4gIFwiTGluZUNvdW50XCI6IDQ1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA1NDU6XFx0ICAgZnJlcXVlbmN5IHRocmVhZGVkIGpvYiBzY2hlZHVsaW5nLiBGb3IgYWxtb3N0IGFsbCB0aGUgcHVycG9zZXNcXG4gNTQ2OlxcdCAgIHRhc2tsZXRzIGFyZSBtb3JlIHRoYW4gZW5vdWdoLiBGLmUuIGFsbCBzZXJpYWwgZGV2aWNlIEJIcyBldFxcbiA1NDc6XFx0ICAgYWwuIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gdGFza2xldHMsIG5vdCB0byBzb2Z0aXJxcy5cXG4gNTQ4OlxcdCAqL1xcbiA1NDk6XFx0XFxuIDU1MDpcXHRlbnVtXFxuIDU1MTpcXHR7XFxuIDU1MjpcXHRcXHRISV9TT0ZUSVJRPTAsXFxuIDU1MzpcXHRcXHRUSU1FUl9TT0ZUSVJRLFxcbiA1NTQ6XFx0XFx0TkVUX1RYX1NPRlRJUlEsXFxuIDU1NTpcXHRcXHRORVRfUlhfU09GVElSUSxcXG4gNTU2OlxcdFxcdEJMT0NLX1NPRlRJUlEsXFxuIDU1NzpcXHRcXHRJUlFfUE9MTF9TT0ZUSVJRLFxcbiA1NTg6XFx0XFx0VEFTS0xFVF9TT0ZUSVJRLFxcbiA1NTk6XFx0XFx0U0NIRURfU09GVElSUSxcXG4gNTYwOlxcdFxcdEhSVElNRVJfU09GVElSUSxcXG4gNTYxOlxcdFxcdFJDVV9TT0ZUSVJRLCAgICAvKiBQcmVmZXJhYmxlIFJDVSBzaG91bGQgYWx3YXlzIGJlIHRoZSBsYXN0IHNvZnRpcnEgKi9cXG4gNTYyOlxcdFxcbiA1NjM6XFx0XFx0TlJfU09GVElSUVNcXG4gNTY0OlxcdH07XFxuIDU2NTpcXHRcXG4gNTY2OlxcdC8qXFxuIDU2NzpcXHQgKiBUaGUgZm9sbG93aW5nIHZlY3RvcnMgY2FuIGJlIHNhZmVseSBpZ25vcmVkIGFmdGVyIGtzb2Z0aXJxZCBpcyBwYXJrZWQ6XFxuIDU2ODpcXHQgKlxcbiA1Njk6XFx0ICogXyBSQ1U6XFxuIDU3MDpcXHQgKiBcXHQxKSByY3V0cmVlX21pZ3JhdGVfY2FsbGJhY2tzKCkgbWlncmF0ZXMgdGhlIHF1ZXVlLlxcbiA1NzE6XFx0ICogXFx0MikgcmN1dHJlZV9yZXBvcnRfY3B1X2RlYWQoKSByZXBvcnRzIHRoZSBmaW5hbCBxdWllc2NlbnQgc3RhdGVzLlxcbiA1NzI6XFx0ICpcXG4gNTczOlxcdCAqIF8gSVJRX1BPTEw6IGlycV9wb2xsX2NwdV9kZWFkKCkgbWlncmF0ZXMgdGhlIHF1ZXVlXFxuIDU3NDpcXHQgKlxcbiA1NzU6XFx0ICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxcbiA1NzY6XFx0ICpcXG4gNTc3OlxcdCAqIF8gQkxPQ0tfU09GVElSUTogYmxrX3NvZnRpcnFfY3B1X2RlYWQoKSBjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0c1xcbiA1Nzg6XFx0ICovXFxuIDU3OTpcXHQjZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcXFxcbiA1ODA6XFx0XFx0XFx0XFx0XFx0ICAgQklUKElSUV9QT0xMX1NPRlRJUlEpIHwgQklUKEhSVElNRVJfU09GVElSUSkgfCBCSVQoUkNVX1NPRlRJUlEpKVxcbiA1ODE6XFx0XFxuIDU4MjpcXHRcXG4gNTgzOlxcdC8qIG1hcCBzb2Z0aXJxIGluZGV4IHRvIHNvZnRpcnEgbmFtZS4gdXBkYXRlICdzb2Z0aXJxX3RvX25hbWUnIGluXFxuIDU4NDpcXHQgKiBrZXJuZWwvc29mdGlycS5jIHdoZW4gYWRkaW5nIGEgbmV3IHNvZnRpcnEuXFxuIDU4NTpcXHQgKi9cXG4gNTg2OlxcdGV4dGVybiBjb25zdCBjaGFyICogY29uc3Qgc29mdGlycV90b19uYW1lW05SX1NPRlRJUlFTXTtcXG4gNTg3OlxcdFxcbiA1ODg6XFx0Lyogc29mdGlycSBtYXNrIGFuZCBhY3RpdmUgZmllbGRzIG1vdmVkIHRvIGlycV9jcHVzdGF0X3QgaW5cXG4gNTg5OlxcdCAqIGFzbS9oYXJkaXJxLmggdG8gZ2V0IGJldHRlciBjYWNoZSB1c2FnZS4gIEtBT1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToxMy4xMDIzODg1NzRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzYyMjIyNTM1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgU29mdElSUSBVc2FnZSBBY3Jvc3MgdGhlIEJsb2NrIExheWVyIGFuZCBUaWNrIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIGBCTE9DS19TT0ZUSVJRYCBpcyBqdXN0IGhhbmdpbmcgb3V0IGluIHRoZSBlbnVtIHdpdGhvdXQgYW55IHF1YWxpZmljYXRpb24sIGJ1dCB0aGUgYmxvY2sgbGF5ZXIgZGVmaW5pdGVseSB1c2VzIGl0IHdoZW4gYENPTkZJR19CTE9DS2AgaXMgZW5hYmxlZC4gVGltZSB0byBkaWcgaW4gYW5kIHVuZGVyc3RhbmQgdGhpcyByZWxhdGlvbnNoaXAuIEZpcnN0LCBJJ2xsIHRyYWNlIGRvd24gd2hlcmUgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBpcyBkZWZpbmVkIGFuZCB1c2VkLiBMb29rcyBsaWtlIGl0J3MgaW4gYGJsb2NrL2Jsay1tcS5jYC4gSG1tLCBpdCBhcHBlYXJzIHRvIGJlIGNsZWFuaW5nIHVwIHJlcXVlc3RzIG9uIGEgZGVhZCBDUFUuIE1ha2VzIHNlbnNlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIHRpbWUgc2NoZWR1bGVyIHNpZGUuIGByZXBvcnRfaWRsZV9zb2Z0aXJxKClgIGFsc28gc2VlbXMgaW50ZXJlc3RpbmcuIEl0J3Mgc3RhdGljLCBhbmQgY2FsbGVkIGJ5IGBjYW5fc3RvcF9pZGxlX3RpY2soKWAsIHdoaWNoLCBpbiB0dXJuLCBpcyB1c2VkIGJ5IGZ1bmN0aW9ucyBsaWtlIGB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2soKWAgYW5kIGB0aWNrX25vaHpfZnVsbF91cGRhdGVfdGljaygpYC4gXG5cbkFscmlnaHQsIGZvciBhcHByb3ByaWF0ZSBcIkZvY3VzU3ltYm9scyxcIiBJIHdhcyBpbml0aWFsbHkgdGhpbmtpbmcgYGNhbl9zdG9wX2lkbGVfdGljaygpYCwgYnV0IHRoYXQncyBzdGF0aWMuIExldCdzIGxvb2sgYXQgYHRpY2tfbm9oel9pZGxlX3N0b3BfdGljaygpYCwgYHRpY2tfbm9oel9pZGxlX2VudGVyKClgLCBldGMuLiBUaG9zZSBhcmUgdGhlIHJlYWwgZW50cnkgcG9pbnRzLiBPYnZpb3VzbHksIGBibGtfc29mdGlycV9jcHVfZGVhZGAgaXMgaW1wb3J0YW50IHRvby4gQW5kIGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhcyB3ZWxsLCBldmVuIGlmIGl0J3Mgc3RhdGljLlxuXG5XYWl0LCBiZWZvcmUgSSBnbyBmdXJ0aGVyLCBJIHNob3VsZCB2ZXJpZnkgdGhlIHZpc2liaWxpdHkgb2YgYGNhbl9zdG9wX2lkbGVfdGljaygpYCBhbmQgaXRzIGNhbGxlcnMgd2l0aGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmNgLiBHb3R0YSBiZSB0aG9yb3VnaCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTIxNzAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToxNi43MjQ2MTY3NDJaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0OTE4OTI4NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjYW5fc3RvcF9pZGxlX3RpY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RpbWVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNDc9c3RhdGljIHZvaWQgdGlja19ub2h6X2Z1bGxfdXBkYXRlX3RpY2soc3RydWN0IHRpY2tfc2NoZWQgKnRzKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwNjAtICogc2hvdWxkIGJlIHdhaXRpbmcgZm9yIGtzb2Z0aXJxZCB0byBoYW5kbGUgaXQuIFRoZXJlZm9yZSB3ZSBzaG91bGRuJ3RcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTA2MTogKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA2Mi0gKlxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jPTEwNjg9c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTEwOTUtXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwOTY6c3RhdGljIGJvb2wgY2FuX3N0b3BfaWRsZV90aWNrKGludCBjcHUsIHN0cnVjdCB0aWNrX3NjaGVkICp0cylcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA5Ny17XFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTEzMj12b2lkIHRpY2tfbm9oel9pZGxlX3N0b3BfdGljayh2b2lkKVxcbi0tXFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jLTExNDMtXFx0XFx0ZXhwaXJlcyA9IHRzLVxcdTAwM2V0aW1lcl9leHBpcmVzO1xcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzoxMTQ0OlxcdGVsc2UgaWYgKGNhbl9zdG9wX2lkbGVfdGljayhjcHUsIHRzKSlcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTE0NS1cXHRcXHRleHBpcmVzID0gdGlja19ub2h6X25leHRfZXZlbnQodHMsIGNwdSk7XFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM9MTI4ND1rdGltZV90IHRpY2tfbm9oel9nZXRfc2xlZXBfbGVuZ3RoKGt0aW1lX3QgKmRlbHRhX25leHQpXFxuLS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTI5OS1cXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6MTMwMDpcXHRpZiAoIWNhbl9zdG9wX2lkbGVfdGljayhjcHUsIHRzKSlcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTMwMS1cXHRcXHRyZXR1cm4gKmRlbHRhX25leHQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjE3LjE3MzgxNjQ2OFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzYxOTA0Nzk0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBCbG9jayBTb2Z0SVJRIGFuZCBJZGxlIFRpY2sgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJJ20gbm90aW5nIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYSBnZW5lcmFsIGlkbGUgZnVuY3Rpb24sIGB0aWNrX25vaHpfaWRsZV9zdG9wX3RpY2tgLCBhbmQgdGhlIG1vcmUgc3BlY2lmaWMgY2FsbGJhY2sgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGByZXBvcnRfaWRsZV9zb2Z0aXJxYCBhbmQgYGJsa19zb2Z0aXJxX2NwdV9kZWFkYCBhcmUgZGlzdGluY3Qgc3ltYm9scyB3aXRoaW4gdGhlIHZtbGludXggaW1hZ2UuIEdvb2QsIHRoZXkgYXJlLiBTdGF0aWMgZnVuY3Rpb25zLCBldmVuIHdpdGhpbiAuYyBmaWxlcywgZ2V0IHN5bWJvbHMsIG9yIGF0IGxlYXN0IHRoZWlyIGNhbGxlcnMgZG8gaWYgaW5saW5lZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSByZWxldmFudCBzeW1ib2xzOiBgcmVwb3J0X2lkbGVfc29mdGlycWAsIGBibGtfc29mdGlycV9jcHVfZGVhZGAsIGFuZCBgY2FuX3N0b3BfaWRsZV90aWNrYC4gR290IGl0LiBNb3Zpbmcgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gY2hlY2tzLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgcmVsZXZhbnQgY29uZmlnIG9wdGlvbnMgYXJlIGluIHBsYWNlLiBXZSdyZSBsb29raW5nIGZvciBgTk9fSFpfSURMRWAgKG9yIGBOT19IWl9DT01NT05gIHdoaWNoIGltcGxpZXMgaXQpLCBgSE9UUExVR19DUFVgLCBhbmQgYEJMT0NLYC4gQWxsIHRoZSBrZXkgb25lcy5cblxuQWxyaWdodCwgbGV0J3MgY3Jvc3MtcmVmZXJlbmNlIHRoaXMgYWdhaW5zdCB0aGUgaW5zdHJ1Y3Rpb25zLiBXb3J0aEZ1enppbmcgaXMgc2V0IHRvIHRydWUsIHdoaWNoIGFsaWducyB3aXRoIG15IHVuZGVyc3RhbmRpbmcuIFRoZSBgRW5hYmxlQ29uZmlnc2AgbGlzdCBpcyBhY2N1cmF0ZTogYE5PX0haX0lETEVgLCBgSE9UUExVR19DUFVgLCBhbmQgYEJMT0NLYC4gVGhlIGBGb2N1c1N5bWJvbHNgIGFyZSBjb3JyZWN0IHRvbzogYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGFuZCBgYmxrX3NvZnRpcnFfY3B1X2RlYWRgLlxuXG5GaW5hbGx5LCB0aGUgcmVhc29uaW5nIHNlZW1zIHNvdW5kOiB0aGUgcGF0Y2ggbW9kaWZpZXMgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIHRvIGluY2x1ZGUgYEJMT0NLX1NPRlRJUlFgLiBUaGlzIGFsbG93cyBgcmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBjb25zaWRlciBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIHNhZmUgZHVyaW5nIENQVSBob3RwbHVnIG9mZmxpbmUgd2hlbiBrc29mdGlycWQgaXMgcGFya2VkLiBUaGlzIGRpcmVjdGx5IGltcGFjdHMgYGNhbl9zdG9wX2lkbGVfdGljaygpYCdzIGNvbnRyb2wgZmxvdyBhbmQgdGhlcmVmb3JlIGFmZmVjdHMgd2FybmluZyBzdXBwcmVzc2lvbi5cblxuSnVzdCBhIGRvdWJsZS1jaGVjayBvbiB0aGVzZSBjb25maWdzLiBgTk9fSFpfSURMRWAgaXMgZW5hYmxlZCBieSBkZWZhdWx0IHdpdGggYE5PX0haYC4gYEhPVFBMVUdfQ1BVYCBlbmFibGVzIENQVSBob3RwbHVnZ2luZywgYW5kIGBCTE9DS2Agb2YgY291cnNlIGVuYWJsZXMgdGhlIGJsb2NrIGxheWVyIGFuZCBgQkxPQ0tfU09GVElSUWAgYW5kIGBibGtfc29mdGlycV9jcHVfZGVhZGAuXG5cblllcCwgZXZlcnl0aGluZyBsaW5lcyB1cCBwZXJmZWN0bHkuIFJlYWR5IHRvIHN1Ym1pdCB0aGlzLiBMZXQncyBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNDA2LCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToyMS41MzU3MjM5NjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzUwNDY1ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5PX0haX0lETEVcIixcbiAgICBcIkhPVFBMVUdfQ1BVXCIsXG4gICAgXCJCTE9DS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcG9ydF9pZGxlX3NvZnRpcnFcIixcbiAgICBcImJsa19zb2Z0aXJxX2NwdV9kZWFkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBCTE9DS19TT0ZUSVJRIHRvIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0ssIHdoaWNoIGFsdGVycyBjb250cm9sIGZsb3cgaW4gcmVwb3J0X2lkbGVfc29mdGlycSgpIGFuZCBjYW5fc3RvcF9pZGxlX3RpY2soKSB3aGVuIGEgQ1BVIGlzIHRha2VuIG9mZmxpbmUgZHVyaW5nIENQVSBob3RwbHVnLCBlbnN1cmluZyBwZW5kaW5nIGJsb2NrIHNvZnRpcnFzIGFyZSBpZ25vcmVkIHJhdGhlciB0aGFuIHRyaWdnZXJpbmcgdGljay1zdG9wIHdhcm5pbmdzIGJlZm9yZSBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNsZWFucyB0aGVtIHVwLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OToyMS42NzA3ODA3NzFaIiwiU2VxIjoyNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4MzE1MDkzODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MjEuNjcxNjE1MDQyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTgzMTQyNTQ1MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGluIGBpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oYCwgd2hpY2ggaXMgdXNlZCBkdXJpbmcgQ1BVIGhvdHBsdWcgdGVhcmRvd24gaW4gYGtlcm5lbC90aW1lL3RpY2stc2NoZWQuYzpyZXBvcnRfaWRsZV9zb2Z0aXJxKClgIHRvIHByZXZlbnQgZmFsc2UtcG9zaXRpdmUgTk9IWiB0aWNrLXN0b3Agd2FybmluZ3MgZm9yIGJsb2NrIHNvZnRpcnFzIGhhbmRsZWQgYnkgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBcXG5cXG5UaGlzIGNoYW5nZSBtb2RpZmllcyBvbmx5IGEgY29tcGlsZS10aW1lIGJpdG1hc2sgY29uc3RhbnQgZm9yIHNvZnRpcnEgaG90cGx1ZyBoYW5kbGluZyBsb2dpYy4gSXQgaW50cm9kdWNlcyBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBkYXRhIGNvcHlpbmcgdG8gdXNlcnNwYWNlLCBubyBzdHJ1Y3QgcGFkZGluZyBvciBpbml0aWFsaXphdGlvbiBjaGFuZ2VzLCBhbmQgbm8gYnJhbmNoaW5nIG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gQXMgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVhayByaXNrcywgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTY3MGUzNzMwM2M3NTY0MWJkMWQ4YmUxYWEwNDI2NjRjYjczYjE1OVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgU2VwIDUgMTQ6NTg6MzQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oIGIvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaFxuaW5kZXggM2JmOTY5YWQ4ZmUwNy4uNTJiYjY4NDA5MGMwZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbisrKyBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmhcbkBAIC01NzMsOSArNTczLDExIEBAIGVudW1cbiAgKiBfIElSUV9QT0xMOiBpcnFfcG9sbF9jcHVfZGVhZCgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuICAqXG4gICogXyAoSFIpVElNRVJfU09GVElSUTogKGhyKXRpbWVyc19kZWFkX2NwdSgpIG1pZ3JhdGVzIHRoZSBxdWV1ZVxuKyAqXG4rICogXyBCTE9DS19TT0ZUSVJROiBibGtfc29mdGlycV9jcHVfZGVhZCgpIGNvbXBsZXRlcyB0aGUgcmVtYWluaW5nIHJlcXVlc3RzXG4gICovXG4tI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoSVJRX1BPTExfU09GVElSUSkgfFxcXG4tXHRcdFx0XHQgICBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXG4rI2RlZmluZSBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLIChCSVQoVElNRVJfU09GVElSUSkgfCBCSVQoQkxPQ0tfU09GVElSUSkgfFxcXG4rXHRcdFx0XHQgICBCSVQoSVJRX1BPTExfU09GVElSUSkgfCBCSVQoSFJUSU1FUl9TT0ZUSVJRKSB8IEJJVChSQ1VfU09GVElSUSkpXG4gXG4gXG4gLyogbWFwIHNvZnRpcnEgaW5kZXggdG8gc29mdGlycSBuYW1lLiB1cGRhdGUgJ3NvZnRpcnFfdG9fbmFtZScgaW5cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjIxLjY3MTYxNzA0MloiLCJTZXEiOjI3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NDkyNDA4NjcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBJbnRlcnJ1cHQgSGVhZGVyIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZSB0byBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIFNwZWNpZmljYWxseSwgdGhlIGFsdGVyYXRpb24gb2YgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGFuZCB0aGUgYWRkaXRpb24gb2YgYEJMT0NLX1NPRlRJUlFgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgYEJMT0NLX1NPRlRJUlFgIGlzIGJlaW5nIGluY2x1ZGVkIGFuZCB3aGF0IHRoZSBmdW5jdGlvbmFsIGltcGFjdCBpcyBvZiB0aGlzIG1vZGlmaWNhdGlvbi5cblxuVGhlIGRpZmYgY2xlYXJseSBzaG93cyB0aGUgYWRkaXRpb24gb2YgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhlIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCwgYW5kIHRoZSBjb3JyZXNwb25kaW5nIHJlbW92YWwgb2YgdGhlIG1hc2sgZWxlbWVudCBmb3IgdGhlIGJsb2NrJ3Mgd29yayBxdWV1ZSBtaWdyYXRpb24uIE15IGFzc3VtcHRpb24gaXMgdGhpcyBjaGFuZ2UgaW1wYWN0cyB0aGUgYmVoYXZpb3Igb2Ygc29mdCBpbnRlcnJ1cHQgaGFuZGxpbmcgZHVyaW5nIENQVSBob3RwbHVnIG9wZXJhdGlvbnMuIFNvLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIHN5c3RlbSBub3cgaGFuZGxlcyBibG9jayByZXF1ZXN0cyBkdXJpbmcgQ1BVIHJlbW92YWwuXG5cbk15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIHRoZSB1c2VzIG9mIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiB0aGUgY29kZSBiYXNlLiBJJ2xsIHByb2JhYmx5IHVzZSBgZ3JlcHBlcmAgb3IganVzdCBxdWlja2x5IHJlYWQgdGhlIGNvZGUgZmlsZSB0byBjaGVjay4gVGhlIGdvYWwgaXMgdG8gZGV0ZXJtaW5lIHdoaWNoIG90aGVyIHJvdXRpbmVzIGFyZSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS4gQWxzbywgSSBuZWVkIHRvIGtub3cgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgLiBUaGlzIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGNydWNpYWwgdG8gaG93IGJsb2NrIHJlcXVlc3RzIGFyZSBub3cgaGFuZGxlZCBhZnRlciB0aGlzIGNoYW5nZS4gSSdsbCBsb29rIGludG8gaXRzIGltcGxlbWVudGF0aW9uIHRvIHNlZSBob3cgaXQgXCJjb21wbGV0ZXMgdGhlIHJlbWFpbmluZyByZXF1ZXN0cy5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGUgbmV3IGJlaGF2aW9yIGhhcyBhbnkgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zIG9yIHBvdGVudGlhbCBmb3IgcmVncmVzc2lvbnMuIEkgbmVlZCB0byBiZSBzdXJlIHRoYXQgdGhpcyBjaGFuZ2UgaXMgc2FmZS4gSSBtdXN0IHVuZGVyc3RhbmQgdGhlIHJlYXNvbmluZyBmb3IgdGhpcyBjaGFuZ2UgdG8gY29ycmVjdGx5IGFzc2VzcyBpdHMgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTkxLCJPdXRwdXRUb2tlbnMiOjI0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkxLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MjkuMTY0MDI5NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMjUzMjk2MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oPTU1MD1lbnVtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oLTU3OC0gKi9cXG5pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oOjU3OTojZGVmaW5lIFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0sgKEJJVChUSU1FUl9TT0ZUSVJRKSB8IEJJVChCTE9DS19TT0ZUSVJRKSB8XFxcXFxcbmluY2x1ZGUvbGludXgvaW50ZXJydXB0LmgtNTgwLVxcdFxcdFxcdFxcdCAgIEJJVChJUlFfUE9MTF9TT0ZUSVJRKSB8IEJJVChIUlRJTUVSX1NPRlRJUlEpIHwgQklUKFJDVV9TT0ZUSVJRKSlcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYz0xMDY4PXN0YXRpYyBib29sIHJlcG9ydF9pZGxlX3NvZnRpcnEodm9pZClcXG4tLVxcbmtlcm5lbC90aW1lL3RpY2stc2NoZWQuYy0xMDc3LVxcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XFxua2VybmVsL3RpbWUvdGljay1zY2hlZC5jOjEwNzg6XFx0XFx0cGVuZGluZyBcXHUwMDI2PSB+U09GVElSUV9IT1RQTFVHX1NBRkVfTUFTSztcXG5rZXJuZWwvdGltZS90aWNrLXNjaGVkLmMtMTA3OS1cXHRcXHRpZiAoIXBlbmRpbmcpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjMxLjQ4OTM3MzU2N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTA0OTI2Mzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBUaWNrIFNjaGVkdWxlcioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGludG8gdGhpcyBzY2hlZHVsaW5nIGlzc3VlLi4ubXkgZ3V0IHNheXMgdGhlIHByb2JsZW0gbGllcyBzb21ld2hlcmUgaW4gdGhlIHRpY2sgc2NoZWR1bGVyLiBJIG5lZWQgdG8gZ2V0IHRvIHRoZSBjb3JlIG9mIGhvdyBpdCBtYW5hZ2VzIHRoZSB0aW1lciB0aWNrcy4gTGV0J3Mgc2VlLi4uIHRoZSBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jYCBmaWxlIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcuIFNwZWNpZmljYWxseSwgSSdtIHRoaW5raW5nIGFyb3VuZCBsaW5lIDEwNjguIFRoYXQgYXJlYSB1c3VhbGx5IGRlYWxzIHdpdGguLi4gd2VsbCwgbGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSAqdGhlcmUqIGJlZm9yZSBJIGp1bXAgdG8gYW55IGNvbmNsdXNpb25zLiBUaW1lIHRvIHJvbGwgdXAgbXkgc2xlZXZlcyBhbmQgZ2V0IGludG8gdGhlIGNvZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwODIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wNVQxNDo1OTozMy4zOTQzMDM4MDRaIiwiU2VxIjozMCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE2MTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImtlcm5lbC90aW1lL3RpY2stc2NoZWQuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDYwOlxcdCAqIHNob3VsZCBiZSB3YWl0aW5nIGZvciBrc29mdGlycWQgdG8gaGFuZGxlIGl0LiBUaGVyZWZvcmUgd2Ugc2hvdWxkbid0XFxuMTA2MTpcXHQgKiByZWFjaCB0aGlzIGNvZGUgZHVlIHRvIHRoZSBuZWVkX3Jlc2NoZWQoKSBlYXJseSBjaGVjayBpbiBjYW5fc3RvcF9pZGxlX3RpY2soKS5cXG4xMDYyOlxcdCAqXFxuMTA2MzpcXHQgKiBIb3dldmVyIGlmIHdlIGFyZSBiZXR3ZWVuIENQVUhQX0FQX1NNUEJPT1RfVEhSRUFEUyBhbmQgQ1BVX1RFQVJET1dOX0NQVSBvbiB0aGVcXG4xMDY0OlxcdCAqIGNwdV9kb3duKCkgcHJvY2Vzcywgc29mdGlycXMgY2FuIHN0aWxsIGJlIHJhaXNlZCB3aGlsZSBrc29mdGlycWQgaXMgcGFya2VkLFxcbjEwNjU6XFx0ICogdHJpZ2dlcmluZyB0aGUgY29kZSBiZWxvdywgc2luY2Ugd2FrZXBfc29mdGlycWQoKSBpcyBpZ25vcmVkLlxcbjEwNjY6XFx0ICpcXG4xMDY3OlxcdCAqL1xcbjEwNjg6XFx0c3RhdGljIGJvb2wgcmVwb3J0X2lkbGVfc29mdGlycSh2b2lkKVxcbjEwNjk6XFx0e1xcbjEwNzA6XFx0XFx0c3RhdGljIGludCByYXRlbGltaXQ7XFxuMTA3MTpcXHRcXHR1bnNpZ25lZCBpbnQgcGVuZGluZyA9IGxvY2FsX3NvZnRpcnFfcGVuZGluZygpO1xcbjEwNzI6XFx0XFxuMTA3MzpcXHRcXHRpZiAobGlrZWx5KCFwZW5kaW5nKSlcXG4xMDc0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4xMDc1OlxcdFxcbjEwNzY6XFx0XFx0LyogU29tZSBzb2Z0aXJxcyBjbGFpbSB0byBiZSBzYWZlIGFnYWluc3QgaG90cGx1ZyBhbmQga3NvZnRpcnFkIHBhcmtpbmcgKi9cXG4xMDc3OlxcdFxcdGlmICghY3B1X2FjdGl2ZShzbXBfcHJvY2Vzc29yX2lkKCkpKSB7XFxuMTA3ODpcXHRcXHRcXHRwZW5kaW5nIFxcdTAwMjY9IH5TT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLO1xcbjEwNzk6XFx0XFx0XFx0aWYgKCFwZW5kaW5nKVxcbjEwODA6XFx0XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjEwODE6XFx0XFx0fVxcbjEwODI6XFx0XFxuMTA4MzpcXHRcXHQvKiBPbiBSVCwgc29mdGlycSBoYW5kbGluZyBtYXkgYmUgd2FpdGluZyBvbiBzb21lIGxvY2sgKi9cXG4xMDg0OlxcdFxcdGlmIChsb2NhbF9iaF9ibG9ja2VkKCkpXFxuMTA4NTpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMTA4NjpcXHRcXG4xMDg3OlxcdFxcdGlmIChyYXRlbGltaXQgXFx1MDAzYyAxMCkge1xcbjEwODg6XFx0XFx0XFx0cHJfd2FybihcXFwiTk9IWiB0aWNrLXN0b3AgZXJyb3I6IGxvY2FsIHNvZnRpcnEgd29yayBpcyBwZW5kaW5nLCBoYW5kbGVyICMlMDJ4ISEhXFxcXG5cXFwiLFxcbjEwODk6XFx0XFx0XFx0XFx0cGVuZGluZyk7XFxuMTA5MDpcXHRcXHRcXHRyYXRlbGltaXQrKztcXG4xMDkxOlxcdFxcdH1cXG4xMDkyOlxcdFxcbjEwOTM6XFx0XFx0cmV0dXJuIHRydWU7XFxuMTA5NDpcXHR9XFxuMTA5NTpcXHRcXG4xMDk2OlxcdHN0YXRpYyBib29sIGNhbl9zdG9wX2lkbGVfdGljayhpbnQgY3B1LCBzdHJ1Y3QgdGlja19zY2hlZCAqdHMpXFxuMTA5NzpcXHR7XFxuMTA5ODpcXHRcXHRXQVJOX09OX09OQ0UoY3B1X2lzX29mZmxpbmUoY3B1KSk7XFxuMTA5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDVUMTQ6NTk6MzMuMzk0NTIzNzUzWiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY1OTEzMjI1NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgU29mdElSUV9IT1RQTFVHX1NBRkVfTUFTSyBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIHVuZGVyc3RhbmQsIHdlJ3JlIGFkanVzdGluZyB0aGUgYFNPRlRJUlFfSE9UUExVR19TQUZFX01BU0tgIGJpdG1hc2sgd2l0aGluIHRoZSBOT0haIHRpY2sgY29kZSBzcGVjaWZpY2FsbHkgZm9yIHNjZW5hcmlvcyBpbnZvbHZpbmcgQ1BVIGhvdHBsdWcsIHBhcnRpY3VsYXJseSB3aGVuIGBrc29mdGlycWRgIGlzIHBhcmtlZC4gYHJlcG9ydF9pZGxlX3NvZnRpcnFgIGlzIHRoZSBmdW5jdGlvbiBpbiBxdWVzdGlvbi4gVGhlIGdvYWwgaXMgdG8gYWNjb21tb2RhdGUgdGhlIGBCTE9DS19TT0ZUSVJRYCBzb2Z0aXJxLiBCeSBhZGRpbmcgYEJJVChCTE9DS19TT0ZUSVJRKWAgdG8gdGhpcyBtYXNrLCB3ZSdyZSBzdXBwcmVzc2luZyBhIHdhcm5pbmcuIFNwZWNpZmljYWxseSwgdGhlIHdhcm5pbmcgYHByX3dhcm4oXCJOT0haIHRpY2stc3RvcCBlcnJvcjogbG9jYWwgc29mdGlycSB3b3JrIGlzIHBlbmRpbmcsIGhhbmRsZXIgIyUwMnghISFcXG5cIiwgcGVuZGluZyk7YCBpcyBiZWluZyBzdXBwcmVzc2VkIGZvciB0aGUgYEJMT0NLX1NPRlRJUlFgIGNhc2UuIFRoZSByZWFzb24gdGhpcyBpcyBzYWZlIGlzIGJlY2F1c2UgYGJsa19zb2Z0aXJxX2NwdV9kZWFkKClgIGhhbmRsZXMgY29tcGxldGlvbiBvZiBhbnkgcmVtYWluaW5nIGJsb2NrIHNvZnRpcnEgcmVxdWVzdHMgd2hlbiBhIENQVSBnb2VzIG9mZmxpbmUuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggdGhlIHVzdWFsIG1lbW9yeSBzYWZldHkgY2hlY2tzLiBXZSdyZSBtb2RpZnlpbmcgYSBtYWNybyBkZWZpbml0aW9uIHdpdGhpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAuIFRoaXMgaXMgYSBoZWFkZXIgZmlsZSB1cGRhdGUsIGFmZmVjdGluZyBvbmx5IHRoZSBDUFUgaG90cGx1ZyBhbmQgdGljayBzdG9wcGluZyBsb2dpYyByZWxhdGVkIHRvIGlkbGUgc29mdGlycSByZXBvcnRpbmcuXG5cbjEuICAqKk5vIEtlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2UuKiogV2UncmUgbm90IGV4cG9zaW5nIGFueSBuZXcga2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZTsgdGhlcmVmb3JlLCB0aGUgdXN1YWwgcGFkZGluZyBhbmQgdW5pbml0aWFsaXplZCBkYXRhIGNvbmNlcm5zIGRvbid0IGFwcGx5LlxuMi4gICoqTm8gQ29uZGl0aW9uYWwgTG9naWMgd2l0aCBVbmluaXRpYWxpemVkIFZhcmlhYmxlcy4qKiBUaGVyZSdzIG5vIG5ldyBjb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCByZWxpZXMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IGZpZWxkcywgc28gd2UncmUgZ29vZCB0aGVyZS5cbjMuICAqKk5vIENvbXBsZXggRGF0YSBTdHJ1Y3R1cmUgSW5pdGlhbGl6YXRpb24uKiogVGhpcyBpc24ndCBhYm91dCBhbGxvY2F0aW5nIG9yIGluaXRpYWxpemluZyBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSBhIHByb2JsZW0uIFRoaXMgaXMgYSBzaW1wbGUgYml0bWFzayB1cGRhdGUuXG40LiAgKipObyBCb3VuZHMgQ2hlY2sgVnVsbmVyYWJpbGl0aWVzLioqIFdlIGFyZW4ndCBkb2luZyBhbnkgYm91bmRzIGNoZWNrcyBvciBtYW5pcHVsYXRpb24gb2YgbGVuZ3RocyBpbiBhIHdheSB0aGF0IGNvdWxkIGxlYWQgdG8gYWNjZXNzaW5nIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGJ5dGVzLlxuXG5TaW5jZSB0aGlzIGlzIGEgc3RyYWlnaHRmb3J3YXJkIG1hY3JvIGRlZmluaXRpb24gdXBkYXRlLCB3aXRoIG5vIHVzZXItc3BhY2UgY29waWVzLCBubyBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBhbmQgbm8gcGFkZGluZyByaXNrcywgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gZm9yIGNvbmNlcm4uIEtNU0FOIGlzbid0IG5lZWRlZCBoZXJlLlxuXG5BbHJpZ2h0LCBsZXQncyBnZXQgcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODk1LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA1VDE0OjU5OjM5Ljk4NTg0ODgzOFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5MjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBgQklUKEJMT0NLX1NPRlRJUlEpYCB0byBgU09GVElSUV9IT1RQTFVHX1NBRkVfTUFTS2AgaW4gYGluY2x1ZGUvbGludXgvaW50ZXJydXB0LmhgLCB3aGljaCBpcyB1c2VkIGR1cmluZyBDUFUgaG90cGx1ZyB0ZWFyZG93biBpbiBga2VybmVsL3RpbWUvdGljay1zY2hlZC5jOnJlcG9ydF9pZGxlX3NvZnRpcnEoKWAgdG8gcHJldmVudCBmYWxzZS1wb3NpdGl2ZSBOT0haIHRpY2stc3RvcCB3YXJuaW5ncyBmb3IgYmxvY2sgc29mdGlycXMgaGFuZGxlZCBieSBgYmxrX3NvZnRpcnFfY3B1X2RlYWQoKWAuIFxcblxcblRoaXMgY2hhbmdlIG1vZGlmaWVzIG9ubHkgYSBjb21waWxlLXRpbWUgYml0bWFzayBjb25zdGFudCBmb3Igc29mdGlycSBob3RwbHVnIGhhbmRsaW5nIGxvZ2ljLiBJdCBpbnRyb2R1Y2VzIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGRhdGEgY29weWluZyB0byB1c2Vyc3BhY2UsIG5vIHN0cnVjdCBwYWRkaW5nIG9yIGluaXRpYWxpemF0aW9uIGNoYW5nZXMsIGFuZCBubyBicmFuY2hpbmcgb24gdW5pbml0aWFsaXplZCBkYXRhLiBBcyB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrIHJpc2tzLCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGBCSVQoQkxPQ0tfU09GVElSUSlgIHRvIGBTT0ZUSVJRX0hPVFBMVUdfU0FGRV9NQVNLYCBpbiBgaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaGAsIHdoaWNoIGlzIHVzZWQgZHVyaW5nIENQVSBob3RwbHVnIHRlYXJkb3duIGluIGBrZXJuZWwvdGltZS90aWNrLXNjaGVkLmM6cmVwb3J0X2lkbGVfc29mdGlycSgpYCB0byBwcmV2ZW50IGZhbHNlLXBvc2l0aXZlIE5PSFogdGljay1zdG9wIHdhcm5pbmdzIGZvciBibG9jayBzb2Z0aXJxcyBoYW5kbGVkIGJ5IGBibGtfc29mdGlycV9jcHVfZGVhZCgpYC4gXFxuXFxuVGhpcyBjaGFuZ2UgbW9kaWZpZXMgb25seSBhIGNvbXBpbGUtdGltZSBiaXRtYXNrIGNvbnN0YW50IGZvciBzb2Z0aXJxIGhvdHBsdWcgaGFuZGxpbmcgbG9naWMuIEl0IGludHJvZHVjZXMgbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gZGF0YSBjb3B5aW5nIHRvIHVzZXJzcGFjZSwgbm8gc3RydWN0IHBhZGRpbmcgb3IgaW5pdGlhbGl6YXRpb24gY2hhbmdlcywgYW5kIG5vIGJyYW5jaGluZyBvbiB1bmluaXRpYWxpemVkIGRhdGEuIEFzIHRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWsgcmlza3MsIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[1] Phase: Succeeded StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 14:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 14:59:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2] Phase: Succeeded StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 15:00:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-05 14:59:51 +0000 UTC FinishedAt: 2026-09-05 14:59:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowvh7t7/series-workflowvh7t7-convert-artifact-1628368591/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-05 15:00:01 +0000 UTC FinishedAt: 2026-09-05 15:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-05 15:00:01 +0000 UTC FinishedAt: 2026-09-05 15:17:07 +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:*f3276bd2-4962-4638-b3dc-7bf83cc821a5,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-workflowvh7t7/series-workflowvh7t7-convert-artifact-1628368591/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": "3222495c-c888-4d46-94d4-095bf89d57ee", "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-workflowvh7t7/series-workflowvh7t7-build-action-579976725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-05 15:00:01 +0000 UTC FinishedAt: 2026-09-05 15:16:57 +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:*f3276bd2-4962-4638-b3dc-7bf83cc821a5,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-workflowvh7t7/series-workflowvh7t7-convert-artifact-1628368591/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": "3222495c-c888-4d46-94d4-095bf89d57ee", "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-workflowvh7t7/series-workflowvh7t7-build-action-579976725/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-05 15:17:07 +0000 UTC FinishedAt: 2026-09-05 15:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-05 15:17:07 +0000 UTC FinishedAt: 2026-09-05 15:17:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-05 15:17:07 +0000 UTC FinishedAt: 2026-09-05 15:17:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-05 15:17:07 +0000 UTC FinishedAt: 2026-09-05 15:17:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflowvh7t7/series-workflowvh7t7-convert-artifact-3465772830/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-05 15:17:17 +0000 UTC FinishedAt: 2026-09-05 15:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-05 15:17:17 +0000 UTC FinishedAt: 2026-09-05 15:18:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3222495c-c888-4d46-94d4-095bf89d57ee,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-workflowvh7t7/series-workflowvh7t7-build-action-579976725/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-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-05 15:18:48 +0000 UTC FinishedAt: 2026-09-05 15:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-05 15:18:48 +0000 UTC FinishedAt: 2026-09-05 15:18:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-05 15:18:48 +0000 UTC FinishedAt: 2026-09-05 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-05 15:18:48 +0000 UTC FinishedAt: 2026-09-05 15:35:19 +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:*f3276bd2-4962-4638-b3dc-7bf83cc821a5,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-workflowvh7t7/series-workflowvh7t7-convert-artifact-3465772830/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": "e7e9cfcf-4c4f-439a-9862-a0740225e1d6", "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-workflowvh7t7/series-workflowvh7t7-build-action-3599576306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-05 15:18:48 +0000 UTC FinishedAt: 2026-09-05 15:35:09 +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:*f3276bd2-4962-4638-b3dc-7bf83cc821a5,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-workflowvh7t7/series-workflowvh7t7-convert-artifact-3465772830/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": "e7e9cfcf-4c4f-439a-9862-a0740225e1d6", "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-workflowvh7t7/series-workflowvh7t7-build-action-3599576306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-05 15:35:19 +0000 UTC FinishedAt: 2026-09-05 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-05 15:35:19 +0000 UTC FinishedAt: 2026-09-05 15:35:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-05 15:35:19 +0000 UTC FinishedAt: 2026-09-05 15:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-05 15:35:19 +0000 UTC FinishedAt: 2026-09-05 15:36:58 +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:*e7e9cfcf-4c4f-439a-9862-a0740225e1d6,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-workflowvh7t7/series-workflowvh7t7-build-action-3599576306/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-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"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:*3222495c-c888-4d46-94d4-095bf89d57ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7e9cfcf-4c4f-439a-9862-a0740225e1d6,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-workflowvh7t7/series-workflowvh7t7-build-action-579976725/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-workflowvh7t7/series-workflowvh7t7-build-action-3599576306/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 15:37:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 15:37:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"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-workflowvh7t7/series-workflowvh7t7-convert-artifact-617597219/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 15:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 15:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-05 15:37:08 +0000 UTC FinishedAt: 2026-09-05 15:37:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-05 15:37:18 +0000 UTC FinishedAt: 2026-09-05 16:20:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvh7t7[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["report_idle_softirq","blk_softirq_cpu_dead"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"ba285edf3fd1a27f8ec739b5b396d45c98eabee0","config_name":"upstream-apparmor-kasan.config","enable_configs":["NO_HZ_IDLE","HOTPLUG_CPU","BLOCK"],"series_id":"13e60954-845a-4567-a291-3b60e1d0da81","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-05 15:37:18 +0000 UTC FinishedAt: 2026-09-05 16:20:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3222495c-c888-4d46-94d4-095bf89d57ee,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e7e9cfcf-4c4f-439a-9862-a0740225e1d6,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-workflowvh7t7/series-workflowvh7t7-build-action-579976725/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-workflowvh7t7/series-workflowvh7t7-build-action-3599576306/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-workflowvh7t7/series-workflowvh7t7-convert-artifact-617597219/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,}