Name: series-workflow7q6gf Phase: Succeeded StartedAt: 2026-06-24 09:07:58 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[0] Phase: Succeeded StartedAt: 2026-06-24 09:07:58 +0000 UTC FinishedAt: 2026-06-24 09:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[0].run-triage Phase: Succeeded StartedAt: 2026-06-24 09:07:58 +0000 UTC FinishedAt: 2026-06-24 09:26:09 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IWLWIFI", "IWLDVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IWLWIFI", "IWLDVM" ], "series_id": "34f46544-a170-4860-a170-3fb42751ffc8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iwl_op_mode_dvm_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMmI1MzhlODhkZTkwYTNlYzRmOTljZDNhMTQ4YzZhMGI1YTQ5NzFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6MjQ6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXG5pbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xuQEAgLTE1MTEsMTAgJiM0MzsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbiBcdHByaXYtXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcbiBvdXRfdW5pbml0X2RydjpcbiBcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xuLW91dF9mcmVlX2VlcHJvbV9ibG9iOlxuLVx0a2ZyZWUocHJpdi1cdTAwM2VlZXByb21fYmxvYik7XG4gb3V0X2ZyZWVfZWVwcm9tOlxuIFx0a2ZyZWUocHJpdi1cdTAwM2Vudm1fZGF0YSk7XG4mIzQzO291dF9mcmVlX2VlcHJvbV9ibG9iOlxuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuIG91dF9sZWF2ZV90cmFuczpcbiBcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXHUwMDNldHJhbnMpO1xuIG91dF9mcmVlX2h3OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQyYjUzOGU4OGRlOTBhM2VjNGY5OWNkM2ExNDhjNmEwYjVhNDk3MWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAwOToyNDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYwppbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMKQEAgLTE1MTEsMTAgJiM0MzsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKIAlwcml2LSZndDt3b3JrcXVldWUgPSBOVUxMOwogb3V0X3VuaW5pdF9kcnY6CiAJaXdsX3VuaW5pdF9kcnYocHJpdik7Ci1vdXRfZnJlZV9lZXByb21fYmxvYjoKLQlrZnJlZShwcml2LSZndDtlZXByb21fYmxvYik7CiBvdXRfZnJlZV9lZXByb206CiAJa2ZyZWUocHJpdi0mZ3Q7bnZtX2RhdGEpOwomIzQzO291dF9mcmVlX2VlcHJvbV9ibG9iOgomIzQzOwlrZnJlZShwcml2LSZndDtlZXByb21fYmxvYik7CiBvdXRfbGVhdmVfdHJhbnM6CiAJaXdsX3RyYW5zX29wX21vZGVfbGVhdmUocHJpdi0mZ3Q7dHJhbnMpOwogb3V0X2ZyZWVfaHc6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjcKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGl3bHdpZmkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBkaWZmIGlzIG1lc3Npbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IHNvbWV0aGluZyB0aGF0IHJhaXNlcyBhbiBleWVicm93LiBUaGV5JiMzOTt2ZSBzd2FwcGVkIHRoZSBvcmRlciBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uIGZvciBgcHJpdi0mZ3Q7ZWVwcm9tX2Jsb2JgIGFuZCBgcHJpdi0mZ3Q7bnZtX2RhdGFgIGluIG9uZSBvZiB0aGUgZXJyb3IgcGF0aHMuIE5vdCBqdXN0IHRoZSBvcmRlciwgYnV0IGFsc28gdGhlIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZnJlZXM6IGBvdXRfZnJlZV9lZXByb21fYmxvYmAgYW5kIGBvdXRfZnJlZV9lZXByb21gLiBJIGNhbiBzZWUgdGhlIGNvZGUgbm93OiB0aGV5JiMzOTt2ZSBzaW1wbHkgZmxpcHBlZCB0aGUgbGluZXMgYW5kIHRoZSBsYWJlbHMgZm9yIHRoZSBmcmVlcy4KClRoaXMgaXMgYSByZWQgZmxhZy4gTWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHNpbXBsZSBzd2FwIGxpa2UgdGhpcyBjb3VsZCBpbnRyb2R1Y2UgYSBzdWJ0bGUgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGxlYWQgdG8gYSBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiB0aGUgY29kZSBtaXN0YWtlbmx5IGp1bXBzIHRvIHRoZSB3cm9uZyBjbGVhbnVwIGxhYmVsLiBUaGUgY29tcGlsZXIgaXNuJiMzOTt0IGdvaW5nIHRvIHNhdmUgdXMgaGVyZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLgoKTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGxhYmVscyBhcmUgdXNlZCDigJMgd2hlcmUgdGhleSYjMzk7cmUganVtcGVkIHRvLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgbG9va3MgbGlrZS4gSSBuZWVkIHRvIHRyYWNlIGV2ZXJ5IHBhdGggdGhyb3VnaCB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbGwgY2FsbHMgYW5kIHVzYWdlcyBvZiB0aG9zZSBsYWJlbHMuIFRoaXMgZmVlbHMgbGlrZSBpdCB3YXJyYW50cyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIHRvIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3dhcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpd2xfb3BfbW9kZV9kdm1fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMTY9c3RhdGljIGludCBpd2xfbnZtX2NoZWNrX3ZlcnNpb24oc3RydWN0IGl3bF9udm1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTIzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjMzOnN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMjM0LVx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgaXdsX3JmX2NmZyAqY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxMzk6XHQuc3RhcnQgPSBpd2xfb3BfbW9kZV9kdm1fc3RhcnQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE0MC1cdC5zdG9wID0gaXdsX29wX21vZGVfZHZtX3N0b3AsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIEZvY3VzaW5nIG9uIEVycm9yIEhhbmRsaW5nKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGZhaWx1cmVzIGR1cmluZyB0aGUgc3RhcnR1cCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBncmFjZWZ1bGx5IChvciBub3Qgc28gZ3JhY2VmdWxseSkgcmVjb3ZlcnMsIHJlcG9ydHMgZXJyb3JzLCBvciBjbGVhbnMgdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhIGhpY2N1cCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doYXQgaWZzJiMzNDsgYW5kIHRoZSAmIzM0O3RoZW4gd2hhdHMmIzM0OyBvZiB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhpbmdzIGRvbiYjMzk7dCBnbyBhcyBwbGFubmVkLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyBjb2RlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ4MDpcdFx0XHQgc2l6ZW9mKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlZndfdmVyc2lvbiksXG4xNDgxOlx0XHRcdCBcJiMzNDslLjMxc1wmIzM0OywgZnctXHUwMDNlZndfdmVyc2lvbik7XG4xNDgyOlx0XG4xNDgzOlx0XHRwcml2LVx1MDAzZW5ld19zY2FuX3RocmVzaG9sZF9iZWhhdmlvdXIgPVxuMTQ4NDpcdFx0XHQhISh1Y29kZV9mbGFncyBcdTAwMjYgSVdMX1VDT0RFX1RMVl9GTEFHU19ORVdTQ0FOKTtcbjE0ODU6XHRcbjE0ODY6XHRcdHByaXYtXHUwMDNlcGh5X2NhbGliX2NoYWluX25vaXNlX3Jlc2V0X2NtZCA9XG4xNDg3Olx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemU7XG4xNDg4Olx0XHRwcml2LVx1MDAzZXBoeV9jYWxpYl9jaGFpbl9ub2lzZV9nYWluX2NtZCA9XG4xNDg5Olx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemUgJiM0MzsgMTtcbjE0OTA6XHRcbjE0OTE6XHRcdC8qIGluaXRpYWxpemUgYWxsIHZhbGlkIGNvbnRleHRzICovXG4xNDkyOlx0XHRpd2xfaW5pdF9jb250ZXh0KHByaXYsIHVjb2RlX2ZsYWdzKTtcbjE0OTM6XHRcbjE0OTQ6XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuMTQ5NTpcdFx0ICogVGhpcyBpcyBzdGlsbCBwYXJ0IG9mIHByb2JlKCkgaW4gYSBzZW5zZS4uLlxuMTQ5NjpcdFx0ICpcbjE0OTc6XHRcdCAqIDcuIFNldHVwIGFuZCByZWdpc3RlciB3aXRoIG1hYzgwMjExIGFuZCBkZWJ1Z2ZzXG4xNDk4Olx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4xNDk5Olx0XHRlcnIgPSBpd2xhZ25fbWFjX3NldHVwX3JlZ2lzdGVyKHByaXYsIFx1MDAyNmZ3LVx1MDAzZXVjb2RlX2NhcGEpO1xuMTUwMDpcdFx0aWYgKGVycilcbjE1MDE6XHRcdFx0Z290byBvdXRfZGVzdHJveV93b3JrcXVldWU7XG4xNTAyOlx0XG4xNTAzOlx0XHRpd2xfZGJnZnNfcmVnaXN0ZXIocHJpdiwgZGJnZnNfZGlyKTtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHVybiBvcF9tb2RlO1xuMTUwNjpcdFxuMTUwNzpcdG91dF9kZXN0cm95X3dvcmtxdWV1ZTpcbjE1MDg6XHRcdGl3bF90dF9leGl0KHByaXYpO1xuMTUwOTpcdFx0aXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpO1xuMTUxMDpcdFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V3b3JrcXVldWUpO1xuMTUxMTpcdFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuMTUxMjpcdG91dF91bmluaXRfZHJ2OlxuMTUxMzpcdFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4xNTE0Olx0b3V0X2ZyZWVfZWVwcm9tOlxuMTUxNTpcdFx0a2ZyZWUocHJpdi1cdTAwM2Vudm1fZGF0YSk7XG4xNTE2Olx0b3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG4xNTE3Olx0XHRrZnJlZShwcml2LVx1MDAzZWVlcHJvbV9ibG9iKTtcbjE1MTg6XHRvdXRfbGVhdmVfdHJhbnM6XG4xNTE5Olx0XHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVx1MDAzZXRyYW5zKTtcbjE1MjA6XHRvdXRfZnJlZV9odzpcbjE1MjE6XHRcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXHUwMDNlaHcpO1xuMTUyMjpcdG91dDpcbjE1MjM6XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4xNTI0Olx0fVxuMTUyNTpcdFxuMTUyNjpcdHN0YXRpYyB2b2lkIGl3bF9vcF9tb2RlX2R2bV9zdG9wKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSlcbjE1Mjc6XHR7XG4xNTI4Olx0XHRzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBJV0xfT1BfTU9ERV9HRVRfRFZNKG9wX21vZGUpO1xuMTUyOTpcdFxuMTUzMDpcdFx0SVdMX0RFQlVHX0lORk8ocHJpdiwgXCYjMzQ7KioqIFVOTE9BRCBEUklWRVIgKioqXFxuXCYjMzQ7KTtcbjE1MzE6XHRcbjE1MzI6XHRcdGl3bGFnbl9tYWNfdW5yZWdpc3Rlcihwcml2KTtcbjE1MzM6XHRcbjE1MzQ6XHRcdGl3bF90dF9leGl0KHByaXYpO1xuMTUzNTpcdFxuMTUzNjpcdFx0a2ZyZWUocHJpdi1cdTAwM2VlZXByb21fYmxvYik7XG4xNTM3Olx0XHRrZnJlZShwcml2LVx1MDAzZW52bV9kYXRhKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdC8qbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqL1xuMTU0MDpcdFxuMTU0MTpcdFx0LyogaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcgY2FsbHMgaXdsYWduX21hY19zdG9wLCB3aGljaCBmbHVzaGVzXG4xNTQyOlx0XHQgKiBwcml2LVx1MDAzZXdvcmtxdWV1ZS4uLiBzbyB3ZSBjYW4mIzM5O3QgdGFrZSBkb3duIHRoZSB3b3JrcXVldWVcbjE1NDM6XHRcdCAqIHVudGlsIG5vdy4uLiAqL1xuMTU0NDpcdFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V3b3JrcXVldWUpO1xuMTU0NTpcdFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuMTU0NjpcdFxuMTU0NzpcdFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4xNTQ4Olx0XG4xNTQ5Olx0XHRkZXZfa2ZyZWVfc2tiKHByaXYtXHUwMDNlYmVhY29uX3NrYik7XG4xNTUwOlx0XG4xNTUxOlx0XHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVx1MDAzZXRyYW5zKTtcbjE1NTI6XHRcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXHUwMDNlaHcpO1xuMTU1MzpcdH1cbjE1NTQ6XHRcbjE1NTU6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRlc2NfbG9va3VwX3RleHRbXSA9IHtcbjE1NTY6XHRcdFwmIzM0O09LXCYjMzQ7LFxuMTU1NzpcdFx0XCYjMzQ7RkFJTFwmIzM0OyxcbjE1NTg6XHRcdFwmIzM0O0JBRF9QQVJBTVwmIzM0OyxcbjE1NTk6XHRcdFwmIzM0O0JBRF9DSEVDS1NVTVwmIzM0OyxcbjE1NjA6XHRcdFwmIzM0O05NSV9JTlRFUlJVUFRfV0RHXCYjMzQ7LFxuMTU2MTpcdFx0XCYjMzQ7U1lTQVNTRVJUXCYjMzQ7LFxuMTU2MjpcdFx0XCYjMzQ7RkFUQUxfRVJST1JcJiMzNDssXG4xNTYzOlx0XHRcJiMzNDtCQURfQ09NTUFORFwmIzM0OyxcbjE1NjQ6XHRcdFwmIzM0O0hXX0VSUk9SX1RVTkVfTE9DS1wmIzM0OyxcbjE1NjU6XHRcdFwmIzM0O0hXX0VSUk9SX1RFTVBFUkFUVVJFXCYjMzQ7LFxuMTU2NjpcdFx0XCYjMzQ7SUxMRUdBTF9DSEFOX0ZSRVFcJiMzNDssXG4xNTY3Olx0XHRcJiMzNDtWQ0NfTk9UX1NUQUJMRVwmIzM0OyxcbjE1Njg6XHRcdFwmIzM0O0ZIX0VSUk9SXCYjMzQ7LFxuMTU2OTpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9IT1NUXCYjMzQ7LFxuMTU3MDpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9BQ1RJT05fUFRcJiMzNDssXG4xNTcxOlx0XHRcJiMzNDtOTUlfSU5URVJSVVBUX1VOS05PV05cJiMzNDssXG4xNTcyOlx0XHRcJiMzNDtVQ09ERV9WRVJTSU9OX01JU01BVENIXCYjMzQ7LFxuMTU3MzpcdFx0XCYjMzQ7SFdfRVJST1JfQUJTX0xPQ0tcJiMzNDssXG4xNTc0Olx0XHRcJiMzNDtIV19FUlJPUl9DQUxfTE9DS19GQUlMXCYjMzQ7LFxuMTU3NTpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVFwmIzM0OyxcbjE1NzY6XHRcdFwmIzM0O05NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFRcJiMzNDssXG4xNTc3Olx0XHRcJiMzNDtOTUlfVFJNX0hXX0VSXCYjMzQ7LFxuMTU3ODpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9UUk1cJiMzNDssXG4xNTc5Olx0XHRcJiMzNDtOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUg4oCTIHRoZSBjaGFuZ2Ugc2VlbXMgdHJpdmlhbCwgYWxtb3N0IGxpa2UgYSB0eXBvIGNvcnJlY3Rpb24uIEl0IGFwcGVhcnMgdG8ganVzdCBzd2FwIHRoZSBwb3NpdGlvbnMgb2YgYG91dF9mcmVlX2VlcHJvbWAgYW5kIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgaW4gdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gSW5pdGlhbGx5LCBpdCBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIGNvZGUgYWRkaXRpb25zLCBidXQgdGhlbiB0aGUgZGlmZiB2aWV3IG1hZGUgaXQgY2xlYXIgaXQmIzM5O3MgYSByZW9yZGVyaW5nLCBub3QgYW4gYWRkaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHJlb3JkZXJpbmcgb2NjdXJyZWQgYW5kIHdoZXRoZXIgaXQgaGFzIGltcGxpY2F0aW9ucy4KCk15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIHRoZSB2YXJpYWJsZXMgdGhleSBvcGVyYXRlIG9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBgb3V0X2ZyZWVfZWVwcm9tYCBhbmQgYG91dF9mcmVlX2VlcHJvbV9ibG9iYCBhcmUgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgdG8gYmUgc3VyZSB0aGlzICYjMzQ7c2ltcGxlJiMzNDsgY2hhbmdlIGlzIHRydWx5IGhhcm1sZXNzIG9yIGlmIGl0IGludHJvZHVjZXMgc3VidGxlIGlzc3VlcywgbGlrZSBkb3VibGUgZnJlZXMgb3IgbGVha3MsIGRlcGVuZGluZyBvbiB0aGUgY29udHJvbCBmbG93LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgcGVyZm9ybSBhIGNvZGUgYXVkaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z290byBvdXRfZnJlZV9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDA4LVx0XHRlcnIgPSAtRU5PTUVNO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MDk6XHRcdGdvdG8gb3V0X2ZyZWVfZWVwcm9tX2Jsb2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxMy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQxNDpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQxODpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2Mi1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQ2MzpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEzCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgLSBMZXQmIzM5O3MgRGlnIEluKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGlzc2VjdCB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDEzODAgdGhyb3VnaCAxNDMwLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byB0aGUgRGlyZWN0IFZpcnR1YWwgTWVtb3J5IChEVk0pIHN0YXJ0LXVwIHByb2Nlc3Mgd2l0aGluIHRoZSBJbnRlbCBXaXJlbGVzcyBkcml2ZXIuCgpHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWdtZW50IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgcHJldHR5IGZ1bmRhbWVudGFsLiBQZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIERWTS1yZWxhdGVkIGhhcmR3YXJlIHJlc291cmNlcywgdGhlIHNldHRpbmcgdXAgb2YgRE1BIHRyYW5zZmVycywgb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtb3J5IG1hcHBpbmdzLiBJdCBjb3VsZCBldmVuIGJlIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byB0aGUgRFZNIGVuZ2luZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHRoZSBmdW5jdGlvbiBjYWxscyBtYWRlIHdpdGhpbiB0aGF0IHJhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0ZXBzIGl0IHRha2VzIHRvIGdldCB0aGUgRFZNIG9wZXJhdGlvbmFsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIGJ1ZmZlcnMsIHJlZ2lzdGVyaW5nIGhhcmR3YXJlLCBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcywgb3IgY29tbXVuaWNhdGluZyB3aXRoIGZpcm13YXJlPyBNeSBhaW0gaXMgdG8gZ2xlYW4gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgRFZNIHN0YXJ0dXAgc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcdCAqL1xuMTM4MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0aXN0aWNzLmxvY2spO1xuMTM4MjpcdFxuMTM4MzpcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXG4xMzg0Olx0XHQgKiAyLiBSZWFkIFJFViByZWdpc3RlclxuMTM4NTpcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xuMTM4NjpcdFx0SVdMX0lORk8ocHJpdiwgXCYjMzQ7RGV0ZWN0ZWQgJXMsIFJFVj0weCVYXFxuXCYjMzQ7LFxuMTM4NzpcdFx0XHRwcml2LVx1MDAzZXRyYW5zLVx1MDAzZWluZm8ubmFtZSwgcHJpdi1cdTAwM2V0cmFucy1cdTAwM2VpbmZvLmh3X3Jldik7XG4xMzg4Olx0XG4xMzg5Olx0XHRlcnIgPSBpd2xfdHJhbnNfc3RhcnRfaHcocHJpdi1cdTAwM2V0cmFucyk7XG4xMzkwOlx0XHRpZiAoZXJyKVxuMTM5MTpcdFx0XHRnb3RvIG91dF9sZWF2ZV90cmFucztcbjEzOTI6XHRcbjEzOTM6XHRcdC8qIFJlYWQgdGhlIEVFUFJPTSAqL1xuMTM5NDpcdFx0ZXJyID0gaXdsX3JlYWRfZWVwcm9tKHByaXYtXHUwMDNldHJhbnMsIFx1MDAyNnByaXYtXHUwMDNlZWVwcm9tX2Jsb2IsXG4xMzk1Olx0XHRcdFx0ICAgICAgXHUwMDI2cHJpdi1cdTAwM2VlZXByb21fYmxvYl9zaXplKTtcbjEzOTY6XHRcdGlmIChlcnIpIHtcbjEzOTc6XHRcdFx0SVdMX0VSUihwcml2LCBcJiMzNDtVbmFibGUgdG8gaW5pdCBFRVBST01cXG5cJiMzNDspO1xuMTM5ODpcdFx0XHRnb3RvIG91dF9sZWF2ZV90cmFucztcbjEzOTk6XHRcdH1cbjE0MDA6XHRcbjE0MDE6XHRcdC8qIFJlc2V0IGNoaXAgdG8gc2F2ZSBwb3dlciB1bnRpbCB3ZSBsb2FkIHVDb2RlIGR1cmluZyBcJiMzNDt1cFwmIzM0Oy4gKi9cbjE0MDI6XHRcdGl3bF90cmFuc19zdG9wX2RldmljZShwcml2LVx1MDAzZXRyYW5zKTtcbjE0MDM6XHRcbjE0MDQ6XHRcdHByaXYtXHUwMDNlbnZtX2RhdGEgPSBpd2xfcGFyc2VfZWVwcm9tX2RhdGEocHJpdi1cdTAwM2V0cmFucywgcHJpdi1cdTAwM2VjZmcsXG4xNDA1Olx0XHRcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZWVlcHJvbV9ibG9iLFxuMTQwNjpcdFx0XHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VlZXByb21fYmxvYl9zaXplKTtcbjE0MDc6XHRcdGlmICghcHJpdi1cdTAwM2Vudm1fZGF0YSkge1xuMTQwODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTQwOTpcdFx0XHRnb3RvIG91dF9mcmVlX2VlcHJvbV9ibG9iO1xuMTQxMDpcdFx0fVxuMTQxMTpcdFxuMTQxMjpcdFx0ZXJyID0gaXdsX252bV9jaGVja192ZXJzaW9uKHByaXYtXHUwMDNlbnZtX2RhdGEsIHByaXYtXHUwMDNldHJhbnMpO1xuMTQxMzpcdFx0aWYgKGVycilcbjE0MTQ6XHRcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG4xNDE1Olx0XG4xNDE2Olx0XHRlcnIgPSBpd2xfZWVwcm9tX2luaXRfaHdfcGFyYW1zKHByaXYpO1xuMTQxNzpcdFx0aWYgKGVycilcbjE0MTg6XHRcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG4xNDE5Olx0XG4xNDIwOlx0XHQvKiBleHRyYWN0IE1BQyBBZGRyZXNzICovXG4xNDIxOlx0XHRtZW1jcHkocHJpdi1cdTAwM2VhZGRyZXNzZXNbMF0uYWRkciwgcHJpdi1cdTAwM2Vudm1fZGF0YS1cdTAwM2Vod19hZGRyLCBFVEhfQUxFTik7XG4xNDIyOlx0XHRJV0xfREVCVUdfSU5GTyhwcml2LCBcJiMzNDtNQUMgYWRkcmVzczogJXBNXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWFkZHJlc3Nlc1swXS5hZGRyKTtcbjE0MjM6XHRcdHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYWRkcmVzc2VzID0gcHJpdi1cdTAwM2VhZGRyZXNzZXM7XG4xNDI0Olx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZW5fYWRkcmVzc2VzID0gMTtcbjE0MjU6XHRcdG51bV9tYWMgPSBwcml2LVx1MDAzZW52bV9kYXRhLVx1MDAzZW5faHdfYWRkcnM7XG4xNDI2Olx0XHRpZiAobnVtX21hYyBcdTAwM2UgMSkge1xuMTQyNzpcdFx0XHRtZW1jcHkocHJpdi1cdTAwM2VhZGRyZXNzZXNbMV0uYWRkciwgcHJpdi1cdTAwM2VhZGRyZXNzZXNbMF0uYWRkcixcbjE0Mjg6XHRcdFx0ICAgICAgIEVUSF9BTEVOKTtcbjE0Mjk6XHRcdFx0cHJpdi1cdTAwM2VhZGRyZXNzZXNbMV0uYWRkcls1XSYjNDM7JiM0Mzs7XG4xNDMwOlx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlbl9hZGRyZXNzZXMmIzQzOyYjNDM7O1xuMTQzMTpcdFx0fVxuMTQzMjpcdFxuMTQzMzpcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxuMTQzNDpcdFx0ICogNC4gU2V0dXAgSFcgY29uc3RhbnRzXG4xNDM1Olx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xuMTQzNjpcdFx0aXdsX3NldF9od19wYXJhbXMocHJpdik7XG4xNDM3Olx0XG4xNDM4Olx0XHRpZiAoIShwcml2LVx1MDAzZW52bV9kYXRhLVx1MDAzZXNrdV9jYXBfaXBhbl9lbmFibGUpKSB7XG4xNDM5Olx0XHRcdElXTF9ERUJVR19JTkZPKHByaXYsIFwmIzM0O1lvdXIgRUVQUk9NIGRpc2FibGVkIFBBTlxcblwmIzM0Oyk7XG4xNDQwOlx0XHRcdHVjb2RlX2ZsYWdzIFx1MDAyNj0gfklXTF9VQ09ERV9UTFZfRkxBR1NfUEFOO1xuMTQ0MTpcdFx0XHQvKlxuMTQ0MjpcdFx0XHQgKiBpZiBub3QgUEFOLCB0aGVuIGRvbiYjMzk7dCBzdXBwb3J0IFAyUCAtLSBtaWdodCBiZSBhIHVDb2RlXG4xNDQzOlx0XHRcdCAqIHBhY2thZ2luZyBidWcgb3IgZHVlIHRvIHRoZSBlZXByb20gY2hlY2sgYWJvdmVcbjE0NDQ6XHRcdFx0ICovXG4xNDQ1Olx0XHRcdHByaXYtXHUwMDNlc3RhX2tleV9tYXhfbnVtID0gU1RBX0tFWV9NQVhfTlVNO1xuMTQ0NjpcdFx0XHR0cmFucy1cdTAwM2Vjb25mLmNtZF9xdWV1ZSA9IElXTF9ERUZBVUxUX0NNRF9RVUVVRV9OVU07XG4xNDQ3Olx0XHR9XG4xNDQ4Olx0XG4xNDQ5Olx0XHQvKioqKioqKioqKioqKioqKioqKlxuMTQ1MDpcdFx0ICogNS4gU2V0dXAgcHJpdlxuMTQ1MTpcdFx0ICoqKioqKioqKioqKioqKioqKiovXG4xNDUyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJV0xfTUFYX0hXX1FVRVVFUzsgaSYjNDM7JiM0MzspIHtcbjE0NTM6XHRcdFx0cHJpdi1cdTAwM2VxdWV1ZV90b19tYWM4MDIxMVtpXSA9IElXTF9JTlZBTElEX01BQzgwMjExX1FVRVVFO1xuMTQ1NDpcdFx0XHRpZiAoaSBcdTAwM2MgSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFIFx1MDAyNlx1MDAyNlxuMTQ1NTpcdFx0XHQgICAgaSAhPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNIFx1MDAyNlx1MDAyNlxuMTQ1NjpcdFx0XHQgICAgaSAhPSBJV0xfSVBBTl9DTURfUVVFVUVfTlVNKVxuMTQ1NzpcdFx0XHRcdHByaXYtXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBpO1xuMTQ1ODpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnByaXYtXHUwMDNlcXVldWVfc3RvcF9jb3VudFtpXSwgMCk7XG4xNDU5Olx0XHR9XG4xNDYwOlx0XG4xNDYxOlx0XHRlcnIgPSBpd2xfaW5pdF9kcnYocHJpdik7XG4xNDYyOlx0XHRpZiAoZXJyKVxuMTQ2MzpcdFx0XHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcbjE0NjQ6XHRcbjE0NjU6XHRcdC8qIEF0IHRoaXMgcG9pbnQgYm90aCBodyBhbmQgcHJpdiBhcmUgaW5pdGlhbGl6ZWQuICovXG4xNDY2Olx0XG4xNDY3Olx0XHQvKioqKioqKioqKioqKioqKioqKipcbjE0Njg6XHRcdCAqIDYuIFNldHVwIHNlcnZpY2VzXG4xNDY5Olx0XHQgKioqKioqKioqKioqKioqKioqKiovXG4xNDcwOlx0XHRlcnIgPSBpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTtcbjE0NzE6XHRcdGlmIChlcnIpXG4xNDcyOlx0XHRcdGdvdG8gb3V0X3VuaW5pdF9kcnY7XG4xNDczOlx0XG4xNDc0Olx0XHRpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7XG4xNDc1Olx0XG4xNDc2Olx0XHRpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTtcbjE0Nzc6XHRcdGl3bF90dF9pbml0aWFsaXplKHByaXYpO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0c25wcmludGYocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2Vmd192ZXJzaW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiB0aGUgaXdsd2lmaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgaXdsd2lmaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgaXQgaGFuZGxlcyBFRVBST00gZGF0YSBsb2FkaW5nLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgdGhpcyBzZXF1ZW5jZTogSXQgcmVhZHMgdGhlIEVFUFJPTSwgc3RvcHMgdGhlIGRldmljZSwgcGFyc2VzIHRoZSBFRVBST00gZGF0YSBpbnRvIGBwcml2LSZndDtudm1fZGF0YWAsIGFuZCB0aGVuIGNoZWNrcyBpdHMgdmVyc2lvbi4gSWYgcGFyc2luZyBmYWlscyAobWVhbmluZyBgcHJpdi0mZ3Q7bnZtX2RhdGFgIGlzIE5VTEwpLCB0aGUgY29kZSBqdW1wcyB0byBhIGNsZWFudXAgbGFiZWwsIGBvdXRfZnJlZV9lZXByb21fYmxvYmAuIElmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBqdW1wcyB0byBgb3V0X2ZyZWVfZWVwcm9tYC4gVGhlIHByb2JsZW0gaXMsIHVuZGVyIHRoZSBvcmlnaW5hbCBlcnJvciBoYW5kbGluZywgaWYgcGFyc2luZyBmYWlscywgaXQgY29ycmVjdGx5IGZyZWVzIGBwcml2LSZndDtlZXByb21fYmxvYmAgKHdoaWNoIGNvbnRhaW5zIHRoZSByYXcgRUVQUk9NIGRhdGEpLCBidXQgX3RoZW5fIGZyZWVzIHRoZSBOVUxMIHBvaW50ZXIgYHByaXYtJmd0O252bV9kYXRhYC4gSG93ZXZlciwgaWYgdGhlIHZlcnNpb24gY2hlY2sgZmFpbHMsIGl0IGZyZWVzIGBwcml2LSZndDtudm1fZGF0YWAgYnV0ICpkb2VzbiYjMzk7dCogZnJlZSBgcHJpdi0mZ3Q7ZWVwcm9tX2Jsb2JgLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsuIFRoaXMgcGF0Y2ggc2ltcGx5IHJlb3JkZXJzIHRoZSBjbGVhbnVwIGxhYmVscyBzbyB0aGF0IGBvdXRfZnJlZV9lZXByb21gIGZyZWVzIGBudm1fZGF0YWAgYW5kIHRoZW4gKmZhbGxzIHRocm91Z2gqIHRvIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgd2hpY2ggZnJlZXMgYGVlcHJvbV9ibG9iYC4gVGhpcyBmaXhlcyB0aGUgbGVhay4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCwgd2hpY2ggaXMgdGhlIGBzdGFydGAgY2FsbGJhY2sgZm9yIGBpd2xfZHZtX29wc2AuIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIHN0YXJ0cyB1cC4gSXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbWVtb3J5IGxlYWsgZml4LiBUaGlzIGRyaXZlciBpcyBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rLCB3aGljaCBtZWFucyBpdCByZWxpZXMgb24gYWN0dWFsIFBDSSBoYXJkd2FyZS4gVHlwaWNhbGx5LCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBkb24mIzM5O3QgZW11bGF0ZSBQQ0kgaGFyZHdhcmUgdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgcGFzc2VkIHRocm91Z2ggb3IgZW11bGF0ZWQuIEhvd2V2ZXIsIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgbWVjaGFuaXNtcyBmb3IgZnV6emluZyBQQ0kgZHJpdmVycywgcG90ZW50aWFsbHkgdXNpbmcgYHZoY2lgIG9yIHNpbWlsYXIgdGVjaG5pcXVlcy4gQW5kIGl0IGNhbiBmdXp6IFBDSSBjb25maWcgc3BhY2Ugb3IgdXNlIGBzeXpfcGNpX2RldmljZV9hZGRgIHRvIGNyZWF0ZSBQQ0kgZGV2aWNlcyBpZiB0aGUgZnV6emluZyBpcyBlbmFibGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgc3l6a2FsbGVyIGVtdWxhdGUgaXdsd2lmaSBoYXJkd2FyZSBkaXJlY3RseT8gTm8sIGl0IGRvZXNuJiMzOTt0LiBCdXQsIHN5emthbGxlciBkb2VzIGhhdmUgUENJIGZ1enppbmcuIFRoZSBwYXRjaCBndWlkZWxpbmVzIHNheSBub3QgdG8gbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSG93ZXZlciwgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBQQ0kgZGV2aWNlcyBhbmQgcHJvdmlkZSBmdXp6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhhdCBtZWFucyB0aGVyZSAqaXMqIGEgcGF0aCB0byByZWFjaCB0aGlzIGNvZGUgd2l0aCBQQ0kgZnV6emluZyEgVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBub3cgZG91YmxlLWNoZWNrIGlmIGFueSBzcGVjaWZpYyBjb25maWdzIGFyZSBuZWVkZWQgdG8gYWN0dWFsbHkgdHJpZ2dlciBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElXTFdJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjQ5OmNvbmZpZyBJV0xXSUZJX0tVTklUX1RFU1RTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTktXHRib29sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTg0PWNvbmZpZyBJV0xNTERcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24mIzM5O3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVx0Ym9vbFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz0xMDU9bWVudSBcJiMzNDtEZWJ1Z2dpbmcgT3B0aW9uc1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O0VuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMi1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEzOTpjb25maWcgSVdMV0lGSV9ERVZJQ0VfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZXZpY2UgYWNjZXNzIHRyYWNpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIElXTERWTSoqCgpSaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYElXTERWTWAuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBhIGtleSBjb21wb25lbnQgaW4gdGhpcyBwcm9qZWN0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNldHVwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBpbml0aWFsIGNoZWNrIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgc29tZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgdGhlaXIgY3VycmVudCB2YWx1ZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3lzdGVtcywgYW5kIHVsdGltYXRlbHksIHJldmVhbCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB0aGF0IHJlcXVpcmUgYWRkaXRpb25hbCBhdHRlbnRpb24uIFNvLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gVGhlIGNvbmZpZyBmaWxlcywgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgbW9zdCByZWxldmFudCB0byBgSVdMRFZNYCBhbmQgdGhlbiBiZWdpbiBwYXJzaW5nIHRoZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2guIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIG5ldHdvcmsgc2V0dGluZ3MsIHNlY3VyaXR5IHByb3RvY29scywgYW5kIGludGVncmF0aW9uIHBvaW50cyB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHZlcnNpb25zLCBlcnJvciBsb2dzLCBhbmQgcmVjZW50IGNoYW5nZXMuIE9uY2UgSSBoYXZlIHRoZSBiYXNlbGluZSwgSSB3aWxsIGtub3cgd2hlcmUgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVdMRFZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGl3bHdpZmkgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBEVk1gIOKAkyBEeW5hbWljIFZpcnR1YWwgTWFjaGluZXMsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlIHdpdGhpbiB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGRlZmluZWQsIGFuZCBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIG90aGVyIG9wdGlvbnMsIG1heWJlIGJvYXJkIHN1cHBvcnQsIHJlZ3VsYXRvcnkgcmVxdWlyZW1lbnRzLCBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGF0IEtjb25maWcgZmlsZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLCBhbmQgaG93IGBEVk1gIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCkuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgd2lsbCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGBEVk1gIGJlaGF2ZXMgd2l0aGluIHRoaXMgZHJpdmVyLCBhbmQgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBteSBvd24gaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz01OD1jb25maWcgSVdMV0lGSV9MRURTXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBJV0xNVk0gfHwgSVdMRFZNXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjItXHRzZWxlY3QgTEVEU19UUklHR0VSU1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2Njpjb25maWcgSVdMRFZNXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Njc6XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIERWTSBGaXJtd2FyZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjgtXHRkZXBlbmRzIG9uIE1BQzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjktXHRoZWxwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NzA6XHQgIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRoZSBEVk0gZmlybXdhcmUuIFRoZSBsaXN0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNzEtXHQgIG9mIHRoZSBkZXZpY2VzIHRoYXQgdXNlIHRoaXMgZmlybXdhcmUgaXMgYXZhaWxhYmxlIGhlcmU6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTk1PWNvbmZpZyBJV0xXSUZJX09QTU9ERV9NT0RVTEFSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTYtXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTc6XHRkZWZhdWx0IHkgaWYgSVdMRFZNPW1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy05OC1cdGRlZmF1bHQgeSBpZiBJV0xNVk09bVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTAyOmNvbW1lbnQgXCYjMzQ7V0FSTklORzogaXdsd2lmaSBpcyB1c2VsZXNzIHdpdGhvdXQgSVdMRFZNIG9yIElXTE1WTSBvciBJV0xNTERcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDM6XHRkZXBlbmRzIG9uIElXTERWTT1uIFx1MDAyNlx1MDAyNiBJV0xNVk09biBcdTAwMjZcdTAwMjYgSVdMTUxEPW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgVmFsdWUgb2YgRnV6emluZyBhIE1lbW9yeSBMZWFrIEZpeCoqCgpPa2F5LCBzbyB0aGUgaXNzdWUgY2VudGVycyBhcm91bmQgdGhlIGBJV0xEVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiB0aGlzIG1lbW9yeSBsZWFrIGZpeC4gSXQmIzM5O3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYSBkcml2ZXImIzM5O3MgcHJvYmUgb3Igc3RhcnQgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGNvbmRpdGlvbnMuIFRoYXQmIzM5O3MgZ29vZCB0byBjb25zaWRlciBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIENhbiBJIHRyaWdnZXIgaXQ/IE5vdywgdGhpbmtpbmcgYWJvdXQgbXkgdGVzdGluZyB0b29sYm94LCBJIHJlbWVtYmVyIGBzeXprYWxsZXJgIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gUG90ZW50aWFsbHksIHRoYXQgY291bGQgYmUgYSB3YXkgaW4uCgpCdXQgZmlyc3QsIGEgY3J1Y2lhbCBwb2ludDogZG9lcyB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24gZXZlbiBnZXQgY2FsbGVkIGluIHRoaXMgc2NlbmFyaW8/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgaW52ZXN0aW5nIGFueSB0aW1lIGluIGNyYWZ0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gSSYjMzk7bGwgY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9kdm1fb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9oY21kX2FyciBpd2xfZHZtX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MTIzMz1zdGF0aWMgc3RydWN0IGl3bF9vcF9tb2RlICppd2xfb3BfbW9kZV9kdm1fc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyNjMtXHRvcF9tb2RlID0gaHctXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjY0Olx0b3BfbW9kZS1cdTAwM2VvcHMgPSBcdTAwMjZpd2xfZHZtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMjY1LVx0cHJpdiA9IElXTF9PUF9NT0RFX0dFVF9EVk0ob3BfbW9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTIxMjQ9c3RhdGljIGJvb2wgaXdsX3NldF9od19yZmtpbGxfc3RhdGUoc3RydWN0IGl3bF9vcF9tb2RlICpvcF9tb2RlLCBib29sIHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxMzg6c3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BfbW9kZV9vcHMgaXdsX2R2bV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjEzOS1cdC5zdGFydCA9IGl3bF9vcF9tb2RlX2R2bV9zdGFydCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjE1Nz1zdGF0aWMgaW50IF9faW5pdCBpd2xfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxNjg6XHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFwmIzM0O2l3bGR2bVwmIzM0OywgXHUwMDI2aXdsX2R2bV9vcHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTIxNjktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGl3bHdpZmlgIGRyaXZlciBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBvcGVyYXRpbmcgbW9kZSBpcyByZWdpc3RlcmVkLiBJIHNlZSBgaXdsX29wbW9kZV9yZWdpc3RlcmAgbWVudGlvbmVkIGFuZCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IHRoZSBgc3RhcnRgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCwgaW52b2tlZCBieSB0aGUgYGl3bHdpZmlgIGNvcmUgd2hlbiBhIGNvbXBhdGlibGUgZGV2aWNlIGlzIGRldGVjdGVkIGR1cmluZyBwcm9iaW5nLiBNeSBpbnN0aW5jdCBpcyB0byBub3cgZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgaXdsX29wbW9kZV9yZWdpc3RlcmAgZnVuY3Rpb24gd2l0aGluIHRoZSBgaXdsd2lmaWAgY29yZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpd2xfb3Btb2RlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTIxNTc9c3RhdGljIGludCBfX2luaXQgaXdsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyMTY4Olx0cmV0ID0gaXdsX29wbW9kZV9yZWdpc3RlcihcJiMzNDtpd2xkdm1cJiMzNDssIFx1MDAyNml3bF9kdm1fb3BzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTIwNDk9SVdMX0VYUE9SVF9TWU1CT0woaXdsd2lmaV9tb2RfcGFyYW1zKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoyMDUxOmludCBpd2xfb3Btb2RlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpd2xfb3BfbW9kZV9vcHMgKm9wcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNzItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MjA3MzpJV0xfRVhQT1JUX1NZTUJPTChpd2xfb3Btb2RlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNzQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oPTE1Mz1zdHJ1Y3QgaXdsX29wX21vZGVfb3BzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1vcC1tb2RlLmgtMTgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oOjE4MjppbnQgaXdsX29wbW9kZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzICpvcHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oLTE4My12b2lkIGl3bF9vcG1vZGVfZGVyZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYz0zOD1zdGF0aWMgaW50IF9faW5pdCBpd2xfbWxkX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL21sZC5jLTM5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL21sZC5jOjQwOlx0aW50IHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXCYjMzQ7aXdsbWxkXCYjMzQ7LCBcdTAwMjZpd2xfbWxkX29wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYy00MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYz01Mz1zdGF0aWMgaW50IF9faW5pdCBpd2xfbXZtX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYy02Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jOjYzOlx0cmV0ID0gaXdsX29wbW9kZV9yZWdpc3RlcihcJiMzNDtpd2xtdm1cJiMzNDssIFx1MDAyNml3bF9tdm1fb3BzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jLTY0LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBGdW5jdGlvbjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqCgpPa2F5LCBzbyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBpcyBwb3RlbnRpYWxseSByZWFjaGFibGUgaWYgd2UmIzM5O3ZlIGdvdCBhbiBgaXdsd2lmaWAgUENJIGRldmljZSB0aGF0IG5lZWRzIERWTSBmaXJtd2FyZS4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCByaWdodD8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGEgbWVtb3J5IGxlYWsgZml4IHdpdGhpbiBhIGRyaXZlci4gR29vZCBjYW5kaWRhdGUuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IE9rYXksIHNvIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgaXdsd2lmaWAgcmVhY2hhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PwoKWWVzISBTeXprYWxsZXIgaGFzIGEgUENJIGZ1enplciB0aGF0IGluamVjdHMgUENJIGRldmljZXMgdXNpbmcgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEFoYSEgQW5kIHdhaXQgYSBzZWNvbmQsIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGFjdHVhbGx5IHRyaWdnZXJzIHRob3NlIHByb2JlIGZ1bmN0aW9ucyBvZiBQQ0kgZHJpdmVycy4gVGhhdCYjMzk7cyBrZXkuIFNvLCBsZXQmIzM5O3MgY29uZmlybS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgY2FuIGluZGVlZCBiZSByZWFjaGVkIHZpYSBQQ0kgcHJvYmUuIFNlZW1zIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgY2hlY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC0zMi0gKiBUaGlzIGNvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBzeXN0ZW0gZmxvd3Mgc3VjaCBhcyBidXMgZW51bWVyYXRpb24sIGJ1c1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6MzM6ICogcmVtb3ZhbC4gQnVzIGRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gZmxvd3MgKHN1Y2ggYXMgaXdsX3BjaV9wcm9iZSkgYXJlIGluXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC0zNC0gKiBidXMgc3BlY2lmaWMgZmlsZXMgKHRyYW5zcG9ydCBmaWxlcykuIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBpcyBjb21tb24gYW1vbmdcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM9MTE0Nz1FWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX3BjaV9maW5kX2Rldl9pbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYy0xMTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jOjExNDk6c3RhdGljIGludCBpd2xfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTExNTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYz0xMzM4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpd2xfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmMtMTM0MC1cdC5pZF90YWJsZSA9IGl3bF9od19jYXJkX2lkcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYzoxMzQxOlx0LnByb2JlID0gaXdsX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYy0xMzQyLVx0LnJlbW92ZSA9IGl3bF9wY2lfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIHRoZSBJbnRlbCBXaXJlbGVzcyBEcml2ZXIgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKUmlnaHQsIHNvIGBpd2xfcGNpX3Byb2JlYCDigJMgdGhhdCYjMzk7cyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLCBpc24mIzM5O3QgaXQ/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGJyaW5naW5nIHVwIHRoZSBkZXZpY2UuIEl0IHNob3VsZCB0aGVuIGtpY2sgb2ZmIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYnkgY2FsbGluZyBzb21ldGhpbmcgbGlrZSBgaXdsX2Rydl9zdGFydGAsIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgcm9sZS4gQW5kIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG9wbW9kZS1zcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyB0aGVyZSBjYW4gYmUgbnVhbmNlcyBkZXBlbmRpbmcgb24gZmlybXdhcmUsIGhhcmR3YXJlIHJldmlzaW9uLCBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgY29kZSBwYXRoIHRvIGJlIGNlcnRhaW4uIEp1c3QgbWFraW5nIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IG1lbnRhbCBtYXAgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9kcnZfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0xNjMyPXN0YXRpYyB2b2lkIGl3bF9yZXFfZndfY2FsbGJhY2soY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXcsIHZvaWQgKmNvbnRleHQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTk0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE5NDg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xOTQ5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC00Ny0gKiA1KSBUaGUgYnVzIHNwZWNpZmljIGNvbXBvbmVudCBjYWxscyB0byB0aGUgZHJ2IGJ1cyBhZ25vc3RpYyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaDo0ODogKiAgICAoaXdsX2Rydl9zdGFydClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTUwLSAqIDcpIGl3bF9yZXFfZndfY2FsbGJhY2sgcGFyc2VzIHRoZSBmdyBmaWxlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg9NTY9c3RydWN0IGl3bF9yZl9jZmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01Ny0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjU4OiAqIGl3bF9kcnZfc3RhcnQgLSBzdGFydCB0aGUgZHJ2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01OS0gKlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTY3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6Njg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jPTQyMzI9aW50IGl3bF9wY2lfZ2VuMV8yX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy00MzY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjQzNjg6XHRpd2xfdHJhbnMtXHUwMDNlZHJ2ID0gaXdsX2Rydl9zdGFydChpd2xfdHJhbnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFByb2Nlc3MqKgoKUmlnaHQsIGBpd2xfZHJ2X3N0YXJ0YCBpcyB3aGVyZSB0aGUgcGFydHkgYmVnaW5zLCBraWNraW5nIG9mZiB0aGUgYXN5bmNocm9ub3VzIGZpcm13YXJlIGZldGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgbmF0dXJhbGx5LCBob3cgdGhhdCBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdpbGwgdWx0aW1hdGVseSByZXNvbHZlLiBUaGUgbmV4dCBrZXkgZnVuY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgYGl3bF9yZXFfZndfY2FsbGJhY2tgLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJlc3VsdCBvZiB0aGF0IGZpcm13YXJlIHJldHJpZXZhbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBlcnJvciByZXBvcnRpbmcsIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIGlmIHRoZSBmaXJtd2FyZSBmYWlscyB0byBsb2FkLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBkcml2ZXImIzM5O3Mgcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXdsX3JlcV9md19jYWxsYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTI5Mz1JV0xfRVhQT1JUX1NZTUJPTChpd2xfZHJ2X2dldF9md25hbWVfcHJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTI5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjI5NTpzdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjk2LVx0XHRcdFx0dm9pZCAqY29udGV4dCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM9MzI1PXN0YXRpYyBpbnQgaXdsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGl3bF9kcnYgKmRydiwgYm9vbCBmaXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0zODUtXHRcdFx0XHQgICAgICAgZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjM4NjpcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMLCBkcnYsIGl3bF9yZXFfZndfY2FsbGJhY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMzg3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0xNjA5PXN0YXRpYyB2b2lkIF9pd2xfb3BfbW9kZV9zdG9wKHN0cnVjdCBpd2xfZHJ2ICpkcnYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTYyNi0vKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MTYyNzogKiBpd2xfcmVxX2Z3X2NhbGxiYWNrIC0gY2FsbGJhY2sgd2hlbiBmaXJtd2FyZSB3YXMgbG9hZGVkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjI4LSAqXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTYzMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE2MzI6c3RhdGljIHZvaWQgaXdsX3JlcV9md19jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3Jhdywgdm9pZCAqY29udGV4dClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE2MzMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTQ4LSAqICAgIChpd2xfZHJ2X3N0YXJ0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NDk6ICogNikgaXdsX2Rydl9zdGFydCBmZXRjaGVzIHRoZSBmdyBBU1lOQywgaXdsX3JlcV9md19jYWxsYmFja1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NTA6ICogNykgaXdsX3JlcV9md19jYWxsYmFjayBwYXJzZXMgdGhlIGZ3IGZpbGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjUxOiAqIDgpIGl3bF9yZXFfZndfY2FsbGJhY2sgc3RhcnRzIHRoZSB3aWZpIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoZXMgdGhlIGZ3XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01Mi0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBXaUZpIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBgaXdsX3JlcV9md19jYWxsYmFja2AgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IGFjdHVhbGx5IGtpY2tzIG9mZiB0aGUgV2lGaSBpbXBsZW1lbnRhdGlvbiwgb3Igd2hhdCB0aGUgY29kZSBjYWxscyB0aGUgJiMzNDtvcG1vZGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHJhZGlvIGludGVyZmFjZSBnZXRzIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHN0YXJ0dXAgc2VxdWVuY2UuIFRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSBob3cgYGl3bF9yZXFfZndfY2FsbGJhY2tgIGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hvc2VuIG9wbW9kZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBvZiBgaXdsX3JlcV9md19jYWxsYmFja2AgaXRzZWxmLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogaXQgY2FsbHMgdGhlIGBzdGFydGAgZnVuY3Rpb24gb2YgdGhlIG9wbW9kZS4gSXMgaXQgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbD8gSXMgdGhlcmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MgZmlyc3Q/IEtub3dpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY2FzZSBmb3IgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BfbW9kZV9vcHMtXHUwMDNlc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjc5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFJlcXVlc3QgQ2FsbGJhY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBmaXJtd2FyZSByZXF1ZXN0cyBpbiB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB3aXRoaW4gYGl3bC1kcnYuY2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGFzeW5jaHJvbm91cyByZXN1bHRzIG9mIGZpcm13YXJlIGxvYWRzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBsYXJnZXIgaXdsIGRyaXZlciBhcmNoaXRlY3R1cmUg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlLCB0aGUgZGV2aWNlIHN0YXRlLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGZpcm13YXJlIGxvYWRpbmcgZmFpbHVyZXMgb3IgZGVsYXlzLiBJIHdpbGwgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGJlaW5nIHNjaGVkdWxlZCBmcm9tLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgYXJvdW5kIHJldHJpZXMsIHRpbWVvdXRzLCBhbmQgcG9zc2libHkgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb24gZmFpbHMgdG8gbG9hZC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZsb3cgdG8gYXNzZXNzIGlmIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLCBkZWJ1Zywgb3IgaW1wcm92ZSByb2J1c3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgwMDpcdFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfRldfTk9USUZdID1cbjE4MDE6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfY21kKTtcbjE4MDI6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX01MTUVdID1cbjE4MDM6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfbWxtZSk7XG4xODA0Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9TVEFUU10gPVxuMTgwNTpcdFx0XHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9zdGF0cyk7XG4xODA2Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9SU1NJXSA9XG4xODA3Olx0XHRcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX2xvd19yc3NpKTtcbjE4MDg6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1RYUV9USU1FUlNdID1cbjE4MDk6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdHhxX3RpbWVyKTtcbjE4MTA6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1RJTUVfRVZFTlRdID1cbjE4MTE6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGltZV9ldmVudCk7XG4xODEyOlx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9CQV0gPVxuMTgxMzpcdFx0XHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9iYSk7XG4xODE0Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9URExTXSA9XG4xODE1Olx0XHRcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX3RkbHMpO1xuMTgxNjpcdFxuMTgxNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2KTsgaSYjNDM7JiM0MzspIHtcbjE4MTg6XHRcdFx0aWYgKHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZbaV0pIHtcbjE4MTk6XHRcdFx0XHQvKlxuMTgyMDpcdFx0XHRcdCAqIElmIHRoZSB0cmlnZ2VyIGlzbiYjMzk7dCBsb25nIGVub3VnaCwgV0FSTiBhbmQgZXhpdC5cbjE4MjE6XHRcdFx0XHQgKiBTb21lb25lIGlzIHRyeWluZyB0byBkZWJ1ZyBzb21ldGhpbmcgYW5kIGhlIHdvbiYjMzk7dFxuMTgyMjpcdFx0XHRcdCAqIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGJ1ZyBoZSBpcyB0cnlpbmcgdG8gY2hhc2UuXG4xODIzOlx0XHRcdFx0ICogV2UmIzM5O2QgYmV0dGVyIGJlIG5vaXN5IHRvIGJlIHN1cmUgaGUga25vd3Mgd2hhdCYjMzk7c1xuMTgyNDpcdFx0XHRcdCAqIGdvaW5nIG9uLlxuMTgyNTpcdFx0XHRcdCAqL1xuMTgyNjpcdFx0XHRcdGlmIChXQVJOX09OKHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZfbGVuW2ldIFx1MDAzY1xuMTgyNzpcdFx0XHRcdFx0ICAgICh0cmlnZ2VyX3Rsdl9zeltpXSAmIzQzO1xuMTgyODpcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl90bHYpKSkpXG4xODI5Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlX2Z3O1xuMTgzMDpcdFx0XHRcdGRydi1cdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZfbGVuW2ldID1cbjE4MzE6XHRcdFx0XHRcdHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZfbGVuW2ldO1xuMTgzMjpcdFx0XHRcdGRydi1cdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZbaV0gPVxuMTgzMzpcdFx0XHRcdFx0a21lbWR1cChwaWVjZXMtXHUwMDNlZGJnX3RyaWdnZXJfdGx2W2ldLFxuMTgzNDpcdFx0XHRcdFx0XHRkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2X2xlbltpXSxcbjE4MzU6XHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4xODM2Olx0XHRcdFx0aWYgKCFkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2W2ldKVxuMTgzNzpcdFx0XHRcdFx0Z290byBvdXRfZnJlZV9mdztcbjE4Mzg6XHRcdFx0fVxuMTgzOTpcdFx0fVxuMTg0MDpcdFxuMTg0MTpcdFx0LyogTm93IHRoYXQgd2UgY2FuIG5vIGxvbmdlciBmYWlsLCBjb3B5IGluZm9ybWF0aW9uICovXG4xODQyOlx0XG4xODQzOlx0XHRkcnYtXHUwMDNlZncuZGJnLm1lbV90bHYgPSBwaWVjZXMtXHUwMDNlZGJnX21lbV90bHY7XG4xODQ0Olx0XHRwaWVjZXMtXHUwMDNlZGJnX21lbV90bHYgPSBOVUxMO1xuMTg0NTpcdFx0ZHJ2LVx1MDAzZWZ3LmRiZy5uX21lbV90bHYgPSBwaWVjZXMtXHUwMDNlbl9tZW1fdGx2O1xuMTg0NjpcdFxuMTg0NzpcdFx0LypcbjE4NDg6XHRcdCAqIFRoZSAoc2l6ZSAtIDE2KSAvIDEyIGZvcm11bGEgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkXG4xODQ5Olx0XHQgKiBmb3IgZWFjaCBldmVudCwgd2hpY2ggaXMgb2YgbW9kZSAxIChpbmNsdWRpbmcgdGltZXN0YW1wKSBmb3IgYWxsXG4xODUwOlx0XHQgKiBuZXcgbWljcm9jb2RlcyB0aGF0IGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbi5cbjE4NTE6XHRcdCAqL1xuMTg1MjpcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfcHRyID0gcGllY2VzLVx1MDAzZWluaXRfZXZ0bG9nX3B0cjtcbjE4NTM6XHRcdGlmIChwaWVjZXMtXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSlcbjE4NTQ6XHRcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcbjE4NTU6XHRcdGVsc2VcbjE4NTY6XHRcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSA9XG4xODU3Olx0XHRcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZW1hY19jZmctXHUwMDNlYmFzZS1cdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XG4xODU4Olx0XHRmdy1cdTAwM2Vpbml0X2VycmxvZ19wdHIgPSBwaWVjZXMtXHUwMDNlaW5pdF9lcnJsb2dfcHRyO1xuMTg1OTpcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfcHRyID0gcGllY2VzLVx1MDAzZWluc3RfZXZ0bG9nX3B0cjtcbjE4NjA6XHRcdGlmIChwaWVjZXMtXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSlcbjE4NjE6XHRcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcbjE4NjI6XHRcdGVsc2VcbjE4NjM6XHRcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9XG4xODY0Olx0XHRcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZW1hY19jZmctXHUwMDNlYmFzZS1cdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XG4xODY1Olx0XHRmdy1cdTAwM2VpbnN0X2VycmxvZ19wdHIgPSBwaWVjZXMtXHUwMDNlaW5zdF9lcnJsb2dfcHRyO1xuMTg2NjpcdFxuMTg2NzpcdFx0LypcbjE4Njg6XHRcdCAqIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBvZiBjaGFpbiBub2lzZSByZXNldCBhbmQgZ2FpbiBjb21tYW5kc1xuMTg2OTpcdFx0ICogYmFzZSBvbiB0aGUgc2l6ZSBvZiBzdGFuZGFyZCBwaHkgY2FsaWJyYXRpb24gY29tbWFuZHMgdGFibGUgc2l6ZVxuMTg3MDpcdFx0ICovXG4xODcxOlx0XHRpZiAoZnctXHUwMDNldWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSBcdTAwM2VcbjE4NzI6XHRcdCAgICBJV0xfTUFYX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkUpXG4xODczOlx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemUgPVxuMTg3NDpcdFx0XHRcdElXTF9NQVhfU1RBTkRBUkRfUEhZX0NBTElCUkFURV9UQkxfU0laRTtcbjE4NzU6XHRcbjE4NzY6XHRcdC8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqL1xuMTg3NzpcdFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xuMTg3ODpcdFxuMTg3OTpcdFx0aXdsX2RiZ190bHZfbG9hZF9iaW4oZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldiwgZHJ2LVx1MDAzZXRyYW5zKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG11dGV4X2xvY2soXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVfbXR4KTtcbjE4ODI6XHRcdHN3aXRjaCAoZnctXHUwMDNldHlwZSkge1xuMTg4MzpcdFx0Y2FzZSBJV0xfRldfRFZNOlxuMTg4NDpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW0RWTV9PUF9NT0RFXTtcbjE4ODU6XHRcdFx0YnJlYWs7XG4xODg2Olx0XHRkZWZhdWx0OlxuMTg4NzpcdFx0XHRXQVJOKDEsIFwmIzM0O0ludmFsaWQgZncgdHlwZSAlZFxcblwmIzM0OywgZnctXHUwMDNldHlwZSk7XG4xODg4Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTg4OTpcdFx0Y2FzZSBJV0xfRldfTVZNOlxuMTg5MDpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01WTV9PUF9NT0RFXTtcbjE4OTE6XHRcdFx0YnJlYWs7XG4xODkyOlx0XHR9XG4xODkzOlx0XG4xODk0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lXTE1MRClcbjE4OTU6XHRcdGlmIChpd2xfZHJ2X2lzX3dpZmk3X3N1cHBvcnRlZChkcnYtXHUwMDNldHJhbnMpKVxuMTg5NjpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01MRF9PUF9NT0RFXTtcbjE4OTc6XHQjZW5kaWZcbjE4OTg6XHRcbjE4OTk6XHRcdElXTF9JTkZPKGRydiwgXCYjMzQ7bG9hZGVkIGZpcm13YXJlIHZlcnNpb24gJXMgb3BfbW9kZSAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MzEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFRleHQqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGUgZm9sbG93aW5nIHRleHQgaW4gYSBzcGVjaWZpYyB3YXksIG1pbWlja2luZyBteSBvd24gdGhvdWdodCBwcm9jZXNzIGFzIEkgcmVhZCBpdC4gRmlyc3QsIEkgaGF2ZSB0byBtZW50YWxseSBhc3Nlc3MgdGhlIHRhc2suIEl0JiMzOTtzIG5vdCBqdXN0IGEgYmFzaWMgc3VtbWFyeTsgSSBuZWVkIHRvIHBvcnRyYXkgbXkgKmludGVybmFsIG1vbm9sb2d1ZSogYXMgSSBkaWdlc3QgdGhlIG1hdGVyaWFsLiBJIG5lZWQgdG8gZ2V0IHJlYWR5IHRvIHJlYWQgdGhlIG5leHQgMTAwIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdFx0XHQgZHJ2LVx1MDAzZWZ3LmZ3X3ZlcnNpb24sIG9wLVx1MDAzZW5hbWUpO1xuMTkwMTpcdFxuMTkwMjpcdFx0LyogYWRkIHRoaXMgZGV2aWNlIHRvIHRoZSBsaXN0IG9mIGRldmljZXMgdXNpbmcgdGhpcyBvcF9tb2RlICovXG4xOTAzOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRydi1cdTAwM2VsaXN0LCBcdTAwMjZvcC1cdTAwM2VkcnYpO1xuMTkwNDpcdFxuMTkwNTpcdFx0aWYgKG9wLVx1MDAzZW9wcykge1xuMTkwNjpcdFx0XHRkcnYtXHUwMDNlb3BfbW9kZSA9IF9pd2xfb3BfbW9kZV9zdGFydChkcnYsIG9wKTtcbjE5MDc6XHRcbjE5MDg6XHRcdFx0aWYgKCFkcnYtXHUwMDNlb3BfbW9kZSkge1xuMTkwOTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xuMTkxMDpcdFx0XHRcdGdvdG8gb3V0X3VuYmluZDtcbjE5MTE6XHRcdFx0fVxuMTkxMjpcdFx0fSBlbHNlIHtcbjE5MTM6XHRcdFx0cmVxdWVzdF9tb2R1bGVfbm93YWl0KFwmIzM0OyVzXCYjMzQ7LCBvcC1cdTAwM2VuYW1lKTtcbjE5MTQ6XHRcdH1cbjE5MTU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xuMTkxNjpcdFxuMTkxNzpcdFx0Y29tcGxldGUoXHUwMDI2ZHJ2LVx1MDAzZXJlcXVlc3RfZmlybXdhcmVfY29tcGxldGUpO1xuMTkxODpcdFxuMTkxOTpcdFx0ZmFpbHVyZSA9IGZhbHNlO1xuMTkyMDpcdFx0Z290byBmcmVlO1xuMTkyMTpcdFxuMTkyMjpcdCB0cnlfYWdhaW46XG4xOTIzOlx0XHQvKiB0cnkgbmV4dCwgaWYgYW55ICovXG4xOTI0Olx0XHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XG4xOTI1Olx0XHRpZiAoaXdsX3JlcXVlc3RfZmlybXdhcmUoZHJ2LCBmYWxzZSkpXG4xOTI2Olx0XHRcdGdvdG8gb3V0X3VuYmluZDtcbjE5Mjc6XHRcdGdvdG8gZnJlZTtcbjE5Mjg6XHRcbjE5Mjk6XHQgb3V0X2ZyZWVfZnc6XG4xOTMwOlx0XHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XG4xOTMxOlx0IG91dF91bmJpbmQ6XG4xOTMyOlx0XHRjb21wbGV0ZShcdTAwMjZkcnYtXHUwMDNlcmVxdWVzdF9maXJtd2FyZV9jb21wbGV0ZSk7XG4xOTMzOlx0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldik7XG4xOTM0Olx0XHQvKiBkcnYgaGFzIGp1c3QgYmVlbiBmcmVlZCBieSB0aGUgcmVsZWFzZSAqL1xuMTkzNTpcdFx0ZmFpbHVyZSA9IGZhbHNlO1xuMTkzNjpcdCBmcmVlOlxuMTkzNzpcdFx0aWYgKGZhaWx1cmUpXG4xOTM4Olx0XHRcdGl3bF9kZWFsbG9jX3Vjb2RlKGRydik7XG4xOTM5Olx0XG4xOTQwOlx0XHRpZiAocGllY2VzKSB7XG4xOTQxOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGllY2VzLVx1MDAzZWltZyk7IGkmIzQzOyYjNDM7KVxuMTk0MjpcdFx0XHRcdGtmcmVlKHBpZWNlcy1cdTAwM2VpbWdbaV0uc2VjKTtcbjE5NDM6XHRcdFx0a2ZyZWUocGllY2VzLVx1MDAzZWRiZ19tZW1fdGx2KTtcbjE5NDQ6XHRcdFx0a2ZyZWUocGllY2VzKTtcbjE5NDU6XHRcdH1cbjE5NDY6XHR9XG4xOTQ3Olx0XG4xOTQ4Olx0c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXG4xOTQ5Olx0e1xuMTk1MDpcdFx0c3RydWN0IGl3bF9kcnYgKmRydjtcbjE5NTE6XHRcdGludCByZXQ7XG4xOTUyOlx0XG4xOTUzOlx0XHRkcnYgPSBremFsbG9jX29iaigqZHJ2KTtcbjE5NTQ6XHRcdGlmICghZHJ2KSB7XG4xOTU1Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xOTU2Olx0XHRcdGdvdG8gZXJyO1xuMTk1NzpcdFx0fVxuMTk1ODpcdFxuMTk1OTpcdFx0ZHJ2LVx1MDAzZXRyYW5zID0gdHJhbnM7XG4xOTYwOlx0XHRkcnYtXHUwMDNlZGV2ID0gdHJhbnMtXHUwMDNlZGV2O1xuMTk2MTpcdFxuMTk2MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRydi1cdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcbjE5NjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRydi1cdTAwM2VsaXN0KTtcbjE5NjQ6XHRcbjE5NjU6XHQjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGU1xuMTk2NjpcdFx0LyogQ3JlYXRlIHRoZSBkZXZpY2UgZGVidWdmcyBlbnRyaWVzLiAqL1xuMTk2NzpcdFx0ZHJ2LVx1MDAzZWRiZ2ZzX2RydiA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZSh0cmFucy1cdTAwM2VkZXYpLFxuMTk2ODpcdFx0XHRcdFx0XHQgICAgaXdsX2RiZ2ZzX3Jvb3QpO1xuMTk2OTpcdFxuMTk3MDpcdFx0LyogQ3JlYXRlIHRyYW5zcG9ydCBsYXllciBkZWJ1Z2ZzIGRpciAqL1xuMTk3MTpcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRiZ2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDt0cmFuc1wmIzM0OywgZHJ2LVx1MDAzZWRiZ2ZzX2Rydik7XG4xOTcyOlx0I2VuZGlmXG4xOTczOlx0XG4xOTc0Olx0XHRkcnYtXHUwMDNldHJhbnMtXHUwMDNlZGJnLmRvbWFpbnNfYml0bWFwID0gSVdMX1RSQU5TX0ZXX0RCR19ET01BSU4oZHJ2LVx1MDAzZXRyYW5zKTtcbjE5NzU6XHRcdGlmIChpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSAhPSBFTkFCTEVfSU5JKSB7XG4xOTc2Olx0XHRcdC8qIFdlIGhhdmUgYSBub24tZGVmYXVsdCB2YWx1ZSBpbiB0aGUgbW9kdWxlIHBhcmFtZXRlcixcbjE5Nzc6XHRcdFx0ICogdGFrZSBpdHMgdmFsdWVcbjE5Nzg6XHRcdFx0ICovXG4xOTc5Olx0XHRcdGRydi1cdTAwM2V0cmFucy1cdTAwM2VkYmcuZG9tYWluc19iaXRtYXAgXHUwMDI2PSAweGZmZmY7XG4xOTgwOlx0XHRcdGlmIChpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSAhPSBJV0xfRldfSU5JX1BSRVNFVF9ESVNBQkxFKSB7XG4xOTgxOlx0XHRcdFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pIFx1MDAzZSBFTkFCTEVfSU5JKSB7XG4xOTgyOlx0XHRcdFx0XHRJV0xfRVJSKHRyYW5zLFxuMTk4MzpcdFx0XHRcdFx0XHRcJiMzNDtpbnZhbGlkIGVuYWJsZV9pbmkgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZTogbWF4ID0gJWQsIHVzaW5nIDAgaW5zdGVhZFxcblwmIzM0OyxcbjE5ODQ6XHRcdFx0XHRcdFx0RU5BQkxFX0lOSSk7XG4xOTg1Olx0XHRcdFx0XHRpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSA9IDA7XG4xOTg2Olx0XHRcdFx0fVxuMTk4NzpcdFx0XHRcdGRydi1cdTAwM2V0cmFucy1cdTAwM2VkYmcuZG9tYWluc19iaXRtYXAgPVxuMTk4ODpcdFx0XHRcdFx0QklUKElXTF9GV19EQkdfRE9NQUlOX1BPUyAmIzQzOyBpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSk7XG4xOTg5Olx0XHRcdH1cbjE5OTA6XHRcdH1cbjE5OTE6XHRcbjE5OTI6XHRcdHJldCA9IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgdHJ1ZSk7XG4xOTkzOlx0XHRpZiAocmV0KSB7XG4xOTk0Olx0XHRcdElXTF9FUlIodHJhbnMsIFwmIzM0O0NvdWxkbiYjMzk7dCByZXF1ZXN0IHRoZSBmd1xcblwmIzM0Oyk7XG4xOTk1Olx0XHRcdGdvdG8gZXJyX2Z3O1xuMTk5NjpcdFx0fVxuMTk5NzpcdFxuMTk5ODpcdFx0cmV0dXJuIGRydjtcbjE5OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEludGVsIFdpcmVsZXNzIERyaXZlcioqCgpPa2F5LCBzbyBgX2l3bF9vcF9tb2RlX3N0YXJ0YCBjYWxscyBgb3AtJmd0O29wcy0mZ3Q7c3RhcnRgLiBSaWdodCwgdGhhdCBtZWFucyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBjbGFpbXMgdG8gYWRkcmVzcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBIbW0sIGludGVyZXN0aW5nLi4uIHdvcnRoIGZ1enppbmcgdGhpcywgYWJzb2x1dGVseS4gR290dGEgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHJlcHJvZHVjdGlvbi4gTG9va3MgbGlrZSBgSVdMV0lGSWAgYW5kIGBJV0xEVk1gIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBJV0xEVk1gIGlzICpleGFjdGx5KiB0aGUgY29uZmlnIG5lZWRlZCAtIGdvb2QsICYjMzQ7Y29uZmlnIElXTERWTSYjMzQ7IGNvbmZpcm1zIHRoYXQuIE5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MganVtcCBvdXQsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuIE9rYXksIGBNQUM4MDIxMWAgaXMgb2J2aW91c2x5IGEgZGVwZW5kZW5jeSBvZiBgSVdMRFZNYC4gQW5kIHdoYXQgYWJvdXQgYFBDSWAgZm9yIGBJV0xXSUZJYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJV0xXSUZJYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElXTFdJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjQ5OmNvbmZpZyBJV0xXSUZJX0tVTklUX1RFU1RTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTktXHRib29sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTg0PWNvbmZpZyBJV0xNTERcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24mIzM5O3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVx0Ym9vbFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz0xMDU9bWVudSBcJiMzNDtEZWJ1Z2dpbmcgT3B0aW9uc1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O0VuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMi1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEzOTpjb25maWcgSVdMV0lGSV9ERVZJQ0VfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZXZpY2UgYWNjZXNzIHRyYWNpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHdpcmVsZXNzIGRyaXZlcnMsIGZvcm1hdHRlZCBmb3Igc29tZW9uZSB3aXRoIHNpbWlsYXIgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgaXdsd2lmaSBLY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gc2VlaW5nLiBObyBuZWVkIHRvIHdhc3RlIHRpbWUgc2Nhbm5pbmcgdGhlIHdob2xlIGZpbGUsIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBmaXJzdCB0d2VudHkgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGlkZW50aWZ5IGFueSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgb3IgbWFqb3IgYmxvY2tzIGRlZmluZWQgd2l0aGluIHRoZSBmaWxlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWF5YmUgc29tZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIG9yIHBvc3NpYmx5IGV2ZW4gY2x1ZXMgYWJvdXQgZGlmZmVyZW50IGhhcmR3YXJlIHN1cHBvcnQgbGV2ZWxzIHN0cmFpZ2h0IGF3YXkuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRlY2lzaW9ucyBhcmUgbWFkZSwgb3IgYXQgbGVhc3QgaG93IHRoZSBmaWxlIGlzIG9yZ2FuaXplZCwgc28gSSBjYW4gc2F2ZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElXTFdJRklcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIC0gV2lyZWxlc3MtTi9BZHZhbmNlZC1OL1VsdGltYXRlLU4gKGl3bHdpZmkpIFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEhBU19JT01FTSBcdTAwMjZcdTAwMjYgQ0ZHODAyMTFcbiAgIDU6XHRcdGRlcGVuZHMgb24gSVdMTUVJIHx8ICFJV0xNRUlcbiAgIDY6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6XG4gICA5Olx0XG4gIDEwOlx0XHQgIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayBOZXh0LUdlbiBBR05cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB1c2Ugd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlOlxuICAxMzpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjI1MEFHTiBBZGFwdGVyXG4gIDE0Olx0XHRcdEludGVsIDYwMDAgU2VyaWVzIFdpLUZpIEFkYXB0ZXJzICg2MjAwQUdOIGFuZCA2MzAwQUdOKVxuICAxNTpcdFx0XHRJbnRlbCBXaUZpIExpbmsgMTAwMEJHTlxuICAxNjpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIDUxNTBBR05cbiAgMTc6XHRcdFx0SW50ZWwgV2lyZWxlc3MgV2lGaSA1MTAwQUdOLCA1MzAwQUdOLCBhbmQgNTM1MEFHTlxuICAxODpcdFx0XHRJbnRlbCA2MDA1IFNlcmllcyBXaS1GaSBBZGFwdGVyc1xuICAxOTpcdFx0XHRJbnRlbCA2MDMwIFNlcmllcyBXaS1GaSBBZGFwdGVyc1xuICAyMDpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjE1MEJHTiAyIEFkYXB0ZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3ODAKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpd2x3aWZpIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGl3bHdpZmkgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYElXTFdJRklgIGFuZCBgSVdMRFZNYCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHRoZSByZWxldmFudCBkcml2ZXIgY29tcG9uZW50cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbi4KClJpZ2h0LCB0aGUgZXJyb3IgcGF0aCBpcyB0cmlnZ2VyZWQgaWYgZWl0aGVyIGBpd2xfcGFyc2VfZWVwcm9tX2RhdGFgIG9yIGBpd2xfbnZtX2NoZWNrX3ZlcnNpb25gIGZhaWxzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZS4gRnV6emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBzZWVtcyBsaWtlIGEgZ29vZCBhdmVudWUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcGF0Y2ggbGFuZGVkLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZCBpbiB0aGUgY2hhbmdlIHRvIGJlIHN1cmUuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuCgpOb3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGJ5IHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0OgoKYGBgYwpvdXRfZnJlZV9lZXByb206CglrZnJlZShwcml2LSZndDtudm1fZGF0YSk7Cm91dF9mcmVlX2VlcHJvbV9ibG9iOgoJa2ZyZWUocHJpdi0mZ3Q7ZWVwcm9tX2Jsb2IpOwpgYGAKCkFoLCBpdCYjMzk7cyBhIG1lbW9yeSBsZWFrIGZpeCEgVGhlIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAgd2VyZSBsaWtlbHkgaW4gdGhlIHdyb25nIG9yZGVyLCBhbmQgdGhpcyBzd2FwcyB0aGVtLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYW51cCB3aXRoaW4gdGhlIERWTSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24uIFRoaXMgbWFrZXMgaXQgYWNjZXNzaWJsZSB2aWEgUENJIGZ1enppbmcuCgpNeSBhbmFseXNpcyBib2lscyBkb3duIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeCB3aXRoaW4gdGhlIERWTSBkcml2ZXImIzM5O3Mgc3RhcnQgc2VxdWVuY2UuIFRoZSBzcGVjaWZpYyBwYXRjaCB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBzZXF1ZW5jZSBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIHN0YXJ0IHNlcXVlbmNlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBgSVdMV0lGSWAgYW5kIGBJV0xEVk1gLiBUaGUgZm9jdXMgc3ltYm9sIGlzIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLgoKSSBjaGVja2VkIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBuYW1lczogYGNvbmZpZyBJV0xEVk1gIGlzIGRlZmluaXRlbHkgcHJlc2VudCB1bmRlciBgaWYgSVdMV0lGSWAgYmxvY2suCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzLiBJJiMzOTtsbCBub3cgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi4wOTEwMzgwMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNTc2NjgzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVdMV0lGSVwiLFxuICAgIFwiSVdMRFZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXdsX29wX21vZGVfZHZtX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBieSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpd2x3aWZpIERWTSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgUENJIGRldmljZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi4wOTEwNDI5MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg0OTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQyYjUzOGU4OGRlOTBhM2VjNGY5OWNkM2ExNDhjNmEwYjVhNDk3MWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6MjQ6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXFxuaW5kZXggY2E1YTgxNDA5MDhhZmIuLjZiZDViNmQ4NGIyYTliIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xcbkBAIC0xNTExLDEwICsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcXG4gXFx0cHJpdi1cXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcXG4gb3V0X3VuaW5pdF9kcnY6XFxuIFxcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xcbi1vdXRfZnJlZV9lZXByb21fYmxvYjpcXG4tXFx0a2ZyZWUocHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2IpO1xcbiBvdXRfZnJlZV9lZXByb206XFxuIFxcdGtmcmVlKHByaXYtXFx1MDAzZW52bV9kYXRhKTtcXG4rb3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZWVlcHJvbV9ibG9iKTtcXG4gb3V0X2xlYXZlX3RyYW5zOlxcbiBcXHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVxcdTAwM2V0cmFucyk7XFxuIG91dF9mcmVlX2h3OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi43MTY1MTY3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjYzMjE3NDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJV0xXSUZJXCIsXG4gICAgXCJJV0xEVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGJ5IHN3YXBwaW5nIHRoZSBvcmRlciBvZiBga2ZyZWVgIGNhbGxzIGZvciBgbnZtX2RhdGFgIGFuZCBgZWVwcm9tX2Jsb2JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGl3bHdpZmkgRFZNIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDJiNTM4ZTg4ZGU5MGEzZWM0Zjk5Y2QzYTE0OGM2YTBiNWE0OTcxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA5OjI0OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXG5pbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xuQEAgLTE1MTEsMTAgKzE1MTEsMTAgQEAgc3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuIFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuIG91dF91bmluaXRfZHJ2OlxuIFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4tb3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG4tXHRrZnJlZShwcml2LVx1MDAzZWVlcHJvbV9ibG9iKTtcbiBvdXRfZnJlZV9lZXByb206XG4gXHRrZnJlZShwcml2LVx1MDAzZW52bV9kYXRhKTtcbitvdXRfZnJlZV9lZXByb21fYmxvYjpcbitcdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuIG91dF9sZWF2ZV90cmFuczpcbiBcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXHUwMDNldHJhbnMpO1xuIG91dF9mcmVlX2h3OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MTYuNzE2NTE4MDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTY5OTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggaW4gaXdsd2lmaSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBkaWZmIGlzIG1lc3Npbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IHNvbWV0aGluZyB0aGF0IHJhaXNlcyBhbiBleWVicm93LiBUaGV5J3ZlIHN3YXBwZWQgdGhlIG9yZGVyIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24gZm9yIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCBhbmQgYHByaXYtXHUwMDNlbnZtX2RhdGFgIGluIG9uZSBvZiB0aGUgZXJyb3IgcGF0aHMuIE5vdCBqdXN0IHRoZSBvcmRlciwgYnV0IGFsc28gdGhlIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZnJlZXM6IGBvdXRfZnJlZV9lZXByb21fYmxvYmAgYW5kIGBvdXRfZnJlZV9lZXByb21gLiBJIGNhbiBzZWUgdGhlIGNvZGUgbm93OiB0aGV5J3ZlIHNpbXBseSBmbGlwcGVkIHRoZSBsaW5lcyBhbmQgdGhlIGxhYmVscyBmb3IgdGhlIGZyZWVzLlxuXG5UaGlzIGlzIGEgcmVkIGZsYWcuIE1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSBzaW1wbGUgc3dhcCBsaWtlIHRoaXMgY291bGQgaW50cm9kdWNlIGEgc3VidGxlIG1lbW9yeSBsZWFrIG9yLCBldmVuIHdvcnNlLCBsZWFkIHRvIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8gaWYgdGhlIGNvZGUgbWlzdGFrZW5seSBqdW1wcyB0byB0aGUgd3JvbmcgY2xlYW51cCBsYWJlbC4gVGhlIGNvbXBpbGVyIGlzbid0IGdvaW5nIHRvIHNhdmUgdXMgaGVyZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLlxuXG5NeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbGFiZWxzIGFyZSB1c2VkIOKAkyB3aGVyZSB0aGV5J3JlIGp1bXBlZCB0bywgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBmbG93IGxvb2tzIGxpa2UuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBwYXRoIHRocm91Z2ggdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFsbCBjYWxscyBhbmQgdXNhZ2VzIG9mIHRob3NlIGxhYmVscy4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzd2FwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjEuNzc2MjIwMDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzE4NTkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0xMjE2PXN0YXRpYyBpbnQgaXdsX252bV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfbnZtX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTIzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTIzMzpzdGF0aWMgc3RydWN0IGl3bF9vcF9tb2RlICppd2xfb3BfbW9kZV9kdm1fc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyMzQtXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpd2xfcmZfY2ZnICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjEzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyBpd2xfZHZtX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjEzOTpcXHQuc3RhcnQgPSBpd2xfb3BfbW9kZV9kdm1fc3RhcnQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTIxNDAtXFx0LnN0b3AgPSBpd2xfb3BfbW9kZV9kdm1fc3RvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjIuMTU5NDE3MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxNjkyMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIEZvY3VzaW5nIG9uIEVycm9yIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBmYWlsdXJlcyBkdXJpbmcgdGhlIHN0YXJ0dXAgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyBob3cgaXQgZ3JhY2VmdWxseSAob3Igbm90IHNvIGdyYWNlZnVsbHkpIHJlY292ZXJzLCByZXBvcnRzIGVycm9ycywgb3IgY2xlYW5zIHVwIHJlc291cmNlcyBpbiB0aGUgZXZlbnQgb2YgYSBoaWNjdXAgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoYXQgaWZzXCIgYW5kIHRoZSBcInRoZW4gd2hhdHNcIiBvZiB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhpbmdzIGRvbid0IGdvIGFzIHBsYW5uZWQuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGlzIGNvZGUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoyNS40MDExMTE3ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDgwOlxcdFxcdFxcdCBzaXplb2YocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2Vmd192ZXJzaW9uKSxcXG4xNDgxOlxcdFxcdFxcdCBcXFwiJS4zMXNcXFwiLCBmdy1cXHUwMDNlZndfdmVyc2lvbik7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHByaXYtXFx1MDAzZW5ld19zY2FuX3RocmVzaG9sZF9iZWhhdmlvdXIgPVxcbjE0ODQ6XFx0XFx0XFx0ISEodWNvZGVfZmxhZ3MgXFx1MDAyNiBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4pO1xcbjE0ODU6XFx0XFxuMTQ4NjpcXHRcXHRwcml2LVxcdTAwM2VwaHlfY2FsaWJfY2hhaW5fbm9pc2VfcmVzZXRfY21kID1cXG4xNDg3OlxcdFxcdFxcdGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplO1xcbjE0ODg6XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2NhbGliX2NoYWluX25vaXNlX2dhaW5fY21kID1cXG4xNDg5OlxcdFxcdFxcdGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplICsgMTtcXG4xNDkwOlxcdFxcbjE0OTE6XFx0XFx0LyogaW5pdGlhbGl6ZSBhbGwgdmFsaWQgY29udGV4dHMgKi9cXG4xNDkyOlxcdFxcdGl3bF9pbml0X2NvbnRleHQocHJpdiwgdWNvZGVfZmxhZ3MpO1xcbjE0OTM6XFx0XFxuMTQ5NDpcXHRcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4xNDk1OlxcdFxcdCAqIFRoaXMgaXMgc3RpbGwgcGFydCBvZiBwcm9iZSgpIGluIGEgc2Vuc2UuLi5cXG4xNDk2OlxcdFxcdCAqXFxuMTQ5NzpcXHRcXHQgKiA3LiBTZXR1cCBhbmQgcmVnaXN0ZXIgd2l0aCBtYWM4MDIxMSBhbmQgZGVidWdmc1xcbjE0OTg6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjE0OTk6XFx0XFx0ZXJyID0gaXdsYWduX21hY19zZXR1cF9yZWdpc3Rlcihwcml2LCBcXHUwMDI2ZnctXFx1MDAzZXVjb2RlX2NhcGEpO1xcbjE1MDA6XFx0XFx0aWYgKGVycilcXG4xNTAxOlxcdFxcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfd29ya3F1ZXVlO1xcbjE1MDI6XFx0XFxuMTUwMzpcXHRcXHRpd2xfZGJnZnNfcmVnaXN0ZXIocHJpdiwgZGJnZnNfZGlyKTtcXG4xNTA0OlxcdFxcbjE1MDU6XFx0XFx0cmV0dXJuIG9wX21vZGU7XFxuMTUwNjpcXHRcXG4xNTA3OlxcdG91dF9kZXN0cm95X3dvcmtxdWV1ZTpcXG4xNTA4OlxcdFxcdGl3bF90dF9leGl0KHByaXYpO1xcbjE1MDk6XFx0XFx0aXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpO1xcbjE1MTA6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cXHUwMDNld29ya3F1ZXVlKTtcXG4xNTExOlxcdFxcdHByaXYtXFx1MDAzZXdvcmtxdWV1ZSA9IE5VTEw7XFxuMTUxMjpcXHRvdXRfdW5pbml0X2RydjpcXG4xNTEzOlxcdFxcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xcbjE1MTQ6XFx0b3V0X2ZyZWVfZWVwcm9tOlxcbjE1MTU6XFx0XFx0a2ZyZWUocHJpdi1cXHUwMDNlbnZtX2RhdGEpO1xcbjE1MTY6XFx0b3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XFxuMTUxNzpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2VlZXByb21fYmxvYik7XFxuMTUxODpcXHRvdXRfbGVhdmVfdHJhbnM6XFxuMTUxOTpcXHRcXHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVxcdTAwM2V0cmFucyk7XFxuMTUyMDpcXHRvdXRfZnJlZV9odzpcXG4xNTIxOlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXFx1MDAzZWh3KTtcXG4xNTIyOlxcdG91dDpcXG4xNTIzOlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTUyNDpcXHR9XFxuMTUyNTpcXHRcXG4xNTI2OlxcdHN0YXRpYyB2b2lkIGl3bF9vcF9tb2RlX2R2bV9zdG9wKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSlcXG4xNTI3OlxcdHtcXG4xNTI4OlxcdFxcdHN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IElXTF9PUF9NT0RFX0dFVF9EVk0ob3BfbW9kZSk7XFxuMTUyOTpcXHRcXG4xNTMwOlxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCIqKiogVU5MT0FEIERSSVZFUiAqKipcXFxcblxcXCIpO1xcbjE1MzE6XFx0XFxuMTUzMjpcXHRcXHRpd2xhZ25fbWFjX3VucmVnaXN0ZXIocHJpdik7XFxuMTUzMzpcXHRcXG4xNTM0OlxcdFxcdGl3bF90dF9leGl0KHByaXYpO1xcbjE1MzU6XFx0XFxuMTUzNjpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2VlZXByb21fYmxvYik7XFxuMTUzNzpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2Vudm1fZGF0YSk7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdC8qbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqL1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHQvKiBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyBjYWxscyBpd2xhZ25fbWFjX3N0b3AsIHdoaWNoIGZsdXNoZXNcXG4xNTQyOlxcdFxcdCAqIHByaXYtXFx1MDAzZXdvcmtxdWV1ZS4uLiBzbyB3ZSBjYW4ndCB0YWtlIGRvd24gdGhlIHdvcmtxdWV1ZVxcbjE1NDM6XFx0XFx0ICogdW50aWwgbm93Li4uICovXFxuMTU0NDpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVxcdTAwM2V3b3JrcXVldWUpO1xcbjE1NDU6XFx0XFx0cHJpdi1cXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcXG4xNTQ2OlxcdFxcbjE1NDc6XFx0XFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XFxuMTU0ODpcXHRcXG4xNTQ5OlxcdFxcdGRldl9rZnJlZV9za2IocHJpdi1cXHUwMDNlYmVhY29uX3NrYik7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXFx1MDAzZXRyYW5zKTtcXG4xNTUyOlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXFx1MDAzZWh3KTtcXG4xNTUzOlxcdH1cXG4xNTU0OlxcdFxcbjE1NTU6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkZXNjX2xvb2t1cF90ZXh0W10gPSB7XFxuMTU1NjpcXHRcXHRcXFwiT0tcXFwiLFxcbjE1NTc6XFx0XFx0XFxcIkZBSUxcXFwiLFxcbjE1NTg6XFx0XFx0XFxcIkJBRF9QQVJBTVxcXCIsXFxuMTU1OTpcXHRcXHRcXFwiQkFEX0NIRUNLU1VNXFxcIixcXG4xNTYwOlxcdFxcdFxcXCJOTUlfSU5URVJSVVBUX1dER1xcXCIsXFxuMTU2MTpcXHRcXHRcXFwiU1lTQVNTRVJUXFxcIixcXG4xNTYyOlxcdFxcdFxcXCJGQVRBTF9FUlJPUlxcXCIsXFxuMTU2MzpcXHRcXHRcXFwiQkFEX0NPTU1BTkRcXFwiLFxcbjE1NjQ6XFx0XFx0XFxcIkhXX0VSUk9SX1RVTkVfTE9DS1xcXCIsXFxuMTU2NTpcXHRcXHRcXFwiSFdfRVJST1JfVEVNUEVSQVRVUkVcXFwiLFxcbjE1NjY6XFx0XFx0XFxcIklMTEVHQUxfQ0hBTl9GUkVRXFxcIixcXG4xNTY3OlxcdFxcdFxcXCJWQ0NfTk9UX1NUQUJMRVxcXCIsXFxuMTU2ODpcXHRcXHRcXFwiRkhfRVJST1JcXFwiLFxcbjE1Njk6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfSE9TVFxcXCIsXFxuMTU3MDpcXHRcXHRcXFwiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFRcXFwiLFxcbjE1NzE6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfVU5LTk9XTlxcXCIsXFxuMTU3MjpcXHRcXHRcXFwiVUNPREVfVkVSU0lPTl9NSVNNQVRDSFxcXCIsXFxuMTU3MzpcXHRcXHRcXFwiSFdfRVJST1JfQUJTX0xPQ0tcXFwiLFxcbjE1NzQ6XFx0XFx0XFxcIkhXX0VSUk9SX0NBTF9MT0NLX0ZBSUxcXFwiLFxcbjE1NzU6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfSU5TVF9BQ1RJT05fUFRcXFwiLFxcbjE1NzY6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFRcXFwiLFxcbjE1Nzc6XFx0XFx0XFxcIk5NSV9UUk1fSFdfRVJcXFwiLFxcbjE1Nzg6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfVFJNXFxcIixcXG4xNTc5OlxcdFxcdFxcXCJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjUuNDAxMjc3NDA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjA0MjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUg4oCTIHRoZSBjaGFuZ2Ugc2VlbXMgdHJpdmlhbCwgYWxtb3N0IGxpa2UgYSB0eXBvIGNvcnJlY3Rpb24uIEl0IGFwcGVhcnMgdG8ganVzdCBzd2FwIHRoZSBwb3NpdGlvbnMgb2YgYG91dF9mcmVlX2VlcHJvbWAgYW5kIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgaW4gdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gSW5pdGlhbGx5LCBpdCBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIGNvZGUgYWRkaXRpb25zLCBidXQgdGhlbiB0aGUgZGlmZiB2aWV3IG1hZGUgaXQgY2xlYXIgaXQncyBhIHJlb3JkZXJpbmcsIG5vdCBhbiBhZGRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBvY2N1cnJlZCBhbmQgd2hldGhlciBpdCBoYXMgaW1wbGljYXRpb25zLlxuXG5NeSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB0aGUgdmFyaWFibGVzIHRoZXkgb3BlcmF0ZSBvbi4gTGV0J3Mgc2VlIGhvdyBgb3V0X2ZyZWVfZWVwcm9tYCBhbmQgYG91dF9mcmVlX2VlcHJvbV9ibG9iYCBhcmUgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgdG8gYmUgc3VyZSB0aGlzIFwic2ltcGxlXCIgY2hhbmdlIGlzIHRydWx5IGhhcm1sZXNzIG9yIGlmIGl0IGludHJvZHVjZXMgc3VidGxlIGlzc3VlcywgbGlrZSBkb3VibGUgZnJlZXMgb3IgbGVha3MsIGRlcGVuZGluZyBvbiB0aGUgY29udHJvbCBmbG93LiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBwZXJmb3JtIGEgY29kZSBhdWRpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjMwLjA2MzMyMjU4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI5NjI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dF9mcmVlX2VlcHJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MDgtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQwOTpcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbV9ibG9iO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDEwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDEzLVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MTQ6XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNy1cXHRpZiAoZXJyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxNDE4OlxcdFxcdGdvdG8gb3V0X2ZyZWVfZWVwcm9tO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0NjItXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQ2MzpcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MzAuMTQ0NjI0ODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MzE5Njc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIExldCdzIERpZyBJbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGlzc2VjdCB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDEzODAgdGhyb3VnaCAxNDMwLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSByZWxhdGVkIHRvIHRoZSBEaXJlY3QgVmlydHVhbCBNZW1vcnkgKERWTSkgc3RhcnQtdXAgcHJvY2VzcyB3aXRoaW4gdGhlIEludGVsIFdpcmVsZXNzIGRyaXZlci5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdGhpcyBzZWdtZW50IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgcHJldHR5IGZ1bmRhbWVudGFsLiBQZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIERWTS1yZWxhdGVkIGhhcmR3YXJlIHJlc291cmNlcywgdGhlIHNldHRpbmcgdXAgb2YgRE1BIHRyYW5zZmVycywgb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtb3J5IG1hcHBpbmdzLiBJdCBjb3VsZCBldmVuIGJlIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byB0aGUgRFZNIGVuZ2luZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBiZWluZyBtYW5pcHVsYXRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIG1hZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RlcHMgaXQgdGFrZXMgdG8gZ2V0IHRoZSBEVk0gb3BlcmF0aW9uYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgYnVmZmVycywgcmVnaXN0ZXJpbmcgaGFyZHdhcmUsIGVuYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzLCBvciBjb21tdW5pY2F0aW5nIHdpdGggZmlybXdhcmU/IE15IGFpbSBpcyB0byBnbGVhbiB0aGUgY29yZSBsb2dpYyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBEVk0gc3RhcnR1cCBzZXF1ZW5jZS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSB3YXRjaCBmb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhhbmRsaW5nIGFzIHdlbGwuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjM0LjIwNzgyNzgwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgwOlxcdFxcdCAqL1xcbjEzODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRpc3RpY3MubG9jayk7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdC8qKioqKioqKioqKioqKioqKioqKioqKlxcbjEzODQ6XFx0XFx0ICogMi4gUmVhZCBSRVYgcmVnaXN0ZXJcXG4xMzg1OlxcdFxcdCAqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xMzg2OlxcdFxcdElXTF9JTkZPKHByaXYsIFxcXCJEZXRlY3RlZCAlcywgUkVWPTB4JVhcXFxcblxcXCIsXFxuMTM4NzpcXHRcXHRcXHRwcml2LVxcdTAwM2V0cmFucy1cXHUwMDNlaW5mby5uYW1lLCBwcml2LVxcdTAwM2V0cmFucy1cXHUwMDNlaW5mby5od19yZXYpO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHRlcnIgPSBpd2xfdHJhbnNfc3RhcnRfaHcocHJpdi1cXHUwMDNldHJhbnMpO1xcbjEzOTA6XFx0XFx0aWYgKGVycilcXG4xMzkxOlxcdFxcdFxcdGdvdG8gb3V0X2xlYXZlX3RyYW5zO1xcbjEzOTI6XFx0XFxuMTM5MzpcXHRcXHQvKiBSZWFkIHRoZSBFRVBST00gKi9cXG4xMzk0OlxcdFxcdGVyciA9IGl3bF9yZWFkX2VlcHJvbShwcml2LVxcdTAwM2V0cmFucywgXFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9ibG9iLFxcbjEzOTU6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9ibG9iX3NpemUpO1xcbjEzOTY6XFx0XFx0aWYgKGVycikge1xcbjEzOTc6XFx0XFx0XFx0SVdMX0VSUihwcml2LCBcXFwiVW5hYmxlIHRvIGluaXQgRUVQUk9NXFxcXG5cXFwiKTtcXG4xMzk4OlxcdFxcdFxcdGdvdG8gb3V0X2xlYXZlX3RyYW5zO1xcbjEzOTk6XFx0XFx0fVxcbjE0MDA6XFx0XFxuMTQwMTpcXHRcXHQvKiBSZXNldCBjaGlwIHRvIHNhdmUgcG93ZXIgdW50aWwgd2UgbG9hZCB1Q29kZSBkdXJpbmcgXFxcInVwXFxcIi4gKi9cXG4xNDAyOlxcdFxcdGl3bF90cmFuc19zdG9wX2RldmljZShwcml2LVxcdTAwM2V0cmFucyk7XFxuMTQwMzpcXHRcXG4xNDA0OlxcdFxcdHByaXYtXFx1MDAzZW52bV9kYXRhID0gaXdsX3BhcnNlX2VlcHJvbV9kYXRhKHByaXYtXFx1MDAzZXRyYW5zLCBwcml2LVxcdTAwM2VjZmcsXFxuMTQwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2IsXFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2Jfc2l6ZSk7XFxuMTQwNzpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZW52bV9kYXRhKSB7XFxuMTQwODpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjE0MDk6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb21fYmxvYjtcXG4xNDEwOlxcdFxcdH1cXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0ZXJyID0gaXdsX252bV9jaGVja192ZXJzaW9uKHByaXYtXFx1MDAzZW52bV9kYXRhLCBwcml2LVxcdTAwM2V0cmFucyk7XFxuMTQxMzpcXHRcXHRpZiAoZXJyKVxcbjE0MTQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdGVyciA9IGl3bF9lZXByb21faW5pdF9od19wYXJhbXMocHJpdik7XFxuMTQxNzpcXHRcXHRpZiAoZXJyKVxcbjE0MTg6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuMTQxOTpcXHRcXG4xNDIwOlxcdFxcdC8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi9cXG4xNDIxOlxcdFxcdG1lbWNweShwcml2LVxcdTAwM2VhZGRyZXNzZXNbMF0uYWRkciwgcHJpdi1cXHUwMDNlbnZtX2RhdGEtXFx1MDAzZWh3X2FkZHIsIEVUSF9BTEVOKTtcXG4xNDIyOlxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCJNQUMgYWRkcmVzczogJXBNXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VhZGRyZXNzZXNbMF0uYWRkcik7XFxuMTQyMzpcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWFkZHJlc3NlcyA9IHByaXYtXFx1MDAzZWFkZHJlc3NlcztcXG4xNDI0OlxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlbl9hZGRyZXNzZXMgPSAxO1xcbjE0MjU6XFx0XFx0bnVtX21hYyA9IHByaXYtXFx1MDAzZW52bV9kYXRhLVxcdTAwM2VuX2h3X2FkZHJzO1xcbjE0MjY6XFx0XFx0aWYgKG51bV9tYWMgXFx1MDAzZSAxKSB7XFxuMTQyNzpcXHRcXHRcXHRtZW1jcHkocHJpdi1cXHUwMDNlYWRkcmVzc2VzWzFdLmFkZHIsIHByaXYtXFx1MDAzZWFkZHJlc3Nlc1swXS5hZGRyLFxcbjE0Mjg6XFx0XFx0XFx0ICAgICAgIEVUSF9BTEVOKTtcXG4xNDI5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWFkZHJlc3Nlc1sxXS5hZGRyWzVdKys7XFxuMTQzMDpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZW5fYWRkcmVzc2VzKys7XFxuMTQzMTpcXHRcXHR9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdFxcdC8qKioqKioqKioqKioqKioqKioqKioqKipcXG4xNDM0OlxcdFxcdCAqIDQuIFNldHVwIEhXIGNvbnN0YW50c1xcbjE0MzU6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xNDM2OlxcdFxcdGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpO1xcbjE0Mzc6XFx0XFxuMTQzODpcXHRcXHRpZiAoIShwcml2LVxcdTAwM2Vudm1fZGF0YS1cXHUwMDNlc2t1X2NhcF9pcGFuX2VuYWJsZSkpIHtcXG4xNDM5OlxcdFxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCJZb3VyIEVFUFJPTSBkaXNhYmxlZCBQQU5cXFxcblxcXCIpO1xcbjE0NDA6XFx0XFx0XFx0dWNvZGVfZmxhZ3MgXFx1MDAyNj0gfklXTF9VQ09ERV9UTFZfRkxBR1NfUEFOO1xcbjE0NDE6XFx0XFx0XFx0LypcXG4xNDQyOlxcdFxcdFxcdCAqIGlmIG5vdCBQQU4sIHRoZW4gZG9uJ3Qgc3VwcG9ydCBQMlAgLS0gbWlnaHQgYmUgYSB1Q29kZVxcbjE0NDM6XFx0XFx0XFx0ICogcGFja2FnaW5nIGJ1ZyBvciBkdWUgdG8gdGhlIGVlcHJvbSBjaGVjayBhYm92ZVxcbjE0NDQ6XFx0XFx0XFx0ICovXFxuMTQ0NTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzdGFfa2V5X21heF9udW0gPSBTVEFfS0VZX01BWF9OVU07XFxuMTQ0NjpcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29uZi5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNO1xcbjE0NDc6XFx0XFx0fVxcbjE0NDg6XFx0XFxuMTQ0OTpcXHRcXHQvKioqKioqKioqKioqKioqKioqKlxcbjE0NTA6XFx0XFx0ICogNS4gU2V0dXAgcHJpdlxcbjE0NTE6XFx0XFx0ICoqKioqKioqKioqKioqKioqKiovXFxuMTQ1MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVdMX01BWF9IV19RVUVVRVM7IGkrKykge1xcbjE0NTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBJV0xfSU5WQUxJRF9NQUM4MDIxMV9RVUVVRTtcXG4xNDU0OlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFIFxcdTAwMjZcXHUwMDI2XFxuMTQ1NTpcXHRcXHRcXHQgICAgaSAhPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNIFxcdTAwMjZcXHUwMDI2XFxuMTQ1NjpcXHRcXHRcXHQgICAgaSAhPSBJV0xfSVBBTl9DTURfUVVFVUVfTlVNKVxcbjE0NTc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBpO1xcbjE0NTg6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHJpdi1cXHUwMDNlcXVldWVfc3RvcF9jb3VudFtpXSwgMCk7XFxuMTQ1OTpcXHRcXHR9XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdGVyciA9IGl3bF9pbml0X2Rydihwcml2KTtcXG4xNDYyOlxcdFxcdGlmIChlcnIpXFxuMTQ2MzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0LyogQXQgdGhpcyBwb2ludCBib3RoIGh3IGFuZCBwcml2IGFyZSBpbml0aWFsaXplZC4gKi9cXG4xNDY2OlxcdFxcbjE0Njc6XFx0XFx0LyoqKioqKioqKioqKioqKioqKioqXFxuMTQ2ODpcXHRcXHQgKiA2LiBTZXR1cCBzZXJ2aWNlc1xcbjE0Njk6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqL1xcbjE0NzA6XFx0XFx0ZXJyID0gaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7XFxuMTQ3MTpcXHRcXHRpZiAoZXJyKVxcbjE0NzI6XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X2RydjtcXG4xNDczOlxcdFxcbjE0NzQ6XFx0XFx0aXdsX3NldHVwX3J4X2hhbmRsZXJzKHByaXYpO1xcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTtcXG4xNDc3OlxcdFxcdGl3bF90dF9pbml0aWFsaXplKHByaXYpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWZ3X3ZlcnNpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjM0LjIwNzk3MzYyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIyNjQ4MjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gdGhlIGl3bHdpZmkgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpd2x3aWZpYCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBoYW5kbGVzIEVFUFJPTSBkYXRhIGxvYWRpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGlzIHNlcXVlbmNlOiBJdCByZWFkcyB0aGUgRUVQUk9NLCBzdG9wcyB0aGUgZGV2aWNlLCBwYXJzZXMgdGhlIEVFUFJPTSBkYXRhIGludG8gYHByaXYtXHUwMDNlbnZtX2RhdGFgLCBhbmQgdGhlbiBjaGVja3MgaXRzIHZlcnNpb24uIElmIHBhcnNpbmcgZmFpbHMgKG1lYW5pbmcgYHByaXYtXHUwMDNlbnZtX2RhdGFgIGlzIE5VTEwpLCB0aGUgY29kZSBqdW1wcyB0byBhIGNsZWFudXAgbGFiZWwsIGBvdXRfZnJlZV9lZXByb21fYmxvYmAuIElmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBqdW1wcyB0byBgb3V0X2ZyZWVfZWVwcm9tYC4gVGhlIHByb2JsZW0gaXMsIHVuZGVyIHRoZSBvcmlnaW5hbCBlcnJvciBoYW5kbGluZywgaWYgcGFyc2luZyBmYWlscywgaXQgY29ycmVjdGx5IGZyZWVzIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCAod2hpY2ggY29udGFpbnMgdGhlIHJhdyBFRVBST00gZGF0YSksIGJ1dCBfdGhlbl8gZnJlZXMgdGhlIE5VTEwgcG9pbnRlciBgcHJpdi1cdTAwM2Vudm1fZGF0YWAuIEhvd2V2ZXIsIGlmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBmcmVlcyBgcHJpdi1cdTAwM2Vudm1fZGF0YWAgYnV0ICpkb2Vzbid0KiBmcmVlIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrLiBUaGlzIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2xlYW51cCBsYWJlbHMgc28gdGhhdCBgb3V0X2ZyZWVfZWVwcm9tYCBmcmVlcyBgbnZtX2RhdGFgIGFuZCB0aGVuICpmYWxscyB0aHJvdWdoKiB0byBgb3V0X2ZyZWVfZWVwcm9tX2Jsb2JgIHdoaWNoIGZyZWVzIGBlZXByb21fYmxvYmAuIFRoaXMgZml4ZXMgdGhlIGxlYWsuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCwgd2hpY2ggaXMgdGhlIGBzdGFydGAgY2FsbGJhY2sgZm9yIGBpd2xfZHZtX29wc2AuIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIHN0YXJ0cyB1cC4gSXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbWVtb3J5IGxlYWsgZml4LiBUaGlzIGRyaXZlciBpcyBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rLCB3aGljaCBtZWFucyBpdCByZWxpZXMgb24gYWN0dWFsIFBDSSBoYXJkd2FyZS4gVHlwaWNhbGx5LCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBkb24ndCBlbXVsYXRlIFBDSSBoYXJkd2FyZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHBhc3NlZCB0aHJvdWdoIG9yIGVtdWxhdGVkLiBIb3dldmVyLCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZ1enppbmcgUENJIGRyaXZlcnMsIHBvdGVudGlhbGx5IHVzaW5nIGB2aGNpYCBvciBzaW1pbGFyIHRlY2huaXF1ZXMuIEFuZCBpdCBjYW4gZnV6eiBQQ0kgY29uZmlnIHNwYWNlIG9yIHVzZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byBjcmVhdGUgUENJIGRldmljZXMgaWYgdGhlIGZ1enppbmcgaXMgZW5hYmxlZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBlbXVsYXRlIGl3bHdpZmkgaGFyZHdhcmUgZGlyZWN0bHk/IE5vLCBpdCBkb2Vzbid0LiBCdXQsIHN5emthbGxlciBkb2VzIGhhdmUgUENJIGZ1enppbmcuIFRoZSBwYXRjaCBndWlkZWxpbmVzIHNheSBub3QgdG8gbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nIGlmIGl0J3MgKmltcG9zc2libGUqIHRvIHJlYWNoIGluIHRoZXNlIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBIb3dldmVyLCBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIFBDSSBkZXZpY2VzIGFuZCBwcm92aWRlIGZ1enplZCBtZW1vcnkgYWNjZXNzLiBUaGF0IG1lYW5zIHRoZXJlICppcyogYSBwYXRoIHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIFBDSSBmdXp6aW5nISBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG5vdyBkb3VibGUtY2hlY2sgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBhY3R1YWxseSB0cmlnZ2VyIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NDYuNDM0NDU3ODk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk5NDg5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElXTFdJRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoyOmNvbmZpZyBJV0xXSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIC0gV2lyZWxlc3MtTi9BZHZhbmNlZC1OL1VsdGltYXRlLU4gKGl3bHdpZmkpIFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz00Nz1pZiBJV0xXSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo0OTpjb25maWcgSVdMV0lGSV9LVU5JVF9URVNUU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01MC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTU5LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz04ND1jb25maWcgSVdMTUxEXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24ndCBjYWxsIGl0IF9NT0RVTEUgLS0gd2lsbCBjb25mdXNlIEtjb25maWcvZml4ZGVwLy4uLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy05Ni1cXHRib29sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9MTA1PW1lbnUgXFxcIkRlYnVnZ2luZyBPcHRpb25zXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEwNzpjb25maWcgSVdMV0lGSV9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiB0aGUgaXdsd2lmaSBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMzItXFx0Ym9vbCBcXFwiaXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzk6Y29uZmlnIElXTFdJRklfREVWSUNFX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIml3bHdpZmkgZGV2aWNlIGFjY2VzcyB0cmFjaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDo0Ni44MzQ0MTI1NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDY2MTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBJV0xEVk0qKlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYElXTERWTWAuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEga2V5IGNvbXBvbmVudCBpbiB0aGlzIHByb2plY3QsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2V0dXAgdGhvcm91Z2hseSBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiBjb25zaWRlcmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGluaXRpYWwgY2hlY2sgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFuZCB0aGVpciBjdXJyZW50IHZhbHVlcywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBzeXN0ZW1zLCBhbmQgdWx0aW1hdGVseSwgcmV2ZWFsIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHRoYXQgcmVxdWlyZSBhZGRpdGlvbmFsIGF0dGVudGlvbi4gU28sIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQ/IFRoZSBjb25maWcgZmlsZXMsIG9mIGNvdXJzZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgbW9zdCByZWxldmFudCB0byBgSVdMRFZNYCBhbmQgdGhlbiBiZWdpbiBwYXJzaW5nIHRoZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBuZXR3b3JrIHNldHRpbmdzLCBzZWN1cml0eSBwcm90b2NvbHMsIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMgd2l0aCBvdGhlciBhcHBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGF0IHZlcnNpb25zLCBlcnJvciBsb2dzLCBhbmQgcmVjZW50IGNoYW5nZXMuIE9uY2UgSSBoYXZlIHRoZSBiYXNlbGluZSwgSSB3aWxsIGtub3cgd2hlcmUgdG8gZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjUwLjE4OTA3NjIzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMjkxNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJV0xEVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTAuMjQ0MzE1MzMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjgyMzExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpd2x3aWZpIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBEVk1gIOKAkyBEeW5hbWljIFZpcnR1YWwgTWFjaGluZXMsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgd2l0aGluIHRoZSBJbnRlbCB3aXJlbGVzcyBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgdXN1YWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgbWF5YmUgYm9hcmQgc3VwcG9ydCwgcmVndWxhdG9yeSByZXF1aXJlbWVudHMsIG9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhhdCBLY29uZmlnIGZpbGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcywgYW5kIGhvdyBgRFZNYCBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIHdpbGwgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgRFZNYCBiZWhhdmVzIHdpdGhpbiB0aGlzIGRyaXZlciwgYW5kIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgbXkgb3duIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTQuNzcyNTQ5MDc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc4NjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz01OD1jb25maWcgSVdMV0lGSV9MRURTXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjAtXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIElXTE1WTSB8fCBJV0xEVk1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjItXFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NjY6Y29uZmlnIElXTERWTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2NzpcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgV2lyZWxlc3MgV2lGaSBEVk0gRmlybXdhcmUgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjgtXFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02OS1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjcwOlxcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgc3VwcG9ydHMgdGhlIERWTSBmaXJtd2FyZS4gVGhlIGxpc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNzEtXFx0ICBvZiB0aGUgZGV2aWNlcyB0aGF0IHVzZSB0aGlzIGZpcm13YXJlIGlzIGF2YWlsYWJsZSBoZXJlOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTk1PWNvbmZpZyBJV0xXSUZJX09QTU9ERV9NT0RVTEFSXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTc6XFx0ZGVmYXVsdCB5IGlmIElXTERWTT1tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk4LVxcdGRlZmF1bHQgeSBpZiBJV0xNVk09bVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTAyOmNvbW1lbnQgXFxcIldBUk5JTkc6IGl3bHdpZmkgaXMgdXNlbGVzcyB3aXRob3V0IElXTERWTSBvciBJV0xNVk0gb3IgSVdMTUxEXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDM6XFx0ZGVwZW5kcyBvbiBJV0xEVk09biBcXHUwMDI2XFx1MDAyNiBJV0xNVk09biBcXHUwMDI2XFx1MDAyNiBJV0xNTEQ9blxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjU0LjgyOTM0MTE2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc5OTMyNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgVmFsdWUgb2YgRnV6emluZyBhIE1lbW9yeSBMZWFrIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBpc3N1ZSBjZW50ZXJzIGFyb3VuZCB0aGUgYElXTERWTWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogdGhpcyBtZW1vcnkgbGVhayBmaXguIEl0J3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYSBkcml2ZXIncyBwcm9iZSBvciBzdGFydCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZXJyb3IgY29uZGl0aW9ucy4gVGhhdCdzIGdvb2QgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIENhbiBJIHRyaWdnZXIgaXQ/IE5vdywgdGhpbmtpbmcgYWJvdXQgbXkgdGVzdGluZyB0b29sYm94LCBJIHJlbWVtYmVyIGBzeXprYWxsZXJgIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gUG90ZW50aWFsbHksIHRoYXQgY291bGQgYmUgYSB3YXkgaW4uXG5cbkJ1dCBmaXJzdCwgYSBjcnVjaWFsIHBvaW50OiBkb2VzIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBmdW5jdGlvbiBldmVuIGdldCBjYWxsZWQgaW4gdGhpcyBzY2VuYXJpbz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBpbnZlc3RpbmcgYW55IHRpbWUgaW4gY3JhZnRpbmcgZnV6emluZyBzdHJhdGVnaWVzLiBJJ2xsIGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTkuODA5Mjc2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzAyNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml3bF9kdm1fb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfaGNtZF9hcnIgaXdsX2R2bV9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyBpd2xfZHZtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyNjMtXFx0b3BfbW9kZSA9IGh3LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjY0OlxcdG9wX21vZGUtXFx1MDAzZW9wcyA9IFxcdTAwMjZpd2xfZHZtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTI2NS1cXHRwcml2ID0gSVdMX09QX01PREVfR0VUX0RWTShvcF9tb2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTI0PXN0YXRpYyBib29sIGl3bF9zZXRfaHdfcmZraWxsX3N0YXRlKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSwgYm9vbCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyMTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM5LVxcdC5zdGFydCA9IGl3bF9vcF9tb2RlX2R2bV9zdGFydCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTU3PXN0YXRpYyBpbnQgX19pbml0IGl3bF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjE2ODpcXHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFxcXCJpd2xkdm1cXFwiLCBcXHUwMDI2aXdsX2R2bV9vcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTkuODcxOTg0OTc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDY4NDM3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpd2x3aWZpYCBkcml2ZXIgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzZXR1cC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgb3BlcmF0aW5nIG1vZGUgaXMgcmVnaXN0ZXJlZC4gSSBzZWUgYGl3bF9vcG1vZGVfcmVnaXN0ZXJgIG1lbnRpb25lZCBhbmQgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhhdCB0aGUgYHN0YXJ0YCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQsIGludm9rZWQgYnkgdGhlIGBpd2x3aWZpYCBjb3JlIHdoZW4gYSBjb21wYXRpYmxlIGRldmljZSBpcyBkZXRlY3RlZCBkdXJpbmcgcHJvYmluZy4gTXkgaW5zdGluY3QgaXMgdG8gbm93IGRpdmUgZGlyZWN0bHkgaW50byB0aGUgYGl3bF9vcG1vZGVfcmVnaXN0ZXJgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGl3bHdpZmlgIGNvcmUgY29kZS4gTGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjA0LjUxODgzMTQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYyMTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfb3Btb2RlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTU3PXN0YXRpYyBpbnQgX19pbml0IGl3bF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjE2ODpcXHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFxcXCJpd2xkdm1cXFwiLCBcXHUwMDI2aXdsX2R2bV9vcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTIwNDk9SVdMX0VYUE9SVF9TWU1CT0woaXdsd2lmaV9tb2RfcGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0yMDUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjIwNTE6aW50IGl3bF9vcG1vZGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyAqb3BzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjA3Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MjA3MzpJV0xfRVhQT1JUX1NZTUJPTChpd2xfb3Btb2RlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0yMDc0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oPTE1Mz1zdHJ1Y3QgaXdsX29wX21vZGVfb3BzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLW9wLW1vZGUuaC0xODEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oOjE4MjppbnQgaXdsX29wbW9kZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzICpvcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLW9wLW1vZGUuaC0xODMtdm9pZCBpd2xfb3Btb2RlX2RlcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYz0zOD1zdGF0aWMgaW50IF9faW5pdCBpd2xfbWxkX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYy0zOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvbWxkLmM6NDA6XFx0aW50IHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXFxcIml3bG1sZFxcXCIsIFxcdTAwMjZpd2xfbWxkX29wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvbWxkLmMtNDEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYz01Mz1zdGF0aWMgaW50IF9faW5pdCBpd2xfbXZtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jLTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jOjYzOlxcdHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXFxcIml3bG12bVxcXCIsIFxcdTAwMjZpd2xfbXZtX29wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb3BzLmMtNjQtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNTowNC41ODU0NTg3NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NDA2MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBGdW5jdGlvbjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqXG5cbk9rYXksIHNvIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpZiB3ZSd2ZSBnb3QgYW4gYGl3bHdpZmlgIFBDSSBkZXZpY2UgdGhhdCBuZWVkcyBEVk0gZmlybXdhcmUuIFN5emthbGxlciBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgcmlnaHQ/IFRoYXQncyBpbnRlcmVzdGluZywgYnV0IGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYSBtZW1vcnkgbGVhayBmaXggd2l0aGluIGEgZHJpdmVyLiBHb29kIGNhbmRpZGF0ZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4uLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiBPa2F5LCBzbyB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgYGl3bHdpZmlgIHJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuWWVzISBTeXprYWxsZXIgaGFzIGEgUENJIGZ1enplciB0aGF0IGluamVjdHMgUENJIGRldmljZXMgdXNpbmcgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEFoYSEgQW5kIHdhaXQgYSBzZWNvbmQsIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgYWN0dWFsbHkgdHJpZ2dlcnMgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIG9mIFBDSSBkcml2ZXJzLiBUaGF0J3Mga2V5LiBTbywgbGV0J3MgY29uZmlybS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgY2FuIGluZGVlZCBiZSByZWFjaGVkIHZpYSBQQ0kgcHJvYmUuIFNlZW1zIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgY2hlY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjA5Ljk2OTUyMjA4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk1MzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfcGNpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTMyLSAqIFRoaXMgY29tcG9uZW50IGltcGxlbWVudHMgdGhlIHN5c3RlbSBmbG93cyBzdWNoIGFzIGJ1cyBlbnVtZXJhdGlvbiwgYnVzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6MzM6ICogcmVtb3ZhbC4gQnVzIGRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gZmxvd3MgKHN1Y2ggYXMgaXdsX3BjaV9wcm9iZSkgYXJlIGluXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtMzQtICogYnVzIHNwZWNpZmljIGZpbGVzICh0cmFuc3BvcnQgZmlsZXMpLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgaXMgY29tbW9uIGFtb25nXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM9MTE0Nz1FWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX3BjaV9maW5kX2Rldl9pbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmMtMTE0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM6MTE0OTpzdGF0aWMgaW50IGl3bF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTExNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jPTEzMzg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl3bF9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTEzNDAtXFx0LmlkX3RhYmxlID0gaXdsX2h3X2NhcmRfaWRzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYzoxMzQxOlxcdC5wcm9iZSA9IGl3bF9wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTEzNDItXFx0LnJlbW92ZSA9IGl3bF9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNToxMS40Njk0Nzk4NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzOTQ4MTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgdGhlIEludGVsIFdpcmVsZXNzIERyaXZlciBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cblJpZ2h0LCBzbyBgaXdsX3BjaV9wcm9iZWAg4oCTIHRoYXQncyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLCBpc24ndCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBicmluZ2luZyB1cCB0aGUgZGV2aWNlLiBJdCBzaG91bGQgdGhlbiBraWNrIG9mZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJ5IGNhbGxpbmcgc29tZXRoaW5nIGxpa2UgYGl3bF9kcnZfc3RhcnRgLCBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIHJvbGUuIEFuZCB0aGF0J3Mgd2hlcmUgdGhlIG9wbW9kZS1zcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyB0aGVyZSBjYW4gYmUgbnVhbmNlcyBkZXBlbmRpbmcgb24gZmlybXdhcmUsIGhhcmR3YXJlIHJldmlzaW9uLCBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHBhdGggdG8gYmUgY2VydGFpbi4gSnVzdCBtYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBtZW50YWwgbWFwIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjE1LjcwODk2MzgyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MTMzMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml3bF9kcnZfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM9MTYzMj1zdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTk0Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoxOTQ4OnN0cnVjdCBpd2xfZHJ2ICppd2xfZHJ2X3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE5NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNDctICogNSkgVGhlIGJ1cyBzcGVjaWZpYyBjb21wb25lbnQgY2FsbHMgdG8gdGhlIGRydiBidXMgYWdub3N0aWMgcGFydFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ4OiAqICAgIChpd2xfZHJ2X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01MC0gKiA3KSBpd2xfcmVxX2Z3X2NhbGxiYWNrIHBhcnNlcyB0aGUgZncgZmlsZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg9NTY9c3RydWN0IGl3bF9yZl9jZmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNTctLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NTg6ICogaXdsX2Rydl9zdGFydCAtIHN0YXJ0IHRoZSBkcnZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01OS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNjctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6Njg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTY5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jPTQyMzI9aW50IGl3bF9wY2lfZ2VuMV8yX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjQzNjg6XFx0aXdsX3RyYW5zLVxcdTAwM2VkcnYgPSBpd2xfZHJ2X3N0YXJ0KGl3bF90cmFucyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjE2LjEzNDEwMjk1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM5NTI0NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqXG5cblJpZ2h0LCBgaXdsX2Rydl9zdGFydGAgaXMgd2hlcmUgdGhlIHBhcnR5IGJlZ2lucywga2lja2luZyBvZmYgdGhlIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBmZXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIG5hdHVyYWxseSwgaG93IHRoYXQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aWxsIHVsdGltYXRlbHkgcmVzb2x2ZS4gVGhlIG5leHQga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJlc3VsdCBvZiB0aGF0IGZpcm13YXJlIHJldHJpZXZhbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBlcnJvciByZXBvcnRpbmcsIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIGlmIHRoZSBmaXJtd2FyZSBmYWlscyB0byBsb2FkLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlcidzIHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MjEuNzczNjMwODYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU5MzIzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXdsX3JlcV9md19jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0yOTM9SVdMX0VYUE9SVF9TWU1CT0woaXdsX2Rydl9nZXRfZnduYW1lX3ByZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjI5NTpzdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTI5Ni1cXHRcXHRcXHRcXHR2b2lkICpjb250ZXh0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTMyNT1zdGF0aWMgaW50IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBpd2xfZHJ2ICpkcnYsIGJvb2wgZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0zODUtXFx0XFx0XFx0XFx0ICAgICAgIGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzozODY6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwsIGRydiwgaXdsX3JlcV9md19jYWxsYmFjayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMzg3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTE2MDk9c3RhdGljIHZvaWQgX2l3bF9vcF9tb2RlX3N0b3Aoc3RydWN0IGl3bF9kcnYgKmRydilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE2MjYtLypcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoxNjI3OiAqIGl3bF9yZXFfZndfY2FsbGJhY2sgLSBjYWxsYmFjayB3aGVuIGZpcm13YXJlIHdhcyBsb2FkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjI4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE2MzI6c3RhdGljIHZvaWQgaXdsX3JlcV9md19jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3Jhdywgdm9pZCAqY29udGV4dClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTQ4LSAqICAgIChpd2xfZHJ2X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaDo1MDogKiA3KSBpd2xfcmVxX2Z3X2NhbGxiYWNrIHBhcnNlcyB0aGUgZncgZmlsZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjUxOiAqIDgpIGl3bF9yZXFfZndfY2FsbGJhY2sgc3RhcnRzIHRoZSB3aWZpIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoZXMgdGhlIGZ3XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNTItICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjIyLjE4OTU2ODUyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDMzOTY5Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaUZpIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCBpcyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBXaUZpIGltcGxlbWVudGF0aW9uLCBvciB3aGF0IHRoZSBjb2RlIGNhbGxzIHRoZSBcIm9wbW9kZS5cIiBUaGF0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSByYWRpbyBpbnRlcmZhY2UgZ2V0cyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdGFydHVwIHNlcXVlbmNlLiBUaGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgaG93IGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgYHN0YXJ0YCBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNob3NlbiBvcG1vZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBvZiBgaXdsX3JlcV9md19jYWxsYmFja2AgaXRzZWxmLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogaXQgY2FsbHMgdGhlIGBzdGFydGAgZnVuY3Rpb24gb2YgdGhlIG9wbW9kZS4gSXMgaXQgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbD8gSXMgdGhlcmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MgZmlyc3Q/IEtub3dpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY2FzZSBmb3IgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MjkuMjIzNTQwNzE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkxMzAwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BfbW9kZV9vcHMtXFx1MDAzZXN0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNToyOS4zMDA0NjAyMzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxOTE3NjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFJlcXVlc3QgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgZmlybXdhcmUgcmVxdWVzdHMgaW4gdGhlIEludGVsIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgaXdsX3JlcV9md19jYWxsYmFja2Agd2l0aGluIGBpd2wtZHJ2LmNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgcmVzdWx0cyBvZiBmaXJtd2FyZSBsb2Fkcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIGxhcmdlciBpd2wgZHJpdmVyIGFyY2hpdGVjdHVyZSDigJMgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlcXVlc3QgcXVldWUsIHRoZSBkZXZpY2Ugc3RhdGUsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byBmaXJtd2FyZSBsb2FkaW5nIGZhaWx1cmVzIG9yIGRlbGF5cy4gSSB3aWxsIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjYWxsYmFjayBpcyBiZWluZyBzY2hlZHVsZWQgZnJvbS4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgYXJvdW5kIHJldHJpZXMsIHRpbWVvdXRzLCBhbmQgcG9zc2libHkgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb24gZmFpbHMgdG8gbG9hZC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZsb3cgdG8gYXNzZXNzIGlmIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLCBkZWJ1Zywgb3IgaW1wcm92ZSByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjM0LjMxOTYzODY5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDA6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfRldfTk9USUZdID1cXG4xODAxOlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX2NtZCk7XFxuMTgwMjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9NTE1FXSA9XFxuMTgwMzpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9tbG1lKTtcXG4xODA0OlxcdFxcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1NUQVRTXSA9XFxuMTgwNTpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9zdGF0cyk7XFxuMTgwNjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9SU1NJXSA9XFxuMTgwNzpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9sb3dfcnNzaSk7XFxuMTgwODpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9UWFFfVElNRVJTXSA9XFxuMTgwOTpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl90eHFfdGltZXIpO1xcbjE4MTA6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfVElNRV9FVkVOVF0gPVxcbjE4MTE6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGltZV9ldmVudCk7XFxuMTgxMjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9CQV0gPVxcbjE4MTM6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfYmEpO1xcbjE4MTQ6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfVERMU10gPVxcbjE4MTU6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGRscyk7XFxuMTgxNjpcXHRcXG4xODE3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2KTsgaSsrKSB7XFxuMTgxODpcXHRcXHRcXHRpZiAocGllY2VzLVxcdTAwM2VkYmdfdHJpZ2dlcl90bHZbaV0pIHtcXG4xODE5OlxcdFxcdFxcdFxcdC8qXFxuMTgyMDpcXHRcXHRcXHRcXHQgKiBJZiB0aGUgdHJpZ2dlciBpc24ndCBsb25nIGVub3VnaCwgV0FSTiBhbmQgZXhpdC5cXG4xODIxOlxcdFxcdFxcdFxcdCAqIFNvbWVvbmUgaXMgdHJ5aW5nIHRvIGRlYnVnIHNvbWV0aGluZyBhbmQgaGUgd29uJ3RcXG4xODIyOlxcdFxcdFxcdFxcdCAqIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGJ1ZyBoZSBpcyB0cnlpbmcgdG8gY2hhc2UuXFxuMTgyMzpcXHRcXHRcXHRcXHQgKiBXZSdkIGJldHRlciBiZSBub2lzeSB0byBiZSBzdXJlIGhlIGtub3dzIHdoYXQnc1xcbjE4MjQ6XFx0XFx0XFx0XFx0ICogZ29pbmcgb24uXFxuMTgyNTpcXHRcXHRcXHRcXHQgKi9cXG4xODI2OlxcdFxcdFxcdFxcdGlmIChXQVJOX09OKHBpZWNlcy1cXHUwMDNlZGJnX3RyaWdnZXJfdGx2X2xlbltpXSBcXHUwMDNjXFxuMTgyNzpcXHRcXHRcXHRcXHRcXHQgICAgKHRyaWdnZXJfdGx2X3N6W2ldICtcXG4xODI4OlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGx2KSkpKVxcbjE4Mjk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9mdztcXG4xODMwOlxcdFxcdFxcdFxcdGRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2X2xlbltpXSA9XFxuMTgzMTpcXHRcXHRcXHRcXHRcXHRwaWVjZXMtXFx1MDAzZWRiZ190cmlnZ2VyX3Rsdl9sZW5baV07XFxuMTgzMjpcXHRcXHRcXHRcXHRkcnYtXFx1MDAzZWZ3LmRiZy50cmlnZ2VyX3RsdltpXSA9XFxuMTgzMzpcXHRcXHRcXHRcXHRcXHRrbWVtZHVwKHBpZWNlcy1cXHUwMDNlZGJnX3RyaWdnZXJfdGx2W2ldLFxcbjE4MzQ6XFx0XFx0XFx0XFx0XFx0XFx0ZHJ2LVxcdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZfbGVuW2ldLFxcbjE4MzU6XFx0XFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMTgzNjpcXHRcXHRcXHRcXHRpZiAoIWRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2W2ldKVxcbjE4Mzc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9mdztcXG4xODM4OlxcdFxcdFxcdH1cXG4xODM5OlxcdFxcdH1cXG4xODQwOlxcdFxcbjE4NDE6XFx0XFx0LyogTm93IHRoYXQgd2UgY2FuIG5vIGxvbmdlciBmYWlsLCBjb3B5IGluZm9ybWF0aW9uICovXFxuMTg0MjpcXHRcXG4xODQzOlxcdFxcdGRydi1cXHUwMDNlZncuZGJnLm1lbV90bHYgPSBwaWVjZXMtXFx1MDAzZWRiZ19tZW1fdGx2O1xcbjE4NDQ6XFx0XFx0cGllY2VzLVxcdTAwM2VkYmdfbWVtX3RsdiA9IE5VTEw7XFxuMTg0NTpcXHRcXHRkcnYtXFx1MDAzZWZ3LmRiZy5uX21lbV90bHYgPSBwaWVjZXMtXFx1MDAzZW5fbWVtX3RsdjtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0LypcXG4xODQ4OlxcdFxcdCAqIFRoZSAoc2l6ZSAtIDE2KSAvIDEyIGZvcm11bGEgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkXFxuMTg0OTpcXHRcXHQgKiBmb3IgZWFjaCBldmVudCwgd2hpY2ggaXMgb2YgbW9kZSAxIChpbmNsdWRpbmcgdGltZXN0YW1wKSBmb3IgYWxsXFxuMTg1MDpcXHRcXHQgKiBuZXcgbWljcm9jb2RlcyB0aGF0IGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbi5cXG4xODUxOlxcdFxcdCAqL1xcbjE4NTI6XFx0XFx0ZnctXFx1MDAzZWluaXRfZXZ0bG9nX3B0ciA9IHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfcHRyO1xcbjE4NTM6XFx0XFx0aWYgKHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSlcXG4xODU0OlxcdFxcdFxcdGZ3LVxcdTAwM2Vpbml0X2V2dGxvZ19zaXplID0gKHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcXG4xODU1OlxcdFxcdGVsc2VcXG4xODU2OlxcdFxcdFxcdGZ3LVxcdTAwM2Vpbml0X2V2dGxvZ19zaXplID1cXG4xODU3OlxcdFxcdFxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZW1hY19jZmctXFx1MDAzZWJhc2UtXFx1MDAzZW1heF9ldmVudF9sb2dfc2l6ZTtcXG4xODU4OlxcdFxcdGZ3LVxcdTAwM2Vpbml0X2VycmxvZ19wdHIgPSBwaWVjZXMtXFx1MDAzZWluaXRfZXJybG9nX3B0cjtcXG4xODU5OlxcdFxcdGZ3LVxcdTAwM2VpbnN0X2V2dGxvZ19wdHIgPSBwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3B0cjtcXG4xODYwOlxcdFxcdGlmIChwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3NpemUpXFxuMTg2MTpcXHRcXHRcXHRmdy1cXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3NpemUgLSAxNikvMTI7XFxuMTg2MjpcXHRcXHRlbHNlXFxuMTg2MzpcXHRcXHRcXHRmdy1cXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9XFxuMTg2NDpcXHRcXHRcXHRcXHRkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VtYWNfY2ZnLVxcdTAwM2ViYXNlLVxcdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XFxuMTg2NTpcXHRcXHRmdy1cXHUwMDNlaW5zdF9lcnJsb2dfcHRyID0gcGllY2VzLVxcdTAwM2VpbnN0X2VycmxvZ19wdHI7XFxuMTg2NjpcXHRcXG4xODY3OlxcdFxcdC8qXFxuMTg2ODpcXHRcXHQgKiBmaWd1cmUgb3V0IHRoZSBvZmZzZXQgb2YgY2hhaW4gbm9pc2UgcmVzZXQgYW5kIGdhaW4gY29tbWFuZHNcXG4xODY5OlxcdFxcdCAqIGJhc2Ugb24gdGhlIHNpemUgb2Ygc3RhbmRhcmQgcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzIHRhYmxlIHNpemVcXG4xODcwOlxcdFxcdCAqL1xcbjE4NzE6XFx0XFx0aWYgKGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplIFxcdTAwM2VcXG4xODcyOlxcdFxcdCAgICBJV0xfTUFYX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkUpXFxuMTg3MzpcXHRcXHRcXHRmdy1cXHUwMDNldWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSA9XFxuMTg3NDpcXHRcXHRcXHRcXHRJV0xfTUFYX1NUQU5EQVJEX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkU7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdC8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqL1xcbjE4Nzc6XFx0XFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRpd2xfZGJnX3Rsdl9sb2FkX2JpbihkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VkZXYsIGRydi1cXHUwMDNldHJhbnMpO1xcbjE4ODA6XFx0XFxuMTg4MTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xcbjE4ODI6XFx0XFx0c3dpdGNoIChmdy1cXHUwMDNldHlwZSkge1xcbjE4ODM6XFx0XFx0Y2FzZSBJV0xfRldfRFZNOlxcbjE4ODQ6XFx0XFx0XFx0b3AgPSBcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVbRFZNX09QX01PREVdO1xcbjE4ODU6XFx0XFx0XFx0YnJlYWs7XFxuMTg4NjpcXHRcXHRkZWZhdWx0OlxcbjE4ODc6XFx0XFx0XFx0V0FSTigxLCBcXFwiSW52YWxpZCBmdyB0eXBlICVkXFxcXG5cXFwiLCBmdy1cXHUwMDNldHlwZSk7XFxuMTg4ODpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xODg5OlxcdFxcdGNhc2UgSVdMX0ZXX01WTTpcXG4xODkwOlxcdFxcdFxcdG9wID0gXFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01WTV9PUF9NT0RFXTtcXG4xODkxOlxcdFxcdFxcdGJyZWFrO1xcbjE4OTI6XFx0XFx0fVxcbjE4OTM6XFx0XFxuMTg5NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVdMTUxEKVxcbjE4OTU6XFx0XFx0aWYgKGl3bF9kcnZfaXNfd2lmaTdfc3VwcG9ydGVkKGRydi1cXHUwMDNldHJhbnMpKVxcbjE4OTY6XFx0XFx0XFx0b3AgPSBcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVbTUxEX09QX01PREVdO1xcbjE4OTc6XFx0I2VuZGlmXFxuMTg5ODpcXHRcXG4xODk5OlxcdFxcdElXTF9JTkZPKGRydiwgXFxcImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICVzIG9wX21vZGUgJXNcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjM0LjMxOTgwNTEyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5NDg5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBiYXNlZCBvbiB0aGUgcHJvbXB0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVGV4dCoqXG5cbkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIGEgc3BlY2lmaWMgd2F5LCBtaW1pY2tpbmcgbXkgb3duIHRob3VnaHQgcHJvY2VzcyBhcyBJIHJlYWQgaXQuIEZpcnN0LCBJIGhhdmUgdG8gbWVudGFsbHkgYXNzZXNzIHRoZSB0YXNrLiBJdCdzIG5vdCBqdXN0IGEgYmFzaWMgc3VtbWFyeTsgSSBuZWVkIHRvIHBvcnRyYXkgbXkgKmludGVybmFsIG1vbm9sb2d1ZSogYXMgSSBkaWdlc3QgdGhlIG1hdGVyaWFsLiBJIG5lZWQgdG8gZ2V0IHJlYWR5IHRvIHJlYWQgdGhlIG5leHQgMTAwIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzMSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MzcuNDg5Mjk2MzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTAwOlxcdFxcdFxcdCBkcnYtXFx1MDAzZWZ3LmZ3X3ZlcnNpb24sIG9wLVxcdTAwM2VuYW1lKTtcXG4xOTAxOlxcdFxcbjE5MDI6XFx0XFx0LyogYWRkIHRoaXMgZGV2aWNlIHRvIHRoZSBsaXN0IG9mIGRldmljZXMgdXNpbmcgdGhpcyBvcF9tb2RlICovXFxuMTkwMzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkcnYtXFx1MDAzZWxpc3QsIFxcdTAwMjZvcC1cXHUwMDNlZHJ2KTtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0aWYgKG9wLVxcdTAwM2VvcHMpIHtcXG4xOTA2OlxcdFxcdFxcdGRydi1cXHUwMDNlb3BfbW9kZSA9IF9pd2xfb3BfbW9kZV9zdGFydChkcnYsIG9wKTtcXG4xOTA3OlxcdFxcbjE5MDg6XFx0XFx0XFx0aWYgKCFkcnYtXFx1MDAzZW9wX21vZGUpIHtcXG4xOTA5OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVfbXR4KTtcXG4xOTEwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VuYmluZDtcXG4xOTExOlxcdFxcdFxcdH1cXG4xOTEyOlxcdFxcdH0gZWxzZSB7XFxuMTkxMzpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZV9ub3dhaXQoXFxcIiVzXFxcIiwgb3AtXFx1MDAzZW5hbWUpO1xcbjE5MTQ6XFx0XFx0fVxcbjE5MTU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xcbjE5MTY6XFx0XFxuMTkxNzpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZHJ2LVxcdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcXG4xOTE4OlxcdFxcbjE5MTk6XFx0XFx0ZmFpbHVyZSA9IGZhbHNlO1xcbjE5MjA6XFx0XFx0Z290byBmcmVlO1xcbjE5MjE6XFx0XFxuMTkyMjpcXHQgdHJ5X2FnYWluOlxcbjE5MjM6XFx0XFx0LyogdHJ5IG5leHQsIGlmIGFueSAqL1xcbjE5MjQ6XFx0XFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xcbjE5MjU6XFx0XFx0aWYgKGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgZmFsc2UpKVxcbjE5MjY6XFx0XFx0XFx0Z290byBvdXRfdW5iaW5kO1xcbjE5Mjc6XFx0XFx0Z290byBmcmVlO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHQgb3V0X2ZyZWVfZnc6XFxuMTkzMDpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XFxuMTkzMTpcXHQgb3V0X3VuYmluZDpcXG4xOTMyOlxcdFxcdGNvbXBsZXRlKFxcdTAwMjZkcnYtXFx1MDAzZXJlcXVlc3RfZmlybXdhcmVfY29tcGxldGUpO1xcbjE5MzM6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRldik7XFxuMTkzNDpcXHRcXHQvKiBkcnYgaGFzIGp1c3QgYmVlbiBmcmVlZCBieSB0aGUgcmVsZWFzZSAqL1xcbjE5MzU6XFx0XFx0ZmFpbHVyZSA9IGZhbHNlO1xcbjE5MzY6XFx0IGZyZWU6XFxuMTkzNzpcXHRcXHRpZiAoZmFpbHVyZSlcXG4xOTM4OlxcdFxcdFxcdGl3bF9kZWFsbG9jX3Vjb2RlKGRydik7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdGlmIChwaWVjZXMpIHtcXG4xOTQxOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpZWNlcy1cXHUwMDNlaW1nKTsgaSsrKVxcbjE5NDI6XFx0XFx0XFx0XFx0a2ZyZWUocGllY2VzLVxcdTAwM2VpbWdbaV0uc2VjKTtcXG4xOTQzOlxcdFxcdFxcdGtmcmVlKHBpZWNlcy1cXHUwMDNlZGJnX21lbV90bHYpO1xcbjE5NDQ6XFx0XFx0XFx0a2ZyZWUocGllY2VzKTtcXG4xOTQ1OlxcdFxcdH1cXG4xOTQ2OlxcdH1cXG4xOTQ3OlxcdFxcbjE5NDg6XFx0c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXFxuMTk0OTpcXHR7XFxuMTk1MDpcXHRcXHRzdHJ1Y3QgaXdsX2RydiAqZHJ2O1xcbjE5NTE6XFx0XFx0aW50IHJldDtcXG4xOTUyOlxcdFxcbjE5NTM6XFx0XFx0ZHJ2ID0ga3phbGxvY19vYmooKmRydik7XFxuMTk1NDpcXHRcXHRpZiAoIWRydikge1xcbjE5NTU6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xOTU2OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE5NTc6XFx0XFx0fVxcbjE5NTg6XFx0XFxuMTk1OTpcXHRcXHRkcnYtXFx1MDAzZXRyYW5zID0gdHJhbnM7XFxuMTk2MDpcXHRcXHRkcnYtXFx1MDAzZWRldiA9IHRyYW5zLVxcdTAwM2VkZXY7XFxuMTk2MTpcXHRcXG4xOTYyOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZHJ2LVxcdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcXG4xOTYzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkcnYtXFx1MDAzZWxpc3QpO1xcbjE5NjQ6XFx0XFxuMTk2NTpcXHQjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGU1xcbjE5NjY6XFx0XFx0LyogQ3JlYXRlIHRoZSBkZXZpY2UgZGVidWdmcyBlbnRyaWVzLiAqL1xcbjE5Njc6XFx0XFx0ZHJ2LVxcdTAwM2VkYmdmc19kcnYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUodHJhbnMtXFx1MDAzZWRldiksXFxuMTk2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaXdsX2RiZ2ZzX3Jvb3QpO1xcbjE5Njk6XFx0XFxuMTk3MDpcXHRcXHQvKiBDcmVhdGUgdHJhbnNwb3J0IGxheWVyIGRlYnVnZnMgZGlyICovXFxuMTk3MTpcXHRcXHRkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VkYmdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcInRyYW5zXFxcIiwgZHJ2LVxcdTAwM2VkYmdmc19kcnYpO1xcbjE5NzI6XFx0I2VuZGlmXFxuMTk3MzpcXHRcXG4xOTc0OlxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRiZy5kb21haW5zX2JpdG1hcCA9IElXTF9UUkFOU19GV19EQkdfRE9NQUlOKGRydi1cXHUwMDNldHJhbnMpO1xcbjE5NzU6XFx0XFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pICE9IEVOQUJMRV9JTkkpIHtcXG4xOTc2OlxcdFxcdFxcdC8qIFdlIGhhdmUgYSBub24tZGVmYXVsdCB2YWx1ZSBpbiB0aGUgbW9kdWxlIHBhcmFtZXRlcixcXG4xOTc3OlxcdFxcdFxcdCAqIHRha2UgaXRzIHZhbHVlXFxuMTk3ODpcXHRcXHRcXHQgKi9cXG4xOTc5OlxcdFxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRiZy5kb21haW5zX2JpdG1hcCBcXHUwMDI2PSAweGZmZmY7XFxuMTk4MDpcXHRcXHRcXHRpZiAoaXdsd2lmaV9tb2RfcGFyYW1zLmVuYWJsZV9pbmkgIT0gSVdMX0ZXX0lOSV9QUkVTRVRfRElTQUJMRSkge1xcbjE5ODE6XFx0XFx0XFx0XFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pIFxcdTAwM2UgRU5BQkxFX0lOSSkge1xcbjE5ODI6XFx0XFx0XFx0XFx0XFx0SVdMX0VSUih0cmFucyxcXG4xOTgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJpbnZhbGlkIGVuYWJsZV9pbmkgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZTogbWF4ID0gJWQsIHVzaW5nIDAgaW5zdGVhZFxcXFxuXFxcIixcXG4xOTg0OlxcdFxcdFxcdFxcdFxcdFxcdEVOQUJMRV9JTkkpO1xcbjE5ODU6XFx0XFx0XFx0XFx0XFx0aXdsd2lmaV9tb2RfcGFyYW1zLmVuYWJsZV9pbmkgPSAwO1xcbjE5ODY6XFx0XFx0XFx0XFx0fVxcbjE5ODc6XFx0XFx0XFx0XFx0ZHJ2LVxcdTAwM2V0cmFucy1cXHUwMDNlZGJnLmRvbWFpbnNfYml0bWFwID1cXG4xOTg4OlxcdFxcdFxcdFxcdFxcdEJJVChJV0xfRldfREJHX0RPTUFJTl9QT1MgKyBpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSk7XFxuMTk4OTpcXHRcXHRcXHR9XFxuMTk5MDpcXHRcXHR9XFxuMTk5MTpcXHRcXG4xOTkyOlxcdFxcdHJldCA9IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgdHJ1ZSk7XFxuMTk5MzpcXHRcXHRpZiAocmV0KSB7XFxuMTk5NDpcXHRcXHRcXHRJV0xfRVJSKHRyYW5zLCBcXFwiQ291bGRuJ3QgcmVxdWVzdCB0aGUgZndcXFxcblxcXCIpO1xcbjE5OTU6XFx0XFx0XFx0Z290byBlcnJfZnc7XFxuMTk5NjpcXHRcXHR9XFxuMTk5NzpcXHRcXG4xOTk4OlxcdFxcdHJldHVybiBkcnY7XFxuMTk5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MzcuNDg5NDYzNTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTQ4NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiB0aGUgSW50ZWwgV2lyZWxlc3MgRHJpdmVyKipcblxuT2theSwgc28gYF9pd2xfb3BfbW9kZV9zdGFydGAgY2FsbHMgYG9wLVx1MDAzZW9wcy1cdTAwM2VzdGFydGAuIFJpZ2h0LCB0aGF0IG1lYW5zIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGlzIHBhdGNoIGNsYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIEhtbSwgaW50ZXJlc3RpbmcuLi4gd29ydGggZnV6emluZyB0aGlzLCBhYnNvbHV0ZWx5LiBHb3R0YSBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgcmVwcm9kdWN0aW9uLiBMb29rcyBsaWtlIGBJV0xXSUZJYCBhbmQgYElXTERWTWAgYXJlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIExldCdzIG1ha2Ugc3VyZSBgSVdMRFZNYCBpcyAqZXhhY3RseSogdGhlIGNvbmZpZyBuZWVkZWQgLSBnb29kLCBcImNvbmZpZyBJV0xEVk1cIiBjb25maXJtcyB0aGF0LiBObyBvdGhlciByZWxldmFudCBjb25maWdzIGp1bXAgb3V0LCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuIE9rYXksIGBNQUM4MDIxMWAgaXMgb2J2aW91c2x5IGEgZGVwZW5kZW5jeSBvZiBgSVdMRFZNYC4gQW5kIHdoYXQgYWJvdXQgYFBDSWAgZm9yIGBJV0xXSUZJYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJV0xXSUZJYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNTo0My43ODA5NTE2N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1NjU2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJV0xXSUZJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NDk6Y29uZmlnIElXTFdJRklfS1VOSVRfVEVTVFNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NTg6Y29uZmlnIElXTFdJRklfTEVEU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01OS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9ODQ9Y29uZmlnIElXTE1MRFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk0LSMgZG9uJ3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTU6Y29uZmlnIElXTFdJRklfT1BNT0RFX01PRFVMQVJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTYtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTEwNT1tZW51IFxcXCJEZWJ1Z2dpbmcgT3B0aW9uc1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTA2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTMxOmNvbmZpZyBJV0xXSUZJX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTMyLVxcdGJvb2wgXFxcIml3bHdpZmkgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTM5OmNvbmZpZyBJV0xXSUZJX0RFVklDRV9UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJpd2x3aWZpIGRldmljZSBhY2Nlc3MgdHJhY2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6NDQuMTg2NjIwMjgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDQ5NjMzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgd2lyZWxlc3MgZHJpdmVycywgZm9ybWF0dGVkIGZvciBzb21lb25lIHdpdGggc2ltaWxhciBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGl3bHdpZmkgS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJbnRlbCB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbiwgcHJvYmFibHkgc29tZSBuZXcgZmVhdHVyZSBvciBvcHRpb24gSSdtIHNlZWluZy4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNjYW5uaW5nIHRoZSB3aG9sZSBmaWxlLCBsZXQncyBzdGFydCB3aXRoIHRoZSBmaXJzdCB0d2VudHkgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIEl0J3MgdXN1YWxseSB0aGUgZWFzaWVzdCB3YXkgdG8gaWRlbnRpZnkgYW55IG92ZXJhcmNoaW5nIHN0cnVjdHVyZSBvciBtYWpvciBibG9ja3MgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbGUuIEnigJltIGhvcGluZyB0byBzZWUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLCBtYXliZSBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgb3IgcG9zc2libHkgZXZlbiBjbHVlcyBhYm91dCBkaWZmZXJlbnQgaGFyZHdhcmUgc3VwcG9ydCBsZXZlbHMgc3RyYWlnaHQgYXdheS4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkZWNpc2lvbnMgYXJlIG1hZGUsIG9yIGF0IGxlYXN0IGhvdyB0aGUgZmlsZSBpcyBvcmdhbml6ZWQsIHNvIEkgY2FuIHNhdmUgc29tZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjQ4Ljc5MTU4NjU3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBJV0xXSUZJXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04gLSBXaXJlbGVzcy1OL0FkdmFuY2VkLU4vVWx0aW1hdGUtTiAoaXdsd2lmaSkgXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElXTE1FSSB8fCAhSVdMTUVJXFxuICAgNjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayBOZXh0LUdlbiBBR05cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHVzZSB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmU6XFxuICAxMzpcXHRcXHRcXHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjI1MEFHTiBBZGFwdGVyXFxuICAxNDpcXHRcXHRcXHRJbnRlbCA2MDAwIFNlcmllcyBXaS1GaSBBZGFwdGVycyAoNjIwMEFHTiBhbmQgNjMwMEFHTilcXG4gIDE1OlxcdFxcdFxcdEludGVsIFdpRmkgTGluayAxMDAwQkdOXFxuICAxNjpcXHRcXHRcXHRJbnRlbCBXaXJlbGVzcyBXaUZpIDUxNTBBR05cXG4gIDE3OlxcdFxcdFxcdEludGVsIFdpcmVsZXNzIFdpRmkgNTEwMEFHTiwgNTMwMEFHTiwgYW5kIDUzNTBBR05cXG4gIDE4OlxcdFxcdFxcdEludGVsIDYwMDUgU2VyaWVzIFdpLUZpIEFkYXB0ZXJzXFxuICAxOTpcXHRcXHRcXHRJbnRlbCA2MDMwIFNlcmllcyBXaS1GaSBBZGFwdGVyc1xcbiAgMjA6XFx0XFx0XFx0SW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDYxNTBCR04gMiBBZGFwdGVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjQ4Ljc5MTY1OTA4NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3MzU5NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgaXdsd2lmaSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgaXdsd2lmaSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGBJV0xXSUZJYCBhbmQgYElXTERWTWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvbXBvbmVudHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiBtb2RpZmljYXRpb24uXG5cblJpZ2h0LCB0aGUgZXJyb3IgcGF0aCBpcyB0cmlnZ2VyZWQgaWYgZWl0aGVyIGBpd2xfcGFyc2VfZWVwcm9tX2RhdGFgIG9yIGBpd2xfbnZtX2NoZWNrX3ZlcnNpb25gIGZhaWxzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZS4gRnV6emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBzZWVtcyBsaWtlIGEgZ29vZCBhdmVudWUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCdzIHdoZXJlIHRoZSBwYXRjaCBsYW5kZWQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkIGluIHRoZSBjaGFuZ2UgdG8gYmUgc3VyZS4gTm9wZSwgaXQncyBqdXN0IGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGJ5IHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5vdXRfZnJlZV9lZXByb206XG5cdGtmcmVlKHByaXYtXHUwMDNlbnZtX2RhdGEpO1xub3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG5cdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuYGBgXG5cbkFoLCBpdCdzIGEgbWVtb3J5IGxlYWsgZml4ISBUaGUgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYCB3ZXJlIGxpa2VseSBpbiB0aGUgd3Jvbmcgb3JkZXIsIGFuZCB0aGlzIHN3YXBzIHRoZW0uIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNsZWFudXAgd2l0aGluIHRoZSBEVk0gZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24uIFRoaXMgbWFrZXMgaXQgYWNjZXNzaWJsZSB2aWEgUENJIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGEgbWVtb3J5IGxlYWsgZml4IHdpdGhpbiB0aGUgRFZNIGRyaXZlcidzIHN0YXJ0IHNlcXVlbmNlLiBUaGUgc3BlY2lmaWMgcGF0Y2ggd2l0aGluIHRoZSBkcml2ZXIncyBzZXF1ZW5jZSBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgZHJpdmVyJ3Mgc3RhcnQgc2VxdWVuY2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBJV0xXSUZJYCBhbmQgYElXTERWTWAuIFRoZSBmb2N1cyBzeW1ib2wgaXMgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuXG5cbkkgY2hlY2tlZCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXM6IGBjb25maWcgSVdMRFZNYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgdW5kZXIgYGlmIElXTFdJRklgIGJsb2NrLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IHRoaXMuIEknbGwgbm93IGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzgwLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjU5LjI2NTI1ODMzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDI4MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJV0xXSUZJXCIsXG4gICAgXCJJV0xEVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGJ5IHN3YXBwaW5nIHRoZSBvcmRlciBvZiBga2ZyZWVgIGNhbGxzIGZvciBgbnZtX2RhdGFgIGFuZCBgZWVwcm9tX2Jsb2JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGl3bHdpZmkgRFZNIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVdMV0lGSVwiLFxuICAgIFwiSVdMRFZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXdsX29wX21vZGVfZHZtX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBieSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpd2x3aWZpIERWTSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgUENJIGRldmljZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7q6gf[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-24 09:07:58 +0000 UTC FinishedAt: 2026-06-24 09:26:01 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IWLWIFI", "IWLDVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IWLWIFI", "IWLDVM" ], "series_id": "34f46544-a170-4860-a170-3fb42751ffc8" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "iwl_op_mode_dvm_start" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkMmI1MzhlODhkZTkwYTNlYzRmOTljZDNhMTQ4YzZhMGI1YTQ5NzFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6MjQ6MTQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXG5pbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xuQEAgLTE1MTEsMTAgJiM0MzsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbiBcdHByaXYtXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcbiBvdXRfdW5pbml0X2RydjpcbiBcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xuLW91dF9mcmVlX2VlcHJvbV9ibG9iOlxuLVx0a2ZyZWUocHJpdi1cdTAwM2VlZXByb21fYmxvYik7XG4gb3V0X2ZyZWVfZWVwcm9tOlxuIFx0a2ZyZWUocHJpdi1cdTAwM2Vudm1fZGF0YSk7XG4mIzQzO291dF9mcmVlX2VlcHJvbV9ibG9iOlxuJiM0MztcdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuIG91dF9sZWF2ZV90cmFuczpcbiBcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXHUwMDNldHJhbnMpO1xuIG91dF9mcmVlX2h3OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQyYjUzOGU4OGRlOTBhM2VjNGY5OWNkM2ExNDhjNmEwYjVhNDk3MWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEp1biAyNCAwOToyNDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYwppbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMKQEAgLTE1MTEsMTAgJiM0MzsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucywKIAlwcml2LSZndDt3b3JrcXVldWUgPSBOVUxMOwogb3V0X3VuaW5pdF9kcnY6CiAJaXdsX3VuaW5pdF9kcnYocHJpdik7Ci1vdXRfZnJlZV9lZXByb21fYmxvYjoKLQlrZnJlZShwcml2LSZndDtlZXByb21fYmxvYik7CiBvdXRfZnJlZV9lZXByb206CiAJa2ZyZWUocHJpdi0mZ3Q7bnZtX2RhdGEpOwomIzQzO291dF9mcmVlX2VlcHJvbV9ibG9iOgomIzQzOwlrZnJlZShwcml2LSZndDtlZXByb21fYmxvYik7CiBvdXRfbGVhdmVfdHJhbnM6CiAJaXdsX3RyYW5zX29wX21vZGVfbGVhdmUocHJpdi0mZ3Q7dHJhbnMpOwogb3V0X2ZyZWVfaHc6CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5MjcKCQkJCQkJCW91dHB1dDogNDkKCQkJCQkJCXRob3VnaHRzOiAxODYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgS2VybmVsIFBhdGNoIGluIGl3bHdpZmkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBkaWZmIGlzIG1lc3Npbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IHNvbWV0aGluZyB0aGF0IHJhaXNlcyBhbiBleWVicm93LiBUaGV5JiMzOTt2ZSBzd2FwcGVkIHRoZSBvcmRlciBvZiBtZW1vcnkgZGVhbGxvY2F0aW9uIGZvciBgcHJpdi0mZ3Q7ZWVwcm9tX2Jsb2JgIGFuZCBgcHJpdi0mZ3Q7bnZtX2RhdGFgIGluIG9uZSBvZiB0aGUgZXJyb3IgcGF0aHMuIE5vdCBqdXN0IHRoZSBvcmRlciwgYnV0IGFsc28gdGhlIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZnJlZXM6IGBvdXRfZnJlZV9lZXByb21fYmxvYmAgYW5kIGBvdXRfZnJlZV9lZXByb21gLiBJIGNhbiBzZWUgdGhlIGNvZGUgbm93OiB0aGV5JiMzOTt2ZSBzaW1wbHkgZmxpcHBlZCB0aGUgbGluZXMgYW5kIHRoZSBsYWJlbHMgZm9yIHRoZSBmcmVlcy4KClRoaXMgaXMgYSByZWQgZmxhZy4gTWVtb3J5IG1hbmFnZW1lbnQgaXMgY3JpdGljYWwsIGFuZCBhIHNpbXBsZSBzd2FwIGxpa2UgdGhpcyBjb3VsZCBpbnRyb2R1Y2UgYSBzdWJ0bGUgbWVtb3J5IGxlYWsgb3IsIGV2ZW4gd29yc2UsIGxlYWQgdG8gYSBkb3VibGUtZnJlZSBzY2VuYXJpbyBpZiB0aGUgY29kZSBtaXN0YWtlbmx5IGp1bXBzIHRvIHRoZSB3cm9uZyBjbGVhbnVwIGxhYmVsLiBUaGUgY29tcGlsZXIgaXNuJiMzOTt0IGdvaW5nIHRvIHNhdmUgdXMgaGVyZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLgoKTXkgbmV4dCBzdGVwPyBJIG5lZWQgdG8gbWV0aWN1bG91c2x5IGV4YW1pbmUgdGhlIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGZ1bmN0aW9uIGl0c2VsZi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRob3NlIGxhYmVscyBhcmUgdXNlZCDigJMgd2hlcmUgdGhleSYjMzk7cmUganVtcGVkIHRvLCB1bmRlciB3aGF0IGNvbmRpdGlvbnMsIGFuZCB3aGF0IHRoZSBvdmVyYWxsIGVycm9yIGhhbmRsaW5nIGZsb3cgbG9va3MgbGlrZS4gSSBuZWVkIHRvIHRyYWNlIGV2ZXJ5IHBhdGggdGhyb3VnaCB0aGF0IGZ1bmN0aW9uIHRvIGVuc3VyZSB0aGF0IHRoaXMgY2hhbmdlIGRvZXNuJiMzOTt0IGJyZWFrIGFueXRoaW5nLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbGwgY2FsbHMgYW5kIHVzYWdlcyBvZiB0aG9zZSBsYWJlbHMuIFRoaXMgZmVlbHMgbGlrZSBpdCB3YXJyYW50cyBhIGRlZXBlciBpbnZlc3RpZ2F0aW9uIHRvIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgc3dhcC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpd2xfb3BfbW9kZV9kdm1fc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMTY9c3RhdGljIGludCBpd2xfbnZtX2NoZWNrX3ZlcnNpb24oc3RydWN0IGl3bF9udm1fZGF0YSAqZGF0YSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTIzMi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjMzOnN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMjM0LVx0XHRcdFx0XHRcdCBjb25zdCBzdHJ1Y3QgaXdsX3JmX2NmZyAqY2ZnLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTM4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxMzk6XHQuc3RhcnQgPSBpd2xfb3BfbW9kZV9kdm1fc3RhcnQsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE0MC1cdC5zdG9wID0gaXdsX29wX21vZGVfZHZtX3N0b3AsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgwNwoJCQkJCQkJb3V0cHV0OiA0OAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIEZvY3VzaW5nIG9uIEVycm9yIEhhbmRsaW5nKioKCkFscmlnaHQsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSBlcnJvciBoYW5kbGluZyBwYXRocy4gSSB3YW50IHRvIHNlZSBob3cgdGhpcyBmdW5jdGlvbiBkZWFscyB3aXRoIGZhaWx1cmVzIGR1cmluZyB0aGUgc3RhcnR1cCBwcm9jZXNzLiBVbmRlcnN0YW5kaW5nIGhvdyBpdCBncmFjZWZ1bGx5IChvciBub3Qgc28gZ3JhY2VmdWxseSkgcmVjb3ZlcnMsIHJlcG9ydHMgZXJyb3JzLCBvciBjbGVhbnMgdXAgcmVzb3VyY2VzIGluIHRoZSBldmVudCBvZiBhIGhpY2N1cCBpcyBnb2luZyB0byBiZSBjcnVjaWFsLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSAmIzM0O3doYXQgaWZzJiMzNDsgYW5kIHRoZSAmIzM0O3RoZW4gd2hhdHMmIzM0OyBvZiB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhpbmdzIGRvbiYjMzk7dCBnbyBhcyBwbGFubmVkLiBJIHdhbnQgdG8gc2VlIGhvdyByb2J1c3QgdGhpcyBjb2RlIGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTQ4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTQ4MDpcdFx0XHQgc2l6ZW9mKHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlZndfdmVyc2lvbiksXG4xNDgxOlx0XHRcdCBcJiMzNDslLjMxc1wmIzM0OywgZnctXHUwMDNlZndfdmVyc2lvbik7XG4xNDgyOlx0XG4xNDgzOlx0XHRwcml2LVx1MDAzZW5ld19zY2FuX3RocmVzaG9sZF9iZWhhdmlvdXIgPVxuMTQ4NDpcdFx0XHQhISh1Y29kZV9mbGFncyBcdTAwMjYgSVdMX1VDT0RFX1RMVl9GTEFHU19ORVdTQ0FOKTtcbjE0ODU6XHRcbjE0ODY6XHRcdHByaXYtXHUwMDNlcGh5X2NhbGliX2NoYWluX25vaXNlX3Jlc2V0X2NtZCA9XG4xNDg3Olx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemU7XG4xNDg4Olx0XHRwcml2LVx1MDAzZXBoeV9jYWxpYl9jaGFpbl9ub2lzZV9nYWluX2NtZCA9XG4xNDg5Olx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemUgJiM0MzsgMTtcbjE0OTA6XHRcbjE0OTE6XHRcdC8qIGluaXRpYWxpemUgYWxsIHZhbGlkIGNvbnRleHRzICovXG4xNDkyOlx0XHRpd2xfaW5pdF9jb250ZXh0KHByaXYsIHVjb2RlX2ZsYWdzKTtcbjE0OTM6XHRcbjE0OTQ6XHRcdC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuMTQ5NTpcdFx0ICogVGhpcyBpcyBzdGlsbCBwYXJ0IG9mIHByb2JlKCkgaW4gYSBzZW5zZS4uLlxuMTQ5NjpcdFx0ICpcbjE0OTc6XHRcdCAqIDcuIFNldHVwIGFuZCByZWdpc3RlciB3aXRoIG1hYzgwMjExIGFuZCBkZWJ1Z2ZzXG4xNDk4Olx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4xNDk5Olx0XHRlcnIgPSBpd2xhZ25fbWFjX3NldHVwX3JlZ2lzdGVyKHByaXYsIFx1MDAyNmZ3LVx1MDAzZXVjb2RlX2NhcGEpO1xuMTUwMDpcdFx0aWYgKGVycilcbjE1MDE6XHRcdFx0Z290byBvdXRfZGVzdHJveV93b3JrcXVldWU7XG4xNTAyOlx0XG4xNTAzOlx0XHRpd2xfZGJnZnNfcmVnaXN0ZXIocHJpdiwgZGJnZnNfZGlyKTtcbjE1MDQ6XHRcbjE1MDU6XHRcdHJldHVybiBvcF9tb2RlO1xuMTUwNjpcdFxuMTUwNzpcdG91dF9kZXN0cm95X3dvcmtxdWV1ZTpcbjE1MDg6XHRcdGl3bF90dF9leGl0KHByaXYpO1xuMTUwOTpcdFx0aXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpO1xuMTUxMDpcdFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V3b3JrcXVldWUpO1xuMTUxMTpcdFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuMTUxMjpcdG91dF91bmluaXRfZHJ2OlxuMTUxMzpcdFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4xNTE0Olx0b3V0X2ZyZWVfZWVwcm9tOlxuMTUxNTpcdFx0a2ZyZWUocHJpdi1cdTAwM2Vudm1fZGF0YSk7XG4xNTE2Olx0b3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG4xNTE3Olx0XHRrZnJlZShwcml2LVx1MDAzZWVlcHJvbV9ibG9iKTtcbjE1MTg6XHRvdXRfbGVhdmVfdHJhbnM6XG4xNTE5Olx0XHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVx1MDAzZXRyYW5zKTtcbjE1MjA6XHRvdXRfZnJlZV9odzpcbjE1MjE6XHRcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXHUwMDNlaHcpO1xuMTUyMjpcdG91dDpcbjE1MjM6XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4xNTI0Olx0fVxuMTUyNTpcdFxuMTUyNjpcdHN0YXRpYyB2b2lkIGl3bF9vcF9tb2RlX2R2bV9zdG9wKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSlcbjE1Mjc6XHR7XG4xNTI4Olx0XHRzdHJ1Y3QgaXdsX3ByaXYgKnByaXYgPSBJV0xfT1BfTU9ERV9HRVRfRFZNKG9wX21vZGUpO1xuMTUyOTpcdFxuMTUzMDpcdFx0SVdMX0RFQlVHX0lORk8ocHJpdiwgXCYjMzQ7KioqIFVOTE9BRCBEUklWRVIgKioqXFxuXCYjMzQ7KTtcbjE1MzE6XHRcbjE1MzI6XHRcdGl3bGFnbl9tYWNfdW5yZWdpc3Rlcihwcml2KTtcbjE1MzM6XHRcbjE1MzQ6XHRcdGl3bF90dF9leGl0KHByaXYpO1xuMTUzNTpcdFxuMTUzNjpcdFx0a2ZyZWUocHJpdi1cdTAwM2VlZXByb21fYmxvYik7XG4xNTM3Olx0XHRrZnJlZShwcml2LVx1MDAzZW52bV9kYXRhKTtcbjE1Mzg6XHRcbjE1Mzk6XHRcdC8qbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqL1xuMTU0MDpcdFxuMTU0MTpcdFx0LyogaWVlZTgwMjExX3VucmVnaXN0ZXJfaHcgY2FsbHMgaXdsYWduX21hY19zdG9wLCB3aGljaCBmbHVzaGVzXG4xNTQyOlx0XHQgKiBwcml2LVx1MDAzZXdvcmtxdWV1ZS4uLiBzbyB3ZSBjYW4mIzM5O3QgdGFrZSBkb3duIHRoZSB3b3JrcXVldWVcbjE1NDM6XHRcdCAqIHVudGlsIG5vdy4uLiAqL1xuMTU0NDpcdFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cdTAwM2V3b3JrcXVldWUpO1xuMTU0NTpcdFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuMTU0NjpcdFxuMTU0NzpcdFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4xNTQ4Olx0XG4xNTQ5Olx0XHRkZXZfa2ZyZWVfc2tiKHByaXYtXHUwMDNlYmVhY29uX3NrYik7XG4xNTUwOlx0XG4xNTUxOlx0XHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVx1MDAzZXRyYW5zKTtcbjE1NTI6XHRcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXHUwMDNlaHcpO1xuMTU1MzpcdH1cbjE1NTQ6XHRcbjE1NTU6XHRzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGRlc2NfbG9va3VwX3RleHRbXSA9IHtcbjE1NTY6XHRcdFwmIzM0O09LXCYjMzQ7LFxuMTU1NzpcdFx0XCYjMzQ7RkFJTFwmIzM0OyxcbjE1NTg6XHRcdFwmIzM0O0JBRF9QQVJBTVwmIzM0OyxcbjE1NTk6XHRcdFwmIzM0O0JBRF9DSEVDS1NVTVwmIzM0OyxcbjE1NjA6XHRcdFwmIzM0O05NSV9JTlRFUlJVUFRfV0RHXCYjMzQ7LFxuMTU2MTpcdFx0XCYjMzQ7U1lTQVNTRVJUXCYjMzQ7LFxuMTU2MjpcdFx0XCYjMzQ7RkFUQUxfRVJST1JcJiMzNDssXG4xNTYzOlx0XHRcJiMzNDtCQURfQ09NTUFORFwmIzM0OyxcbjE1NjQ6XHRcdFwmIzM0O0hXX0VSUk9SX1RVTkVfTE9DS1wmIzM0OyxcbjE1NjU6XHRcdFwmIzM0O0hXX0VSUk9SX1RFTVBFUkFUVVJFXCYjMzQ7LFxuMTU2NjpcdFx0XCYjMzQ7SUxMRUdBTF9DSEFOX0ZSRVFcJiMzNDssXG4xNTY3Olx0XHRcJiMzNDtWQ0NfTk9UX1NUQUJMRVwmIzM0OyxcbjE1Njg6XHRcdFwmIzM0O0ZIX0VSUk9SXCYjMzQ7LFxuMTU2OTpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9IT1NUXCYjMzQ7LFxuMTU3MDpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9BQ1RJT05fUFRcJiMzNDssXG4xNTcxOlx0XHRcJiMzNDtOTUlfSU5URVJSVVBUX1VOS05PV05cJiMzNDssXG4xNTcyOlx0XHRcJiMzNDtVQ09ERV9WRVJTSU9OX01JU01BVENIXCYjMzQ7LFxuMTU3MzpcdFx0XCYjMzQ7SFdfRVJST1JfQUJTX0xPQ0tcJiMzNDssXG4xNTc0Olx0XHRcJiMzNDtIV19FUlJPUl9DQUxfTE9DS19GQUlMXCYjMzQ7LFxuMTU3NTpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9JTlNUX0FDVElPTl9QVFwmIzM0OyxcbjE1NzY6XHRcdFwmIzM0O05NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFRcJiMzNDssXG4xNTc3Olx0XHRcJiMzNDtOTUlfVFJNX0hXX0VSXCYjMzQ7LFxuMTU3ODpcdFx0XCYjMzQ7Tk1JX0lOVEVSUlVQVF9UUk1cJiMzNDssXG4xNTc5Olx0XHRcJiMzNDtOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UXCYjMzQ7LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2MDIKCQkJCQkJCW91dHB1dDogNDUKCQkJCQkJCXRob3VnaHRzOiAxOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUg4oCTIHRoZSBjaGFuZ2Ugc2VlbXMgdHJpdmlhbCwgYWxtb3N0IGxpa2UgYSB0eXBvIGNvcnJlY3Rpb24uIEl0IGFwcGVhcnMgdG8ganVzdCBzd2FwIHRoZSBwb3NpdGlvbnMgb2YgYG91dF9mcmVlX2VlcHJvbWAgYW5kIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgaW4gdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gSW5pdGlhbGx5LCBpdCBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIGNvZGUgYWRkaXRpb25zLCBidXQgdGhlbiB0aGUgZGlmZiB2aWV3IG1hZGUgaXQgY2xlYXIgaXQmIzM5O3MgYSByZW9yZGVyaW5nLCBub3QgYW4gYWRkaXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHJlb3JkZXJpbmcgb2NjdXJyZWQgYW5kIHdoZXRoZXIgaXQgaGFzIGltcGxpY2F0aW9ucy4KCk15IG5leHQgbW92ZSBpcyBjbGVhci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIHRoZSB2YXJpYWJsZXMgdGhleSBvcGVyYXRlIG9uLiBMZXQmIzM5O3Mgc2VlIGhvdyBgb3V0X2ZyZWVfZWVwcm9tYCBhbmQgYG91dF9mcmVlX2VlcHJvbV9ibG9iYCBhcmUgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgdG8gYmUgc3VyZSB0aGlzICYjMzQ7c2ltcGxlJiMzNDsgY2hhbmdlIGlzIHRydWx5IGhhcm1sZXNzIG9yIGlmIGl0IGludHJvZHVjZXMgc3VidGxlIGlzc3VlcywgbGlrZSBkb3VibGUgZnJlZXMgb3IgbGVha3MsIGRlcGVuZGluZyBvbiB0aGUgY29udHJvbCBmbG93LiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBpbiBhbmQgcGVyZm9ybSBhIGNvZGUgYXVkaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Z290byBvdXRfZnJlZV9lZXByb20mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDA4LVx0XHRlcnIgPSAtRU5PTUVNO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MDk6XHRcdGdvdG8gb3V0X2ZyZWVfZWVwcm9tX2Jsb2I7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxMC1cdH1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxMy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQxNDpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNy1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQxODpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxOS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2Mi1cdGlmIChlcnIpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQ2MzpcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2NC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NTEzCgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOgoKKipBbmFseXppbmcgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgLSBMZXQmIzM5O3MgRGlnIEluKioKCkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGlzc2VjdCB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDEzODAgdGhyb3VnaCAxNDMwLiBUaGlzIGxpa2VseSBtZWFucyBJJiMzOTttIGxvb2tpbmcgYXQgYSBjcml0aWNhbCBzZWN0aW9uIG9mIGNvZGUgcmVsYXRlZCB0byB0aGUgRGlyZWN0IFZpcnR1YWwgTWVtb3J5IChEVk0pIHN0YXJ0LXVwIHByb2Nlc3Mgd2l0aGluIHRoZSBJbnRlbCBXaXJlbGVzcyBkcml2ZXIuCgpHaXZlbiB0aGUgY29udGV4dCwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWdtZW50IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgcHJldHR5IGZ1bmRhbWVudGFsLiBQZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIERWTS1yZWxhdGVkIGhhcmR3YXJlIHJlc291cmNlcywgdGhlIHNldHRpbmcgdXAgb2YgRE1BIHRyYW5zZmVycywgb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtb3J5IG1hcHBpbmdzLiBJdCBjb3VsZCBldmVuIGJlIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byB0aGUgRFZNIGVuZ2luZS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSB2YXJpYWJsZXMgYmVpbmcgbWFuaXB1bGF0ZWQgYW5kIHRoZSBmdW5jdGlvbiBjYWxscyBtYWRlIHdpdGhpbiB0aGF0IHJhbmdlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHN0ZXBzIGl0IHRha2VzIHRvIGdldCB0aGUgRFZNIG9wZXJhdGlvbmFsLiBBcmUgd2UgdGFsa2luZyBhYm91dCBhbGxvY2F0aW5nIGJ1ZmZlcnMsIHJlZ2lzdGVyaW5nIGhhcmR3YXJlLCBlbmFibGluZyBzcGVjaWZpYyBmZWF0dXJlcywgb3IgY29tbXVuaWNhdGluZyB3aXRoIGZpcm13YXJlPyBNeSBhaW0gaXMgdG8gZ2xlYW4gdGhlIGNvcmUgbG9naWMgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIgRFZNIHN0YXJ0dXAgc2VxdWVuY2UuIEkmIzM5O20gZ29pbmcgdG8gY2FyZWZ1bGx5IHdhdGNoIGZvciBwb3RlbnRpYWwgZXJyb3IgY29uZGl0aW9ucyBhbmQgaGFuZGxpbmcgYXMgd2VsbC4gVGhpcyB3aWxsIGJlIGludGVyZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzODAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzEzODA6XHRcdCAqL1xuMTM4MTpcdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzdGF0aXN0aWNzLmxvY2spO1xuMTM4MjpcdFxuMTM4MzpcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqXG4xMzg0Olx0XHQgKiAyLiBSZWFkIFJFViByZWdpc3RlclxuMTM4NTpcdFx0ICoqKioqKioqKioqKioqKioqKioqKioqL1xuMTM4NjpcdFx0SVdMX0lORk8ocHJpdiwgXCYjMzQ7RGV0ZWN0ZWQgJXMsIFJFVj0weCVYXFxuXCYjMzQ7LFxuMTM4NzpcdFx0XHRwcml2LVx1MDAzZXRyYW5zLVx1MDAzZWluZm8ubmFtZSwgcHJpdi1cdTAwM2V0cmFucy1cdTAwM2VpbmZvLmh3X3Jldik7XG4xMzg4Olx0XG4xMzg5Olx0XHRlcnIgPSBpd2xfdHJhbnNfc3RhcnRfaHcocHJpdi1cdTAwM2V0cmFucyk7XG4xMzkwOlx0XHRpZiAoZXJyKVxuMTM5MTpcdFx0XHRnb3RvIG91dF9sZWF2ZV90cmFucztcbjEzOTI6XHRcbjEzOTM6XHRcdC8qIFJlYWQgdGhlIEVFUFJPTSAqL1xuMTM5NDpcdFx0ZXJyID0gaXdsX3JlYWRfZWVwcm9tKHByaXYtXHUwMDNldHJhbnMsIFx1MDAyNnByaXYtXHUwMDNlZWVwcm9tX2Jsb2IsXG4xMzk1Olx0XHRcdFx0ICAgICAgXHUwMDI2cHJpdi1cdTAwM2VlZXByb21fYmxvYl9zaXplKTtcbjEzOTY6XHRcdGlmIChlcnIpIHtcbjEzOTc6XHRcdFx0SVdMX0VSUihwcml2LCBcJiMzNDtVbmFibGUgdG8gaW5pdCBFRVBST01cXG5cJiMzNDspO1xuMTM5ODpcdFx0XHRnb3RvIG91dF9sZWF2ZV90cmFucztcbjEzOTk6XHRcdH1cbjE0MDA6XHRcbjE0MDE6XHRcdC8qIFJlc2V0IGNoaXAgdG8gc2F2ZSBwb3dlciB1bnRpbCB3ZSBsb2FkIHVDb2RlIGR1cmluZyBcJiMzNDt1cFwmIzM0Oy4gKi9cbjE0MDI6XHRcdGl3bF90cmFuc19zdG9wX2RldmljZShwcml2LVx1MDAzZXRyYW5zKTtcbjE0MDM6XHRcbjE0MDQ6XHRcdHByaXYtXHUwMDNlbnZtX2RhdGEgPSBpd2xfcGFyc2VfZWVwcm9tX2RhdGEocHJpdi1cdTAwM2V0cmFucywgcHJpdi1cdTAwM2VjZmcsXG4xNDA1Olx0XHRcdFx0XHRcdCAgICAgICBwcml2LVx1MDAzZWVlcHJvbV9ibG9iLFxuMTQwNjpcdFx0XHRcdFx0XHQgICAgICAgcHJpdi1cdTAwM2VlZXByb21fYmxvYl9zaXplKTtcbjE0MDc6XHRcdGlmICghcHJpdi1cdTAwM2Vudm1fZGF0YSkge1xuMTQwODpcdFx0XHRlcnIgPSAtRU5PTUVNO1xuMTQwOTpcdFx0XHRnb3RvIG91dF9mcmVlX2VlcHJvbV9ibG9iO1xuMTQxMDpcdFx0fVxuMTQxMTpcdFxuMTQxMjpcdFx0ZXJyID0gaXdsX252bV9jaGVja192ZXJzaW9uKHByaXYtXHUwMDNlbnZtX2RhdGEsIHByaXYtXHUwMDNldHJhbnMpO1xuMTQxMzpcdFx0aWYgKGVycilcbjE0MTQ6XHRcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG4xNDE1Olx0XG4xNDE2Olx0XHRlcnIgPSBpd2xfZWVwcm9tX2luaXRfaHdfcGFyYW1zKHByaXYpO1xuMTQxNzpcdFx0aWYgKGVycilcbjE0MTg6XHRcdFx0Z290byBvdXRfZnJlZV9lZXByb207XG4xNDE5Olx0XG4xNDIwOlx0XHQvKiBleHRyYWN0IE1BQyBBZGRyZXNzICovXG4xNDIxOlx0XHRtZW1jcHkocHJpdi1cdTAwM2VhZGRyZXNzZXNbMF0uYWRkciwgcHJpdi1cdTAwM2Vudm1fZGF0YS1cdTAwM2Vod19hZGRyLCBFVEhfQUxFTik7XG4xNDIyOlx0XHRJV0xfREVCVUdfSU5GTyhwcml2LCBcJiMzNDtNQUMgYWRkcmVzczogJXBNXFxuXCYjMzQ7LCBwcml2LVx1MDAzZWFkZHJlc3Nlc1swXS5hZGRyKTtcbjE0MjM6XHRcdHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlYWRkcmVzc2VzID0gcHJpdi1cdTAwM2VhZGRyZXNzZXM7XG4xNDI0Olx0XHRwcml2LVx1MDAzZWh3LVx1MDAzZXdpcGh5LVx1MDAzZW5fYWRkcmVzc2VzID0gMTtcbjE0MjU6XHRcdG51bV9tYWMgPSBwcml2LVx1MDAzZW52bV9kYXRhLVx1MDAzZW5faHdfYWRkcnM7XG4xNDI2Olx0XHRpZiAobnVtX21hYyBcdTAwM2UgMSkge1xuMTQyNzpcdFx0XHRtZW1jcHkocHJpdi1cdTAwM2VhZGRyZXNzZXNbMV0uYWRkciwgcHJpdi1cdTAwM2VhZGRyZXNzZXNbMF0uYWRkcixcbjE0Mjg6XHRcdFx0ICAgICAgIEVUSF9BTEVOKTtcbjE0Mjk6XHRcdFx0cHJpdi1cdTAwM2VhZGRyZXNzZXNbMV0uYWRkcls1XSYjNDM7JiM0Mzs7XG4xNDMwOlx0XHRcdHByaXYtXHUwMDNlaHctXHUwMDNld2lwaHktXHUwMDNlbl9hZGRyZXNzZXMmIzQzOyYjNDM7O1xuMTQzMTpcdFx0fVxuMTQzMjpcdFxuMTQzMzpcdFx0LyoqKioqKioqKioqKioqKioqKioqKioqKlxuMTQzNDpcdFx0ICogNC4gU2V0dXAgSFcgY29uc3RhbnRzXG4xNDM1Olx0XHQgKioqKioqKioqKioqKioqKioqKioqKioqL1xuMTQzNjpcdFx0aXdsX3NldF9od19wYXJhbXMocHJpdik7XG4xNDM3Olx0XG4xNDM4Olx0XHRpZiAoIShwcml2LVx1MDAzZW52bV9kYXRhLVx1MDAzZXNrdV9jYXBfaXBhbl9lbmFibGUpKSB7XG4xNDM5Olx0XHRcdElXTF9ERUJVR19JTkZPKHByaXYsIFwmIzM0O1lvdXIgRUVQUk9NIGRpc2FibGVkIFBBTlxcblwmIzM0Oyk7XG4xNDQwOlx0XHRcdHVjb2RlX2ZsYWdzIFx1MDAyNj0gfklXTF9VQ09ERV9UTFZfRkxBR1NfUEFOO1xuMTQ0MTpcdFx0XHQvKlxuMTQ0MjpcdFx0XHQgKiBpZiBub3QgUEFOLCB0aGVuIGRvbiYjMzk7dCBzdXBwb3J0IFAyUCAtLSBtaWdodCBiZSBhIHVDb2RlXG4xNDQzOlx0XHRcdCAqIHBhY2thZ2luZyBidWcgb3IgZHVlIHRvIHRoZSBlZXByb20gY2hlY2sgYWJvdmVcbjE0NDQ6XHRcdFx0ICovXG4xNDQ1Olx0XHRcdHByaXYtXHUwMDNlc3RhX2tleV9tYXhfbnVtID0gU1RBX0tFWV9NQVhfTlVNO1xuMTQ0NjpcdFx0XHR0cmFucy1cdTAwM2Vjb25mLmNtZF9xdWV1ZSA9IElXTF9ERUZBVUxUX0NNRF9RVUVVRV9OVU07XG4xNDQ3Olx0XHR9XG4xNDQ4Olx0XG4xNDQ5Olx0XHQvKioqKioqKioqKioqKioqKioqKlxuMTQ1MDpcdFx0ICogNS4gU2V0dXAgcHJpdlxuMTQ1MTpcdFx0ICoqKioqKioqKioqKioqKioqKiovXG4xNDUyOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJV0xfTUFYX0hXX1FVRVVFUzsgaSYjNDM7JiM0MzspIHtcbjE0NTM6XHRcdFx0cHJpdi1cdTAwM2VxdWV1ZV90b19tYWM4MDIxMVtpXSA9IElXTF9JTlZBTElEX01BQzgwMjExX1FVRVVFO1xuMTQ1NDpcdFx0XHRpZiAoaSBcdTAwM2MgSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFIFx1MDAyNlx1MDAyNlxuMTQ1NTpcdFx0XHQgICAgaSAhPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNIFx1MDAyNlx1MDAyNlxuMTQ1NjpcdFx0XHQgICAgaSAhPSBJV0xfSVBBTl9DTURfUVVFVUVfTlVNKVxuMTQ1NzpcdFx0XHRcdHByaXYtXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBpO1xuMTQ1ODpcdFx0XHRhdG9taWNfc2V0KFx1MDAyNnByaXYtXHUwMDNlcXVldWVfc3RvcF9jb3VudFtpXSwgMCk7XG4xNDU5Olx0XHR9XG4xNDYwOlx0XG4xNDYxOlx0XHRlcnIgPSBpd2xfaW5pdF9kcnYocHJpdik7XG4xNDYyOlx0XHRpZiAoZXJyKVxuMTQ2MzpcdFx0XHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcbjE0NjQ6XHRcbjE0NjU6XHRcdC8qIEF0IHRoaXMgcG9pbnQgYm90aCBodyBhbmQgcHJpdiBhcmUgaW5pdGlhbGl6ZWQuICovXG4xNDY2Olx0XG4xNDY3Olx0XHQvKioqKioqKioqKioqKioqKioqKipcbjE0Njg6XHRcdCAqIDYuIFNldHVwIHNlcnZpY2VzXG4xNDY5Olx0XHQgKioqKioqKioqKioqKioqKioqKiovXG4xNDcwOlx0XHRlcnIgPSBpd2xfc2V0dXBfZGVmZXJyZWRfd29yayhwcml2KTtcbjE0NzE6XHRcdGlmIChlcnIpXG4xNDcyOlx0XHRcdGdvdG8gb3V0X3VuaW5pdF9kcnY7XG4xNDczOlx0XG4xNDc0Olx0XHRpd2xfc2V0dXBfcnhfaGFuZGxlcnMocHJpdik7XG4xNDc1Olx0XG4xNDc2Olx0XHRpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTtcbjE0Nzc6XHRcdGl3bF90dF9pbml0aWFsaXplKHByaXYpO1xuMTQ3ODpcdFxuMTQ3OTpcdFx0c25wcmludGYocHJpdi1cdTAwM2Vody1cdTAwM2V3aXBoeS1cdTAwM2Vmd192ZXJzaW9uLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NDc3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogOTk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbW9yeSBMZWFrIEZpeCBpbiB0aGUgaXdsd2lmaSBEcml2ZXIqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIHRoZSBgaXdsd2lmaWAgZHJpdmVyLCBzcGVjaWZpY2FsbHkgY29uY2VybmluZyBob3cgaXQgaGFuZGxlcyBFRVBST00gZGF0YSBsb2FkaW5nLiBUaGUgb3JpZ2luYWwgY29kZSBoYXMgdGhpcyBzZXF1ZW5jZTogSXQgcmVhZHMgdGhlIEVFUFJPTSwgc3RvcHMgdGhlIGRldmljZSwgcGFyc2VzIHRoZSBFRVBST00gZGF0YSBpbnRvIGBwcml2LSZndDtudm1fZGF0YWAsIGFuZCB0aGVuIGNoZWNrcyBpdHMgdmVyc2lvbi4gSWYgcGFyc2luZyBmYWlscyAobWVhbmluZyBgcHJpdi0mZ3Q7bnZtX2RhdGFgIGlzIE5VTEwpLCB0aGUgY29kZSBqdW1wcyB0byBhIGNsZWFudXAgbGFiZWwsIGBvdXRfZnJlZV9lZXByb21fYmxvYmAuIElmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBqdW1wcyB0byBgb3V0X2ZyZWVfZWVwcm9tYC4gVGhlIHByb2JsZW0gaXMsIHVuZGVyIHRoZSBvcmlnaW5hbCBlcnJvciBoYW5kbGluZywgaWYgcGFyc2luZyBmYWlscywgaXQgY29ycmVjdGx5IGZyZWVzIGBwcml2LSZndDtlZXByb21fYmxvYmAgKHdoaWNoIGNvbnRhaW5zIHRoZSByYXcgRUVQUk9NIGRhdGEpLCBidXQgX3RoZW5fIGZyZWVzIHRoZSBOVUxMIHBvaW50ZXIgYHByaXYtJmd0O252bV9kYXRhYC4gSG93ZXZlciwgaWYgdGhlIHZlcnNpb24gY2hlY2sgZmFpbHMsIGl0IGZyZWVzIGBwcml2LSZndDtudm1fZGF0YWAgYnV0ICpkb2VzbiYjMzk7dCogZnJlZSBgcHJpdi0mZ3Q7ZWVwcm9tX2Jsb2JgLCBsZWFkaW5nIHRvIGEgbWVtb3J5IGxlYWsuIFRoaXMgcGF0Y2ggc2ltcGx5IHJlb3JkZXJzIHRoZSBjbGVhbnVwIGxhYmVscyBzbyB0aGF0IGBvdXRfZnJlZV9lZXByb21gIGZyZWVzIGBudm1fZGF0YWAgYW5kIHRoZW4gKmZhbGxzIHRocm91Z2gqIHRvIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgd2hpY2ggZnJlZXMgYGVlcHJvbV9ibG9iYC4gVGhpcyBmaXhlcyB0aGUgbGVhay4KCk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCwgd2hpY2ggaXMgdGhlIGBzdGFydGAgY2FsbGJhY2sgZm9yIGBpd2xfZHZtX29wc2AuIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIHN0YXJ0cyB1cC4gSXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbWVtb3J5IGxlYWsgZml4LiBUaGlzIGRyaXZlciBpcyBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rLCB3aGljaCBtZWFucyBpdCByZWxpZXMgb24gYWN0dWFsIFBDSSBoYXJkd2FyZS4gVHlwaWNhbGx5LCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBkb24mIzM5O3QgZW11bGF0ZSBQQ0kgaGFyZHdhcmUgdW5sZXNzIGl0JiMzOTtzIGV4cGxpY2l0bHkgcGFzc2VkIHRocm91Z2ggb3IgZW11bGF0ZWQuIEhvd2V2ZXIsIEkga25vdyBzeXprYWxsZXIgaGFzIHNvbWUgbWVjaGFuaXNtcyBmb3IgZnV6emluZyBQQ0kgZHJpdmVycywgcG90ZW50aWFsbHkgdXNpbmcgYHZoY2lgIG9yIHNpbWlsYXIgdGVjaG5pcXVlcy4gQW5kIGl0IGNhbiBmdXp6IFBDSSBjb25maWcgc3BhY2Ugb3IgdXNlIGBzeXpfcGNpX2RldmljZV9hZGRgIHRvIGNyZWF0ZSBQQ0kgZGV2aWNlcyBpZiB0aGUgZnV6emluZyBpcyBlbmFibGVkLiBUaGUgcXVlc3Rpb24gaXMsIGRvZXMgc3l6a2FsbGVyIGVtdWxhdGUgaXdsd2lmaSBoYXJkd2FyZSBkaXJlY3RseT8gTm8sIGl0IGRvZXNuJiMzOTt0LiBCdXQsIHN5emthbGxlciBkb2VzIGhhdmUgUENJIGZ1enppbmcuIFRoZSBwYXRjaCBndWlkZWxpbmVzIHNheSBub3QgdG8gbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nIGlmIGl0JiMzOTtzICppbXBvc3NpYmxlKiB0byByZWFjaCBpbiB0aGVzZSBlbnZpcm9ubWVudHMsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZS4gSG93ZXZlciwgc3l6a2FsbGVyIGNhbiBpbnN0YW50aWF0ZSBQQ0kgZGV2aWNlcyBhbmQgcHJvdmlkZSBmdXp6ZWQgbWVtb3J5IGFjY2Vzcy4gVGhhdCBtZWFucyB0aGVyZSAqaXMqIGEgcGF0aCB0byByZWFjaCB0aGlzIGNvZGUgd2l0aCBQQ0kgZnV6emluZyEgVGhlcmVmb3JlLCB0aGlzIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBub3cgZG91YmxlLWNoZWNrIGlmIGFueSBzcGVjaWZpYyBjb25maWdzIGFyZSBuZWVkZWQgdG8gYWN0dWFsbHkgdHJpZ2dlciBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElXTFdJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjQ5OmNvbmZpZyBJV0xXSUZJX0tVTklUX1RFU1RTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTktXHRib29sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTg0PWNvbmZpZyBJV0xNTERcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24mIzM5O3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVx0Ym9vbFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz0xMDU9bWVudSBcJiMzNDtEZWJ1Z2dpbmcgT3B0aW9uc1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O0VuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMi1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEzOTpjb25maWcgSVdMV0lGSV9ERVZJQ0VfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZXZpY2UgYWNjZXNzIHRyYWNpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTc2MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMgdGFzazoKCioqQW5hbHl6aW5nIHRoZSBDb25maWd1cmF0aW9uIG9mIElXTERWTSoqCgpSaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYElXTERWTWAuIEl0JiMzOTtzIGxpa2VseSBnb2luZyB0byBiZSBhIGtleSBjb21wb25lbnQgaW4gdGhpcyBwcm9qZWN0LCBhbmQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNldHVwIHRob3JvdWdobHkgYmVmb3JlIEkgY2FuIGV2ZW4gYmVnaW4gY29uc2lkZXJpbmcgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBNeSBpbml0aWFsIGNoZWNrIHdpbGwgaG9wZWZ1bGx5IGdpdmUgbWUgc29tZSBpbXBvcnRhbnQgcGFyYW1ldGVycyBhbmQgdGhlaXIgY3VycmVudCB2YWx1ZXMsIGFueSBkZXBlbmRlbmNpZXMgb24gb3RoZXIgc3lzdGVtcywgYW5kIHVsdGltYXRlbHksIHJldmVhbCBwb3RlbnRpYWwgYXJlYXMgb2YgY29uY2VybiB0aGF0IHJlcXVpcmUgYWRkaXRpb25hbCBhdHRlbnRpb24uIFNvLCB3aGVyZSYjMzk7cyB0aGUgYmVzdCBwbGFjZSB0byBzdGFydD8gVGhlIGNvbmZpZyBmaWxlcywgb2YgY291cnNlLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgbW9zdCByZWxldmFudCB0byBgSVdMRFZNYCBhbmQgdGhlbiBiZWdpbiBwYXJzaW5nIHRoZW0uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSBhIHN0cnVjdHVyZWQgYXBwcm9hY2guIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIHJlc291cmNlIGFsbG9jYXRpb24sIG5ldHdvcmsgc2V0dGluZ3MsIHNlY3VyaXR5IHByb3RvY29scywgYW5kIGludGVncmF0aW9uIHBvaW50cyB3aXRoIG90aGVyIGFwcGxpY2F0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IHZlcnNpb25zLCBlcnJvciBsb2dzLCBhbmQgcmVjZW50IGNoYW5nZXMuIE9uY2UgSSBoYXZlIHRoZSBiYXNlbGluZSwgSSB3aWxsIGtub3cgd2hlcmUgdG8gZ28gbmV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSVdMRFZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDU0CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIGl3bHdpZmkgS2NvbmZpZyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBEVk1gIOKAkyBEeW5hbWljIFZpcnR1YWwgTWFjaGluZXMsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdgIGZpbGUuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoaXMgZmVhdHVyZSBpcyBjb250cm9sbGVkIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBpdCBtaWdodCBoYXZlIHdpdGhpbiB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyJiMzOTtzIGNvbmZpZ3VyYXRpb24uIEkmIzM5O20gYXNzdW1pbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcmVsZXZhbnQgc3ltYm9scyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB3aWxsIGJlIGRlZmluZWQsIGFuZCBJIGV4cGVjdCB0byBzZWUgdGhlIHVzdWFsIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIG90aGVyIG9wdGlvbnMsIG1heWJlIGJvYXJkIHN1cHBvcnQsIHJlZ3VsYXRvcnkgcmVxdWlyZW1lbnRzLCBvciBoYXJkd2FyZSBjYXBhYmlsaXRpZXMuIEkmIzM5O2xsIG5lZWQgdG8gcmFwaWRseSBwYXJzZSB0aGF0IEtjb25maWcgZmlsZSwgcGF5aW5nIGNsb3NlIGF0dGVudGlvbiB0byBhbnkgZGVwZW5kZW5jaWVzIG9uIG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zIG9yIGZlYXR1cmVzLCBhbmQgaG93IGBEVk1gIGlzIGV4cG9zZWQgdG8gdGhlIHVzZXIgKGlmIGF0IGFsbCkuIEhvcGVmdWxseSwgdGhlIEtjb25maWcgd2lsbCBwcm92aWRlIGVub3VnaCBjb250ZXh0IHRvIGdpdmUgbWUgYSBzb2xpZCBtZW50YWwgbW9kZWwgb2YgaG93IGBEVk1gIGJlaGF2ZXMgd2l0aGluIHRoaXMgZHJpdmVyLCBhbmQgSSBjYW4gc3RhcnQgdG8gZGV2ZWxvcCBteSBvd24gaHlwb3RoZXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RFZNJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz01OD1jb25maWcgSVdMV0lGSV9MRURTXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTYwLVx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjYxOlx0ZGVwZW5kcyBvbiBJV0xNVk0gfHwgSVdMRFZNXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjItXHRzZWxlY3QgTEVEU19UUklHR0VSU1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02NS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2Njpjb25maWcgSVdMRFZNXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Njc6XHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIERWTSBGaXJtd2FyZSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjgtXHRkZXBlbmRzIG9uIE1BQzgwMjExXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjktXHRoZWxwXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NzA6XHQgIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHN1cHBvcnRzIHRoZSBEVk0gZmlybXdhcmUuIFRoZSBsaXN0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNzEtXHQgIG9mIHRoZSBkZXZpY2VzIHRoYXQgdXNlIHRoaXMgZmlybXdhcmUgaXMgYXZhaWxhYmxlIGhlcmU6XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTk1PWNvbmZpZyBJV0xXSUZJX09QTU9ERV9NT0RVTEFSXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTYtXHRib29sXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTc6XHRkZWZhdWx0IHkgaWYgSVdMRFZNPW1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy05OC1cdGRlZmF1bHQgeSBpZiBJV0xNVk09bVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDEtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTAyOmNvbW1lbnQgXCYjMzQ7V0FSTklORzogaXdsd2lmaSBpcyB1c2VsZXNzIHdpdGhvdXQgSVdMRFZNIG9yIElXTE1WTSBvciBJV0xNTERcJiMzNDtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDM6XHRkZXBlbmRzIG9uIElXTERWTT1uIFx1MDAyNlx1MDAyNiBJV0xNVk09biBcdTAwMjZcdTAwMjYgSVdMTUxEPW5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTE1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgVmFsdWUgb2YgRnV6emluZyBhIE1lbW9yeSBMZWFrIEZpeCoqCgpPa2F5LCBzbyB0aGUgaXNzdWUgY2VudGVycyBhcm91bmQgdGhlIGBJV0xEVk1gIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHdvcnRoIHRoZSBlZmZvcnQgdG8gZnV6eiB0aGlzIG1lbW9yeSBsZWFrIGZpeC4gSXQmIzM5O3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYSBkcml2ZXImIzM5O3MgcHJvYmUgb3Igc3RhcnQgZnVuY3Rpb24sIHdoaWNoIG1lYW5zIHRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSByZWxhdGVkIHRvIGVycm9yIGNvbmRpdGlvbnMuIFRoYXQmIzM5O3MgZ29vZCB0byBjb25zaWRlciBmb3IgZnV6emluZy4KCk15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIENhbiBJIHRyaWdnZXIgaXQ/IE5vdywgdGhpbmtpbmcgYWJvdXQgbXkgdGVzdGluZyB0b29sYm94LCBJIHJlbWVtYmVyIGBzeXprYWxsZXJgIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gUG90ZW50aWFsbHksIHRoYXQgY291bGQgYmUgYSB3YXkgaW4uCgpCdXQgZmlyc3QsIGEgY3J1Y2lhbCBwb2ludDogZG9lcyB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24gZXZlbiBnZXQgY2FsbGVkIGluIHRoaXMgc2NlbmFyaW8/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBiZWZvcmUgaW52ZXN0aW5nIGFueSB0aW1lIGluIGNyYWZ0aW5nIGZ1enppbmcgc3RyYXRlZ2llcy4gSSYjMzk7bGwgY2hlY2sgdGhlIGNhbGwgZ3JhcGggZm9yIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGl0Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9kdm1fb3BzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEzNj1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9oY21kX2FyciBpd2xfZHZtX2dyb3Vwc1tdID0ge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMzktXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQwOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MTIzMz1zdGF0aWMgc3RydWN0IGl3bF9vcF9tb2RlICppd2xfb3BfbW9kZV9kdm1fc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyNjMtXHRvcF9tb2RlID0gaHctXHUwMDNlcHJpdjtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjY0Olx0b3BfbW9kZS1cdTAwM2VvcHMgPSBcdTAwMjZpd2xfZHZtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMjY1LVx0cHJpdiA9IElXTF9PUF9NT0RFX0dFVF9EVk0ob3BfbW9kZSk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTIxMjQ9c3RhdGljIGJvb2wgaXdsX3NldF9od19yZmtpbGxfc3RhdGUoc3RydWN0IGl3bF9vcF9tb2RlICpvcF9tb2RlLCBib29sIHN0YXRlKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxMzg6c3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfb3BfbW9kZV9vcHMgaXdsX2R2bV9vcHMgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjEzOS1cdC5zdGFydCA9IGl3bF9vcF9tb2RlX2R2bV9zdGFydCxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjE1Nz1zdGF0aWMgaW50IF9faW5pdCBpd2xfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjIxNjg6XHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFwmIzM0O2l3bGR2bVwmIzM0OywgXHUwMDI2aXdsX2R2bV9vcHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTIxNjktXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExOTM4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgYGl3bHdpZmlgIGRyaXZlciBhbmQgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbml0aWFsIHNldHVwLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gaG93IHRoZSBvcGVyYXRpbmcgbW9kZSBpcyByZWdpc3RlcmVkLiBJIHNlZSBgaXdsX29wbW9kZV9yZWdpc3RlcmAgbWVudGlvbmVkIGFuZCB0aGF0IGZlZWxzIGxpa2UgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBUaGUgY29udGV4dCBzdWdnZXN0cyB0aGF0IHRoZSBgc3RhcnRgIGZ1bmN0aW9uIGlzIHRoZSBlbnRyeSBwb2ludCwgaW52b2tlZCBieSB0aGUgYGl3bHdpZmlgIGNvcmUgd2hlbiBhIGNvbXBhdGlibGUgZGV2aWNlIGlzIGRldGVjdGVkIGR1cmluZyBwcm9iaW5nLiBNeSBpbnN0aW5jdCBpcyB0byBub3cgZGl2ZSBkaXJlY3RseSBpbnRvIHRoZSBgaXdsX29wbW9kZV9yZWdpc3RlcmAgZnVuY3Rpb24gd2l0aGluIHRoZSBgaXdsd2lmaWAgY29yZSBjb2RlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpd2xfb3Btb2RlX3JlZ2lzdGVyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTIxNTc9c3RhdGljIGludCBfX2luaXQgaXdsX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyMTY4Olx0cmV0ID0gaXdsX29wbW9kZV9yZWdpc3RlcihcJiMzNDtpd2xkdm1cJiMzNDssIFx1MDAyNml3bF9kdm1fb3BzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVx0aWYgKHJldCkge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTIwNDk9SVdMX0VYUE9SVF9TWU1CT0woaXdsd2lmaV9tb2RfcGFyYW1zKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTAtXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoyMDUxOmludCBpd2xfb3Btb2RlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBpd2xfb3BfbW9kZV9vcHMgKm9wcylcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTIte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNzItfVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MjA3MzpJV0xfRVhQT1JUX1NZTUJPTChpd2xfb3Btb2RlX3JlZ2lzdGVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNzQtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oPTE1Mz1zdHJ1Y3QgaXdsX29wX21vZGVfb3BzIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1vcC1tb2RlLmgtMTgxLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oOjE4MjppbnQgaXdsX29wbW9kZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzICpvcHMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oLTE4My12b2lkIGl3bF9vcG1vZGVfZGVyZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lKTtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYz0zOD1zdGF0aWMgaW50IF9faW5pdCBpd2xfbWxkX2luaXQodm9pZClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL21sZC5jLTM5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbWxkL21sZC5jOjQwOlx0aW50IHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXCYjMzQ7aXdsbWxkXCYjMzQ7LCBcdTAwMjZpd2xfbWxkX29wcyk7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYy00MS1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYz01Mz1zdGF0aWMgaW50IF9faW5pdCBpd2xfbXZtX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYy02Mi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jOjYzOlx0cmV0ID0gaXdsX29wbW9kZV9yZWdpc3RlcihcJiMzNDtpd2xtdm1cJiMzNDssIFx1MDAyNml3bF9tdm1fb3BzKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jLTY0LVx0aWYgKHJldCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzAwNAoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDIxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBGdW5jdGlvbjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqCgpPa2F5LCBzbyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBpcyBwb3RlbnRpYWxseSByZWFjaGFibGUgaWYgd2UmIzM5O3ZlIGdvdCBhbiBgaXdsd2lmaWAgUENJIGRldmljZSB0aGF0IG5lZWRzIERWTSBmaXJtd2FyZS4gU3l6a2FsbGVyIGNhbiBlbXVsYXRlIFBDSSBkZXZpY2VzLCByaWdodD8gVGhhdCYjMzk7cyBpbnRlcmVzdGluZywgYnV0IGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc3BlY2lmaWNhbGx5IGEgbWVtb3J5IGxlYWsgZml4IHdpdGhpbiBhIGRyaXZlci4gR29vZCBjYW5kaWRhdGUuCgpIb2xkIG9uLCBJIG5lZWQgdG8gY2hlY2sgdGhlIGluc3RydWN0aW9ucyBhZ2Fpbi4uLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMuLi4gY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4uLiYjMzQ7IE9rYXksIHNvIHRoZSBxdWVzdGlvbiBiZWNvbWVzOiBpcyBgaXdsd2lmaWAgcmVhY2hhYmxlIHdpdGhpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PwoKWWVzISBTeXprYWxsZXIgaGFzIGEgUENJIGZ1enplciB0aGF0IGluamVjdHMgUENJIGRldmljZXMgdXNpbmcgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEFoYSEgQW5kIHdhaXQgYSBzZWNvbmQsIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGFjdHVhbGx5IHRyaWdnZXJzIHRob3NlIHByb2JlIGZ1bmN0aW9ucyBvZiBQQ0kgZHJpdmVycy4gVGhhdCYjMzk7cyBrZXkuIFNvLCBsZXQmIzM5O3MgY29uZmlybS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgY2FuIGluZGVlZCBiZSByZWFjaGVkIHZpYSBQQ0kgcHJvYmUuIFNlZW1zIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgY2hlY2shCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9wY2lfcHJvYmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC0zMi0gKiBUaGlzIGNvbXBvbmVudCBpbXBsZW1lbnRzIHRoZSBzeXN0ZW0gZmxvd3Mgc3VjaCBhcyBidXMgZW51bWVyYXRpb24sIGJ1c1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6MzM6ICogcmVtb3ZhbC4gQnVzIGRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gZmxvd3MgKHN1Y2ggYXMgaXdsX3BjaV9wcm9iZSkgYXJlIGluXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC0zNC0gKiBidXMgc3BlY2lmaWMgZmlsZXMgKHRyYW5zcG9ydCBmaWxlcykuIFRoaXMgaXMgdGhlIGNvZGUgdGhhdCBpcyBjb21tb24gYW1vbmdcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM9MTE0Nz1FWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX3BjaV9maW5kX2Rldl9pbmZvKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYy0xMTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jOjExNDk6c3RhdGljIGludCBpd2xfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTExNTAte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYz0xMzM4PXN0YXRpYyBzdHJ1Y3QgcGNpX2RyaXZlciBpd2xfcGNpX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmMtMTM0MC1cdC5pZF90YWJsZSA9IGl3bF9od19jYXJkX2lkcyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYzoxMzQxOlx0LnByb2JlID0gaXdsX3BjaV9wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYy0xMzQyLVx0LnJlbW92ZSA9IGl3bF9wY2lfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzk3OQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipDb25maXJtaW5nIHRoZSBJbnRlbCBXaXJlbGVzcyBEcml2ZXIgSW5pdGlhbGl6YXRpb24gU2VxdWVuY2UqKgoKUmlnaHQsIHNvIGBpd2xfcGNpX3Byb2JlYCDigJMgdGhhdCYjMzk7cyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLCBpc24mIzM5O3QgaXQ/IE15IHVuZGVyc3RhbmRpbmcgaXMgdGhhdCBpdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGJyaW5naW5nIHVwIHRoZSBkZXZpY2UuIEl0IHNob3VsZCB0aGVuIGtpY2sgb2ZmIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24gYnkgY2FsbGluZyBzb21ldGhpbmcgbGlrZSBgaXdsX2Rydl9zdGFydGAsIG9yIGEgZnVuY3Rpb24gd2l0aCBhIHNpbWlsYXIgcm9sZS4gQW5kIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIG9wbW9kZS1zcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyB0aGVyZSBjYW4gYmUgbnVhbmNlcyBkZXBlbmRpbmcgb24gZmlybXdhcmUsIGhhcmR3YXJlIHJldmlzaW9uLCBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuIEkmIzM5O2QgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGUgY29kZSBwYXRoIHRvIGJlIGNlcnRhaW4uIEp1c3QgbWFraW5nIHN1cmUgSSYjMzk7dmUgZ290IHRoZSBjb3JyZWN0IG1lbnRhbCBtYXAgb2YgdGhlIGluaXRpYWxpemF0aW9uIGZsb3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2l3bF9kcnZfc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0xNjMyPXN0YXRpYyB2b2lkIGl3bF9yZXFfZndfY2FsbGJhY2soY29uc3Qgc3RydWN0IGZpcm13YXJlICp1Y29kZV9yYXcsIHZvaWQgKmNvbnRleHQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTk0Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE5NDg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xOTQ5LXtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC00Ny0gKiA1KSBUaGUgYnVzIHNwZWNpZmljIGNvbXBvbmVudCBjYWxscyB0byB0aGUgZHJ2IGJ1cyBhZ25vc3RpYyBwYXJ0XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaDo0ODogKiAgICAoaXdsX2Rydl9zdGFydClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTUwLSAqIDcpIGl3bF9yZXFfZndfY2FsbGJhY2sgcGFyc2VzIHRoZSBmdyBmaWxlXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg9NTY9c3RydWN0IGl3bF9yZl9jZmc7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01Ny0vKipcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjU4OiAqIGl3bF9kcnZfc3RhcnQgLSBzdGFydCB0aGUgZHJ2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01OS0gKlxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTY3LSAqL1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6Njg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNjktXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jPTQyMzI9aW50IGl3bF9wY2lfZ2VuMV8yX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9nZW4xXzIvdHJhbnMuYy00MzY3LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjQzNjg6XHRpd2xfdHJhbnMtXHUwMDNlZHJ2ID0gaXdsX2Rydl9zdGFydChpd2xfdHJhbnMpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0OTQxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6CgoqKkRpdmluZyBpbnRvIHRoZSBGaXJtd2FyZSBMb2FkaW5nIFByb2Nlc3MqKgoKUmlnaHQsIGBpd2xfZHJ2X3N0YXJ0YCBpcyB3aGVyZSB0aGUgcGFydHkgYmVnaW5zLCBraWNraW5nIG9mZiB0aGUgYXN5bmNocm9ub3VzIGZpcm13YXJlIGZldGNoLiBNeSBpbW1lZGlhdGUgY29uY2VybiBpcywgbmF0dXJhbGx5LCBob3cgdGhhdCBhc3luY2hyb25vdXMgb3BlcmF0aW9uIHdpbGwgdWx0aW1hdGVseSByZXNvbHZlLiBUaGUgbmV4dCBrZXkgZnVuY3Rpb24gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXMgYGl3bF9yZXFfZndfY2FsbGJhY2tgLiBJdCYjMzk7cyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJlc3VsdCBvZiB0aGF0IGZpcm13YXJlIHJldHJpZXZhbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBlcnJvciByZXBvcnRpbmcsIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIGlmIHRoZSBmaXJtd2FyZSBmYWlscyB0byBsb2FkLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2xsIGdldCB0aGUgcmVhbCBtZWF0IG9mIHRoZSBkcml2ZXImIzM5O3Mgcm9idXN0bmVzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aXdsX3JlcV9md19jYWxsYmFjayYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTI5Mz1JV0xfRVhQT1JUX1NZTUJPTChpd2xfZHJ2X2dldF9md25hbWVfcHJlKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTI5NC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjI5NTpzdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjk2LVx0XHRcdFx0dm9pZCAqY29udGV4dCk7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM9MzI1PXN0YXRpYyBpbnQgaXdsX3JlcXVlc3RfZmlybXdhcmUoc3RydWN0IGl3bF9kcnYgKmRydiwgYm9vbCBmaXJzdClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0zODUtXHRcdFx0XHQgICAgICAgZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjM4NjpcdFx0XHRcdCAgICAgICBHRlBfS0VSTkVMLCBkcnYsIGl3bF9yZXFfZndfY2FsbGJhY2spO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMzg3LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0xNjA5PXN0YXRpYyB2b2lkIF9pd2xfb3BfbW9kZV9zdG9wKHN0cnVjdCBpd2xfZHJ2ICpkcnYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTYyNi0vKlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MTYyNzogKiBpd2xfcmVxX2Z3X2NhbGxiYWNrIC0gY2FsbGJhY2sgd2hlbiBmaXJtd2FyZSB3YXMgbG9hZGVkXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjI4LSAqXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTYzMS0gKi9cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE2MzI6c3RhdGljIHZvaWQgaXdsX3JlcV9md19jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3Jhdywgdm9pZCAqY29udGV4dClcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE2MzMte1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTQ4LSAqICAgIChpd2xfZHJ2X3N0YXJ0KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NDk6ICogNikgaXdsX2Rydl9zdGFydCBmZXRjaGVzIHRoZSBmdyBBU1lOQywgaXdsX3JlcV9md19jYWxsYmFja1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NTA6ICogNykgaXdsX3JlcV9md19jYWxsYmFjayBwYXJzZXMgdGhlIGZ3IGZpbGVcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjUxOiAqIDgpIGl3bF9yZXFfZndfY2FsbGJhY2sgc3RhcnRzIHRoZSB3aWZpIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoZXMgdGhlIGZ3XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01Mi0gKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU5NTcKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA1MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzLCBnaXZlbiBteSBleHBlcnRpc2U6CgoqKkRpdmluZyBpbnRvIHRoZSBXaUZpIEluaXRpYWxpemF0aW9uKioKClJpZ2h0LCBzbyBgaXdsX3JlcV9md19jYWxsYmFja2AgaXMgdGhlIGNydWNpYWwgZW50cnkgcG9pbnQsIHRoZSB0aGluZyB0aGF0IGFjdHVhbGx5IGtpY2tzIG9mZiB0aGUgV2lGaSBpbXBsZW1lbnRhdGlvbiwgb3Igd2hhdCB0aGUgY29kZSBjYWxscyB0aGUgJiMzNDtvcG1vZGUuJiMzNDsgVGhhdCYjMzk7cyB0aGUgcGxhY2Ugd2hlcmUgdGhlIHJhZGlvIGludGVyZmFjZSBnZXRzIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHN0YXJ0dXAgc2VxdWVuY2UuIFRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byB0cmFjZSBob3cgYGl3bF9yZXFfZndfY2FsbGJhY2tgIGludGVyYWN0cyB3aXRoIHRoZSBzcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGFzc29jaWF0ZWQgd2l0aCB0aGUgY2hvc2VuIG9wbW9kZS4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBvZiBgaXdsX3JlcV9md19jYWxsYmFja2AgaXRzZWxmLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogaXQgY2FsbHMgdGhlIGBzdGFydGAgZnVuY3Rpb24gb2YgdGhlIG9wbW9kZS4gSXMgaXQgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbD8gSXMgdGhlcmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MgZmlyc3Q/IEtub3dpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY2FzZSBmb3IgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BfbW9kZV9vcHMtXHUwMDNlc3RhcnQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2Mjc5CgkJCQkJCQlvdXRwdXQ6IDQ4CgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFJlcXVlc3QgQ2FsbGJhY2sqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgd2l0aCB0aGVzZSBmaXJtd2FyZSByZXF1ZXN0cyBpbiB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB3aXRoaW4gYGl3bC1kcnYuY2AuIEkgZXhwZWN0IHRoaXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGFzeW5jaHJvbm91cyByZXN1bHRzIG9mIGZpcm13YXJlIGxvYWRzLiBJJiMzOTtsbCBuZWVkIHRvIHNlZSBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZCB3aXRoIHRoZSBsYXJnZXIgaXdsIGRyaXZlciBhcmNoaXRlY3R1cmUg4oCTIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSByZXF1ZXN0IHF1ZXVlLCB0aGUgZGV2aWNlIHN0YXRlLCBhbmQgdGhlIGVycm9yIGhhbmRsaW5nIG1lY2hhbmlzbXMuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyByZWxhdGVkIHRvIGZpcm13YXJlIGxvYWRpbmcgZmFpbHVyZXMgb3IgZGVsYXlzLiBJIHdpbGwgd2FudCB0byBxdWlja2x5IHVuZGVyc3RhbmQgd2hlcmUgdGhlIGNhbGxiYWNrIGlzIGJlaW5nIHNjaGVkdWxlZCBmcm9tLiBJJiMzOTttIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgYXJvdW5kIHJldHJpZXMsIHRpbWVvdXRzLCBhbmQgcG9zc2libHkgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb24gZmFpbHMgdG8gbG9hZC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZsb3cgdG8gYXNzZXNzIGlmIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLCBkZWJ1Zywgb3IgaW1wcm92ZSByb2J1c3RuZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTgwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTgwMDpcdFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfRldfTk9USUZdID1cbjE4MDE6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfY21kKTtcbjE4MDI6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX01MTUVdID1cbjE4MDM6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfbWxtZSk7XG4xODA0Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9TVEFUU10gPVxuMTgwNTpcdFx0XHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9zdGF0cyk7XG4xODA2Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9SU1NJXSA9XG4xODA3Olx0XHRcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX2xvd19yc3NpKTtcbjE4MDg6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1RYUV9USU1FUlNdID1cbjE4MDk6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdHhxX3RpbWVyKTtcbjE4MTA6XHRcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1RJTUVfRVZFTlRdID1cbjE4MTE6XHRcdFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGltZV9ldmVudCk7XG4xODEyOlx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9CQV0gPVxuMTgxMzpcdFx0XHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9iYSk7XG4xODE0Olx0XHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9URExTXSA9XG4xODE1Olx0XHRcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX3RkbHMpO1xuMTgxNjpcdFxuMTgxNzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2KTsgaSYjNDM7JiM0MzspIHtcbjE4MTg6XHRcdFx0aWYgKHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZbaV0pIHtcbjE4MTk6XHRcdFx0XHQvKlxuMTgyMDpcdFx0XHRcdCAqIElmIHRoZSB0cmlnZ2VyIGlzbiYjMzk7dCBsb25nIGVub3VnaCwgV0FSTiBhbmQgZXhpdC5cbjE4MjE6XHRcdFx0XHQgKiBTb21lb25lIGlzIHRyeWluZyB0byBkZWJ1ZyBzb21ldGhpbmcgYW5kIGhlIHdvbiYjMzk7dFxuMTgyMjpcdFx0XHRcdCAqIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGJ1ZyBoZSBpcyB0cnlpbmcgdG8gY2hhc2UuXG4xODIzOlx0XHRcdFx0ICogV2UmIzM5O2QgYmV0dGVyIGJlIG5vaXN5IHRvIGJlIHN1cmUgaGUga25vd3Mgd2hhdCYjMzk7c1xuMTgyNDpcdFx0XHRcdCAqIGdvaW5nIG9uLlxuMTgyNTpcdFx0XHRcdCAqL1xuMTgyNjpcdFx0XHRcdGlmIChXQVJOX09OKHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZfbGVuW2ldIFx1MDAzY1xuMTgyNzpcdFx0XHRcdFx0ICAgICh0cmlnZ2VyX3Rsdl9zeltpXSAmIzQzO1xuMTgyODpcdFx0XHRcdFx0ICAgICBzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl90bHYpKSkpXG4xODI5Olx0XHRcdFx0XHRnb3RvIG91dF9mcmVlX2Z3O1xuMTgzMDpcdFx0XHRcdGRydi1cdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZfbGVuW2ldID1cbjE4MzE6XHRcdFx0XHRcdHBpZWNlcy1cdTAwM2VkYmdfdHJpZ2dlcl90bHZfbGVuW2ldO1xuMTgzMjpcdFx0XHRcdGRydi1cdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZbaV0gPVxuMTgzMzpcdFx0XHRcdFx0a21lbWR1cChwaWVjZXMtXHUwMDNlZGJnX3RyaWdnZXJfdGx2W2ldLFxuMTgzNDpcdFx0XHRcdFx0XHRkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2X2xlbltpXSxcbjE4MzU6XHRcdFx0XHRcdFx0R0ZQX0tFUk5FTCk7XG4xODM2Olx0XHRcdFx0aWYgKCFkcnYtXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2W2ldKVxuMTgzNzpcdFx0XHRcdFx0Z290byBvdXRfZnJlZV9mdztcbjE4Mzg6XHRcdFx0fVxuMTgzOTpcdFx0fVxuMTg0MDpcdFxuMTg0MTpcdFx0LyogTm93IHRoYXQgd2UgY2FuIG5vIGxvbmdlciBmYWlsLCBjb3B5IGluZm9ybWF0aW9uICovXG4xODQyOlx0XG4xODQzOlx0XHRkcnYtXHUwMDNlZncuZGJnLm1lbV90bHYgPSBwaWVjZXMtXHUwMDNlZGJnX21lbV90bHY7XG4xODQ0Olx0XHRwaWVjZXMtXHUwMDNlZGJnX21lbV90bHYgPSBOVUxMO1xuMTg0NTpcdFx0ZHJ2LVx1MDAzZWZ3LmRiZy5uX21lbV90bHYgPSBwaWVjZXMtXHUwMDNlbl9tZW1fdGx2O1xuMTg0NjpcdFxuMTg0NzpcdFx0LypcbjE4NDg6XHRcdCAqIFRoZSAoc2l6ZSAtIDE2KSAvIDEyIGZvcm11bGEgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkXG4xODQ5Olx0XHQgKiBmb3IgZWFjaCBldmVudCwgd2hpY2ggaXMgb2YgbW9kZSAxIChpbmNsdWRpbmcgdGltZXN0YW1wKSBmb3IgYWxsXG4xODUwOlx0XHQgKiBuZXcgbWljcm9jb2RlcyB0aGF0IGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbi5cbjE4NTE6XHRcdCAqL1xuMTg1MjpcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfcHRyID0gcGllY2VzLVx1MDAzZWluaXRfZXZ0bG9nX3B0cjtcbjE4NTM6XHRcdGlmIChwaWVjZXMtXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSlcbjE4NTQ6XHRcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcbjE4NTU6XHRcdGVsc2VcbjE4NTY6XHRcdFx0ZnctXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSA9XG4xODU3Olx0XHRcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZW1hY19jZmctXHUwMDNlYmFzZS1cdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XG4xODU4Olx0XHRmdy1cdTAwM2Vpbml0X2VycmxvZ19wdHIgPSBwaWVjZXMtXHUwMDNlaW5pdF9lcnJsb2dfcHRyO1xuMTg1OTpcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfcHRyID0gcGllY2VzLVx1MDAzZWluc3RfZXZ0bG9nX3B0cjtcbjE4NjA6XHRcdGlmIChwaWVjZXMtXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSlcbjE4NjE6XHRcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcbjE4NjI6XHRcdGVsc2VcbjE4NjM6XHRcdFx0ZnctXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9XG4xODY0Olx0XHRcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZW1hY19jZmctXHUwMDNlYmFzZS1cdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XG4xODY1Olx0XHRmdy1cdTAwM2VpbnN0X2VycmxvZ19wdHIgPSBwaWVjZXMtXHUwMDNlaW5zdF9lcnJsb2dfcHRyO1xuMTg2NjpcdFxuMTg2NzpcdFx0LypcbjE4Njg6XHRcdCAqIGZpZ3VyZSBvdXQgdGhlIG9mZnNldCBvZiBjaGFpbiBub2lzZSByZXNldCBhbmQgZ2FpbiBjb21tYW5kc1xuMTg2OTpcdFx0ICogYmFzZSBvbiB0aGUgc2l6ZSBvZiBzdGFuZGFyZCBwaHkgY2FsaWJyYXRpb24gY29tbWFuZHMgdGFibGUgc2l6ZVxuMTg3MDpcdFx0ICovXG4xODcxOlx0XHRpZiAoZnctXHUwMDNldWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSBcdTAwM2VcbjE4NzI6XHRcdCAgICBJV0xfTUFYX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkUpXG4xODczOlx0XHRcdGZ3LVx1MDAzZXVjb2RlX2NhcGEuc3RhbmRhcmRfcGh5X2NhbGlicmF0aW9uX3NpemUgPVxuMTg3NDpcdFx0XHRcdElXTF9NQVhfU1RBTkRBUkRfUEhZX0NBTElCUkFURV9UQkxfU0laRTtcbjE4NzU6XHRcbjE4NzY6XHRcdC8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqL1xuMTg3NzpcdFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xuMTg3ODpcdFxuMTg3OTpcdFx0aXdsX2RiZ190bHZfbG9hZF9iaW4oZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldiwgZHJ2LVx1MDAzZXRyYW5zKTtcbjE4ODA6XHRcbjE4ODE6XHRcdG11dGV4X2xvY2soXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVfbXR4KTtcbjE4ODI6XHRcdHN3aXRjaCAoZnctXHUwMDNldHlwZSkge1xuMTg4MzpcdFx0Y2FzZSBJV0xfRldfRFZNOlxuMTg4NDpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW0RWTV9PUF9NT0RFXTtcbjE4ODU6XHRcdFx0YnJlYWs7XG4xODg2Olx0XHRkZWZhdWx0OlxuMTg4NzpcdFx0XHRXQVJOKDEsIFwmIzM0O0ludmFsaWQgZncgdHlwZSAlZFxcblwmIzM0OywgZnctXHUwMDNldHlwZSk7XG4xODg4Olx0XHRcdGZhbGx0aHJvdWdoO1xuMTg4OTpcdFx0Y2FzZSBJV0xfRldfTVZNOlxuMTg5MDpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01WTV9PUF9NT0RFXTtcbjE4OTE6XHRcdFx0YnJlYWs7XG4xODkyOlx0XHR9XG4xODkzOlx0XG4xODk0Olx0I2lmIElTX0VOQUJMRUQoQ09ORklHX0lXTE1MRClcbjE4OTU6XHRcdGlmIChpd2xfZHJ2X2lzX3dpZmk3X3N1cHBvcnRlZChkcnYtXHUwMDNldHJhbnMpKVxuMTg5NjpcdFx0XHRvcCA9IFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01MRF9PUF9NT0RFXTtcbjE4OTc6XHQjZW5kaWZcbjE4OTg6XHRcbjE4OTk6XHRcdElXTF9JTkZPKGRydiwgXCYjMzQ7bG9hZGVkIGZpcm13YXJlIHZlcnNpb24gJXMgb3BfbW9kZSAlc1xcblwmIzM0OyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg0MzEKCQkJCQkJCW91dHB1dDogNDgKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgSSYjMzk7bSByZWFkeSB0byBkaXZlIGluLiBIZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBiYXNlZCBvbiB0aGUgcHJvbXB0OgoKKipJbml0aWFsIEFzc2Vzc21lbnQ6IE5hdmlnYXRpbmcgdGhlIFRleHQqKgoKQWxyaWdodCwgdGhlIGRpcmVjdGl2ZSBpcyBjbGVhcjogSSBuZWVkIHRvIHN1bW1hcml6ZSB0aGUgZm9sbG93aW5nIHRleHQgaW4gYSBzcGVjaWZpYyB3YXksIG1pbWlja2luZyBteSBvd24gdGhvdWdodCBwcm9jZXNzIGFzIEkgcmVhZCBpdC4gRmlyc3QsIEkgaGF2ZSB0byBtZW50YWxseSBhc3Nlc3MgdGhlIHRhc2suIEl0JiMzOTtzIG5vdCBqdXN0IGEgYmFzaWMgc3VtbWFyeTsgSSBuZWVkIHRvIHBvcnRyYXkgbXkgKmludGVybmFsIG1vbm9sb2d1ZSogYXMgSSBkaWdlc3QgdGhlIG1hdGVyaWFsLiBJIG5lZWQgdG8gZ2V0IHJlYWR5IHRvIHJlYWQgdGhlIG5leHQgMTAwIGxpbmVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNCAwOToyNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTkwMDpcdFx0XHQgZHJ2LVx1MDAzZWZ3LmZ3X3ZlcnNpb24sIG9wLVx1MDAzZW5hbWUpO1xuMTkwMTpcdFxuMTkwMjpcdFx0LyogYWRkIHRoaXMgZGV2aWNlIHRvIHRoZSBsaXN0IG9mIGRldmljZXMgdXNpbmcgdGhpcyBvcF9tb2RlICovXG4xOTAzOlx0XHRsaXN0X2FkZF90YWlsKFx1MDAyNmRydi1cdTAwM2VsaXN0LCBcdTAwMjZvcC1cdTAwM2VkcnYpO1xuMTkwNDpcdFxuMTkwNTpcdFx0aWYgKG9wLVx1MDAzZW9wcykge1xuMTkwNjpcdFx0XHRkcnYtXHUwMDNlb3BfbW9kZSA9IF9pd2xfb3BfbW9kZV9zdGFydChkcnYsIG9wKTtcbjE5MDc6XHRcbjE5MDg6XHRcdFx0aWYgKCFkcnYtXHUwMDNlb3BfbW9kZSkge1xuMTkwOTpcdFx0XHRcdG11dGV4X3VubG9jayhcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xuMTkxMDpcdFx0XHRcdGdvdG8gb3V0X3VuYmluZDtcbjE5MTE6XHRcdFx0fVxuMTkxMjpcdFx0fSBlbHNlIHtcbjE5MTM6XHRcdFx0cmVxdWVzdF9tb2R1bGVfbm93YWl0KFwmIzM0OyVzXCYjMzQ7LCBvcC1cdTAwM2VuYW1lKTtcbjE5MTQ6XHRcdH1cbjE5MTU6XHRcdG11dGV4X3VubG9jayhcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xuMTkxNjpcdFxuMTkxNzpcdFx0Y29tcGxldGUoXHUwMDI2ZHJ2LVx1MDAzZXJlcXVlc3RfZmlybXdhcmVfY29tcGxldGUpO1xuMTkxODpcdFxuMTkxOTpcdFx0ZmFpbHVyZSA9IGZhbHNlO1xuMTkyMDpcdFx0Z290byBmcmVlO1xuMTkyMTpcdFxuMTkyMjpcdCB0cnlfYWdhaW46XG4xOTIzOlx0XHQvKiB0cnkgbmV4dCwgaWYgYW55ICovXG4xOTI0Olx0XHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XG4xOTI1Olx0XHRpZiAoaXdsX3JlcXVlc3RfZmlybXdhcmUoZHJ2LCBmYWxzZSkpXG4xOTI2Olx0XHRcdGdvdG8gb3V0X3VuYmluZDtcbjE5Mjc6XHRcdGdvdG8gZnJlZTtcbjE5Mjg6XHRcbjE5Mjk6XHQgb3V0X2ZyZWVfZnc6XG4xOTMwOlx0XHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XG4xOTMxOlx0IG91dF91bmJpbmQ6XG4xOTMyOlx0XHRjb21wbGV0ZShcdTAwMjZkcnYtXHUwMDNlcmVxdWVzdF9maXJtd2FyZV9jb21wbGV0ZSk7XG4xOTMzOlx0XHRkZXZpY2VfcmVsZWFzZV9kcml2ZXIoZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRldik7XG4xOTM0Olx0XHQvKiBkcnYgaGFzIGp1c3QgYmVlbiBmcmVlZCBieSB0aGUgcmVsZWFzZSAqL1xuMTkzNTpcdFx0ZmFpbHVyZSA9IGZhbHNlO1xuMTkzNjpcdCBmcmVlOlxuMTkzNzpcdFx0aWYgKGZhaWx1cmUpXG4xOTM4Olx0XHRcdGl3bF9kZWFsbG9jX3Vjb2RlKGRydik7XG4xOTM5Olx0XG4xOTQwOlx0XHRpZiAocGllY2VzKSB7XG4xOTQxOlx0XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocGllY2VzLVx1MDAzZWltZyk7IGkmIzQzOyYjNDM7KVxuMTk0MjpcdFx0XHRcdGtmcmVlKHBpZWNlcy1cdTAwM2VpbWdbaV0uc2VjKTtcbjE5NDM6XHRcdFx0a2ZyZWUocGllY2VzLVx1MDAzZWRiZ19tZW1fdGx2KTtcbjE5NDQ6XHRcdFx0a2ZyZWUocGllY2VzKTtcbjE5NDU6XHRcdH1cbjE5NDY6XHR9XG4xOTQ3Olx0XG4xOTQ4Olx0c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXG4xOTQ5Olx0e1xuMTk1MDpcdFx0c3RydWN0IGl3bF9kcnYgKmRydjtcbjE5NTE6XHRcdGludCByZXQ7XG4xOTUyOlx0XG4xOTUzOlx0XHRkcnYgPSBremFsbG9jX29iaigqZHJ2KTtcbjE5NTQ6XHRcdGlmICghZHJ2KSB7XG4xOTU1Olx0XHRcdHJldCA9IC1FTk9NRU07XG4xOTU2Olx0XHRcdGdvdG8gZXJyO1xuMTk1NzpcdFx0fVxuMTk1ODpcdFxuMTk1OTpcdFx0ZHJ2LVx1MDAzZXRyYW5zID0gdHJhbnM7XG4xOTYwOlx0XHRkcnYtXHUwMDNlZGV2ID0gdHJhbnMtXHUwMDNlZGV2O1xuMTk2MTpcdFxuMTk2MjpcdFx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmRydi1cdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcbjE5NjM6XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNmRydi1cdTAwM2VsaXN0KTtcbjE5NjQ6XHRcbjE5NjU6XHQjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGU1xuMTk2NjpcdFx0LyogQ3JlYXRlIHRoZSBkZXZpY2UgZGVidWdmcyBlbnRyaWVzLiAqL1xuMTk2NzpcdFx0ZHJ2LVx1MDAzZWRiZ2ZzX2RydiA9IGRlYnVnZnNfY3JlYXRlX2RpcihkZXZfbmFtZSh0cmFucy1cdTAwM2VkZXYpLFxuMTk2ODpcdFx0XHRcdFx0XHQgICAgaXdsX2RiZ2ZzX3Jvb3QpO1xuMTk2OTpcdFxuMTk3MDpcdFx0LyogQ3JlYXRlIHRyYW5zcG9ydCBsYXllciBkZWJ1Z2ZzIGRpciAqL1xuMTk3MTpcdFx0ZHJ2LVx1MDAzZXRyYW5zLVx1MDAzZWRiZ2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcihcJiMzNDt0cmFuc1wmIzM0OywgZHJ2LVx1MDAzZWRiZ2ZzX2Rydik7XG4xOTcyOlx0I2VuZGlmXG4xOTczOlx0XG4xOTc0Olx0XHRkcnYtXHUwMDNldHJhbnMtXHUwMDNlZGJnLmRvbWFpbnNfYml0bWFwID0gSVdMX1RSQU5TX0ZXX0RCR19ET01BSU4oZHJ2LVx1MDAzZXRyYW5zKTtcbjE5NzU6XHRcdGlmIChpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSAhPSBFTkFCTEVfSU5JKSB7XG4xOTc2Olx0XHRcdC8qIFdlIGhhdmUgYSBub24tZGVmYXVsdCB2YWx1ZSBpbiB0aGUgbW9kdWxlIHBhcmFtZXRlcixcbjE5Nzc6XHRcdFx0ICogdGFrZSBpdHMgdmFsdWVcbjE5Nzg6XHRcdFx0ICovXG4xOTc5Olx0XHRcdGRydi1cdTAwM2V0cmFucy1cdTAwM2VkYmcuZG9tYWluc19iaXRtYXAgXHUwMDI2PSAweGZmZmY7XG4xOTgwOlx0XHRcdGlmIChpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSAhPSBJV0xfRldfSU5JX1BSRVNFVF9ESVNBQkxFKSB7XG4xOTgxOlx0XHRcdFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pIFx1MDAzZSBFTkFCTEVfSU5JKSB7XG4xOTgyOlx0XHRcdFx0XHRJV0xfRVJSKHRyYW5zLFxuMTk4MzpcdFx0XHRcdFx0XHRcJiMzNDtpbnZhbGlkIGVuYWJsZV9pbmkgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZTogbWF4ID0gJWQsIHVzaW5nIDAgaW5zdGVhZFxcblwmIzM0OyxcbjE5ODQ6XHRcdFx0XHRcdFx0RU5BQkxFX0lOSSk7XG4xOTg1Olx0XHRcdFx0XHRpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSA9IDA7XG4xOTg2Olx0XHRcdFx0fVxuMTk4NzpcdFx0XHRcdGRydi1cdTAwM2V0cmFucy1cdTAwM2VkYmcuZG9tYWluc19iaXRtYXAgPVxuMTk4ODpcdFx0XHRcdFx0QklUKElXTF9GV19EQkdfRE9NQUlOX1BPUyAmIzQzOyBpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSk7XG4xOTg5Olx0XHRcdH1cbjE5OTA6XHRcdH1cbjE5OTE6XHRcbjE5OTI6XHRcdHJldCA9IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgdHJ1ZSk7XG4xOTkzOlx0XHRpZiAocmV0KSB7XG4xOTk0Olx0XHRcdElXTF9FUlIodHJhbnMsIFwmIzM0O0NvdWxkbiYjMzk7dCByZXF1ZXN0IHRoZSBmd1xcblwmIzM0Oyk7XG4xOTk1Olx0XHRcdGdvdG8gZXJyX2Z3O1xuMTk5NjpcdFx0fVxuMTk5NzpcdFxuMTk5ODpcdFx0cmV0dXJuIGRydjtcbjE5OTk6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwNzMKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAxNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUG90ZW50aWFsIFZ1bG5lcmFiaWxpdHkgaW4gdGhlIEludGVsIFdpcmVsZXNzIERyaXZlcioqCgpPa2F5LCBzbyBgX2l3bF9vcF9tb2RlX3N0YXJ0YCBjYWxscyBgb3AtJmd0O29wcy0mZ3Q7c3RhcnRgLiBSaWdodCwgdGhhdCBtZWFucyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZS4gVGhpcyBwYXRjaCBjbGFpbXMgdG8gYWRkcmVzcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBIbW0sIGludGVyZXN0aW5nLi4uIHdvcnRoIGZ1enppbmcgdGhpcywgYWJzb2x1dGVseS4gR290dGEgZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMgZm9yIHJlcHJvZHVjdGlvbi4gTG9va3MgbGlrZSBgSVdMV0lGSWAgYW5kIGBJV0xEVk1gIGFyZSB0aGUgb2J2aW91cyBjYW5kaWRhdGVzLiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBJV0xEVk1gIGlzICpleGFjdGx5KiB0aGUgY29uZmlnIG5lZWRlZCAtIGdvb2QsICYjMzQ7Y29uZmlnIElXTERWTSYjMzQ7IGNvbmZpcm1zIHRoYXQuIE5vIG90aGVyIHJlbGV2YW50IGNvbmZpZ3MganVtcCBvdXQsIGJ1dCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUuIE9rYXksIGBNQUM4MDIxMWAgaXMgb2J2aW91c2x5IGEgZGVwZW5kZW5jeSBvZiBgSVdMRFZNYC4gQW5kIHdoYXQgYWJvdXQgYFBDSWAgZm9yIGBJV0xXSUZJYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJV0xXSUZJYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIElXTFdJRkkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjQ5OmNvbmZpZyBJV0xXSUZJX0tVTklUX1RFU1RTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXHR0cmlzdGF0ZVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTktXHRib29sXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTg0PWNvbmZpZyBJV0xNTERcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24mIzM5O3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVx0Ym9vbFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz0xMDU9bWVudSBcJiMzNDtEZWJ1Z2dpbmcgT3B0aW9uc1wmIzM0O1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwNi1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXHRib29sIFwmIzM0O0VuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMi1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEzOTpjb25maWcgSVdMV0lGSV9ERVZJQ0VfVFJBQ0lOR1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cdGJvb2wgXCYjMzQ7aXdsd2lmaSBkZXZpY2UgYWNjZXNzIHRyYWNpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTYKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbHJlYWR5IHF1aXRlIGZhbWlsaWFyIHdpdGgga2VybmVsIGNvbmZpZ3VyYXRpb24gYW5kIHdpcmVsZXNzIGRyaXZlcnMsIGZvcm1hdHRlZCBmb3Igc29tZW9uZSB3aXRoIHNpbWlsYXIgZXhwZXJ0aXNlOgoKKipEaXZpbmcgaW50byB0aGUgaXdsd2lmaSBLY29uZmlnKioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gaXQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyBhYm91dCB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIHByb2JhYmx5IHNvbWUgbmV3IGZlYXR1cmUgb3Igb3B0aW9uIEkmIzM5O20gc2VlaW5nLiBObyBuZWVkIHRvIHdhc3RlIHRpbWUgc2Nhbm5pbmcgdGhlIHdob2xlIGZpbGUsIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBmaXJzdCB0d2VudHkgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIEl0JiMzOTtzIHVzdWFsbHkgdGhlIGVhc2llc3Qgd2F5IHRvIGlkZW50aWZ5IGFueSBvdmVyYXJjaGluZyBzdHJ1Y3R1cmUgb3IgbWFqb3IgYmxvY2tzIGRlZmluZWQgd2l0aGluIHRoZSBmaWxlLiBJ4oCZbSBob3BpbmcgdG8gc2VlIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgbWF5YmUgc29tZSBkZXBlbmRlbmNpZXMgb24gb3RoZXIga2VybmVsIHN1YnN5c3RlbXMsIG9yIHBvc3NpYmx5IGV2ZW4gY2x1ZXMgYWJvdXQgZGlmZmVyZW50IGhhcmR3YXJlIHN1cHBvcnQgbGV2ZWxzIHN0cmFpZ2h0IGF3YXkuIEl0JiMzOTtzIG9mdGVuIHdoZXJlIHRoZSBjb3JlIGRlY2lzaW9ucyBhcmUgbWFkZSwgb3IgYXQgbGVhc3QgaG93IHRoZSBmaWxlIGlzIG9yZ2FuaXplZCwgc28gSSBjYW4gc2F2ZSBzb21lIHRpbWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI0IDA5OjI1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIElXTFdJRklcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIC0gV2lyZWxlc3MtTi9BZHZhbmNlZC1OL1VsdGltYXRlLU4gKGl3bHdpZmkpIFwmIzM0O1xuICAgNDpcdFx0ZGVwZW5kcyBvbiBQQ0kgXHUwMDI2XHUwMDI2IEhBU19JT01FTSBcdTAwMjZcdTAwMjYgQ0ZHODAyMTFcbiAgIDU6XHRcdGRlcGVuZHMgb24gSVdMTUVJIHx8ICFJV0xNRUlcbiAgIDY6XHRcdHNlbGVjdCBGV19MT0FERVJcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgU2VsZWN0IHRvIGJ1aWxkIHRoZSBkcml2ZXIgc3VwcG9ydGluZyB0aGU6XG4gICA5Olx0XG4gIDEwOlx0XHQgIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayBOZXh0LUdlbiBBR05cbiAgMTE6XHRcbiAgMTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB1c2Ugd2l0aCB0aGUgZm9sbG93aW5nIGhhcmR3YXJlOlxuICAxMzpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjI1MEFHTiBBZGFwdGVyXG4gIDE0Olx0XHRcdEludGVsIDYwMDAgU2VyaWVzIFdpLUZpIEFkYXB0ZXJzICg2MjAwQUdOIGFuZCA2MzAwQUdOKVxuICAxNTpcdFx0XHRJbnRlbCBXaUZpIExpbmsgMTAwMEJHTlxuICAxNjpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIDUxNTBBR05cbiAgMTc6XHRcdFx0SW50ZWwgV2lyZWxlc3MgV2lGaSA1MTAwQUdOLCA1MzAwQUdOLCBhbmQgNTM1MEFHTlxuICAxODpcdFx0XHRJbnRlbCA2MDA1IFNlcmllcyBXaS1GaSBBZGFwdGVyc1xuICAxOTpcdFx0XHRJbnRlbCA2MDMwIFNlcmllcyBXaS1GaSBBZGFwdGVyc1xuICAyMDpcdFx0XHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjE1MEJHTiAyIEFkYXB0ZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE3ODAKCQkJCQkJCW91dHB1dDogMTM1CgkJCQkJCQl0aG91Z2h0czogNjExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBpd2x3aWZpIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGl3bHdpZmkgcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIGZvY3VzaW5nIG9uIHdoYXQgaXQgYWN0dWFsbHkgKmRvZXMqLiBJIHNlZSBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYElXTFdJRklgIGFuZCBgSVdMRFZNYCBjb25maWd1cmF0aW9ucywgd2hpY2ggYXJlIHRoZSByZWxldmFudCBkcml2ZXIgY29tcG9uZW50cy4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBhcHBlYXJzIHRvIGJlIGNlbnRlcmVkIGFyb3VuZCBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcGFjdCBvZiB0aGlzIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbi4KClJpZ2h0LCB0aGUgZXJyb3IgcGF0aCBpcyB0cmlnZ2VyZWQgaWYgZWl0aGVyIGBpd2xfcGFyc2VfZWVwcm9tX2RhdGFgIG9yIGBpd2xfbnZtX2NoZWNrX3ZlcnNpb25gIGZhaWxzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZS4gRnV6emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBzZWVtcyBsaWtlIGEgZ29vZCBhdmVudWUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCYjMzk7cyB3aGVyZSB0aGUgcGF0Y2ggbGFuZGVkLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBhZmZlY3RlZCBpbiB0aGUgY2hhbmdlIHRvIGJlIHN1cmUuIE5vcGUsIGl0JiMzOTtzIGp1c3QgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuCgpOb3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGJ5IHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0OgoKYGBgYwpvdXRfZnJlZV9lZXByb206CglrZnJlZShwcml2LSZndDtudm1fZGF0YSk7Cm91dF9mcmVlX2VlcHJvbV9ibG9iOgoJa2ZyZWUocHJpdi0mZ3Q7ZWVwcm9tX2Jsb2IpOwpgYGAKCkFoLCBpdCYjMzk7cyBhIG1lbW9yeSBsZWFrIGZpeCEgVGhlIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAgd2VyZSBsaWtlbHkgaW4gdGhlIHdyb25nIG9yZGVyLCBhbmQgdGhpcyBzd2FwcyB0aGVtLiBUaGF0JiMzOTtzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgY2xlYW51cCB3aXRoaW4gdGhlIERWTSBkcml2ZXImIzM5O3MgaW5pdGlhbGl6YXRpb24uIFRoaXMgbWFrZXMgaXQgYWNjZXNzaWJsZSB2aWEgUENJIGZ1enppbmcuCgpNeSBhbmFseXNpcyBib2lscyBkb3duIHRvIHRoZSBmYWN0IHRoYXQgdGhpcyBpcyBhIG1lbW9yeSBsZWFrIGZpeCB3aXRoaW4gdGhlIERWTSBkcml2ZXImIzM5O3Mgc3RhcnQgc2VxdWVuY2UuIFRoZSBzcGVjaWZpYyBwYXRjaCB3aXRoaW4gdGhlIGRyaXZlciYjMzk7cyBzZXF1ZW5jZSBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgZHJpdmVyJiMzOTtzIHN0YXJ0IHNlcXVlbmNlIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuIFRoZSByZWxldmFudCBjb25maWdzIGFyZSBgSVdMV0lGSWAgYW5kIGBJV0xEVk1gLiBUaGUgZm9jdXMgc3ltYm9sIGlzIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLgoKSSBjaGVja2VkIHRoZSBLY29uZmlnIGZpbGUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBuYW1lczogYGNvbmZpZyBJV0xEVk1gIGlzIGRlZmluaXRlbHkgcHJlc2VudCB1bmRlciBgaWYgSVdMV0lGSWAgYmxvY2suCgpBbHJpZ2h0LCBJIHRoaW5rIEkmIzM5O3ZlIGdvdCB0aGlzLiBJJiMzOTtsbCBub3cgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjQgMDk6MjU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lXTFdJRkkmIzM0OywKICAgICYjMzQ7SVdMRFZNJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aXdsX29wX21vZGVfZHZtX3N0YXJ0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgYnkgc3dhcHBpbmcgdGhlIG9yZGVyIG9mIGBrZnJlZWAgY2FsbHMgZm9yIGBudm1fZGF0YWAgYW5kIGBlZXByb21fYmxvYmAuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgaXdsd2lmaSBEVk0gZHJpdmVyJiMzOTtzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi4wOTEwMzgwMTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDMyNTc2NjgzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVdMV0lGSVwiLFxuICAgIFwiSVdMRFZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXdsX29wX21vZGVfZHZtX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBieSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpd2x3aWZpIERWTSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgUENJIGRldmljZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi4wOTEwNDI5MTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNDg0OTg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGQyYjUzOGU4OGRlOTBhM2VjNGY5OWNkM2ExNDhjNmEwYjVhNDk3MWNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdW4gMjQgMDk6MjQ6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXFxuaW5kZXggY2E1YTgxNDA5MDhhZmIuLjZiZDViNmQ4NGIyYTliIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xcbkBAIC0xNTExLDEwICsxNTExLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaXdsX29wX21vZGUgKml3bF9vcF9tb2RlX2R2bV9zdGFydChzdHJ1Y3QgaXdsX3RyYW5zICp0cmFucyxcXG4gXFx0cHJpdi1cXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcXG4gb3V0X3VuaW5pdF9kcnY6XFxuIFxcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xcbi1vdXRfZnJlZV9lZXByb21fYmxvYjpcXG4tXFx0a2ZyZWUocHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2IpO1xcbiBvdXRfZnJlZV9lZXByb206XFxuIFxcdGtmcmVlKHByaXYtXFx1MDAzZW52bV9kYXRhKTtcXG4rb3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XFxuK1xcdGtmcmVlKHByaXYtXFx1MDAzZWVlcHJvbV9ibG9iKTtcXG4gb3V0X2xlYXZlX3RyYW5zOlxcbiBcXHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVxcdTAwM2V0cmFucyk7XFxuIG91dF9mcmVlX2h3OlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoxNi43MTY1MTY3MTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMjYzMjE3NDIyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJV0xXSUZJXCIsXG4gICAgXCJJV0xEVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGJ5IHN3YXBwaW5nIHRoZSBvcmRlciBvZiBga2ZyZWVgIGNhbGxzIGZvciBgbnZtX2RhdGFgIGFuZCBgZWVwcm9tX2Jsb2JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGl3bHdpZmkgRFZNIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZDJiNTM4ZTg4ZGU5MGEzZWM0Zjk5Y2QzYTE0OGM2YTBiNWE0OTcxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVuIDI0IDA5OjI0OjE0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXG5pbmRleCBjYTVhODE0MDkwOGFmYi4uNmJkNWI2ZDg0YjJhOWIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uY1xuQEAgLTE1MTEsMTAgKzE1MTEsMTAgQEAgc3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxuIFx0cHJpdi1cdTAwM2V3b3JrcXVldWUgPSBOVUxMO1xuIG91dF91bmluaXRfZHJ2OlxuIFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XG4tb3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG4tXHRrZnJlZShwcml2LVx1MDAzZWVlcHJvbV9ibG9iKTtcbiBvdXRfZnJlZV9lZXByb206XG4gXHRrZnJlZShwcml2LVx1MDAzZW52bV9kYXRhKTtcbitvdXRfZnJlZV9lZXByb21fYmxvYjpcbitcdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuIG91dF9sZWF2ZV90cmFuczpcbiBcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXHUwMDNldHJhbnMpO1xuIG91dF9mcmVlX2h3OlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MTYuNzE2NTE4MDU0WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA1OTY5OTI4MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBLZXJuZWwgUGF0Y2ggaW4gaXdsd2lmaSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNgLCBzcGVjaWZpY2FsbHkuIFRoZSBkaWZmIGlzIG1lc3Npbmcgd2l0aCB0aGUgZXJyb3IgaGFuZGxpbmcgd2l0aGluIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLiBJbW1lZGlhdGVseSwgSSBzcG90IHNvbWV0aGluZyB0aGF0IHJhaXNlcyBhbiBleWVicm93LiBUaGV5J3ZlIHN3YXBwZWQgdGhlIG9yZGVyIG9mIG1lbW9yeSBkZWFsbG9jYXRpb24gZm9yIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCBhbmQgYHByaXYtXHUwMDNlbnZtX2RhdGFgIGluIG9uZSBvZiB0aGUgZXJyb3IgcGF0aHMuIE5vdCBqdXN0IHRoZSBvcmRlciwgYnV0IGFsc28gdGhlIGxhYmVscyBhc3NvY2lhdGVkIHdpdGggdGhvc2UgZnJlZXM6IGBvdXRfZnJlZV9lZXByb21fYmxvYmAgYW5kIGBvdXRfZnJlZV9lZXByb21gLiBJIGNhbiBzZWUgdGhlIGNvZGUgbm93OiB0aGV5J3ZlIHNpbXBseSBmbGlwcGVkIHRoZSBsaW5lcyBhbmQgdGhlIGxhYmVscyBmb3IgdGhlIGZyZWVzLlxuXG5UaGlzIGlzIGEgcmVkIGZsYWcuIE1lbW9yeSBtYW5hZ2VtZW50IGlzIGNyaXRpY2FsLCBhbmQgYSBzaW1wbGUgc3dhcCBsaWtlIHRoaXMgY291bGQgaW50cm9kdWNlIGEgc3VidGxlIG1lbW9yeSBsZWFrIG9yLCBldmVuIHdvcnNlLCBsZWFkIHRvIGEgZG91YmxlLWZyZWUgc2NlbmFyaW8gaWYgdGhlIGNvZGUgbWlzdGFrZW5seSBqdW1wcyB0byB0aGUgd3JvbmcgY2xlYW51cCBsYWJlbC4gVGhlIGNvbXBpbGVyIGlzbid0IGdvaW5nIHRvIHNhdmUgdXMgaGVyZSwgdGhpcyBpcyBhIGxvZ2ljIGVycm9yLlxuXG5NeSBuZXh0IHN0ZXA/IEkgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24gaXRzZWxmLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbGFiZWxzIGFyZSB1c2VkIOKAkyB3aGVyZSB0aGV5J3JlIGp1bXBlZCB0bywgdW5kZXIgd2hhdCBjb25kaXRpb25zLCBhbmQgd2hhdCB0aGUgb3ZlcmFsbCBlcnJvciBoYW5kbGluZyBmbG93IGxvb2tzIGxpa2UuIEkgbmVlZCB0byB0cmFjZSBldmVyeSBwYXRoIHRocm91Z2ggdGhhdCBmdW5jdGlvbiB0byBlbnN1cmUgdGhhdCB0aGlzIGNoYW5nZSBkb2Vzbid0IGJyZWFrIGFueXRoaW5nLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFsbCBjYWxscyBhbmQgdXNhZ2VzIG9mIHRob3NlIGxhYmVscy4gVGhpcyBmZWVscyBsaWtlIGl0IHdhcnJhbnRzIGEgZGVlcGVyIGludmVzdGlnYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBzd2FwLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI3LCJPdXRwdXRUb2tlbnMiOjQ5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjEuNzc2MjIwMDI3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM4MzE4NTkyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0xMjE2PXN0YXRpYyBpbnQgaXdsX252bV9jaGVja192ZXJzaW9uKHN0cnVjdCBpd2xfbnZtX2RhdGEgKmRhdGEsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTIzMi1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTIzMzpzdGF0aWMgc3RydWN0IGl3bF9vcF9tb2RlICppd2xfb3BfbW9kZV9kdm1fc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyMzQtXFx0XFx0XFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBpd2xfcmZfY2ZnICpjZmcsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM9MjEzOD1zdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyBpd2xfZHZtX29wcyA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjEzOTpcXHQuc3RhcnQgPSBpd2xfb3BfbW9kZV9kdm1fc3RhcnQsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTIxNDAtXFx0LnN0b3AgPSBpd2xfb3BfbW9kZV9kdm1fc3RvcCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjIuMTU5NDE3MjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjQxNjkyMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGUgbWF0dGVyOlxuXG4qKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIEZvY3VzaW5nIG9uIEVycm9yIEhhbmRsaW5nKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBnb2luZyB0byBiZSBvbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aHMuIEkgd2FudCB0byBzZWUgaG93IHRoaXMgZnVuY3Rpb24gZGVhbHMgd2l0aCBmYWlsdXJlcyBkdXJpbmcgdGhlIHN0YXJ0dXAgcHJvY2Vzcy4gVW5kZXJzdGFuZGluZyBob3cgaXQgZ3JhY2VmdWxseSAob3Igbm90IHNvIGdyYWNlZnVsbHkpIHJlY292ZXJzLCByZXBvcnRzIGVycm9ycywgb3IgY2xlYW5zIHVwIHJlc291cmNlcyBpbiB0aGUgZXZlbnQgb2YgYSBoaWNjdXAgaXMgZ29pbmcgdG8gYmUgY3J1Y2lhbC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBcIndoYXQgaWZzXCIgYW5kIHRoZSBcInRoZW4gd2hhdHNcIiBvZiB0aGlzIGZ1bmN0aW9uIHdoZW4gdGhpbmdzIGRvbid0IGdvIGFzIHBsYW5uZWQuIEkgd2FudCB0byBzZWUgaG93IHJvYnVzdCB0aGlzIGNvZGUgaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4MDcsIk91dHB1dFRva2VucyI6NDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDoyNS40MDExMTE3ODhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM5MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE0ODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDgwOlxcdFxcdFxcdCBzaXplb2YocHJpdi1cXHUwMDNlaHctXFx1MDAzZXdpcGh5LVxcdTAwM2Vmd192ZXJzaW9uKSxcXG4xNDgxOlxcdFxcdFxcdCBcXFwiJS4zMXNcXFwiLCBmdy1cXHUwMDNlZndfdmVyc2lvbik7XFxuMTQ4MjpcXHRcXG4xNDgzOlxcdFxcdHByaXYtXFx1MDAzZW5ld19zY2FuX3RocmVzaG9sZF9iZWhhdmlvdXIgPVxcbjE0ODQ6XFx0XFx0XFx0ISEodWNvZGVfZmxhZ3MgXFx1MDAyNiBJV0xfVUNPREVfVExWX0ZMQUdTX05FV1NDQU4pO1xcbjE0ODU6XFx0XFxuMTQ4NjpcXHRcXHRwcml2LVxcdTAwM2VwaHlfY2FsaWJfY2hhaW5fbm9pc2VfcmVzZXRfY21kID1cXG4xNDg3OlxcdFxcdFxcdGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplO1xcbjE0ODg6XFx0XFx0cHJpdi1cXHUwMDNlcGh5X2NhbGliX2NoYWluX25vaXNlX2dhaW5fY21kID1cXG4xNDg5OlxcdFxcdFxcdGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplICsgMTtcXG4xNDkwOlxcdFxcbjE0OTE6XFx0XFx0LyogaW5pdGlhbGl6ZSBhbGwgdmFsaWQgY29udGV4dHMgKi9cXG4xNDkyOlxcdFxcdGl3bF9pbml0X2NvbnRleHQocHJpdiwgdWNvZGVfZmxhZ3MpO1xcbjE0OTM6XFx0XFxuMTQ5NDpcXHRcXHQvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcXG4xNDk1OlxcdFxcdCAqIFRoaXMgaXMgc3RpbGwgcGFydCBvZiBwcm9iZSgpIGluIGEgc2Vuc2UuLi5cXG4xNDk2OlxcdFxcdCAqXFxuMTQ5NzpcXHRcXHQgKiA3LiBTZXR1cCBhbmQgcmVnaXN0ZXIgd2l0aCBtYWM4MDIxMSBhbmQgZGVidWdmc1xcbjE0OTg6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqL1xcbjE0OTk6XFx0XFx0ZXJyID0gaXdsYWduX21hY19zZXR1cF9yZWdpc3Rlcihwcml2LCBcXHUwMDI2ZnctXFx1MDAzZXVjb2RlX2NhcGEpO1xcbjE1MDA6XFx0XFx0aWYgKGVycilcXG4xNTAxOlxcdFxcdFxcdGdvdG8gb3V0X2Rlc3Ryb3lfd29ya3F1ZXVlO1xcbjE1MDI6XFx0XFxuMTUwMzpcXHRcXHRpd2xfZGJnZnNfcmVnaXN0ZXIocHJpdiwgZGJnZnNfZGlyKTtcXG4xNTA0OlxcdFxcbjE1MDU6XFx0XFx0cmV0dXJuIG9wX21vZGU7XFxuMTUwNjpcXHRcXG4xNTA3OlxcdG91dF9kZXN0cm95X3dvcmtxdWV1ZTpcXG4xNTA4OlxcdFxcdGl3bF90dF9leGl0KHByaXYpO1xcbjE1MDk6XFx0XFx0aXdsX2NhbmNlbF9kZWZlcnJlZF93b3JrKHByaXYpO1xcbjE1MTA6XFx0XFx0ZGVzdHJveV93b3JrcXVldWUocHJpdi1cXHUwMDNld29ya3F1ZXVlKTtcXG4xNTExOlxcdFxcdHByaXYtXFx1MDAzZXdvcmtxdWV1ZSA9IE5VTEw7XFxuMTUxMjpcXHRvdXRfdW5pbml0X2RydjpcXG4xNTEzOlxcdFxcdGl3bF91bmluaXRfZHJ2KHByaXYpO1xcbjE1MTQ6XFx0b3V0X2ZyZWVfZWVwcm9tOlxcbjE1MTU6XFx0XFx0a2ZyZWUocHJpdi1cXHUwMDNlbnZtX2RhdGEpO1xcbjE1MTY6XFx0b3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XFxuMTUxNzpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2VlZXByb21fYmxvYik7XFxuMTUxODpcXHRvdXRfbGVhdmVfdHJhbnM6XFxuMTUxOTpcXHRcXHRpd2xfdHJhbnNfb3BfbW9kZV9sZWF2ZShwcml2LVxcdTAwM2V0cmFucyk7XFxuMTUyMDpcXHRvdXRfZnJlZV9odzpcXG4xNTIxOlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXFx1MDAzZWh3KTtcXG4xNTIyOlxcdG91dDpcXG4xNTIzOlxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuMTUyNDpcXHR9XFxuMTUyNTpcXHRcXG4xNTI2OlxcdHN0YXRpYyB2b2lkIGl3bF9vcF9tb2RlX2R2bV9zdG9wKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSlcXG4xNTI3OlxcdHtcXG4xNTI4OlxcdFxcdHN0cnVjdCBpd2xfcHJpdiAqcHJpdiA9IElXTF9PUF9NT0RFX0dFVF9EVk0ob3BfbW9kZSk7XFxuMTUyOTpcXHRcXG4xNTMwOlxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCIqKiogVU5MT0FEIERSSVZFUiAqKipcXFxcblxcXCIpO1xcbjE1MzE6XFx0XFxuMTUzMjpcXHRcXHRpd2xhZ25fbWFjX3VucmVnaXN0ZXIocHJpdik7XFxuMTUzMzpcXHRcXG4xNTM0OlxcdFxcdGl3bF90dF9leGl0KHByaXYpO1xcbjE1MzU6XFx0XFxuMTUzNjpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2VlZXByb21fYmxvYik7XFxuMTUzNzpcXHRcXHRrZnJlZShwcml2LVxcdTAwM2Vudm1fZGF0YSk7XFxuMTUzODpcXHRcXG4xNTM5OlxcdFxcdC8qbmV0aWZfc3RvcF9xdWV1ZShkZXYpOyAqL1xcbjE1NDA6XFx0XFxuMTU0MTpcXHRcXHQvKiBpZWVlODAyMTFfdW5yZWdpc3Rlcl9odyBjYWxscyBpd2xhZ25fbWFjX3N0b3AsIHdoaWNoIGZsdXNoZXNcXG4xNTQyOlxcdFxcdCAqIHByaXYtXFx1MDAzZXdvcmtxdWV1ZS4uLiBzbyB3ZSBjYW4ndCB0YWtlIGRvd24gdGhlIHdvcmtxdWV1ZVxcbjE1NDM6XFx0XFx0ICogdW50aWwgbm93Li4uICovXFxuMTU0NDpcXHRcXHRkZXN0cm95X3dvcmtxdWV1ZShwcml2LVxcdTAwM2V3b3JrcXVldWUpO1xcbjE1NDU6XFx0XFx0cHJpdi1cXHUwMDNld29ya3F1ZXVlID0gTlVMTDtcXG4xNTQ2OlxcdFxcbjE1NDc6XFx0XFx0aXdsX3VuaW5pdF9kcnYocHJpdik7XFxuMTU0ODpcXHRcXG4xNTQ5OlxcdFxcdGRldl9rZnJlZV9za2IocHJpdi1cXHUwMDNlYmVhY29uX3NrYik7XFxuMTU1MDpcXHRcXG4xNTUxOlxcdFxcdGl3bF90cmFuc19vcF9tb2RlX2xlYXZlKHByaXYtXFx1MDAzZXRyYW5zKTtcXG4xNTUyOlxcdFxcdGllZWU4MDIxMV9mcmVlX2h3KHByaXYtXFx1MDAzZWh3KTtcXG4xNTUzOlxcdH1cXG4xNTU0OlxcdFxcbjE1NTU6XFx0c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkZXNjX2xvb2t1cF90ZXh0W10gPSB7XFxuMTU1NjpcXHRcXHRcXFwiT0tcXFwiLFxcbjE1NTc6XFx0XFx0XFxcIkZBSUxcXFwiLFxcbjE1NTg6XFx0XFx0XFxcIkJBRF9QQVJBTVxcXCIsXFxuMTU1OTpcXHRcXHRcXFwiQkFEX0NIRUNLU1VNXFxcIixcXG4xNTYwOlxcdFxcdFxcXCJOTUlfSU5URVJSVVBUX1dER1xcXCIsXFxuMTU2MTpcXHRcXHRcXFwiU1lTQVNTRVJUXFxcIixcXG4xNTYyOlxcdFxcdFxcXCJGQVRBTF9FUlJPUlxcXCIsXFxuMTU2MzpcXHRcXHRcXFwiQkFEX0NPTU1BTkRcXFwiLFxcbjE1NjQ6XFx0XFx0XFxcIkhXX0VSUk9SX1RVTkVfTE9DS1xcXCIsXFxuMTU2NTpcXHRcXHRcXFwiSFdfRVJST1JfVEVNUEVSQVRVUkVcXFwiLFxcbjE1NjY6XFx0XFx0XFxcIklMTEVHQUxfQ0hBTl9GUkVRXFxcIixcXG4xNTY3OlxcdFxcdFxcXCJWQ0NfTk9UX1NUQUJMRVxcXCIsXFxuMTU2ODpcXHRcXHRcXFwiRkhfRVJST1JcXFwiLFxcbjE1Njk6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfSE9TVFxcXCIsXFxuMTU3MDpcXHRcXHRcXFwiTk1JX0lOVEVSUlVQVF9BQ1RJT05fUFRcXFwiLFxcbjE1NzE6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfVU5LTk9XTlxcXCIsXFxuMTU3MjpcXHRcXHRcXFwiVUNPREVfVkVSU0lPTl9NSVNNQVRDSFxcXCIsXFxuMTU3MzpcXHRcXHRcXFwiSFdfRVJST1JfQUJTX0xPQ0tcXFwiLFxcbjE1NzQ6XFx0XFx0XFxcIkhXX0VSUk9SX0NBTF9MT0NLX0ZBSUxcXFwiLFxcbjE1NzU6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfSU5TVF9BQ1RJT05fUFRcXFwiLFxcbjE1NzY6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfREFUQV9BQ1RJT05fUFRcXFwiLFxcbjE1Nzc6XFx0XFx0XFxcIk5NSV9UUk1fSFdfRVJcXFwiLFxcbjE1Nzg6XFx0XFx0XFxcIk5NSV9JTlRFUlJVUFRfVFJNXFxcIixcXG4xNTc5OlxcdFxcdFxcXCJOTUlfSU5URVJSVVBUX0JSRUFLX1BPSU5UXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MjUuNDAxMjc3NDA4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY2MjA0MjkyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyBqdW1wcyBvdXQgYXQgbWUg4oCTIHRoZSBjaGFuZ2Ugc2VlbXMgdHJpdmlhbCwgYWxtb3N0IGxpa2UgYSB0eXBvIGNvcnJlY3Rpb24uIEl0IGFwcGVhcnMgdG8ganVzdCBzd2FwIHRoZSBwb3NpdGlvbnMgb2YgYG91dF9mcmVlX2VlcHJvbWAgYW5kIGBvdXRfZnJlZV9lZXByb21fYmxvYmAgaW4gdGhlIGNvZGUsIHNwZWNpZmljYWxseSB0aGUgbWVtb3J5IGRlYWxsb2NhdGlvbiByb3V0aW5lcy4gSW5pdGlhbGx5LCBpdCBsb29rZWQgbGlrZSB0aGVyZSB3ZXJlIGNvZGUgYWRkaXRpb25zLCBidXQgdGhlbiB0aGUgZGlmZiB2aWV3IG1hZGUgaXQgY2xlYXIgaXQncyBhIHJlb3JkZXJpbmcsIG5vdCBhbiBhZGRpdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgcmVvcmRlcmluZyBvY2N1cnJlZCBhbmQgd2hldGhlciBpdCBoYXMgaW1wbGljYXRpb25zLlxuXG5NeSBuZXh0IG1vdmUgaXMgY2xlYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCB0aGUgdmFyaWFibGVzIHRoZXkgb3BlcmF0ZSBvbi4gTGV0J3Mgc2VlIGhvdyBgb3V0X2ZyZWVfZWVwcm9tYCBhbmQgYG91dF9mcmVlX2VlcHJvbV9ibG9iYCBhcmUgYWN0dWFsbHkgKnVzZWQqIHdpdGhpbiB0aGUgY29kZSBiYXNlLiBJIG5lZWQgdG8gdHJhY2UgdGhvc2UgY2FsbHMgYW5kIHVuZGVyc3RhbmQgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHQgdG8gYmUgc3VyZSB0aGlzIFwic2ltcGxlXCIgY2hhbmdlIGlzIHRydWx5IGhhcm1sZXNzIG9yIGlmIGl0IGludHJvZHVjZXMgc3VidGxlIGlzc3VlcywgbGlrZSBkb3VibGUgZnJlZXMgb3IgbGVha3MsIGRlcGVuZGluZyBvbiB0aGUgY29udHJvbCBmbG93LiBJdCdzIHRpbWUgdG8gZGlnIGluIGFuZCBwZXJmb3JtIGEgY29kZSBhdWRpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDYwMiwiT3V0cHV0VG9rZW5zIjo0NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5NiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjMwLjA2MzMyMjU4OVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MTI5NjI0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnb3RvIG91dF9mcmVlX2VlcHJvbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MDgtXFx0XFx0ZXJyID0gLUVOT01FTTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQwOTpcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbV9ibG9iO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDEwLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDEzLVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MTQ6XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0MTUtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxNy1cXHRpZiAoZXJyKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxNDE4OlxcdFxcdGdvdG8gb3V0X2ZyZWVfZWVwcm9tO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xNDE5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTE0NjItXFx0aWYgKGVycilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MTQ2MzpcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQ2NC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6MzAuMTQ0NjI0ODY3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDA2MzE5Njc3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCAtIExldCdzIERpZyBJbioqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gZGlzc2VjdCB0aGUgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgSSBuZWVkIHRvIGZvY3VzIG9uIGxpbmVzIDEzODAgdGhyb3VnaCAxNDMwLiBUaGlzIGxpa2VseSBtZWFucyBJJ20gbG9va2luZyBhdCBhIGNyaXRpY2FsIHNlY3Rpb24gb2YgY29kZSByZWxhdGVkIHRvIHRoZSBEaXJlY3QgVmlydHVhbCBNZW1vcnkgKERWTSkgc3RhcnQtdXAgcHJvY2VzcyB3aXRoaW4gdGhlIEludGVsIFdpcmVsZXNzIGRyaXZlci5cblxuR2l2ZW4gdGhlIGNvbnRleHQsIEknbSBleHBlY3RpbmcgdGhpcyBzZWdtZW50IHRvIGJlIHJlc3BvbnNpYmxlIGZvciBzb21ldGhpbmcgcHJldHR5IGZ1bmRhbWVudGFsLiBQZXJoYXBzIGluaXRpYWxpemF0aW9uIG9mIERWTS1yZWxhdGVkIGhhcmR3YXJlIHJlc291cmNlcywgdGhlIHNldHRpbmcgdXAgb2YgRE1BIHRyYW5zZmVycywgb3IgdGhlIGNvbmZpZ3VyYXRpb24gb2YgbWVtb3J5IG1hcHBpbmdzLiBJdCBjb3VsZCBldmVuIGJlIGhhbmRsaW5nIGludGVycnVwdHMgcmVsYXRlZCB0byB0aGUgRFZNIGVuZ2luZS4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIHZhcmlhYmxlcyBiZWluZyBtYW5pcHVsYXRlZCBhbmQgdGhlIGZ1bmN0aW9uIGNhbGxzIG1hZGUgd2l0aGluIHRoYXQgcmFuZ2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3RlcHMgaXQgdGFrZXMgdG8gZ2V0IHRoZSBEVk0gb3BlcmF0aW9uYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGFsbG9jYXRpbmcgYnVmZmVycywgcmVnaXN0ZXJpbmcgaGFyZHdhcmUsIGVuYWJsaW5nIHNwZWNpZmljIGZlYXR1cmVzLCBvciBjb21tdW5pY2F0aW5nIHdpdGggZmlybXdhcmU/IE15IGFpbSBpcyB0byBnbGVhbiB0aGUgY29yZSBsb2dpYyBhbmQgaG93IGl0IGZpdHMgaW50byB0aGUgYnJvYWRlciBEVk0gc3RhcnR1cCBzZXF1ZW5jZS4gSSdtIGdvaW5nIHRvIGNhcmVmdWxseSB3YXRjaCBmb3IgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGhhbmRsaW5nIGFzIHdlbGwuIFRoaXMgd2lsbCBiZSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTUxMywiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjM0LjIwNzgyNzgwOVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDMzNDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzODAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzgwOlxcdFxcdCAqL1xcbjEzODE6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRpc3RpY3MubG9jayk7XFxuMTM4MjpcXHRcXG4xMzgzOlxcdFxcdC8qKioqKioqKioqKioqKioqKioqKioqKlxcbjEzODQ6XFx0XFx0ICogMi4gUmVhZCBSRVYgcmVnaXN0ZXJcXG4xMzg1OlxcdFxcdCAqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xMzg2OlxcdFxcdElXTF9JTkZPKHByaXYsIFxcXCJEZXRlY3RlZCAlcywgUkVWPTB4JVhcXFxcblxcXCIsXFxuMTM4NzpcXHRcXHRcXHRwcml2LVxcdTAwM2V0cmFucy1cXHUwMDNlaW5mby5uYW1lLCBwcml2LVxcdTAwM2V0cmFucy1cXHUwMDNlaW5mby5od19yZXYpO1xcbjEzODg6XFx0XFxuMTM4OTpcXHRcXHRlcnIgPSBpd2xfdHJhbnNfc3RhcnRfaHcocHJpdi1cXHUwMDNldHJhbnMpO1xcbjEzOTA6XFx0XFx0aWYgKGVycilcXG4xMzkxOlxcdFxcdFxcdGdvdG8gb3V0X2xlYXZlX3RyYW5zO1xcbjEzOTI6XFx0XFxuMTM5MzpcXHRcXHQvKiBSZWFkIHRoZSBFRVBST00gKi9cXG4xMzk0OlxcdFxcdGVyciA9IGl3bF9yZWFkX2VlcHJvbShwcml2LVxcdTAwM2V0cmFucywgXFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9ibG9iLFxcbjEzOTU6XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnByaXYtXFx1MDAzZWVlcHJvbV9ibG9iX3NpemUpO1xcbjEzOTY6XFx0XFx0aWYgKGVycikge1xcbjEzOTc6XFx0XFx0XFx0SVdMX0VSUihwcml2LCBcXFwiVW5hYmxlIHRvIGluaXQgRUVQUk9NXFxcXG5cXFwiKTtcXG4xMzk4OlxcdFxcdFxcdGdvdG8gb3V0X2xlYXZlX3RyYW5zO1xcbjEzOTk6XFx0XFx0fVxcbjE0MDA6XFx0XFxuMTQwMTpcXHRcXHQvKiBSZXNldCBjaGlwIHRvIHNhdmUgcG93ZXIgdW50aWwgd2UgbG9hZCB1Q29kZSBkdXJpbmcgXFxcInVwXFxcIi4gKi9cXG4xNDAyOlxcdFxcdGl3bF90cmFuc19zdG9wX2RldmljZShwcml2LVxcdTAwM2V0cmFucyk7XFxuMTQwMzpcXHRcXG4xNDA0OlxcdFxcdHByaXYtXFx1MDAzZW52bV9kYXRhID0gaXdsX3BhcnNlX2VlcHJvbV9kYXRhKHByaXYtXFx1MDAzZXRyYW5zLCBwcml2LVxcdTAwM2VjZmcsXFxuMTQwNTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2IsXFxuMTQwNjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgcHJpdi1cXHUwMDNlZWVwcm9tX2Jsb2Jfc2l6ZSk7XFxuMTQwNzpcXHRcXHRpZiAoIXByaXYtXFx1MDAzZW52bV9kYXRhKSB7XFxuMTQwODpcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbjE0MDk6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb21fYmxvYjtcXG4xNDEwOlxcdFxcdH1cXG4xNDExOlxcdFxcbjE0MTI6XFx0XFx0ZXJyID0gaXdsX252bV9jaGVja192ZXJzaW9uKHByaXYtXFx1MDAzZW52bV9kYXRhLCBwcml2LVxcdTAwM2V0cmFucyk7XFxuMTQxMzpcXHRcXHRpZiAoZXJyKVxcbjE0MTQ6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuMTQxNTpcXHRcXG4xNDE2OlxcdFxcdGVyciA9IGl3bF9lZXByb21faW5pdF9od19wYXJhbXMocHJpdik7XFxuMTQxNzpcXHRcXHRpZiAoZXJyKVxcbjE0MTg6XFx0XFx0XFx0Z290byBvdXRfZnJlZV9lZXByb207XFxuMTQxOTpcXHRcXG4xNDIwOlxcdFxcdC8qIGV4dHJhY3QgTUFDIEFkZHJlc3MgKi9cXG4xNDIxOlxcdFxcdG1lbWNweShwcml2LVxcdTAwM2VhZGRyZXNzZXNbMF0uYWRkciwgcHJpdi1cXHUwMDNlbnZtX2RhdGEtXFx1MDAzZWh3X2FkZHIsIEVUSF9BTEVOKTtcXG4xNDIyOlxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCJNQUMgYWRkcmVzczogJXBNXFxcXG5cXFwiLCBwcml2LVxcdTAwM2VhZGRyZXNzZXNbMF0uYWRkcik7XFxuMTQyMzpcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWFkZHJlc3NlcyA9IHByaXYtXFx1MDAzZWFkZHJlc3NlcztcXG4xNDI0OlxcdFxcdHByaXYtXFx1MDAzZWh3LVxcdTAwM2V3aXBoeS1cXHUwMDNlbl9hZGRyZXNzZXMgPSAxO1xcbjE0MjU6XFx0XFx0bnVtX21hYyA9IHByaXYtXFx1MDAzZW52bV9kYXRhLVxcdTAwM2VuX2h3X2FkZHJzO1xcbjE0MjY6XFx0XFx0aWYgKG51bV9tYWMgXFx1MDAzZSAxKSB7XFxuMTQyNzpcXHRcXHRcXHRtZW1jcHkocHJpdi1cXHUwMDNlYWRkcmVzc2VzWzFdLmFkZHIsIHByaXYtXFx1MDAzZWFkZHJlc3Nlc1swXS5hZGRyLFxcbjE0Mjg6XFx0XFx0XFx0ICAgICAgIEVUSF9BTEVOKTtcXG4xNDI5OlxcdFxcdFxcdHByaXYtXFx1MDAzZWFkZHJlc3Nlc1sxXS5hZGRyWzVdKys7XFxuMTQzMDpcXHRcXHRcXHRwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZW5fYWRkcmVzc2VzKys7XFxuMTQzMTpcXHRcXHR9XFxuMTQzMjpcXHRcXG4xNDMzOlxcdFxcdC8qKioqKioqKioqKioqKioqKioqKioqKipcXG4xNDM0OlxcdFxcdCAqIDQuIFNldHVwIEhXIGNvbnN0YW50c1xcbjE0MzU6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqKioqKi9cXG4xNDM2OlxcdFxcdGl3bF9zZXRfaHdfcGFyYW1zKHByaXYpO1xcbjE0Mzc6XFx0XFxuMTQzODpcXHRcXHRpZiAoIShwcml2LVxcdTAwM2Vudm1fZGF0YS1cXHUwMDNlc2t1X2NhcF9pcGFuX2VuYWJsZSkpIHtcXG4xNDM5OlxcdFxcdFxcdElXTF9ERUJVR19JTkZPKHByaXYsIFxcXCJZb3VyIEVFUFJPTSBkaXNhYmxlZCBQQU5cXFxcblxcXCIpO1xcbjE0NDA6XFx0XFx0XFx0dWNvZGVfZmxhZ3MgXFx1MDAyNj0gfklXTF9VQ09ERV9UTFZfRkxBR1NfUEFOO1xcbjE0NDE6XFx0XFx0XFx0LypcXG4xNDQyOlxcdFxcdFxcdCAqIGlmIG5vdCBQQU4sIHRoZW4gZG9uJ3Qgc3VwcG9ydCBQMlAgLS0gbWlnaHQgYmUgYSB1Q29kZVxcbjE0NDM6XFx0XFx0XFx0ICogcGFja2FnaW5nIGJ1ZyBvciBkdWUgdG8gdGhlIGVlcHJvbSBjaGVjayBhYm92ZVxcbjE0NDQ6XFx0XFx0XFx0ICovXFxuMTQ0NTpcXHRcXHRcXHRwcml2LVxcdTAwM2VzdGFfa2V5X21heF9udW0gPSBTVEFfS0VZX01BWF9OVU07XFxuMTQ0NjpcXHRcXHRcXHR0cmFucy1cXHUwMDNlY29uZi5jbWRfcXVldWUgPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNO1xcbjE0NDc6XFx0XFx0fVxcbjE0NDg6XFx0XFxuMTQ0OTpcXHRcXHQvKioqKioqKioqKioqKioqKioqKlxcbjE0NTA6XFx0XFx0ICogNS4gU2V0dXAgcHJpdlxcbjE0NTE6XFx0XFx0ICoqKioqKioqKioqKioqKioqKiovXFxuMTQ1MjpcXHRcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgSVdMX01BWF9IV19RVUVVRVM7IGkrKykge1xcbjE0NTM6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBJV0xfSU5WQUxJRF9NQUM4MDIxMV9RVUVVRTtcXG4xNDU0OlxcdFxcdFxcdGlmIChpIFxcdTAwM2MgSVdMQUdOX0ZJUlNUX0FNUERVX1FVRVVFIFxcdTAwMjZcXHUwMDI2XFxuMTQ1NTpcXHRcXHRcXHQgICAgaSAhPSBJV0xfREVGQVVMVF9DTURfUVVFVUVfTlVNIFxcdTAwMjZcXHUwMDI2XFxuMTQ1NjpcXHRcXHRcXHQgICAgaSAhPSBJV0xfSVBBTl9DTURfUVVFVUVfTlVNKVxcbjE0NTc6XFx0XFx0XFx0XFx0cHJpdi1cXHUwMDNlcXVldWVfdG9fbWFjODAyMTFbaV0gPSBpO1xcbjE0NTg6XFx0XFx0XFx0YXRvbWljX3NldChcXHUwMDI2cHJpdi1cXHUwMDNlcXVldWVfc3RvcF9jb3VudFtpXSwgMCk7XFxuMTQ1OTpcXHRcXHR9XFxuMTQ2MDpcXHRcXG4xNDYxOlxcdFxcdGVyciA9IGl3bF9pbml0X2Rydihwcml2KTtcXG4xNDYyOlxcdFxcdGlmIChlcnIpXFxuMTQ2MzpcXHRcXHRcXHRnb3RvIG91dF9mcmVlX2VlcHJvbTtcXG4xNDY0OlxcdFxcbjE0NjU6XFx0XFx0LyogQXQgdGhpcyBwb2ludCBib3RoIGh3IGFuZCBwcml2IGFyZSBpbml0aWFsaXplZC4gKi9cXG4xNDY2OlxcdFxcbjE0Njc6XFx0XFx0LyoqKioqKioqKioqKioqKioqKioqXFxuMTQ2ODpcXHRcXHQgKiA2LiBTZXR1cCBzZXJ2aWNlc1xcbjE0Njk6XFx0XFx0ICoqKioqKioqKioqKioqKioqKioqL1xcbjE0NzA6XFx0XFx0ZXJyID0gaXdsX3NldHVwX2RlZmVycmVkX3dvcmsocHJpdik7XFxuMTQ3MTpcXHRcXHRpZiAoZXJyKVxcbjE0NzI6XFx0XFx0XFx0Z290byBvdXRfdW5pbml0X2RydjtcXG4xNDczOlxcdFxcbjE0NzQ6XFx0XFx0aXdsX3NldHVwX3J4X2hhbmRsZXJzKHByaXYpO1xcbjE0NzU6XFx0XFxuMTQ3NjpcXHRcXHRpd2xfcG93ZXJfaW5pdGlhbGl6ZShwcml2KTtcXG4xNDc3OlxcdFxcdGl3bF90dF9pbml0aWFsaXplKHByaXYpO1xcbjE0Nzg6XFx0XFxuMTQ3OTpcXHRcXHRzbnByaW50Zihwcml2LVxcdTAwM2Vody1cXHUwMDNld2lwaHktXFx1MDAzZWZ3X3ZlcnNpb24sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjM0LjIwNzk3MzYyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjIyNjQ4MjI3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTGVhayBGaXggaW4gdGhlIGl3bHdpZmkgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIGBpd2x3aWZpYCBkcml2ZXIsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIGhvdyBpdCBoYW5kbGVzIEVFUFJPTSBkYXRhIGxvYWRpbmcuIFRoZSBvcmlnaW5hbCBjb2RlIGhhcyB0aGlzIHNlcXVlbmNlOiBJdCByZWFkcyB0aGUgRUVQUk9NLCBzdG9wcyB0aGUgZGV2aWNlLCBwYXJzZXMgdGhlIEVFUFJPTSBkYXRhIGludG8gYHByaXYtXHUwMDNlbnZtX2RhdGFgLCBhbmQgdGhlbiBjaGVja3MgaXRzIHZlcnNpb24uIElmIHBhcnNpbmcgZmFpbHMgKG1lYW5pbmcgYHByaXYtXHUwMDNlbnZtX2RhdGFgIGlzIE5VTEwpLCB0aGUgY29kZSBqdW1wcyB0byBhIGNsZWFudXAgbGFiZWwsIGBvdXRfZnJlZV9lZXByb21fYmxvYmAuIElmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBqdW1wcyB0byBgb3V0X2ZyZWVfZWVwcm9tYC4gVGhlIHByb2JsZW0gaXMsIHVuZGVyIHRoZSBvcmlnaW5hbCBlcnJvciBoYW5kbGluZywgaWYgcGFyc2luZyBmYWlscywgaXQgY29ycmVjdGx5IGZyZWVzIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCAod2hpY2ggY29udGFpbnMgdGhlIHJhdyBFRVBST00gZGF0YSksIGJ1dCBfdGhlbl8gZnJlZXMgdGhlIE5VTEwgcG9pbnRlciBgcHJpdi1cdTAwM2Vudm1fZGF0YWAuIEhvd2V2ZXIsIGlmIHRoZSB2ZXJzaW9uIGNoZWNrIGZhaWxzLCBpdCBmcmVlcyBgcHJpdi1cdTAwM2Vudm1fZGF0YWAgYnV0ICpkb2Vzbid0KiBmcmVlIGBwcml2LVx1MDAzZWVlcHJvbV9ibG9iYCwgbGVhZGluZyB0byBhIG1lbW9yeSBsZWFrLiBUaGlzIHBhdGNoIHNpbXBseSByZW9yZGVycyB0aGUgY2xlYW51cCBsYWJlbHMgc28gdGhhdCBgb3V0X2ZyZWVfZWVwcm9tYCBmcmVlcyBgbnZtX2RhdGFgIGFuZCB0aGVuICpmYWxscyB0aHJvdWdoKiB0byBgb3V0X2ZyZWVfZWVwcm9tX2Jsb2JgIHdoaWNoIGZyZWVzIGBlZXByb21fYmxvYmAuIFRoaXMgZml4ZXMgdGhlIGxlYWsuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogaXMgdGhpcyByZWFjaGFibGU/IFRoZSBjb2RlIGluIHF1ZXN0aW9uIGlzIHdpdGhpbiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCwgd2hpY2ggaXMgdGhlIGBzdGFydGAgY2FsbGJhY2sgZm9yIGBpd2xfZHZtX29wc2AuIFRoaXMgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgZHJpdmVyIHN0YXJ0cyB1cC4gSXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgbWVtb3J5IGxlYWsgZml4LiBUaGlzIGRyaXZlciBpcyBmb3IgSW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rLCB3aGljaCBtZWFucyBpdCByZWxpZXMgb24gYWN0dWFsIFBDSSBoYXJkd2FyZS4gVHlwaWNhbGx5LCBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSBkb24ndCBlbXVsYXRlIFBDSSBoYXJkd2FyZSB1bmxlc3MgaXQncyBleHBsaWNpdGx5IHBhc3NlZCB0aHJvdWdoIG9yIGVtdWxhdGVkLiBIb3dldmVyLCBJIGtub3cgc3l6a2FsbGVyIGhhcyBzb21lIG1lY2hhbmlzbXMgZm9yIGZ1enppbmcgUENJIGRyaXZlcnMsIHBvdGVudGlhbGx5IHVzaW5nIGB2aGNpYCBvciBzaW1pbGFyIHRlY2huaXF1ZXMuIEFuZCBpdCBjYW4gZnV6eiBQQ0kgY29uZmlnIHNwYWNlIG9yIHVzZSBgc3l6X3BjaV9kZXZpY2VfYWRkYCB0byBjcmVhdGUgUENJIGRldmljZXMgaWYgdGhlIGZ1enppbmcgaXMgZW5hYmxlZC4gVGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHN5emthbGxlciBlbXVsYXRlIGl3bHdpZmkgaGFyZHdhcmUgZGlyZWN0bHk/IE5vLCBpdCBkb2Vzbid0LiBCdXQsIHN5emthbGxlciBkb2VzIGhhdmUgUENJIGZ1enppbmcuIFRoZSBwYXRjaCBndWlkZWxpbmVzIHNheSBub3QgdG8gbWFyayBpdCBhcyB3b3J0aCBmdXp6aW5nIGlmIGl0J3MgKmltcG9zc2libGUqIHRvIHJlYWNoIGluIHRoZXNlIGVudmlyb25tZW50cywgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlLiBIb3dldmVyLCBzeXprYWxsZXIgY2FuIGluc3RhbnRpYXRlIFBDSSBkZXZpY2VzIGFuZCBwcm92aWRlIGZ1enplZCBtZW1vcnkgYWNjZXNzLiBUaGF0IG1lYW5zIHRoZXJlICppcyogYSBwYXRoIHRvIHJlYWNoIHRoaXMgY29kZSB3aXRoIFBDSSBmdXp6aW5nISBUaGVyZWZvcmUsIHRoaXMgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG5vdyBkb3VibGUtY2hlY2sgaWYgYW55IHNwZWNpZmljIGNvbmZpZ3MgYXJlIG5lZWRlZCB0byBhY3R1YWxseSB0cmlnZ2VyIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3NDc3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTk1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NDYuNDM0NDU3ODk2WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTk5NDg5NjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElXTFdJRklcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoyOmNvbmZpZyBJV0xXSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIkludGVsIFdpcmVsZXNzIFdpRmkgTmV4dCBHZW4gQUdOIC0gV2lyZWxlc3MtTi9BZHZhbmNlZC1OL1VsdGltYXRlLU4gKGl3bHdpZmkpIFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz00Nz1pZiBJV0xXSUZJXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo0OTpjb25maWcgSVdMV0lGSV9LVU5JVF9URVNUU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01MC1cXHR0cmlzdGF0ZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTU3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo1ODpjb25maWcgSVdMV0lGSV9MRURTXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTU5LVxcdGJvb2xcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz04ND1jb25maWcgSVdMTUxEXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTQtIyBkb24ndCBjYWxsIGl0IF9NT0RVTEUgLS0gd2lsbCBjb25mdXNlIEtjb25maWcvZml4ZGVwLy4uLlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo5NTpjb25maWcgSVdMV0lGSV9PUE1PREVfTU9EVUxBUlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy05Ni1cXHRib29sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9MTA1PW1lbnUgXFxcIkRlYnVnZ2luZyBPcHRpb25zXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjEwNzpjb25maWcgSVdMV0lGSV9ERUJVR1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDgtXFx0Ym9vbCBcXFwiRW5hYmxlIGZ1bGwgZGVidWdnaW5nIG91dHB1dCBpbiB0aGUgaXdsd2lmaSBkcml2ZXJcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTMwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzE6Y29uZmlnIElXTFdJRklfREVCVUdGU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMzItXFx0Ym9vbCBcXFwiaXdsd2lmaSBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTM4LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMzk6Y29uZmlnIElXTFdJRklfREVWSUNFX1RSQUNJTkdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTQwLVxcdGJvb2wgXFxcIml3bHdpZmkgZGV2aWNlIGFjY2VzcyB0cmFjaW5nXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNDo0Ni44MzQ0MTI1NzlaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM1NDY2MTI0NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhpcyB0YXNrOlxuXG4qKkFuYWx5emluZyB0aGUgQ29uZmlndXJhdGlvbiBvZiBJV0xEVk0qKlxuXG5SaWdodCwgdGltZSB0byBnZXQgdG8gaXQuIEZpcnN0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYElXTERWTWAuIEl0J3MgbGlrZWx5IGdvaW5nIHRvIGJlIGEga2V5IGNvbXBvbmVudCBpbiB0aGlzIHByb2plY3QsIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2V0dXAgdGhvcm91Z2hseSBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiBjb25zaWRlcmluZyBob3cgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIE15IGluaXRpYWwgY2hlY2sgd2lsbCBob3BlZnVsbHkgZ2l2ZSBtZSBzb21lIGltcG9ydGFudCBwYXJhbWV0ZXJzIGFuZCB0aGVpciBjdXJyZW50IHZhbHVlcywgYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBzeXN0ZW1zLCBhbmQgdWx0aW1hdGVseSwgcmV2ZWFsIHBvdGVudGlhbCBhcmVhcyBvZiBjb25jZXJuIHRoYXQgcmVxdWlyZSBhZGRpdGlvbmFsIGF0dGVudGlvbi4gU28sIHdoZXJlJ3MgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQ/IFRoZSBjb25maWcgZmlsZXMsIG9mIGNvdXJzZS4gSSdsbCBuZWVkIHRvIGtub3cgd2hpY2ggb25lcyBhcmUgbW9zdCByZWxldmFudCB0byBgSVdMRFZNYCBhbmQgdGhlbiBiZWdpbiBwYXJzaW5nIHRoZW0uIEknbSBleHBlY3RpbmcgdG8gc2VlIGEgc3RydWN0dXJlZCBhcHByb2FjaC4gSSdsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSByZXNvdXJjZSBhbGxvY2F0aW9uLCBuZXR3b3JrIHNldHRpbmdzLCBzZWN1cml0eSBwcm90b2NvbHMsIGFuZCBpbnRlZ3JhdGlvbiBwb2ludHMgd2l0aCBvdGhlciBhcHBsaWNhdGlvbnMuIEknbGwgbmVlZCB0byBsb29rIGF0IHZlcnNpb25zLCBlcnJvciBsb2dzLCBhbmQgcmVjZW50IGNoYW5nZXMuIE9uY2UgSSBoYXZlIHRoZSBiYXNlbGluZSwgSSB3aWxsIGtub3cgd2hlcmUgdG8gZ28gbmV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc2MCwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjUwLjE4OTA3NjIzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUyMjkxNzksIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJV0xEVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTAuMjQ0MzE1MzMzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1MjgyMzExNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBpd2x3aWZpIEtjb25maWcqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGBEVk1gIOKAkyBEeW5hbWljIFZpcnR1YWwgTWFjaGluZXMsIHJpZ2h0PyBNeSBpbml0aWFsIGZvY3VzIHdpbGwgYmUgdGhlIGBkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdgIGZpbGUuIFRoYXQncyB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhpcyBmZWF0dXJlIGlzIGNvbnRyb2xsZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGl0IG1pZ2h0IGhhdmUgd2l0aGluIHRoZSBJbnRlbCB3aXJlbGVzcyBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJJ20gYXNzdW1pbmcgdGhhdCdzIHdoZXJlIHRoZSByZWxldmFudCBzeW1ib2xzIGFuZCB0aGVpciByZWxhdGlvbnNoaXBzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEkgZXhwZWN0IHRvIHNlZSB0aGUgdXN1YWwgY29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gb3RoZXIgb3B0aW9ucywgbWF5YmUgYm9hcmQgc3VwcG9ydCwgcmVndWxhdG9yeSByZXF1aXJlbWVudHMsIG9yIGhhcmR3YXJlIGNhcGFiaWxpdGllcy4gSSdsbCBuZWVkIHRvIHJhcGlkbHkgcGFyc2UgdGhhdCBLY29uZmlnIGZpbGUsIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcyBvciBmZWF0dXJlcywgYW5kIGhvdyBgRFZNYCBpcyBleHBvc2VkIHRvIHRoZSB1c2VyIChpZiBhdCBhbGwpLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIHdpbGwgcHJvdmlkZSBlbm91Z2ggY29udGV4dCB0byBnaXZlIG1lIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyBgRFZNYCBiZWhhdmVzIHdpdGhpbiB0aGlzIGRyaXZlciwgYW5kIEkgY2FuIHN0YXJ0IHRvIGRldmVsb3AgbXkgb3duIGh5cG90aGVzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDU0LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTQuNzcyNTQ5MDc2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Njc4NjM5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJEVk1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZz01OD1jb25maWcgSVdMV0lGSV9MRURTXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjAtXFx0ZGVwZW5kcyBvbiBMRURTX0NMQVNTPXkgfHwgTEVEU19DTEFTUz1NQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2MTpcXHRkZXBlbmRzIG9uIElXTE1WTSB8fCBJV0xEVk1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjItXFx0c2VsZWN0IExFRFNfVFJJR0dFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02NS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NjY6Y29uZmlnIElXTERWTVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzo2NzpcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgV2lyZWxlc3MgV2lGaSBEVk0gRmlybXdhcmUgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNjgtXFx0ZGVwZW5kcyBvbiBNQUM4MDIxMVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy02OS1cXHRoZWxwXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnOjcwOlxcdCAgVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgc3VwcG9ydHMgdGhlIERWTSBmaXJtd2FyZS4gVGhlIGxpc3RcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNzEtXFx0ICBvZiB0aGUgZGV2aWNlcyB0aGF0IHVzZSB0aGlzIGZpcm13YXJlIGlzIGF2YWlsYWJsZSBoZXJlOlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTk1PWNvbmZpZyBJV0xXSUZJX09QTU9ERV9NT0RVTEFSXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk2LVxcdGJvb2xcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTc6XFx0ZGVmYXVsdCB5IGlmIElXTERWTT1tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk4LVxcdGRlZmF1bHQgeSBpZiBJV0xNVk09bVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEwMS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTAyOmNvbW1lbnQgXFxcIldBUk5JTkc6IGl3bHdpZmkgaXMgdXNlbGVzcyB3aXRob3V0IElXTERWTSBvciBJV0xNVk0gb3IgSVdMTUxEXFxcIlxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDM6XFx0ZGVwZW5kcyBvbiBJV0xEVk09biBcXHUwMDI2XFx1MDAyNiBJV0xNVk09biBcXHUwMDI2XFx1MDAyNiBJV0xNTEQ9blxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0xMDQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI0OjU0LjgyOTM0MTE2NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTc5OTMyNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgVmFsdWUgb2YgRnV6emluZyBhIE1lbW9yeSBMZWFrIEZpeCoqXG5cbk9rYXksIHNvIHRoZSBpc3N1ZSBjZW50ZXJzIGFyb3VuZCB0aGUgYElXTERWTWAgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyB3b3J0aCB0aGUgZWZmb3J0IHRvIGZ1enogdGhpcyBtZW1vcnkgbGVhayBmaXguIEl0J3MgaW4gdGhlIGVycm9yIGhhbmRsaW5nIHBhdGggb2YgYSBkcml2ZXIncyBwcm9iZSBvciBzdGFydCBmdW5jdGlvbiwgd2hpY2ggbWVhbnMgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHJlbGF0ZWQgdG8gZXJyb3IgY29uZGl0aW9ucy4gVGhhdCdzIGdvb2QgdG8gY29uc2lkZXIgZm9yIGZ1enppbmcuXG5cbk15IHByaW1hcnkgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIHNwZWNpZmljIGVycm9yIHBhdGggaXMgZXZlbiByZWFjaGFibGUuIENhbiBJIHRyaWdnZXIgaXQ/IE5vdywgdGhpbmtpbmcgYWJvdXQgbXkgdGVzdGluZyB0b29sYm94LCBJIHJlbWVtYmVyIGBzeXprYWxsZXJgIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBgc3l6X3BjaV9kZXZpY2VfYWRkYC4gUG90ZW50aWFsbHksIHRoYXQgY291bGQgYmUgYSB3YXkgaW4uXG5cbkJ1dCBmaXJzdCwgYSBjcnVjaWFsIHBvaW50OiBkb2VzIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBmdW5jdGlvbiBldmVuIGdldCBjYWxsZWQgaW4gdGhpcyBzY2VuYXJpbz8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGJlZm9yZSBpbnZlc3RpbmcgYW55IHRpbWUgaW4gY3JhZnRpbmcgZnV6emluZyBzdHJhdGVnaWVzLiBJJ2xsIGNoZWNrIHRoZSBjYWxsIGdyYXBoIGZvciBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YC4gTGV0J3Mgc2VlIHdobydzIGNhbGxpbmcgaXQuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5MTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTkuODA5Mjc2MjVaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyNzAyNzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml3bF9kdm1fb3BzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0xMzY9c3RhdGljIGNvbnN0IHN0cnVjdCBpd2xfaGNtZF9hcnIgaXdsX2R2bV9ncm91cHNbXSA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0xMzktXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jOjE0MDpzdGF0aWMgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyBpd2xfZHZtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTQxLVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jPTEyMzM9c3RhdGljIHN0cnVjdCBpd2xfb3BfbW9kZSAqaXdsX29wX21vZGVfZHZtX3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9kdm0vbWFpbi5jLTEyNjMtXFx0b3BfbW9kZSA9IGh3LVxcdTAwM2Vwcml2O1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoxMjY0OlxcdG9wX21vZGUtXFx1MDAzZW9wcyA9IFxcdTAwMjZpd2xfZHZtX29wcztcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMTI2NS1cXHRwcml2ID0gSVdMX09QX01PREVfR0VUX0RWTShvcF9tb2RlKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTI0PXN0YXRpYyBib29sIGl3bF9zZXRfaHdfcmZraWxsX3N0YXRlKHN0cnVjdCBpd2xfb3BfbW9kZSAqb3BfbW9kZSwgYm9vbCBzdGF0ZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM3LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYzoyMTM4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzIGl3bF9kdm1fb3BzID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTM5LVxcdC5zdGFydCA9IGl3bF9vcF9tb2RlX2R2bV9zdGFydCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTU3PXN0YXRpYyBpbnQgX19pbml0IGl3bF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjE2ODpcXHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFxcXCJpd2xkdm1cXFwiLCBcXHUwMDI2aXdsX2R2bV9vcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVxcdGlmIChyZXQpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjQ6NTkuODcxOTg0OTc5WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NDY4NDM3MjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGBpd2x3aWZpYCBkcml2ZXIgYW5kIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW5pdGlhbCBzZXR1cC4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIGhvdyB0aGUgb3BlcmF0aW5nIG1vZGUgaXMgcmVnaXN0ZXJlZC4gSSBzZWUgYGl3bF9vcG1vZGVfcmVnaXN0ZXJgIG1lbnRpb25lZCBhbmQgdGhhdCBmZWVscyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gVGhlIGNvbnRleHQgc3VnZ2VzdHMgdGhhdCB0aGUgYHN0YXJ0YCBmdW5jdGlvbiBpcyB0aGUgZW50cnkgcG9pbnQsIGludm9rZWQgYnkgdGhlIGBpd2x3aWZpYCBjb3JlIHdoZW4gYSBjb21wYXRpYmxlIGRldmljZSBpcyBkZXRlY3RlZCBkdXJpbmcgcHJvYmluZy4gTXkgaW5zdGluY3QgaXMgdG8gbm93IGRpdmUgZGlyZWN0bHkgaW50byB0aGUgYGl3bF9vcG1vZGVfcmVnaXN0ZXJgIGZ1bmN0aW9uIHdpdGhpbiB0aGUgYGl3bHdpZmlgIGNvcmUgY29kZS4gTGV0J3Mgc2VlIGhvdyB0aGluZ3MgYXJlIGluaXRpYWxpemVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzOCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjA0LjUxODgzMTQyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NjYyMTc3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfb3Btb2RlX3JlZ2lzdGVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYz0yMTU3PXN0YXRpYyBpbnQgX19pbml0IGl3bF9pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmMtMjE2Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2R2bS9tYWluLmM6MjE2ODpcXHRyZXQgPSBpd2xfb3Btb2RlX3JlZ2lzdGVyKFxcXCJpd2xkdm1cXFwiLCBcXHUwMDI2aXdsX2R2bV9vcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvZHZtL21haW4uYy0yMTY5LVxcdGlmIChyZXQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTIwNDk9SVdMX0VYUE9SVF9TWU1CT0woaXdsd2lmaV9tb2RfcGFyYW1zKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0yMDUwLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjIwNTE6aW50IGl3bF9vcG1vZGVfcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgc3RydWN0IGl3bF9vcF9tb2RlX29wcyAqb3BzKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTIwNTIte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjA3Mi19XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM6MjA3MzpJV0xfRVhQT1JUX1NZTUJPTChpd2xfb3Btb2RlX3JlZ2lzdGVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0yMDc0LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oPTE1Mz1zdHJ1Y3QgaXdsX29wX21vZGVfb3BzIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLW9wLW1vZGUuaC0xODEtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtb3AtbW9kZS5oOjE4MjppbnQgaXdsX29wbW9kZV9yZWdpc3Rlcihjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgaXdsX29wX21vZGVfb3BzICpvcHMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLW9wLW1vZGUuaC0xODMtdm9pZCBpd2xfb3Btb2RlX2RlcmVnaXN0ZXIoY29uc3QgY2hhciAqbmFtZSk7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYz0zOD1zdGF0aWMgaW50IF9faW5pdCBpd2xfbWxkX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL21sZC9tbGQuYy0zOS17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvbWxkLmM6NDA6XFx0aW50IHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXFxcIml3bG1sZFxcXCIsIFxcdTAwMjZpd2xfbWxkX29wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tbGQvbWxkLmMtNDEtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL212bS9vcHMuYz01Mz1zdGF0aWMgaW50IF9faW5pdCBpd2xfbXZtX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jLTYyLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvbXZtL29wcy5jOjYzOlxcdHJldCA9IGl3bF9vcG1vZGVfcmVnaXN0ZXIoXFxcIml3bG12bVxcXCIsIFxcdTAwMjZpd2xfbXZtX29wcyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9tdm0vb3BzLmMtNjQtXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNTowNC41ODU0NTg3NDlaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM4NDA2MDQ3NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBGdW5jdGlvbjogQSBXb3J0aHdoaWxlIEVuZGVhdm9yPyoqXG5cbk9rYXksIHNvIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGlzIHBvdGVudGlhbGx5IHJlYWNoYWJsZSBpZiB3ZSd2ZSBnb3QgYW4gYGl3bHdpZmlgIFBDSSBkZXZpY2UgdGhhdCBuZWVkcyBEVk0gZmlybXdhcmUuIFN5emthbGxlciBjYW4gZW11bGF0ZSBQQ0kgZGV2aWNlcywgcmlnaHQ/IFRoYXQncyBpbnRlcmVzdGluZywgYnV0IGlzIHRoaXMgYSB3b3J0aHdoaWxlIHRhcmdldCBmb3IgZnV6emluZz8gQWJzb2x1dGVseSwgaXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBzcGVjaWZpY2FsbHkgYSBtZW1vcnkgbGVhayBmaXggd2l0aGluIGEgZHJpdmVyLiBHb29kIGNhbmRpZGF0ZS5cblxuSG9sZCBvbiwgSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnN0cnVjdGlvbnMgYWdhaW4uLi4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuLi5cIiBPa2F5LCBzbyB0aGUgcXVlc3Rpb24gYmVjb21lczogaXMgYGl3bHdpZmlgIHJlYWNoYWJsZSB3aXRoaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuWWVzISBTeXprYWxsZXIgaGFzIGEgUENJIGZ1enplciB0aGF0IGluamVjdHMgUENJIGRldmljZXMgdXNpbmcgYHN5el9wY2lfZGV2aWNlX2FkZGAuIEFoYSEgQW5kIHdhaXQgYSBzZWNvbmQsIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgYWN0dWFsbHkgdHJpZ2dlcnMgdGhvc2UgcHJvYmUgZnVuY3Rpb25zIG9mIFBDSSBkcml2ZXJzLiBUaGF0J3Mga2V5LiBTbywgbGV0J3MgY29uZmlybS4gV2UgbmVlZCB0byBhc2NlcnRhaW4gaWYgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAgY2FuIGluZGVlZCBiZSByZWFjaGVkIHZpYSBQQ0kgcHJvYmUuIFNlZW1zIHdlIHNob3VsZCBnbyBhaGVhZCBhbmQgY2hlY2shXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMDA0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjA5Ljk2OTUyMjA4NloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ5OTk1MzQ3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpd2xfcGNpX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTMyLSAqIFRoaXMgY29tcG9uZW50IGltcGxlbWVudHMgdGhlIHN5c3RlbSBmbG93cyBzdWNoIGFzIGJ1cyBlbnVtZXJhdGlvbiwgYnVzXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6MzM6ICogcmVtb3ZhbC4gQnVzIGRlcGVuZGVudCBwYXJ0cyBvZiBzeXN0ZW0gZmxvd3MgKHN1Y2ggYXMgaXdsX3BjaV9wcm9iZSkgYXJlIGluXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtMzQtICogYnVzIHNwZWNpZmljIGZpbGVzICh0cmFuc3BvcnQgZmlsZXMpLiBUaGlzIGlzIHRoZSBjb2RlIHRoYXQgaXMgY29tbW9uIGFtb25nXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM9MTE0Nz1FWFBPUlRfU1lNQk9MX0lGX0lXTFdJRklfS1VOSVQoaXdsX3BjaV9maW5kX2Rldl9pbmZvKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmMtMTE0OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL3BjaWUvZHJ2LmM6MTE0OTpzdGF0aWMgaW50IGl3bF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTExNTAte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jPTEzMzg9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGl3bF9wY2lfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTEzNDAtXFx0LmlkX3RhYmxlID0gaXdsX2h3X2NhcmRfaWRzLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvcGNpZS9kcnYuYzoxMzQxOlxcdC5wcm9iZSA9IGl3bF9wY2lfcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2Rydi5jLTEzNDItXFx0LnJlbW92ZSA9IGl3bF9wY2lfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNToxMS40Njk0Nzk4NDhaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIzOTQ4MTAxOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpcm1pbmcgdGhlIEludGVsIFdpcmVsZXNzIERyaXZlciBJbml0aWFsaXphdGlvbiBTZXF1ZW5jZSoqXG5cblJpZ2h0LCBzbyBgaXdsX3BjaV9wcm9iZWAg4oCTIHRoYXQncyB0aGUgUENJIHByb2JlIGZ1bmN0aW9uIGZvciB0aGUgSW50ZWwgd2lyZWxlc3MgZHJpdmVyLCBpc24ndCBpdD8gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGl0J3MgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBicmluZ2luZyB1cCB0aGUgZGV2aWNlLiBJdCBzaG91bGQgdGhlbiBraWNrIG9mZiB0aGUgZHJpdmVyIGluaXRpYWxpemF0aW9uIGJ5IGNhbGxpbmcgc29tZXRoaW5nIGxpa2UgYGl3bF9kcnZfc3RhcnRgLCBvciBhIGZ1bmN0aW9uIHdpdGggYSBzaW1pbGFyIHJvbGUuIEFuZCB0aGF0J3Mgd2hlcmUgdGhlIG9wbW9kZS1zcGVjaWZpYyBgc3RhcnRgIGZ1bmN0aW9uIGdldHMgaW52b2tlZC4gSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBvZiB0aGlzIHNlcXVlbmNlLCBhcyB0aGVyZSBjYW4gYmUgbnVhbmNlcyBkZXBlbmRpbmcgb24gZmlybXdhcmUsIGhhcmR3YXJlIHJldmlzaW9uLCBhbmQgbW9kdWxlIHBhcmFtZXRlcnMuIEknZCBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoZSBjb2RlIHBhdGggdG8gYmUgY2VydGFpbi4gSnVzdCBtYWtpbmcgc3VyZSBJJ3ZlIGdvdCB0aGUgY29ycmVjdCBtZW50YWwgbWFwIG9mIHRoZSBpbml0aWFsaXphdGlvbiBmbG93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk3OSwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjE1LjcwODk2MzgyN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MTMzMjQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIml3bF9kcnZfc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmM9MTYzMj1zdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LCB2b2lkICpjb250ZXh0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMTk0Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoxOTQ4OnN0cnVjdCBpd2xfZHJ2ICppd2xfZHJ2X3N0YXJ0KHN0cnVjdCBpd2xfdHJhbnMgKnRyYW5zKVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE5NDkte1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNDctICogNSkgVGhlIGJ1cyBzcGVjaWZpYyBjb21wb25lbnQgY2FsbHMgdG8gdGhlIGRydiBidXMgYWdub3N0aWMgcGFydFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ4OiAqICAgIChpd2xfZHJ2X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01MC0gKiA3KSBpd2xfcmVxX2Z3X2NhbGxiYWNrIHBhcnNlcyB0aGUgZncgZmlsZVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg9NTY9c3RydWN0IGl3bF9yZl9jZmc7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNTctLyoqXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6NTg6ICogaXdsX2Rydl9zdGFydCAtIHN0YXJ0IHRoZSBkcnZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaC01OS0gKlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNjctICovXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2Lmg6Njg6c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTY5LVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jPTQyMzI9aW50IGl3bF9wY2lfZ2VuMV8yX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjctXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jOjQzNjg6XFx0aXdsX3RyYW5zLVxcdTAwM2VkcnYgPSBpd2xfZHJ2X3N0YXJ0KGl3bF90cmFucyk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9wY2llL2dlbjFfMi90cmFucy5jLTQzNjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjE2LjEzNDEwMjk1OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjM5NTI0NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2Vzc2luZyBhcyBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIExvYWRpbmcgUHJvY2VzcyoqXG5cblJpZ2h0LCBgaXdsX2Rydl9zdGFydGAgaXMgd2hlcmUgdGhlIHBhcnR5IGJlZ2lucywga2lja2luZyBvZmYgdGhlIGFzeW5jaHJvbm91cyBmaXJtd2FyZSBmZXRjaC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIG5hdHVyYWxseSwgaG93IHRoYXQgYXN5bmNocm9ub3VzIG9wZXJhdGlvbiB3aWxsIHVsdGltYXRlbHkgcmVzb2x2ZS4gVGhlIG5leHQga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlzIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYC4gSXQncyBhbG1vc3QgY2VydGFpbiB0aGlzIGlzIHRoZSBjcml0aWNhbCBjYWxsYmFjayBmdW5jdGlvbiB0aGF0IGhhbmRsZXMgdGhlIHJlc3VsdCBvZiB0aGF0IGZpcm13YXJlIHJldHJpZXZhbC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gdGhvcm91Z2hseSBleGFtaW5lIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgYm90aCBzdWNjZXNzZnVsIGZpcm13YXJlIGxvYWRpbmcgYW5kLCBwZXJoYXBzIGV2ZW4gbW9yZSBpbXBvcnRhbnRseSwgZGVhbHMgd2l0aCBhbnkgcG90ZW50aWFsIGVycm9ycyB0aGF0IG1pZ2h0IGFyaXNlIGR1cmluZyB0aGUgcHJvY2Vzcy4gSSB3YW50IHRvIHNlZSBob3cgaXQgaGFuZGxlcyB0aGluZ3MgbGlrZSByZXRyaWVzLCBlcnJvciByZXBvcnRpbmcsIGFuZCB3aGF0IHJlY292ZXJ5IG1lY2hhbmlzbXMgYXJlIGluIHBsYWNlIGlmIHRoZSBmaXJtd2FyZSBmYWlscyB0byBsb2FkLiBUaGlzIGlzIHdoZXJlIEknbGwgZ2V0IHRoZSByZWFsIG1lYXQgb2YgdGhlIGRyaXZlcidzIHJvYnVzdG5lc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0OTQxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MjEuNzczNjMwODYxWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MTU5MzIzNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXdsX3JlcV9md19jYWxsYmFja1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYz0yOTM9SVdMX0VYUE9SVF9TWU1CT0woaXdsX2Rydl9nZXRfZnduYW1lX3ByZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMjk0LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjI5NTpzdGF0aWMgdm9pZCBpd2xfcmVxX2Z3X2NhbGxiYWNrKGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdWNvZGVfcmF3LFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTI5Ni1cXHRcXHRcXHRcXHR2b2lkICpjb250ZXh0KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTMyNT1zdGF0aWMgaW50IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKHN0cnVjdCBpd2xfZHJ2ICpkcnYsIGJvb2wgZmlyc3QpXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0zODUtXFx0XFx0XFx0XFx0ICAgICAgIGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzozODY6XFx0XFx0XFx0XFx0ICAgICAgIEdGUF9LRVJORUwsIGRydiwgaXdsX3JlcV9md19jYWxsYmFjayk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmMtMzg3LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jPTE2MDk9c3RhdGljIHZvaWQgX2l3bF9vcF9tb2RlX3N0b3Aoc3RydWN0IGl3bF9kcnYgKmRydilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jLTE2MjYtLypcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYzoxNjI3OiAqIGl3bF9yZXFfZndfY2FsbGJhY2sgLSBjYWxsYmFjayB3aGVuIGZpcm13YXJlIHdhcyBsb2FkZWRcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjI4LSAqXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjMxLSAqL1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jOjE2MzI6c3RhdGljIHZvaWQgaXdsX3JlcV9md19jYWxsYmFjayhjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVjb2RlX3Jhdywgdm9pZCAqY29udGV4dClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuYy0xNjMzLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oLTQ4LSAqICAgIChpd2xfZHJ2X3N0YXJ0KVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjQ5OiAqIDYpIGl3bF9kcnZfc3RhcnQgZmV0Y2hlcyB0aGUgZncgQVNZTkMsIGl3bF9yZXFfZndfY2FsbGJhY2tcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL2l3bC1kcnYuaDo1MDogKiA3KSBpd2xfcmVxX2Z3X2NhbGxiYWNrIHBhcnNlcyB0aGUgZncgZmlsZVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5oOjUxOiAqIDgpIGl3bF9yZXFfZndfY2FsbGJhY2sgc3RhcnRzIHRoZSB3aWZpIGltcGxlbWVudGF0aW9uIHRvIG1hdGNoZXMgdGhlIGZ3XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmgtNTItICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjIyLjE4OTU2ODUyM1oiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDMzOTY5Njk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93biBtZW50YWwgcHJvY2VzcywgZ2l2ZW4gbXkgZXhwZXJ0aXNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBXaUZpIEluaXRpYWxpemF0aW9uKipcblxuUmlnaHQsIHNvIGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCBpcyB0aGUgY3J1Y2lhbCBlbnRyeSBwb2ludCwgdGhlIHRoaW5nIHRoYXQgYWN0dWFsbHkga2lja3Mgb2ZmIHRoZSBXaUZpIGltcGxlbWVudGF0aW9uLCBvciB3aGF0IHRoZSBjb2RlIGNhbGxzIHRoZSBcIm9wbW9kZS5cIiBUaGF0J3MgdGhlIHBsYWNlIHdoZXJlIHRoZSByYWRpbyBpbnRlcmZhY2UgZ2V0cyBpbml0aWFsaXplZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzdGFydHVwIHNlcXVlbmNlLiBUaGUgbmF0dXJhbCBuZXh0IHN0ZXAgaXMgdG8gdHJhY2UgaG93IGBpd2xfcmVxX2Z3X2NhbGxiYWNrYCBpbnRlcmFjdHMgd2l0aCB0aGUgc3BlY2lmaWMgYHN0YXJ0YCBmdW5jdGlvbiBhc3NvY2lhdGVkIHdpdGggdGhlIGNob3NlbiBvcG1vZGUuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgY29kZSBvZiBgaXdsX3JlcV9md19jYWxsYmFja2AgaXRzZWxmLiBJIG5lZWQgdG8gc2VlIGV4YWN0bHkgKmhvdyogaXQgY2FsbHMgdGhlIGBzdGFydGAgZnVuY3Rpb24gb2YgdGhlIG9wbW9kZS4gSXMgaXQgYSBkaXJlY3QgZnVuY3Rpb24gY2FsbD8gSXMgdGhlcmUgYW4gaW5kaXJlY3Rpb24gdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXI/IEFyZSB0aGVyZSBhbnkgcHJlY29uZGl0aW9ucyBpdCBjaGVja3MgZmlyc3Q/IEtub3dpbmcgdGhlIGV4ZWN1dGlvbiBwYXRoIGlzIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLiBJIHN1c3BlY3QgdGhlcmUgbWF5IGJlIG1vcmUgdGhhbiBvbmUgY2FzZSBmb3IgaG93IHRoaXMgZnVuY3Rpb24gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1OTU3LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MjkuMjIzNTQwNzE5WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjkxMzAwOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BfbW9kZV9vcHMtXFx1MDAzZXN0YXJ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNToyOS4zMDA0NjAyMzdaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTAxOTE3NjI5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIEZpcm13YXJlIFJlcXVlc3QgQ2FsbGJhY2sqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgaGFwcGVuaW5nIHdpdGggdGhlc2UgZmlybXdhcmUgcmVxdWVzdHMgaW4gdGhlIEludGVsIHdpcmVsZXNzIGRyaXZlci4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgaXdsX3JlcV9md19jYWxsYmFja2Agd2l0aGluIGBpd2wtZHJ2LmNgLiBJIGV4cGVjdCB0aGlzIHRvIGJlIHRoZSBjb3JlIGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBhc3luY2hyb25vdXMgcmVzdWx0cyBvZiBmaXJtd2FyZSBsb2Fkcy4gSSdsbCBuZWVkIHRvIHNlZSBob3cgaXQncyBpbnRlZ3JhdGVkIHdpdGggdGhlIGxhcmdlciBpd2wgZHJpdmVyIGFyY2hpdGVjdHVyZSDigJMgc3BlY2lmaWNhbGx5LCBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlcXVlc3QgcXVldWUsIHRoZSBkZXZpY2Ugc3RhdGUsIGFuZCB0aGUgZXJyb3IgaGFuZGxpbmcgbWVjaGFuaXNtcy4gSSdsbCBiZSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGVkZ2UgY2FzZXMgcmVsYXRlZCB0byBmaXJtd2FyZSBsb2FkaW5nIGZhaWx1cmVzIG9yIGRlbGF5cy4gSSB3aWxsIHdhbnQgdG8gcXVpY2tseSB1bmRlcnN0YW5kIHdoZXJlIHRoZSBjYWxsYmFjayBpcyBiZWluZyBzY2hlZHVsZWQgZnJvbS4gSSdtIGFsc28gYW50aWNpcGF0aW5nIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgYXJvdW5kIHJldHJpZXMsIHRpbWVvdXRzLCBhbmQgcG9zc2libHkgZmFsbGJhY2sgbWVjaGFuaXNtcyBpZiBhIHNwZWNpZmljIGZpcm13YXJlIHZlcnNpb24gZmFpbHMgdG8gbG9hZC4gSSBuZWVkIHRvIGdldCB0aGUgYmlnZ2VyIHBpY3R1cmUgb2YgdGhlIGZsb3cgdG8gYXNzZXNzIGlmIHRoZXJlIGFyZSBvcHBvcnR1bml0aWVzIHRvIG9wdGltaXplLCBkZWJ1Zywgb3IgaW1wcm92ZSByb2J1c3RuZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjI3OSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjM0LjMxOTYzODY5MVoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9pd2wtZHJ2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTgwMCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjE4MDA6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfRldfTk9USUZdID1cXG4xODAxOlxcdFxcdFxcdHNpemVvZihzdHJ1Y3QgaXdsX2Z3X2RiZ190cmlnZ2VyX2NtZCk7XFxuMTgwMjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9NTE1FXSA9XFxuMTgwMzpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9tbG1lKTtcXG4xODA0OlxcdFxcdHRyaWdnZXJfdGx2X3N6W0ZXX0RCR19UUklHR0VSX1NUQVRTXSA9XFxuMTgwNTpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9zdGF0cyk7XFxuMTgwNjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9SU1NJXSA9XFxuMTgwNzpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl9sb3dfcnNzaSk7XFxuMTgwODpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9UWFFfVElNRVJTXSA9XFxuMTgwOTpcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGl3bF9md19kYmdfdHJpZ2dlcl90eHFfdGltZXIpO1xcbjE4MTA6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfVElNRV9FVkVOVF0gPVxcbjE4MTE6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGltZV9ldmVudCk7XFxuMTgxMjpcXHRcXHR0cmlnZ2VyX3Rsdl9zeltGV19EQkdfVFJJR0dFUl9CQV0gPVxcbjE4MTM6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfYmEpO1xcbjE4MTQ6XFx0XFx0dHJpZ2dlcl90bHZfc3pbRldfREJHX1RSSUdHRVJfVERMU10gPVxcbjE4MTU6XFx0XFx0XFx0c2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGRscyk7XFxuMTgxNjpcXHRcXG4xODE3OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKGRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2KTsgaSsrKSB7XFxuMTgxODpcXHRcXHRcXHRpZiAocGllY2VzLVxcdTAwM2VkYmdfdHJpZ2dlcl90bHZbaV0pIHtcXG4xODE5OlxcdFxcdFxcdFxcdC8qXFxuMTgyMDpcXHRcXHRcXHRcXHQgKiBJZiB0aGUgdHJpZ2dlciBpc24ndCBsb25nIGVub3VnaCwgV0FSTiBhbmQgZXhpdC5cXG4xODIxOlxcdFxcdFxcdFxcdCAqIFNvbWVvbmUgaXMgdHJ5aW5nIHRvIGRlYnVnIHNvbWV0aGluZyBhbmQgaGUgd29uJ3RcXG4xODIyOlxcdFxcdFxcdFxcdCAqIGJlIGFibGUgdG8gY2F0Y2ggdGhlIGJ1ZyBoZSBpcyB0cnlpbmcgdG8gY2hhc2UuXFxuMTgyMzpcXHRcXHRcXHRcXHQgKiBXZSdkIGJldHRlciBiZSBub2lzeSB0byBiZSBzdXJlIGhlIGtub3dzIHdoYXQnc1xcbjE4MjQ6XFx0XFx0XFx0XFx0ICogZ29pbmcgb24uXFxuMTgyNTpcXHRcXHRcXHRcXHQgKi9cXG4xODI2OlxcdFxcdFxcdFxcdGlmIChXQVJOX09OKHBpZWNlcy1cXHUwMDNlZGJnX3RyaWdnZXJfdGx2X2xlbltpXSBcXHUwMDNjXFxuMTgyNzpcXHRcXHRcXHRcXHRcXHQgICAgKHRyaWdnZXJfdGx2X3N6W2ldICtcXG4xODI4OlxcdFxcdFxcdFxcdFxcdCAgICAgc2l6ZW9mKHN0cnVjdCBpd2xfZndfZGJnX3RyaWdnZXJfdGx2KSkpKVxcbjE4Mjk6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9mdztcXG4xODMwOlxcdFxcdFxcdFxcdGRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2X2xlbltpXSA9XFxuMTgzMTpcXHRcXHRcXHRcXHRcXHRwaWVjZXMtXFx1MDAzZWRiZ190cmlnZ2VyX3Rsdl9sZW5baV07XFxuMTgzMjpcXHRcXHRcXHRcXHRkcnYtXFx1MDAzZWZ3LmRiZy50cmlnZ2VyX3RsdltpXSA9XFxuMTgzMzpcXHRcXHRcXHRcXHRcXHRrbWVtZHVwKHBpZWNlcy1cXHUwMDNlZGJnX3RyaWdnZXJfdGx2W2ldLFxcbjE4MzQ6XFx0XFx0XFx0XFx0XFx0XFx0ZHJ2LVxcdTAwM2Vmdy5kYmcudHJpZ2dlcl90bHZfbGVuW2ldLFxcbjE4MzU6XFx0XFx0XFx0XFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuMTgzNjpcXHRcXHRcXHRcXHRpZiAoIWRydi1cXHUwMDNlZncuZGJnLnRyaWdnZXJfdGx2W2ldKVxcbjE4Mzc6XFx0XFx0XFx0XFx0XFx0Z290byBvdXRfZnJlZV9mdztcXG4xODM4OlxcdFxcdFxcdH1cXG4xODM5OlxcdFxcdH1cXG4xODQwOlxcdFxcbjE4NDE6XFx0XFx0LyogTm93IHRoYXQgd2UgY2FuIG5vIGxvbmdlciBmYWlsLCBjb3B5IGluZm9ybWF0aW9uICovXFxuMTg0MjpcXHRcXG4xODQzOlxcdFxcdGRydi1cXHUwMDNlZncuZGJnLm1lbV90bHYgPSBwaWVjZXMtXFx1MDAzZWRiZ19tZW1fdGx2O1xcbjE4NDQ6XFx0XFx0cGllY2VzLVxcdTAwM2VkYmdfbWVtX3RsdiA9IE5VTEw7XFxuMTg0NTpcXHRcXHRkcnYtXFx1MDAzZWZ3LmRiZy5uX21lbV90bHYgPSBwaWVjZXMtXFx1MDAzZW5fbWVtX3RsdjtcXG4xODQ2OlxcdFxcbjE4NDc6XFx0XFx0LypcXG4xODQ4OlxcdFxcdCAqIFRoZSAoc2l6ZSAtIDE2KSAvIDEyIGZvcm11bGEgaXMgYmFzZWQgb24gdGhlIGluZm9ybWF0aW9uIHJlY29yZGVkXFxuMTg0OTpcXHRcXHQgKiBmb3IgZWFjaCBldmVudCwgd2hpY2ggaXMgb2YgbW9kZSAxIChpbmNsdWRpbmcgdGltZXN0YW1wKSBmb3IgYWxsXFxuMTg1MDpcXHRcXHQgKiBuZXcgbWljcm9jb2RlcyB0aGF0IGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbi5cXG4xODUxOlxcdFxcdCAqL1xcbjE4NTI6XFx0XFx0ZnctXFx1MDAzZWluaXRfZXZ0bG9nX3B0ciA9IHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfcHRyO1xcbjE4NTM6XFx0XFx0aWYgKHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSlcXG4xODU0OlxcdFxcdFxcdGZ3LVxcdTAwM2Vpbml0X2V2dGxvZ19zaXplID0gKHBpZWNlcy1cXHUwMDNlaW5pdF9ldnRsb2dfc2l6ZSAtIDE2KS8xMjtcXG4xODU1OlxcdFxcdGVsc2VcXG4xODU2OlxcdFxcdFxcdGZ3LVxcdTAwM2Vpbml0X2V2dGxvZ19zaXplID1cXG4xODU3OlxcdFxcdFxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZW1hY19jZmctXFx1MDAzZWJhc2UtXFx1MDAzZW1heF9ldmVudF9sb2dfc2l6ZTtcXG4xODU4OlxcdFxcdGZ3LVxcdTAwM2Vpbml0X2VycmxvZ19wdHIgPSBwaWVjZXMtXFx1MDAzZWluaXRfZXJybG9nX3B0cjtcXG4xODU5OlxcdFxcdGZ3LVxcdTAwM2VpbnN0X2V2dGxvZ19wdHIgPSBwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3B0cjtcXG4xODYwOlxcdFxcdGlmIChwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3NpemUpXFxuMTg2MTpcXHRcXHRcXHRmdy1cXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9IChwaWVjZXMtXFx1MDAzZWluc3RfZXZ0bG9nX3NpemUgLSAxNikvMTI7XFxuMTg2MjpcXHRcXHRlbHNlXFxuMTg2MzpcXHRcXHRcXHRmdy1cXHUwMDNlaW5zdF9ldnRsb2dfc2l6ZSA9XFxuMTg2NDpcXHRcXHRcXHRcXHRkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VtYWNfY2ZnLVxcdTAwM2ViYXNlLVxcdTAwM2VtYXhfZXZlbnRfbG9nX3NpemU7XFxuMTg2NTpcXHRcXHRmdy1cXHUwMDNlaW5zdF9lcnJsb2dfcHRyID0gcGllY2VzLVxcdTAwM2VpbnN0X2VycmxvZ19wdHI7XFxuMTg2NjpcXHRcXG4xODY3OlxcdFxcdC8qXFxuMTg2ODpcXHRcXHQgKiBmaWd1cmUgb3V0IHRoZSBvZmZzZXQgb2YgY2hhaW4gbm9pc2UgcmVzZXQgYW5kIGdhaW4gY29tbWFuZHNcXG4xODY5OlxcdFxcdCAqIGJhc2Ugb24gdGhlIHNpemUgb2Ygc3RhbmRhcmQgcGh5IGNhbGlicmF0aW9uIGNvbW1hbmRzIHRhYmxlIHNpemVcXG4xODcwOlxcdFxcdCAqL1xcbjE4NzE6XFx0XFx0aWYgKGZ3LVxcdTAwM2V1Y29kZV9jYXBhLnN0YW5kYXJkX3BoeV9jYWxpYnJhdGlvbl9zaXplIFxcdTAwM2VcXG4xODcyOlxcdFxcdCAgICBJV0xfTUFYX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkUpXFxuMTg3MzpcXHRcXHRcXHRmdy1cXHUwMDNldWNvZGVfY2FwYS5zdGFuZGFyZF9waHlfY2FsaWJyYXRpb25fc2l6ZSA9XFxuMTg3NDpcXHRcXHRcXHRcXHRJV0xfTUFYX1NUQU5EQVJEX1BIWV9DQUxJQlJBVEVfVEJMX1NJWkU7XFxuMTg3NTpcXHRcXG4xODc2OlxcdFxcdC8qIFdlIGhhdmUgb3VyIGNvcGllcyBub3csIGFsbG93IE9TIHJlbGVhc2UgaXRzIGNvcGllcyAqL1xcbjE4Nzc6XFx0XFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xcbjE4Nzg6XFx0XFxuMTg3OTpcXHRcXHRpd2xfZGJnX3Rsdl9sb2FkX2JpbihkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VkZXYsIGRydi1cXHUwMDNldHJhbnMpO1xcbjE4ODA6XFx0XFxuMTg4MTpcXHRcXHRtdXRleF9sb2NrKFxcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xcbjE4ODI6XFx0XFx0c3dpdGNoIChmdy1cXHUwMDNldHlwZSkge1xcbjE4ODM6XFx0XFx0Y2FzZSBJV0xfRldfRFZNOlxcbjE4ODQ6XFx0XFx0XFx0b3AgPSBcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVbRFZNX09QX01PREVdO1xcbjE4ODU6XFx0XFx0XFx0YnJlYWs7XFxuMTg4NjpcXHRcXHRkZWZhdWx0OlxcbjE4ODc6XFx0XFx0XFx0V0FSTigxLCBcXFwiSW52YWxpZCBmdyB0eXBlICVkXFxcXG5cXFwiLCBmdy1cXHUwMDNldHlwZSk7XFxuMTg4ODpcXHRcXHRcXHRmYWxsdGhyb3VnaDtcXG4xODg5OlxcdFxcdGNhc2UgSVdMX0ZXX01WTTpcXG4xODkwOlxcdFxcdFxcdG9wID0gXFx1MDAyNml3bHdpZmlfb3Btb2RlX3RhYmxlW01WTV9PUF9NT0RFXTtcXG4xODkxOlxcdFxcdFxcdGJyZWFrO1xcbjE4OTI6XFx0XFx0fVxcbjE4OTM6XFx0XFxuMTg5NDpcXHQjaWYgSVNfRU5BQkxFRChDT05GSUdfSVdMTUxEKVxcbjE4OTU6XFx0XFx0aWYgKGl3bF9kcnZfaXNfd2lmaTdfc3VwcG9ydGVkKGRydi1cXHUwMDNldHJhbnMpKVxcbjE4OTY6XFx0XFx0XFx0b3AgPSBcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVbTUxEX09QX01PREVdO1xcbjE4OTc6XFx0I2VuZGlmXFxuMTg5ODpcXHRcXG4xODk5OlxcdFxcdElXTF9JTkZPKGRydiwgXFxcImxvYWRlZCBmaXJtd2FyZSB2ZXJzaW9uICVzIG9wX21vZGUgJXNcXFxcblxcXCIsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjM0LjMxOTgwNTEyMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTY5NDg5MzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBJJ20gcmVhZHkgdG8gZGl2ZSBpbi4gSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBiYXNlZCBvbiB0aGUgcHJvbXB0OlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudDogTmF2aWdhdGluZyB0aGUgVGV4dCoqXG5cbkFscmlnaHQsIHRoZSBkaXJlY3RpdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBzdW1tYXJpemUgdGhlIGZvbGxvd2luZyB0ZXh0IGluIGEgc3BlY2lmaWMgd2F5LCBtaW1pY2tpbmcgbXkgb3duIHRob3VnaHQgcHJvY2VzcyBhcyBJIHJlYWQgaXQuIEZpcnN0LCBJIGhhdmUgdG8gbWVudGFsbHkgYXNzZXNzIHRoZSB0YXNrLiBJdCdzIG5vdCBqdXN0IGEgYmFzaWMgc3VtbWFyeTsgSSBuZWVkIHRvIHBvcnRyYXkgbXkgKmludGVybmFsIG1vbm9sb2d1ZSogYXMgSSBkaWdlc3QgdGhlIG1hdGVyaWFsLiBJIG5lZWQgdG8gZ2V0IHJlYWR5IHRvIHJlYWQgdGhlIG5leHQgMTAwIGxpbmVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODQzMSwiT3V0cHV0VG9rZW5zIjo0OCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MzcuNDg5Mjk2MzhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1OTExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvaXdsLWRydi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MDAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxOTAwOlxcdFxcdFxcdCBkcnYtXFx1MDAzZWZ3LmZ3X3ZlcnNpb24sIG9wLVxcdTAwM2VuYW1lKTtcXG4xOTAxOlxcdFxcbjE5MDI6XFx0XFx0LyogYWRkIHRoaXMgZGV2aWNlIHRvIHRoZSBsaXN0IG9mIGRldmljZXMgdXNpbmcgdGhpcyBvcF9tb2RlICovXFxuMTkwMzpcXHRcXHRsaXN0X2FkZF90YWlsKFxcdTAwMjZkcnYtXFx1MDAzZWxpc3QsIFxcdTAwMjZvcC1cXHUwMDNlZHJ2KTtcXG4xOTA0OlxcdFxcbjE5MDU6XFx0XFx0aWYgKG9wLVxcdTAwM2VvcHMpIHtcXG4xOTA2OlxcdFxcdFxcdGRydi1cXHUwMDNlb3BfbW9kZSA9IF9pd2xfb3BfbW9kZV9zdGFydChkcnYsIG9wKTtcXG4xOTA3OlxcdFxcbjE5MDg6XFx0XFx0XFx0aWYgKCFkcnYtXFx1MDAzZW9wX21vZGUpIHtcXG4xOTA5OlxcdFxcdFxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aXdsd2lmaV9vcG1vZGVfdGFibGVfbXR4KTtcXG4xOTEwOlxcdFxcdFxcdFxcdGdvdG8gb3V0X3VuYmluZDtcXG4xOTExOlxcdFxcdFxcdH1cXG4xOTEyOlxcdFxcdH0gZWxzZSB7XFxuMTkxMzpcXHRcXHRcXHRyZXF1ZXN0X21vZHVsZV9ub3dhaXQoXFxcIiVzXFxcIiwgb3AtXFx1MDAzZW5hbWUpO1xcbjE5MTQ6XFx0XFx0fVxcbjE5MTU6XFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpd2x3aWZpX29wbW9kZV90YWJsZV9tdHgpO1xcbjE5MTY6XFx0XFxuMTkxNzpcXHRcXHRjb21wbGV0ZShcXHUwMDI2ZHJ2LVxcdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcXG4xOTE4OlxcdFxcbjE5MTk6XFx0XFx0ZmFpbHVyZSA9IGZhbHNlO1xcbjE5MjA6XFx0XFx0Z290byBmcmVlO1xcbjE5MjE6XFx0XFxuMTkyMjpcXHQgdHJ5X2FnYWluOlxcbjE5MjM6XFx0XFx0LyogdHJ5IG5leHQsIGlmIGFueSAqL1xcbjE5MjQ6XFx0XFx0cmVsZWFzZV9maXJtd2FyZSh1Y29kZV9yYXcpO1xcbjE5MjU6XFx0XFx0aWYgKGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgZmFsc2UpKVxcbjE5MjY6XFx0XFx0XFx0Z290byBvdXRfdW5iaW5kO1xcbjE5Mjc6XFx0XFx0Z290byBmcmVlO1xcbjE5Mjg6XFx0XFxuMTkyOTpcXHQgb3V0X2ZyZWVfZnc6XFxuMTkzMDpcXHRcXHRyZWxlYXNlX2Zpcm13YXJlKHVjb2RlX3Jhdyk7XFxuMTkzMTpcXHQgb3V0X3VuYmluZDpcXG4xOTMyOlxcdFxcdGNvbXBsZXRlKFxcdTAwMjZkcnYtXFx1MDAzZXJlcXVlc3RfZmlybXdhcmVfY29tcGxldGUpO1xcbjE5MzM6XFx0XFx0ZGV2aWNlX3JlbGVhc2VfZHJpdmVyKGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRldik7XFxuMTkzNDpcXHRcXHQvKiBkcnYgaGFzIGp1c3QgYmVlbiBmcmVlZCBieSB0aGUgcmVsZWFzZSAqL1xcbjE5MzU6XFx0XFx0ZmFpbHVyZSA9IGZhbHNlO1xcbjE5MzY6XFx0IGZyZWU6XFxuMTkzNzpcXHRcXHRpZiAoZmFpbHVyZSlcXG4xOTM4OlxcdFxcdFxcdGl3bF9kZWFsbG9jX3Vjb2RlKGRydik7XFxuMTkzOTpcXHRcXG4xOTQwOlxcdFxcdGlmIChwaWVjZXMpIHtcXG4xOTQxOlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBpZWNlcy1cXHUwMDNlaW1nKTsgaSsrKVxcbjE5NDI6XFx0XFx0XFx0XFx0a2ZyZWUocGllY2VzLVxcdTAwM2VpbWdbaV0uc2VjKTtcXG4xOTQzOlxcdFxcdFxcdGtmcmVlKHBpZWNlcy1cXHUwMDNlZGJnX21lbV90bHYpO1xcbjE5NDQ6XFx0XFx0XFx0a2ZyZWUocGllY2VzKTtcXG4xOTQ1OlxcdFxcdH1cXG4xOTQ2OlxcdH1cXG4xOTQ3OlxcdFxcbjE5NDg6XFx0c3RydWN0IGl3bF9kcnYgKml3bF9kcnZfc3RhcnQoc3RydWN0IGl3bF90cmFucyAqdHJhbnMpXFxuMTk0OTpcXHR7XFxuMTk1MDpcXHRcXHRzdHJ1Y3QgaXdsX2RydiAqZHJ2O1xcbjE5NTE6XFx0XFx0aW50IHJldDtcXG4xOTUyOlxcdFxcbjE5NTM6XFx0XFx0ZHJ2ID0ga3phbGxvY19vYmooKmRydik7XFxuMTk1NDpcXHRcXHRpZiAoIWRydikge1xcbjE5NTU6XFx0XFx0XFx0cmV0ID0gLUVOT01FTTtcXG4xOTU2OlxcdFxcdFxcdGdvdG8gZXJyO1xcbjE5NTc6XFx0XFx0fVxcbjE5NTg6XFx0XFxuMTk1OTpcXHRcXHRkcnYtXFx1MDAzZXRyYW5zID0gdHJhbnM7XFxuMTk2MDpcXHRcXHRkcnYtXFx1MDAzZWRldiA9IHRyYW5zLVxcdTAwM2VkZXY7XFxuMTk2MTpcXHRcXG4xOTYyOlxcdFxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2ZHJ2LVxcdTAwM2VyZXF1ZXN0X2Zpcm13YXJlX2NvbXBsZXRlKTtcXG4xOTYzOlxcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZkcnYtXFx1MDAzZWxpc3QpO1xcbjE5NjQ6XFx0XFxuMTk2NTpcXHQjaWZkZWYgQ09ORklHX0lXTFdJRklfREVCVUdGU1xcbjE5NjY6XFx0XFx0LyogQ3JlYXRlIHRoZSBkZXZpY2UgZGVidWdmcyBlbnRyaWVzLiAqL1xcbjE5Njc6XFx0XFx0ZHJ2LVxcdTAwM2VkYmdmc19kcnYgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoZGV2X25hbWUodHJhbnMtXFx1MDAzZWRldiksXFxuMTk2ODpcXHRcXHRcXHRcXHRcXHRcXHQgICAgaXdsX2RiZ2ZzX3Jvb3QpO1xcbjE5Njk6XFx0XFxuMTk3MDpcXHRcXHQvKiBDcmVhdGUgdHJhbnNwb3J0IGxheWVyIGRlYnVnZnMgZGlyICovXFxuMTk3MTpcXHRcXHRkcnYtXFx1MDAzZXRyYW5zLVxcdTAwM2VkYmdmc19kaXIgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoXFxcInRyYW5zXFxcIiwgZHJ2LVxcdTAwM2VkYmdmc19kcnYpO1xcbjE5NzI6XFx0I2VuZGlmXFxuMTk3MzpcXHRcXG4xOTc0OlxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRiZy5kb21haW5zX2JpdG1hcCA9IElXTF9UUkFOU19GV19EQkdfRE9NQUlOKGRydi1cXHUwMDNldHJhbnMpO1xcbjE5NzU6XFx0XFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pICE9IEVOQUJMRV9JTkkpIHtcXG4xOTc2OlxcdFxcdFxcdC8qIFdlIGhhdmUgYSBub24tZGVmYXVsdCB2YWx1ZSBpbiB0aGUgbW9kdWxlIHBhcmFtZXRlcixcXG4xOTc3OlxcdFxcdFxcdCAqIHRha2UgaXRzIHZhbHVlXFxuMTk3ODpcXHRcXHRcXHQgKi9cXG4xOTc5OlxcdFxcdFxcdGRydi1cXHUwMDNldHJhbnMtXFx1MDAzZWRiZy5kb21haW5zX2JpdG1hcCBcXHUwMDI2PSAweGZmZmY7XFxuMTk4MDpcXHRcXHRcXHRpZiAoaXdsd2lmaV9tb2RfcGFyYW1zLmVuYWJsZV9pbmkgIT0gSVdMX0ZXX0lOSV9QUkVTRVRfRElTQUJMRSkge1xcbjE5ODE6XFx0XFx0XFx0XFx0aWYgKGl3bHdpZmlfbW9kX3BhcmFtcy5lbmFibGVfaW5pIFxcdTAwM2UgRU5BQkxFX0lOSSkge1xcbjE5ODI6XFx0XFx0XFx0XFx0XFx0SVdMX0VSUih0cmFucyxcXG4xOTgzOlxcdFxcdFxcdFxcdFxcdFxcdFxcXCJpbnZhbGlkIGVuYWJsZV9pbmkgbW9kdWxlIHBhcmFtZXRlciB2YWx1ZTogbWF4ID0gJWQsIHVzaW5nIDAgaW5zdGVhZFxcXFxuXFxcIixcXG4xOTg0OlxcdFxcdFxcdFxcdFxcdFxcdEVOQUJMRV9JTkkpO1xcbjE5ODU6XFx0XFx0XFx0XFx0XFx0aXdsd2lmaV9tb2RfcGFyYW1zLmVuYWJsZV9pbmkgPSAwO1xcbjE5ODY6XFx0XFx0XFx0XFx0fVxcbjE5ODc6XFx0XFx0XFx0XFx0ZHJ2LVxcdTAwM2V0cmFucy1cXHUwMDNlZGJnLmRvbWFpbnNfYml0bWFwID1cXG4xOTg4OlxcdFxcdFxcdFxcdFxcdEJJVChJV0xfRldfREJHX0RPTUFJTl9QT1MgKyBpd2x3aWZpX21vZF9wYXJhbXMuZW5hYmxlX2luaSk7XFxuMTk4OTpcXHRcXHRcXHR9XFxuMTk5MDpcXHRcXHR9XFxuMTk5MTpcXHRcXG4xOTkyOlxcdFxcdHJldCA9IGl3bF9yZXF1ZXN0X2Zpcm13YXJlKGRydiwgdHJ1ZSk7XFxuMTk5MzpcXHRcXHRpZiAocmV0KSB7XFxuMTk5NDpcXHRcXHRcXHRJV0xfRVJSKHRyYW5zLCBcXFwiQ291bGRuJ3QgcmVxdWVzdCB0aGUgZndcXFxcblxcXCIpO1xcbjE5OTU6XFx0XFx0XFx0Z290byBlcnJfZnc7XFxuMTk5NjpcXHRcXHR9XFxuMTk5NzpcXHRcXG4xOTk4OlxcdFxcdHJldHVybiBkcnY7XFxuMTk5OTpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6MzcuNDg5NDYzNTZaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjI5MTQ4NjA2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0eSBpbiB0aGUgSW50ZWwgV2lyZWxlc3MgRHJpdmVyKipcblxuT2theSwgc28gYF9pd2xfb3BfbW9kZV9zdGFydGAgY2FsbHMgYG9wLVx1MDAzZW9wcy1cdTAwM2VzdGFydGAuIFJpZ2h0LCB0aGF0IG1lYW5zIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLiBUaGlzIHBhdGNoIGNsYWltcyB0byBhZGRyZXNzIGEgbWVtb3J5IGxlYWsgaW4gdGhlIGVycm9yIHBhdGggb2YgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIEhtbSwgaW50ZXJlc3RpbmcuLi4gd29ydGggZnV6emluZyB0aGlzLCBhYnNvbHV0ZWx5LiBHb3R0YSBkZXRlcm1pbmUgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucyBmb3IgcmVwcm9kdWN0aW9uLiBMb29rcyBsaWtlIGBJV0xXSUZJYCBhbmQgYElXTERWTWAgYXJlIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZXMuIExldCdzIG1ha2Ugc3VyZSBgSVdMRFZNYCBpcyAqZXhhY3RseSogdGhlIGNvbmZpZyBuZWVkZWQgLSBnb29kLCBcImNvbmZpZyBJV0xEVk1cIiBjb25maXJtcyB0aGF0LiBObyBvdGhlciByZWxldmFudCBjb25maWdzIGp1bXAgb3V0LCBidXQgbGV0J3MganVzdCBtYWtlIHN1cmUuIE9rYXksIGBNQUM4MDIxMWAgaXMgb2J2aW91c2x5IGEgZGVwZW5kZW5jeSBvZiBgSVdMRFZNYC4gQW5kIHdoYXQgYWJvdXQgYFBDSWAgZm9yIGBJV0xXSUZJYD8gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IHRoZSBkZXBlbmRlbmNpZXMgZm9yIGBJV0xXSUZJYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwNzMsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNFQwOToyNTo0My43ODA5NTE2N1oiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDA1NjU2OTcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJV0xXSUZJXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6Mjpjb25maWcgSVdMV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJJbnRlbCBXaXJlbGVzcyBXaUZpIE5leHQgR2VuIEFHTiAtIFdpcmVsZXNzLU4vQWR2YW5jZWQtTi9VbHRpbWF0ZS1OIChpd2x3aWZpKSBcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9NDc9aWYgSVdMV0lGSVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy00OC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NDk6Y29uZmlnIElXTFdJRklfS1VOSVRfVEVTVFNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctNTAtXFx0dHJpc3RhdGVcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6NTg6Y29uZmlnIElXTFdJRklfTEVEU1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZy01OS1cXHRib29sXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc9ODQ9Y29uZmlnIElXTE1MRFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTk0LSMgZG9uJ3QgY2FsbCBpdCBfTU9EVUxFIC0tIHdpbGwgY29uZnVzZSBLY29uZmlnL2ZpeGRlcC8uLi5cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6OTU6Y29uZmlnIElXTFdJRklfT1BNT0RFX01PRFVMQVJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctOTYtXFx0Ym9vbFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnPTEwNT1tZW51IFxcXCJEZWJ1Z2dpbmcgT3B0aW9uc1xcXCJcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTA2LVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZzoxMDc6Y29uZmlnIElXTFdJRklfREVCVUdcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTA4LVxcdGJvb2wgXFxcIkVuYWJsZSBmdWxsIGRlYnVnZ2luZyBvdXRwdXQgaW4gdGhlIGl3bHdpZmkgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTMxOmNvbmZpZyBJV0xXSUZJX0RFQlVHRlNcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWctMTMyLVxcdGJvb2wgXFxcIml3bHdpZmkgZGVidWdmcyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTEzOC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWc6MTM5OmNvbmZpZyBJV0xXSUZJX0RFVklDRV9UUkFDSU5HXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvaW50ZWwvaXdsd2lmaS9LY29uZmlnLTE0MC1cXHRib29sIFxcXCJpd2x3aWZpIGRldmljZSBhY2Nlc3MgdHJhY2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjRUMDk6MjU6NDQuMTg2NjIwMjgyWiIsIlNlcSI6MzUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2MDQ5NjMzNjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcXVpdGUgZmFtaWxpYXIgd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiBhbmQgd2lyZWxlc3MgZHJpdmVycywgZm9ybWF0dGVkIGZvciBzb21lb25lIHdpdGggc2ltaWxhciBleHBlcnRpc2U6XG5cbioqRGl2aW5nIGludG8gdGhlIGl3bHdpZmkgS2NvbmZpZyoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBpdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIGFib3V0IHRoZSBJbnRlbCB3aXJlbGVzcyBkcml2ZXIgY29uZmlndXJhdGlvbiwgcHJvYmFibHkgc29tZSBuZXcgZmVhdHVyZSBvciBvcHRpb24gSSdtIHNlZWluZy4gTm8gbmVlZCB0byB3YXN0ZSB0aW1lIHNjYW5uaW5nIHRoZSB3aG9sZSBmaWxlLCBsZXQncyBzdGFydCB3aXRoIHRoZSBmaXJzdCB0d2VudHkgbGluZXMgb2YgYGRyaXZlcnMvbmV0L3dpcmVsZXNzL2ludGVsL2l3bHdpZmkvS2NvbmZpZ2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcuIEl0J3MgdXN1YWxseSB0aGUgZWFzaWVzdCB3YXkgdG8gaWRlbnRpZnkgYW55IG92ZXJhcmNoaW5nIHN0cnVjdHVyZSBvciBtYWpvciBibG9ja3MgZGVmaW5lZCB3aXRoaW4gdGhlIGZpbGUuIEnigJltIGhvcGluZyB0byBzZWUgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb25zLCBtYXliZSBzb21lIGRlcGVuZGVuY2llcyBvbiBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcywgb3IgcG9zc2libHkgZXZlbiBjbHVlcyBhYm91dCBkaWZmZXJlbnQgaGFyZHdhcmUgc3VwcG9ydCBsZXZlbHMgc3RyYWlnaHQgYXdheS4gSXQncyBvZnRlbiB3aGVyZSB0aGUgY29yZSBkZWNpc2lvbnMgYXJlIG1hZGUsIG9yIGF0IGxlYXN0IGhvdyB0aGUgZmlsZSBpcyBvcmdhbml6ZWQsIHNvIEkgY2FuIHNhdmUgc29tZSB0aW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjQ4Ljc5MTU4NjU3NFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTI2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9pbnRlbC9pd2x3aWZpL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdGNvbmZpZyBJV0xXSUZJXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiSW50ZWwgV2lyZWxlc3MgV2lGaSBOZXh0IEdlbiBBR04gLSBXaXJlbGVzcy1OL0FkdmFuY2VkLU4vVWx0aW1hdGUtTiAoaXdsd2lmaSkgXFxcIlxcbiAgIDQ6XFx0XFx0ZGVwZW5kcyBvbiBQQ0kgXFx1MDAyNlxcdTAwMjYgSEFTX0lPTUVNIFxcdTAwMjZcXHUwMDI2IENGRzgwMjExXFxuICAgNTpcXHRcXHRkZXBlbmRzIG9uIElXTE1FSSB8fCAhSVdMTUVJXFxuICAgNjpcXHRcXHRzZWxlY3QgRldfTE9BREVSXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFNlbGVjdCB0byBidWlsZCB0aGUgZHJpdmVyIHN1cHBvcnRpbmcgdGhlOlxcbiAgIDk6XFx0XFxuICAxMDpcXHRcXHQgIEludGVsIFdpcmVsZXNzIFdpRmkgTGluayBOZXh0LUdlbiBBR05cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHVzZSB3aXRoIHRoZSBmb2xsb3dpbmcgaGFyZHdhcmU6XFxuICAxMzpcXHRcXHRcXHRJbnRlbCBXaXJlbGVzcyBXaUZpIExpbmsgNjI1MEFHTiBBZGFwdGVyXFxuICAxNDpcXHRcXHRcXHRJbnRlbCA2MDAwIFNlcmllcyBXaS1GaSBBZGFwdGVycyAoNjIwMEFHTiBhbmQgNjMwMEFHTilcXG4gIDE1OlxcdFxcdFxcdEludGVsIFdpRmkgTGluayAxMDAwQkdOXFxuICAxNjpcXHRcXHRcXHRJbnRlbCBXaXJlbGVzcyBXaUZpIDUxNTBBR05cXG4gIDE3OlxcdFxcdFxcdEludGVsIFdpcmVsZXNzIFdpRmkgNTEwMEFHTiwgNTMwMEFHTiwgYW5kIDUzNTBBR05cXG4gIDE4OlxcdFxcdFxcdEludGVsIDYwMDUgU2VyaWVzIFdpLUZpIEFkYXB0ZXJzXFxuICAxOTpcXHRcXHRcXHRJbnRlbCA2MDMwIFNlcmllcyBXaS1GaSBBZGFwdGVyc1xcbiAgMjA6XFx0XFx0XFx0SW50ZWwgV2lyZWxlc3MgV2lGaSBMaW5rIDYxNTBCR04gMiBBZGFwdGVyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjQ4Ljc5MTY1OTA4NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQ3MzU5NjIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgaXdsd2lmaSBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgaXdsd2lmaSBwYXRjaC4gTXkgaW5pdGlhbCB0aG91Z2h0IHByb2Nlc3MgaXMgZm9jdXNpbmcgb24gd2hhdCBpdCBhY3R1YWxseSAqZG9lcyouIEkgc2VlIGl0J3MgZGVhbGluZyB3aXRoIGBJV0xXSUZJYCBhbmQgYElXTERWTWAgY29uZmlndXJhdGlvbnMsIHdoaWNoIGFyZSB0aGUgcmVsZXZhbnQgZHJpdmVyIGNvbXBvbmVudHMuIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgYXBwZWFycyB0byBiZSBjZW50ZXJlZCBhcm91bmQgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBpbXBhY3Qgb2YgdGhpcyBmdW5jdGlvbiBtb2RpZmljYXRpb24uXG5cblJpZ2h0LCB0aGUgZXJyb3IgcGF0aCBpcyB0cmlnZ2VyZWQgaWYgZWl0aGVyIGBpd2xfcGFyc2VfZWVwcm9tX2RhdGFgIG9yIGBpd2xfbnZtX2NoZWNrX3ZlcnNpb25gIGZhaWxzLCBhbmQgdGhvc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgZHVyaW5nIGRyaXZlciBwcm9iZS4gRnV6emluZyBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBzZWVtcyBsaWtlIGEgZ29vZCBhdmVudWUgZm9yIHRlc3RpbmcsIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhhdCdzIHdoZXJlIHRoZSBwYXRjaCBsYW5kZWQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgb3RoZXIgZnVuY3Rpb25zIGFmZmVjdGVkIGluIHRoZSBjaGFuZ2UgdG8gYmUgc3VyZS4gTm9wZSwgaXQncyBqdXN0IGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgLlxuXG5Ob3cgSSBuZWVkIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY2hhbmdlIGJ5IHJldmlld2luZyB0aGUgY29kZSBzbmlwcGV0OlxuXG5gYGBjXG5vdXRfZnJlZV9lZXByb206XG5cdGtmcmVlKHByaXYtXHUwMDNlbnZtX2RhdGEpO1xub3V0X2ZyZWVfZWVwcm9tX2Jsb2I6XG5cdGtmcmVlKHByaXYtXHUwMDNlZWVwcm9tX2Jsb2IpO1xuYGBgXG5cbkFoLCBpdCdzIGEgbWVtb3J5IGxlYWsgZml4ISBUaGUgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYCB3ZXJlIGxpa2VseSBpbiB0aGUgd3Jvbmcgb3JkZXIsIGFuZCB0aGlzIHN3YXBzIHRoZW0uIFRoYXQncyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBhIGNsZWFudXAgd2l0aGluIHRoZSBEVk0gZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24uIFRoaXMgbWFrZXMgaXQgYWNjZXNzaWJsZSB2aWEgUENJIGZ1enppbmcuXG5cbk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhlIGZhY3QgdGhhdCB0aGlzIGlzIGEgbWVtb3J5IGxlYWsgZml4IHdpdGhpbiB0aGUgRFZNIGRyaXZlcidzIHN0YXJ0IHNlcXVlbmNlLiBUaGUgc3BlY2lmaWMgcGF0Y2ggd2l0aGluIHRoZSBkcml2ZXIncyBzZXF1ZW5jZSBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgZHJpdmVyJ3Mgc3RhcnQgc2VxdWVuY2UgdGhhdCBpcyByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBJV0xXSUZJYCBhbmQgYElXTERWTWAuIFRoZSBmb2N1cyBzeW1ib2wgaXMgYGl3bF9vcF9tb2RlX2R2bV9zdGFydGAuXG5cbkkgY2hlY2tlZCB0aGUgS2NvbmZpZyBmaWxlIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbmFtZXM6IGBjb25maWcgSVdMRFZNYCBpcyBkZWZpbml0ZWx5IHByZXNlbnQgdW5kZXIgYGlmIElXTFdJRklgIGJsb2NrLlxuXG5BbHJpZ2h0LCBJIHRoaW5rIEkndmUgZ290IHRoaXMuIEknbGwgbm93IGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNzgwLCJPdXRwdXRUb2tlbnMiOjEzNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI0VDA5OjI1OjU5LjI2NTI1ODMzOVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgzNDI4MDI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJV0xXSUZJXCIsXG4gICAgXCJJV0xEVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpd2xfb3BfbW9kZV9kdm1fc3RhcnRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhIG1lbW9yeSBsZWFrIGluIHRoZSBlcnJvciBoYW5kbGluZyBwYXRoIG9mIGBpd2xfb3BfbW9kZV9kdm1fc3RhcnRgIGJ5IHN3YXBwaW5nIHRoZSBvcmRlciBvZiBga2ZyZWVgIGNhbGxzIGZvciBgbnZtX2RhdGFgIGFuZCBgZWVwcm9tX2Jsb2JgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGl3bHdpZmkgRFZNIGRyaXZlcidzIGluaXRpYWxpemF0aW9uIHNlcXVlbmNlLCB3aGljaCBjYW4gYmUgcmVhY2hlZCBhbmQgdGVzdGVkIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSVdMV0lGSVwiLFxuICAgIFwiSVdMRFZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaXdsX29wX21vZGVfZHZtX3N0YXJ0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZXJyb3IgaGFuZGxpbmcgcGF0aCBvZiBgaXdsX29wX21vZGVfZHZtX3N0YXJ0YCBieSBzd2FwcGluZyB0aGUgb3JkZXIgb2YgYGtmcmVlYCBjYWxscyBmb3IgYG52bV9kYXRhYCBhbmQgYGVlcHJvbV9ibG9iYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBpd2x3aWZpIERWTSBkcml2ZXIncyBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgd2hpY2ggY2FuIGJlIHJlYWNoZWQgYW5kIHRlc3RlZCB2aWEgUENJIGRldmljZSBmdXp6aW5nLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflow7q6gf[1] Phase: Succeeded StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 09:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 09:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2] Phase: Succeeded StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 09:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-24 09:26:09 +0000 UTC FinishedAt: 2026-06-24 09:26:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7q6gf/series-workflow7q6gf-convert-artifact-1701896648/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-24 09:26:19 +0000 UTC FinishedAt: 2026-06-24 09:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-24 09:26:19 +0000 UTC FinishedAt: 2026-06-24 09:47:05 +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:*14ddfeef-fb30-4d33-9446-7307304fee9d,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-workflow7q6gf/series-workflow7q6gf-convert-artifact-1701896648/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": "cd6e133d-a19a-4541-9410-d8094a58337b", "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-workflow7q6gf/series-workflow7q6gf-build-action-3125726782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-24 09:26:19 +0000 UTC FinishedAt: 2026-06-24 09:46:55 +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:*14ddfeef-fb30-4d33-9446-7307304fee9d,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-workflow7q6gf/series-workflow7q6gf-convert-artifact-1701896648/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": "cd6e133d-a19a-4541-9410-d8094a58337b", "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-workflow7q6gf/series-workflow7q6gf-build-action-3125726782/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-24 09:47:05 +0000 UTC FinishedAt: 2026-06-24 09:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-24 09:47:05 +0000 UTC FinishedAt: 2026-06-24 09:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-24 09:47:05 +0000 UTC FinishedAt: 2026-06-24 09:47:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-24 09:47:05 +0000 UTC FinishedAt: 2026-06-24 09:47:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflow7q6gf/series-workflow7q6gf-convert-artifact-3693759151/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-24 09:47:16 +0000 UTC FinishedAt: 2026-06-24 09:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-24 09:47:16 +0000 UTC FinishedAt: 2026-06-24 09:49:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd6e133d-a19a-4541-9410-d8094a58337b,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-workflow7q6gf/series-workflow7q6gf-build-action-3125726782/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-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-24 09:49:32 +0000 UTC FinishedAt: 2026-06-24 09:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-24 09:49:32 +0000 UTC FinishedAt: 2026-06-24 09:49:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-24 09:49:32 +0000 UTC FinishedAt: 2026-06-24 10:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-24 09:49:32 +0000 UTC FinishedAt: 2026-06-24 10:13:53 +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:*14ddfeef-fb30-4d33-9446-7307304fee9d,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-workflow7q6gf/series-workflow7q6gf-convert-artifact-3693759151/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": "72fab77e-5ee2-4928-98e9-316a731ef1e7", "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-workflow7q6gf/series-workflow7q6gf-build-action-4131001923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-24 09:49:32 +0000 UTC FinishedAt: 2026-06-24 10:13:08 +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:*14ddfeef-fb30-4d33-9446-7307304fee9d,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-workflow7q6gf/series-workflow7q6gf-convert-artifact-3693759151/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": "72fab77e-5ee2-4928-98e9-316a731ef1e7", "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-workflow7q6gf/series-workflow7q6gf-build-action-4131001923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-24 10:13:53 +0000 UTC FinishedAt: 2026-06-24 10:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-24 10:13:53 +0000 UTC FinishedAt: 2026-06-24 10:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-24 10:13:53 +0000 UTC FinishedAt: 2026-06-24 10:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-24 10:13:53 +0000 UTC FinishedAt: 2026-06-24 10:16:00 +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:*72fab77e-5ee2-4928-98e9-316a731ef1e7,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-workflow7q6gf/series-workflow7q6gf-build-action-4131001923/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-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"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:*cd6e133d-a19a-4541-9410-d8094a58337b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72fab77e-5ee2-4928-98e9-316a731ef1e7,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-workflow7q6gf/series-workflow7q6gf-build-action-3125726782/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-workflow7q6gf/series-workflow7q6gf-build-action-4131001923/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:17:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:17:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"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-workflow7q6gf/series-workflow7q6gf-convert-artifact-1637358952/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-24 10:16:10 +0000 UTC FinishedAt: 2026-06-24 10:16:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-24 10:17:35 +0000 UTC FinishedAt: 2026-06-24 10:20:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflow7q6gf[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["iwl_op_mode_dvm_start"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["IWLWIFI","IWLDVM"],"series_id":"34f46544-a170-4860-a170-3fb42751ffc8","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-24 10:17:35 +0000 UTC FinishedAt: 2026-06-24 10:19:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cd6e133d-a19a-4541-9410-d8094a58337b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*72fab77e-5ee2-4928-98e9-316a731ef1e7,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-workflow7q6gf/series-workflow7q6gf-build-action-3125726782/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-workflow7q6gf/series-workflow7q6gf-build-action-4131001923/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-workflow7q6gf/series-workflow7q6gf-convert-artifact-1637358952/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,}