Name: series-workflow8h84w Phase: Succeeded StartedAt: 2026-09-08 17:28:20 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[0] Phase: Succeeded StartedAt: 2026-09-08 17:28:20 +0000 UTC FinishedAt: 2026-09-08 17:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 17:28:20 +0000 UTC FinishedAt: 2026-09-08 17:31:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "e58ebbfe-2c6b-494f-861a-d962c9915a4b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_set_effective_quota", "damos_adjust_quota", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YCB3YXMgaW1wcm9wZXJseSBjbGFtcGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RpdmUgc2l6ZSAoYGVzemApIHJhdGhlciB0aGFuIGp1c3QgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKGBlc3pfdGltZWApLlxuXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MzA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi4zZTljOWI2Mzg1ZDRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM5LDYgJiM0MzszMjM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuIFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcbiBcbiBcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4gXHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xuQEAgLTMyNTksOCAmIzQzOzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuLVx0XHRlc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBlc3opO1xuLVx0XHRlc3ogPSBtYXgoY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XG4mIzQzO1x0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbiBcdH1cbiBcbiBcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MzA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uM2U5YzliNjM4NWQ0ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzIzOSw2ICYjNDM7MzIzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpCiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyB0aHJvdWdocHV0OwogCXVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYOwomIzQzOwl1bnNpZ25lZCBsb25nIGVzel90aW1lOwogCiAJaWYgKCFxdW90YS0mZ3Q7bXMgJmFtcDsmYW1wOyBsaXN0X2VtcHR5KCZhbXA7cXVvdGEtJmd0O2dvYWxzKSkgewogCQlxdW90YS0mZ3Q7ZXN6ID0gcXVvdGEtJmd0O3N6OwpAQCAtMzI1OSw4ICYjNDM7MzI2MCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpCiAJCQkJCTEwMDAwMDAsIHF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zKTsKIAkJZWxzZQogCQkJdGhyb3VnaHB1dCA9IFBBR0VfU0laRSAqIDEwMjQ7Ci0JCWVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtJmd0O21zLCBlc3opOwotCQllc3ogPSBtYXgoY3R4LSZndDttaW5fcmVnaW9uX3N6LCBlc3opOwomIzQzOwkJZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLSZndDttcywgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKJiM0MzsJCWVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTsKIAl9CiAKIAlpZiAocXVvdGEtJmd0O3N6ICZhbXA7JmFtcDsgcXVvdGEtJmd0O3N6ICZsdDsgZXN6KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2g6IEEgUXVpY2sgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVmaW5pbmcgaG93IGVmZmVjdGl2ZSBxdW90YXMgYXJlIHNldCB3aXRoaW4gREFNT04sIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyBhbmQgb3B0aW1pemF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBEQU1PTiBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHF1b3RhcyBhcmUgY2FsY3VsYXRlZCBhbmQgdXRpbGl6ZWQuIFdoYXQgdHJpZ2dlcnMgdGhpcyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCBjYWxsPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3QgaWYgdGhlIGBlc3pgIHZhbHVlIGlzIGFkanVzdGVkPwoKSSYjMzk7bGwgY2hlY2sgdGhlIGRpZmYgaXRzZWxmIGNsb3NlbHkuIEl0IGxvb2tzIGxpa2UgYGVzemAgY2FsY3VsYXRpb24gaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jb3Jwb3JhdGUgYGVzel90aW1lYC4gVGhlIG9sZCBgZXN6YCBjYWxjdWxhdGlvbiBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIG9uZSB0aGF0IGluY2x1ZGVzIGEgdGltZSBlbGVtZW50OyBub3csIHRocm91Z2hwdXQgaXMgY2FsY3VsYXRlZCwgbXVsdGlwbGllZCBieSBgcXVvdGEtJmd0O21zYCwgYW5kIHRoZW4gY29uc3RyYWluZWQgYnkgYGN0eC0mZ3Q7bWluX3JlZ2lvbl9zemAuIEkgaGF2ZSB0byBjb25maXJtIHRoZSB1bml0cy4gSXQgc2VlbXMgdGhhdCB3ZSBhcmUgdGFraW5nIHRoZSBtYXhpbXVtIG9mIHRocm91Z2hwdXQgKiBxdW90YSBhbmQgY3R4LSZndDttaW5fcmVnaW9uX3N6LCBiZWZvcmUgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYGVzemAuCgpUbyBnZXQgYSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGFmZmVjdC4gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgbG9naWMuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnb2FscyBvZiB0aGUgb3JpZ2luYWwgZGVzaWduLCB0aGUgcmVhc29ucyBmb3IgdGhpcyBjaGFuZ2UsIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBvdXRjb21lIGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjg3PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzAyLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMTc6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxOC1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGtub2JzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBEQU1PTiBtaWdodCBoYXZlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9LY29uZmlnYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIGZlYXR1cmUgc2V0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMsIGFueSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBvYnNjdXJlIG9uZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBwbGF0Zm9ybS1zcGVjaWZpYyBjaG9pY2VzLCBvciBmZWF0dXJlcyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzbW9vdGggYW5kIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBleHBlY3RlZCBjaG9pY2VzIHRoYXQgd2lsbCBpbmZsdWVuY2UgREFNT04mIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSByZXNvdXJjZSBjb25zdW1wdGlvbiBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIERBTU9OJiMzOTtzIENvcmUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBUaGUgTWFrZWZpbGUgaXMgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMsIHNvIEkmIzM5O2xsIGNoZWNrIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBjb3JlLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCB0aGUgd2F5IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgbm90aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIGZsYWdzLCBvcHRpbWl6YXRpb24gbGV2ZWxzIHRoYXQgbWlnaHQgYWZmZWN0IHByb2ZpbGluZywgb3IgaW5jbHVkZSBwYXRocyB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgSSB3b3VsZG4mIzM5O3QgcmVhZGlseSBleHBlY3QuIEVzc2VudGlhbGx5LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgcmVjaXBlIGZvciBidWlsZGluZyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG1vbml0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCdWlsZCBQcm9jZXNzIG9mIHRoZSBEQU1PTiBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzdWJzeXN0ZW0gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkmIzM5O2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIHNlZSBob3cgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIHJ1bGVzIGFyZSBpbiBwbGFjZSwgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyBldmVyeXRoaW5nIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbiwgb3IgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyB0d2lzdHMgb3IgY3VzdG9tIGJ1aWxkIHN0ZXBzIGludm9sdmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBDb250ZXh0KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDMyMzAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJiMzOTttIGdvaW5nIGluIHdpdGggYSBzcGVjaWZpYyBwdXJwb3NlLCBwcm9iYWJseSBkZWJ1Z2dpbmcgb3IgdHJ5aW5nIHRvIG9wdGltaXplIHNvbWV0aGluZyByZWxhdGVkIHRvIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBmcm9tIGxpbmUgMzIzMCB0byAzMjgwLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgbG9vcHMsIG9yIGZ1bmN0aW9uIGNhbGxzIGluIHRoYXQgcmVnaW9uIHRoYXQgYXJlIHBlcnRpbmVudCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBIb3BlZnVsbHksIHdpdGhpbiB0aGlzIHNuaXBwZXQgbGllcyB0aGUgY29yZSBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLCBhbmQgaXQgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBsb2dpYyB1bmZvbGRzLCBhbmQgdGhlIHJlYWwgaW5zaWdodHMgYXJlIGxpa2VseSBoaWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjM1Olx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxuMzIzNjpcdCAqL1xuMzIzNzpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjM4Olx0e1xuMzIzOTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjQwOlx0XHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4zMjQxOlx0XHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbjMyNDI6XHRcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4zMjQzOlx0XG4zMjQ0Olx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI0NTpcdFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNDY6XHRcdFx0cmV0dXJuO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFxuMzI0OTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1MDpcdFx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG4zMjUxOlx0XHRcdFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XG4zMjUyOlx0XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMyNTM6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG4zMjU0Olx0XHRcdGVzeiA9IHF1b3RhLVx1MDAzZWVzel9icCAvIDEwMDAwO1xuMzI1NTpcdFx0fVxuMzI1NjpcdFxuMzI1NzpcdFx0aWYgKHF1b3RhLVx1MDAzZW1zKSB7XG4zMjU4Olx0XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxuMzI1OTpcdFx0XHRcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeixcbjMyNjA6XHRcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4zMjYxOlx0XHRcdGVsc2VcbjMyNjI6XHRcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbjMyNjM6XHRcdFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4zMjY0Olx0XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbjMyNjU6XHRcdH1cbjMyNjY6XHRcbjMyNjc6XHRcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbjMyNjg6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG4zMjY5Olx0XG4zMjcwOlx0XHRxdW90YS1cdTAwM2Vlc3ogPSBlc3o7XG4zMjcxOlx0fVxuMzI3MjpcdFxuMzI3MzpcdHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4zMjc0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4zMjc1Olx0e1xuMzI3NjpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbjMyNzc6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XG4zMjc4Olx0XG4zMjc5Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcbjMyODA6XHRcdFx0aWYgKHNpdGVyID09IHMpXG4zMjgxOlx0XHRcdFx0YnJlYWs7XG4zMjgyOlx0XHRcdHNpZHgmIzQzOyYjNDM7O1xuMzI4MzpcdFx0fVxuMzI4NDpcdFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4zMjg1Olx0fVxuMzI4NjpcdFxuMzI4NzpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjg4Olx0e1xuMzI4OTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjkwOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5MTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMyOTI6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzI5MzpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzI5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBmcmFtZXdvcmsuIERBTU9OLCBmb3IgdGhvc2Ugbm90IGludGltYXRlbHkgZmFtaWxpYXIsIGxpdmVzIGluIGBtbS9kYW1vbmAgYW5kIGNhbiBiZSBjb250cm9sbGVkIHZpYSBzeXNmcyDigJMgdGhhdCYjMzk7cyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYCBhbmQgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIFN5emthbGxlciBjYW4sIG9mIGNvdXJzZSwgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIGEgc29mdHdhcmUtYmFzZWQgdGFyZ2V0LCBwZXJmZWN0LgoKTm93LCB0aGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJbml0aWFsbHksIHRoZSBjb2RlIHVzZWQgdG8gY2xhbXAgdGhlIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgYmFzZWQgb24gYHRocm91Z2hwdXQgKiBxdW90YS0mZ3Q7bXNgIGFuZCBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgaWYgZ29hbHMgd2VyZSBzZXQgaW4gdGhlIHF1b3RhLCBvciB0aGUgdGltZSBiYXNlZCBxdW90YSB3YXMgYmVsb3cgdGhlIGBtaW5fcmVnaW9uX3N6YCwgdGhlIGNvZGUgZW5zdXJlZCBgZXN6YCB3YXMgKmF0IGxlYXN0KiBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4KClRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMuIE5vdywgdGhlIHRpbWUtYmFzZWQgcXVvdGEgaXMgbG93ZXItYm91bmRlZCBieSBgbWluX3JlZ2lvbl9zemAgYW5kIHRoYXQgaXMgdGhlbiBjb21wYXJlZCBhZ2FpbnN0IHRoZSBnb2Fscy1iYXNlZCBxdW90YS4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBub3cgYWxsb3dzIGZvciBhIHF1b3RhIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgYG1pbl9yZWdpb25fc3pgIGlmIGEgZ29hbC1iYXNlZCBxdW90YSBpcyBhbHNvIGFjdGl2ZS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LiBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgbWFrZXMgaXQgYSBzdHJhaWdodGZvcndhcmQgdGFyZ2V0LiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgREFNT04gY2FsY3VsYXRlcyBxdW90YXMg4oCTIGFuZCByZXNpZGVzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSB0aGUgc2NvcGUgaXMgY29udGFpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlIGNhbGxlcnMgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIHdoaWNoIGlzIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgZm9yIGVudHJ5IHBvaW50cyB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI3Mz1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjg2LVxubW0vZGFtb24vY29yZS5jOjMyODc6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zMjg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2OD1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cbm1tL2RhbW9uL2NvcmUuYzozMzg0Olx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM4NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCBpbiBMaW51eCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBpbmxpbmVkIG9yIG5vdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcXVvdGEgYWRqdXN0bWVudHMgYXJlIHByb3BhZ2F0ZWQuIEkmIzM5O20gdGhpbmtpbmcgZXZlbiBpZiBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSWYgbm90IHN0YXRpYywgaXQgbXVzdCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBpbiB3aGljaCBjYXNlIEkgbmVlZCB0byBrbm93IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCB0aGVpciBiZWhhdmlvci4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCBhcm91bmQgaG93IHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGFuZCBlZmZlY3RpdmUgc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBtZW1vcnkgbW9uaXRvcmluZyBhbmQgcmVjbGFtYXRpb24gZnJhbWV3b3JrLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgb3Igc3ltYm9scyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05MDgtXG5tbS9kYW1vbi9jb3JlLmM6OTA5Olx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jLTkxMC1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTE1LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo5MTY6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTkxNy1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTkxOS1cbm1tL2RhbW9uL2NvcmUuYzo5MjA6XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTkyMS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0NS1cdFx0ICogaW50ZXJ2YWwuICBJbiBvdGhlciB3b3JkcywgbWFrZSB0aGUgc3RhdHVzIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDQ2Olx0XHQgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny1cdFx0ICovXG4tLVxubW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcbm1tL2RhbW9uL2NvcmUuYzoxMTA2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG5tbS9kYW1vbi9jb3JlLmMtMTExMi0gKiBhcHBseWluZyBhdXRvLXR1bmVkIG1vbml0b3JpbmcgaW50ZXJ2YWxzLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ0LVx0Lypcbm1tL2RhbW9uL2NvcmUuYzoxMTQ1Olx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTItXG5tbS9kYW1vbi9jb3JlLmM6MjA1MzpcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtMjA1NC1cdGlmICghY3R4LVx1MDAzZWtkYW1vbmQpIHtcbm1tL2RhbW9uL2NvcmUuYy0yMDU1LVx0XHRlcnIgPSAwO1xubW0vZGFtb24vY29yZS5jOjIwNTY6XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjIwNTc6XHRcdGN0eC1cdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcJiMzNDtrZGFtb25kLiVkXCYjMzQ7LFxubW0vZGFtb24vY29yZS5jLTIwNTgtXHRcdFx0XHRucl9ydW5uaW5nX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDYyLVx0XHR9IGVsc2Uge1xubW0vZGFtb24vY29yZS5jOjIwNjM6XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmMtMjA2NS1cdH1cbm1tL2RhbW9uL2NvcmUuYzoyMDY2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTIwNjctXG4tLVxubW0vZGFtb24vY29yZS5jPTIxMzE9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEzNC1cbm1tL2RhbW9uL2NvcmUuYzoyMTM1Olx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LVx0dHNrID0gY3R4LVx1MDAzZWtkYW1vbmQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMzgtXHRcdGdldF90YXNrX3N0cnVjdCh0c2spO1xubW0vZGFtb24vY29yZS5jOjIxMzk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTQwLVx0XHRrdGhyZWFkX3N0b3BfcHV0KHRzayk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDItXHR9XG5tbS9kYW1vbi9jb3JlLmM6MjE0MzpcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTQ0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTU1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTIxNjY9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2OS1cbm1tL2RhbW9uL2NvcmUuYzoyMTcwOlx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTcxLVx0cnVubmluZyA9IGN0eC1cdTAwM2VrZGFtb25kICE9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MjE3MjpcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTczLVx0cmV0dXJuIHJ1bm5pbmc7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQmIzM5O3Mgd29ya2VyIHRocmVhZC5cbm1tL2RhbW9uL2NvcmUuYy0yMTc4LSAqIEBjdHg6XHRUaGUgREFNT04gY29udGV4dCBvZiB0aGUgcXVlc3Rpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTIxODEtICovXG5tbS9kYW1vbi9jb3JlLmM6MjE4MjppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIxODMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTg1LVxubW0vZGFtb24vY29yZS5jOjIxODY6XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTIxODctXHRpZiAoY3R4LVx1MDAzZWtkYW1vbmQpXG5tbS9kYW1vbi9jb3JlLmMtMjE4OC1cdFx0cGlkID0gY3R4LVx1MDAzZWtkYW1vbmQtXHUwMDNlcGlkO1xubW0vZGFtb24vY29yZS5jOjIxODk6XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtMjE5MC1cdHJldHVybiBwaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTIyNjk9aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjkyLSAqL1xubW0vZGFtb24vY29yZS5jOjIyOTM6c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMjI5NC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIzNDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZ2V0X2ludGVydmFsc19hZGFwdGF0aW9uX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzNjMtXG5tbS9kYW1vbi9jb3JlLmM6MjM2NDpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTIzNjUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzUyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVxubW0vZGFtb24vY29yZS5jOjMzNjg6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzM2OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MDgtICogb3ZlcmhlYWQgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm4uICBJZiBhIG1lcmdlIHdhc1xubW0vZGFtb24vY29yZS5jOjM1MDk6ICogdW5uZWNlc3NhcmlseSBtYWRlLCBsYXRlciAmIzM5O2tkYW1vbmRfc3BsaXRfcmVnaW9ucygpJiMzOTsgd2lsbCByZXZlcnQgaXQuXG5tbS9kYW1vbi9jb3JlLmMtMzUxMC0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTE2LSAqL1xubW0vZGFtb24vY29yZS5jOjM1MTc6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG5tbS9kYW1vbi9jb3JlLmMtMzUxOC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzel9saW1pdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzYyMj1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjU4LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxubW0vZGFtb24vY29yZS5jOjM2NTk6ICogc3BsaXQgd2FzIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJiMzOTtrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSYjMzk7IHdpbGwgcmV2ZXJ0XG5tbS9kYW1vbi9jb3JlLmMtMzY2MC0gKiBpdC5cbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSAqL1xubW0vZGFtb24vY29yZS5jOjM2NjI6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNzAzOnN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNzA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzczOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzYwLVxubW0vZGFtb24vY29yZS5jOjM3NjE6c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbm1tL2RhbW9uL2NvcmUuYy0zNzYyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc5NT1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MDAtLypcbm1tL2RhbW9uL2NvcmUuYzozODAxOiAqIGtkYW1vbmRfY2FsbCgpIC0gaGFuZGxlIGRhbW9uX2NhbGxfY29udHJvbCBvYmplY3RzLlxubW0vZGFtb24vY29yZS5jLTM4MDItICogQGN0eDpcdFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IG9mIHRoZSBrZGFtb25kLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODA5LSAqL1xubW0vZGFtb24vY29yZS5jOjM4MTA6c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXG5tbS9kYW1vbi9jb3JlLmMtMzgxMS17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDMtLyogUmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGl0JiMzOTtzIG5vdCBhY3RpdmF0ZWQgYnV0IHNob3VsZCByZXR1cm4gKi9cbm1tL2RhbW9uL2NvcmUuYzozODQ0OnN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM4NDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODUwLVxubW0vZGFtb24vY29yZS5jOjM4NTE6XHR3aGlsZSAoIWtkYW1vbmRfbmVlZF9zdG9wKGN0eCkpIHtcbm1tL2RhbW9uL2NvcmUuYy0zODUyLVx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgY3R4KSB7XG4tLVxubW0vZGFtb24vY29yZS5jLTM4NjEtXG5tbS9kYW1vbi9jb3JlLmM6Mzg2MjpcdFx0a2RhbW9uZF91c2xlZXAobWluX3dhaXRfdGltZSk7XG5tbS9kYW1vbi9jb3JlLmMtMzg2My1cbm1tL2RhbW9uL2NvcmUuYzozODY0Olx0XHRrZGFtb25kX2NhbGwoY3R4LCBmYWxzZSk7XG5tbS9kYW1vbi9jb3JlLmMtMzg2NS1cdFx0aWYgKGN0eC1cdTAwM2VtYXliZV9jb3JydXB0ZWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NzEtXG5tbS9kYW1vbi9jb3JlLmM6Mzg3MjpzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zODczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg5My0gKi9cbm1tL2RhbW9uL2NvcmUuYzozODk0OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxubW0vZGFtb24vY29yZS5jLTM4OTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTA0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6MzkwNTpcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjM5MDY6XHRrZGFtb25kX2luaXRfY3R4KGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzkwNy1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkxNi1cbm1tL2RhbW9uL2NvcmUuYzozOTE3Olx0d2hpbGUgKCFrZGFtb25kX25lZWRfc3RvcChjdHgpKSB7XG5tbS9kYW1vbi9jb3JlLmMtMzkxOC1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYy0zOTE5LVx0XHQgKiBjdHgtXHUwMDNlYXR0cnMgYW5kIGN0eC1cdTAwM2VuZXh0X3thZ2dyZWdhdGlvbixvcHNfdXBkYXRlfV9zaXMgY291bGRcbm1tL2RhbW9uL2NvcmUuYzozOTIwOlx0XHQgKiBiZSBjaGFuZ2VkIGZyb20ga2RhbW9uZF9jYWxsKCkuICBSZWFkIHRoZSB2YWx1ZXMgaGVyZSwgYW5kXG5tbS9kYW1vbi9jb3JlLmMtMzkyMS1cdFx0ICogdXNlIHRob3NlIGZvciB0aGlzIGl0ZXJhdGlvbi4gIFRoYXQgaXMsIGRhbW9uX3NldF9hdHRycygpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5MzEtXG5tbS9kYW1vbi9jb3JlLmM6MzkzMjpcdFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cdFx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk0MS1cbm1tL2RhbW9uL2NvcmUuYzozOTQyOlx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jLTM5NDMtXHRcdGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTM5NjItXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xubW0vZGFtb24vY29yZS5jOjM5NjM6XHRcdFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zOTY0LVx0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk3MC1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTcxOlx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYzozOTcyOlx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG5tbS9kYW1vbi9jb3JlLmMtMzk3My1cdFx0ICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NDpcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xubW0vZGFtb24vY29yZS5jLTM5NzUtXHRcdGlmIChjdHgtXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTc4LVx0XHRcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzk3OTpcdFx0XHRrZGFtb25kX3VzbGVlcChjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcbm1tL2RhbW9uL2NvcmUuYy0zOTgwLVx0XHRcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk4MTpcdFx0XHRrZGFtb25kX2NhbGwoY3R4LCBmYWxzZSk7XG5tbS9kYW1vbi9jb3JlLmM6Mzk4MjpcdFx0XHRpZiAoa2RhbW9uZF9uZWVkX3N0b3AoY3R4KSB8fCBjdHgtXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxubW0vZGFtb24vY29yZS5jLTM5ODMtXHRcdFx0XHRnb3RvIGRvbmU7XG4tLVxubW0vZGFtb24vY29yZS5jLTM5ODUtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6Mzk4NjpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTg3LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTktXHRcdFx0XHQgKiBjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgbWlnaHQgYmUgdXBkYXRlZFxubW0vZGFtb24vY29yZS5jOjQwMDA6XHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmMtNDAwMS1cdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYzo0MDAyOlx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbm1tL2RhbW9uL2NvcmUuYy00MDAzLVx0XHRcdFx0ICogdGhpcyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJyZW50XG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDUtXHRcdFx0XHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxubW0vZGFtb24vY29yZS5jOjQwMDY6XHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxubW0vZGFtb24vY29yZS5jLTQwMDctXHRcdFx0XHQgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDE3LVx0XHRcdFx0XHRjdHgtXHUwMDNlYXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnM7XG5tbS9kYW1vbi9jb3JlLmM6NDAxODpcdFx0XHRcdGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDE5LVx0XHRcdFx0c2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XG4tLVxubW0vZGFtb24vY29yZS5jLTQwMjUtXG5tbS9kYW1vbi9jb3JlLmM6NDAyNjpcdFx0XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzo0MDI3Olx0XHRcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTQwMjgtXHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA0NS1cdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzo0MDQ2Olx0a2RhbW9uZF9jYWxsKGN0eCwgdHJ1ZSk7XG5tbS9kYW1vbi9jb3JlLmMtNDA0Ny1cdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA1MS1cbm1tL2RhbW9uL2NvcmUuYzo0MDUyOlx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy00MDUzLVx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jOjQwNTQ6XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtNDA1NS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ4Nj1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00ODgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkwLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Mi1cdC8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5MzpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5NC1cdCAqIERvIG5vdGhpbmcgaGVyZS5cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDk5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMC1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMS17XG5tbS9kYW1vbi9scnVfc29ydC5jOjUwMjpcdGludCBrZGFtb25kX3BpZCA9IC0xO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MDMtXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNC1cdGlmIChjdHgpIHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA1Olx0XHRrZGFtb25kX3BpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XG5tbS9kYW1vbi9scnVfc29ydC5jOjUwNjpcdFx0aWYgKGtkYW1vbmRfcGlkIFx1MDAzYyAwKVxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDc6XHRcdFx0a2RhbW9uZF9waWQgPSAtMTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTA4LVx0fVxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDk6XHRyZXR1cm4gc3ByaW50ZihidWZmZXIsIFwmIzM0OyVkXFxuXCYjMzQ7LCBrZGFtb25kX3BpZCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMC19XG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NTEyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jOjUxMzpcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9rZGFtb25kX3BpZF9zdG9yZSxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTE0Olx0LmdldCA9IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxNS19O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIyLSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzo1MjM6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MjQtXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQwOT1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQxMS1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MTUtXHQvKlxubW0vZGFtb24vcmVjbGFpbS5jOjQxNjpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE3LVx0ICogRG8gbm90aGluZyBoZXJlLlxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MjEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjMtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNC17XG5tbS9kYW1vbi9yZWNsYWltLmM6NDI1Olx0aW50IGtkYW1vbmRfcGlkID0gLTE7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDI2LVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNy1cdGlmIChjdHgpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjg6XHRcdGtkYW1vbmRfcGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjk6XHRcdGlmIChrZGFtb25kX3BpZCBcdTAwM2MgMClcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzA6XHRcdFx0a2RhbW9uZF9waWQgPSAtMTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzEtXHR9XG5tbS9kYW1vbi9yZWNsYWltLmM6NDMyOlx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcJiMzNDslZFxcblwmIzM0Oywga2RhbW9uZF9waWQpO1xubW0vZGFtb24vcmVjbGFpbS5jLTQzMy19XG5tbS9kYW1vbi9yZWNsYWltLmMtNDM0LVxubW0vZGFtb24vcmVjbGFpbS5jOjQzNTpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMga2RhbW9uZF9waWRfcGFyYW1fb3BzID0ge1xubW0vZGFtb24vcmVjbGFpbS5jOjQzNjpcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jOjQzNzpcdC5nZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX2xvYWQsXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM4LX07XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQ0NS0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzo0NDY6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTQ0Ny1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjY0PXN0YXRpYyBpbnQgZGFtb25fc3RhdF9lbmFibGVkX2xvYWQoY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjY4LVxubW0vZGFtb24vc3RhdC5jOjI2OTpzdGF0aWMgaW50IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjcwLVx0XHRjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yNzItXHQvKlxubW0vZGFtb24vc3RhdC5jOjI3MzpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9zdGF0LmMtMjc0LVx0ICogRG8gbm90aGluZyBoZXJlLlxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yNzgtXG5tbS9kYW1vbi9zdGF0LmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fc3RhdF9rZGFtb25kX3BpZF9sb2FkKFxubW0vZGFtb24vc3RhdC5jLTI4MC1cdFx0Y2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjg2LVx0fSBlbHNlIHtcbm1tL2RhbW9uL3N0YXQuYzoyODc6XHRcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGRhbW9uX3N0YXRfY29udGV4dCk7XG5tbS9kYW1vbi9zdGF0LmMtMjg4LVx0XHRpZiAocGlkIFx1MDAzYyAxKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yOTMtXG5tbS9kYW1vbi9zdGF0LmM6Mjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9zdGF0LmM6Mjk1Olx0LnNldCA9IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfc3RvcmUsXG5tbS9kYW1vbi9zdGF0LmM6Mjk2Olx0LmdldCA9IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfbG9hZCxcbm1tL2RhbW9uL3N0YXQuYy0yOTctfTtcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMzA0LSAqL1xubW0vZGFtb24vc3RhdC5jOjMwNTptb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9zdGF0LmM6MzA2Ok1PRFVMRV9QQVJNX0RFU0Moa2RhbW9uZF9waWQsIFwmIzM0O3BpZCBvZiB0aGUga2RhbW9uZFwmIzM0Oyk7XG5tbS9kYW1vbi9zdGF0LmMtMzA3LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAzMj1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM5LVxubW0vZGFtb24vc3lzZnMuYzoyMDQwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0yMDQxLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDQtXG5tbS9kYW1vbi9zeXNmcy5jOjIwNDU6c3RhdGljIGludCBkYW1vbl9zeXNmc19rZGFtb25kX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMDQ2LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNjUtXG5tbS9kYW1vbi9zeXNmcy5jOjIwNjY6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMDY3LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNDc9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MjM1NzpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKFxubW0vZGFtb24vc3lzZnMuYy0yMzU4LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDc6XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDIxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MjYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0Mjc6XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQyOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTYtXG5tbS9kYW1vbi9zeXNmcy5jOjI1MTc6XHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxubW0vZGFtb24vc3lzZnMuYy0yNTE4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY5ND1zdGF0aWMgc3NpemVfdCBwaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MDctXG5tbS9kYW1vbi9zeXNmcy5jOjI3MDg6XHRwaWQgPSBkYW1vbl9rZGFtb25kX3BpZChjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yNzA5LVx0aWYgKHBpZCBcdTAwM2MgMClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3MjU9c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MzktXG5tbS9kYW1vbi9zeXNmcy5jOjI3NDA6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMuYy0yNzQxLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3NDktXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTA6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19rZGFtb25kX3N0YXRlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMuYy0yNzUxLVx0XHRfX0FUVFJfUldfTU9ERShzdGF0ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NTItXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19rZGFtb25kX3BpZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1NC1cdFx0X19BVFRSX1JPX01PREUocGlkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc1NS1cbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVmcmVzaF9tc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1Ny1cdFx0X19BVFRSX1JXX01PREUocmVmcmVzaF9tcywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NTgtXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTk6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX2tkYW1vbmRfc3RhdGVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMuYzoyNzYxOlx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9waWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMuYzoyNzYyOlx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9yZWZyZXNoX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjc2My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNzY1PUFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NjYtXG5tbS9kYW1vbi9zeXNmcy5jOjI3Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfa2RhbW9uZF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYy0yNzY5LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYzoyNzcwOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3ODg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc5My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtkYW1vbmRzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoyNzk0Olx0XHRkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoa2RhbW9uZHNfYXJyW2ldKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc5NS1cdFx0a29iamVjdF9kZWwoXHUwMDI2a2RhbW9uZHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjgwMz1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19rZGFtb25kc19idXN5KHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICoqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yODA4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI4MDk6XHRcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZHNbaV0pKVxubW0vZGFtb24vc3lzZnMuYy0yODEwLVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjgxNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yODM1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI4MzY6XHRcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI4MzctXHRcdGlmICgha2RhbW9uZCkge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjg0Mi1cdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2a2RhbW9uZC1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMuYzoyODQzOlx0XHRcdFx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSwgXHUwMDI2a2RhbW9uZHMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjg0NC1cdFx0XHRcdFwmIzM0OyVkXCYjMzQ7LCBpKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI4NDctXG5tbS9kYW1vbi9zeXNmcy5jOjI4NDg6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI4NDktXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGFyZ2V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzYtLypcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NzogKiBUZXN0IGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzgtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAtICogYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIHJlZ2lvbi4gIEluIGRldGFpbCwgaXQgaW5jcmVhc2VzICYjMzk7LVx1MDAzZW5yX2FjY2Vzc2VzJiMzOTsgb2Zcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTogKiByZWdpb25zIHRoYXQgYW4gYWNjZXNzIGhhcyBjb25maXJtZWQuICAmIzM5O2tkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpJiMzOTsgZmx1c2hlc1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyLSAqIHRoZSBhZ2dyZWdhdGVkIGluZm9ybWF0aW9uICgmIzM5Oy1cdTAwM2Vucl9hY2Nlc3NlcyYjMzk7IG9mIGVhY2ggcmVnaW9ucykgdG8gdGhlIHJlc3VsdFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMC1cdH1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjE6XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjItXHRpdCA9IDA7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTYtICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1NzogKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTgtICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM2MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQwNS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0MDY6XHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDA3LVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODA4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM0LSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4MzU6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4MzYtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBmdW5jdGlvbiBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIFRpbWUgdG8gdHJhY2UgaXRzIGNhbGxzLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnZvbHZlZDogYGRhbW9zX2FkanVzdF9xdW90YWAsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgYGtkYW1vbmRfZm5gLiBHb3QgaXQuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB3ZSBoYXZlIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1BBRERSYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBOZXh0IHN0ZXAsIEkgd2FudCB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBpbiBLY29uZmlnIGZvciBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgdGhlIHJlc3QuIFRoaXMgd2lsbCBzaG93IGhvdyB0aGVzZSBmZWF0dXJlcyByZWxhdGUgYW5kIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZTogQSBRdWljayBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIGl0JiMzOTtzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuIDEwMTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xuIDEwNTpcdFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuIDEwNjpcdFx0ICBwYWdlcyByZWNsYWltZWQgZmlyc3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBEQU1PTl9TVEFUXG4gMTA5Olx0XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbiAxMTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTAKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFF1b3RhIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gaG93IERBTU9OIGhhbmRsZXMgdGltZS1iYXNlZCBxdW90YXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgdGhlIGNhbGN1bGF0aW9uIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCB3aGVuIHRpbWUgcXVvdGFzIGFyZSBpbiBwbGF5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBlbnN1cmVzIHRoYXQgbWluaW11bSByZWdpb24gc2l6ZSBpcyB0YWtlbiBpbnRvIGFjY291bnQgKmJlZm9yZSogdGhlIHBhdGNoIHBlcmZvcm1zIGFueSBvdGhlciBjb21wYXJpc29ucyB3aXRoIHF1b3RhIGxpbWl0cy4gVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBwYXkgYXR0ZW50aW9uIHRvLiBTaW5jZSB0aGlzIHRpZXMgaW50byBzeXNmcyBpbnRlcmZhY2VzIChgREFNT05fU1lTRlNgKSBmb3IgbWFuYWdpbmcgbW9uaXRvcmluZyBzY2hlbWVzLCB0aGF0IHdpZGVucyB0aGUgYXR0YWNrIHN1cmZhY2UgYSBiaXQuCgpJJiMzOTt2ZSBmbGFnZ2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIHN5bWJvbHM6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhpcyBzaG93cyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGllZCB0byB0aGUgY2hhbmdlcy4KClRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGNhbGwgZ3JhcGggc2hvd3MgYSBjbGVhciBkZXBlbmRlbmN5IGNoYWluOiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBNYWtlcyB0aGUgc2NvcGUgdmVyeSBjbGVhcmx5IGRlZmluZWQuCgpHaXZlbiB0aGF0IHRoaXMgYWx0ZXJzIHF1b3RhIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04sIHdoaWNoIGRpcmVjdGx5IHJlbGF0ZXMgdG8gbWVtb3J5IG1vbml0b3JpbmcgYW5kIHJlZ2lvbiBzaXplLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgc3lzZnMgaW50ZXJmYWNlIGF2YWlsYWJsZSwgSSYjMzk7bSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBmdXp6aW5nIHRoaXMuIFRoZSBleHBsYW5hdGlvbiBpcyBzb3VuZCBhbmQgZm9jdXNlZC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmU6CgoqICAgKipXb3J0aEZ1enppbmc6KiogQ29uZmlybWVkLgoqICAgKipGb2N1c1N5bWJvbHM6KiogQ29uZmlybWVkIOKAkyBpdCYjMzk7cyB0aGUgcmlnaHQgbGlzdC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQg4oCTIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoqICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSwgYWNjdXJhdGUsIGFuZCBwb2ludHMgdG8gdGhlIHJpZ2h0IGNyaXRpY2FsIGFyZWFzLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBmdXp6aW5nIHBsYW4gaW4gbW90aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gaW4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCBmaXhlcyBhbiBhcml0aG1ldGljL2xvZ2ljIGlzc3VlIHdoZXJlIGBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cblxuVGhlIGNoYW5nZSBvcGVyYXRlcyBwdXJlbHkgb24gbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoYHVuc2lnbmVkIGxvbmcgZXN6YCwgYGVzel90aW1lYCwgYHRocm91Z2hwdXRgKSB3aXRoIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBhbmQgbm8gZGF0YSB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5ZjUzNDQzMGY0ZWRkNDc3YTdjMDFhNjRjNzFjN2Y3N2RlODljY2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjNlOWM5YjYzODVkNGUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMyMzksNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKQogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwogCXVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDsKIAl1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBlc3pfdGltZTsKIAogCWlmICghcXVvdGEtJmd0O21zICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3F1b3RhLSZndDtnb2FscykpIHsKIAkJcXVvdGEtJmd0O2VzeiA9IHF1b3RhLSZndDtzejsKQEAgLTMyNTksOCAmIzQzOzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKQogCQkJCQkxMDAwMDAwLCBxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyk7CiAJCWVsc2UKIAkJCXRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0OwotCQllc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLSZndDttcywgZXN6KTsKLQkJZXN6ID0gbWF4KGN0eC0mZ3Q7bWluX3JlZ2lvbl9zeiwgZXN6KTsKJiM0MzsJCWVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS0mZ3Q7bXMsIGN0eC0mZ3Q7bWluX3JlZ2lvbl9zeik7CiYjNDM7CQllc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7CiAJfQogCiAJaWYgKHF1b3RhLSZndDtzeiAmYW1wOyZhbXA7IHF1b3RhLSZndDtzeiAmbHQ7IGVzeikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFZmZlY3RpdmUgUXVvdGEgU2V0dGluZyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpcyB0dWNrZWQgYXdheSBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IGhvdyB0byBhcHByb2FjaCB0aGlzLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIEkmIzM5O2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBkcmlsbCBpbnRvIHRoaXMuIEkmIzM5O2xsIGZpcmUgdXAgZWl0aGVyIHJlYWQtZmlsZSBmb3IgYSBxdWljaywgaW50ZXJhY3RpdmUgYnJvd3NlIG9yLCBpZiBJIG5lZWQgbW9yZSBwcmVjaXNpb24sIGEgZ3JlcHBlciBzZWFyY2ggZm9jdXNpbmcgb24gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBUaGF0IHdheSwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcXVvdGEgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjg3PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzAyLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMTc6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxOC1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgc3RydWN0dXJlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENvcmUgRnVuY3Rpb25hbGl0eSAobW0vZGFtb24vY29yZS5jLCBsaW5lcyAzMjMwLTMyOTApKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBEQU1PTiBjb3JlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzIzMCB0byAzMjkwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgY2h1bmsmIzM5O3Mgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgREFNT04gZnJhbWV3b3JrLiBGcm9tIGNvbnRleHQgYW5kIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcml0aWNhbCBtYW5hZ2VtZW50IGZ1bmN0aW9uLgoKSSBpbW1lZGlhdGVseSBzdGFydCBieSBjb25zaWRlcmluZyB0aGUgc3Vycm91bmRpbmcgY29kZTogV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGZ1bmN0aW9ucyBkb2VzIGl0IGNhbGw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhbmQgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIHZpdGFsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBtZW1vcnkgcmVnaW9ucywgcGVyaGFwcyBwZXJmb3JtaW5nIG1vbml0b3JpbmcsIG9yIG1ha2luZyBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aG9zZSByZWdpb25zLiBDb3VsZCBiZSB0aGUgd29ya2hvcnNlcyBvZiB0aGUgbW9uaXRvcmluZyBvciBvcHRpbWl6YXRpb24gc3RlcHMuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyByYW5nZSBiZWNhdXNlIEkgZXhwZWN0IGl0IHRvIGNvbnRhaW4ga2V5IGxvZ2ljLiBJcyBpdCBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgREFNT04mIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzPyBJcyBpdCBtYW5hZ2luZyB0aGUgbW9uaXRvcmluZyBvciBvcHRpbWl6YXRpb24gY3ljbGUgaXRzZWxmIOKAkyBzZXR0aW5nIHVwIG5ldyByZWdpb25zLCB1cGRhdGluZyBleGlzdGluZyBvbmVzLCBvciBwb3RlbnRpYWxseSBoYW5kbGluZyByZW1vdmFsL2RlYWN0aXZhdGlvbj8gSSB3aWxsIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYGttYXBgLCBga3VubWFwYCwgYGdldF9wYWdlYCwgYHB1dF9wYWdlYCAob3IgdGhlaXIgbmV3ZXIgY291bnRlcnBhcnRzKSB0byBjaGVjayBmb3IgcGFnZSBtYW5hZ2VtZW50IGlzc3Vlcy4gSeKAmW0gYWx3YXlzIHdhcnkgb2YgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBzbyBJIHdpbGwgYW5hbHl6ZSB0aGUgbG9ja2luZyBwcmltaXRpdmVzIHVzZWQgaGVyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgREFNT04gY29yZSYjMzk7cyBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIElzIHRoaXMgZnVuY3Rpb24gbXVsdGl0aHJlYWRlZD8KCk15IHByaW1hcnkgZ29hbCByaWdodCBub3cgaXMgdG8gZm9ybSBhIHByZWNpc2UgbWVudGFsIG1hcCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBBbnkgcGVyZm9ybWFuY2UgbWV0cmljcyBiZWluZyB0cmFja2VkIG9yIHVwZGF0ZWQgaW4gdGhpcyByZWdpb24gYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsLCBhbmQgYXJlIGEgaGlnaCBwcmlvcml0eSB0byBsb29rIGF0LiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgbGlrZWx5IHBpdm90YWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEFmdGVyIHRoaXMgcmV2aWV3LCBJIHNob3VsZCBoYXZlIGEgZ29vZCBzZW5zZSBvZiB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGJlaW5nIGV4ZWN1dGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjMwOlx0XHRlbHNlXG4zMjMxOlx0XHRcdHF1b3RhLVx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcbjMyMzI6XHR9XG4zMjMzOlx0XG4zMjM0Olx0LypcbjMyMzU6XHQgKiBDYWxsZWQgb25seSBpZiBxdW90YS1cdTAwM2Vtcywgb3IgcXVvdGEtXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXHUwMDNlZ29hbHMgaXMgbm90IGVtcHR5XG4zMjM2Olx0ICovXG4zMjM3Olx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbjMyMzg6XHR7XG4zMjM5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjMyNDA6XHRcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcbjMyNDE6XHRcdHVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYO1xuMzI0MjpcdFx0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcbjMyNDM6XHRcbjMyNDQ6XHRcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4zMjQ1Olx0XHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xuMzI0NjpcdFx0XHRyZXR1cm47XG4zMjQ3Olx0XHR9XG4zMjQ4Olx0XG4zMjQ5Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4zMjUwOlx0XHRcdGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcbjMyNTE6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcbjMyNTI6XHRcdFx0ZWxzZSBpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxuMzI1MzpcdFx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbjMyNTQ6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlZXN6X2JwIC8gMTAwMDA7XG4zMjU1Olx0XHR9XG4zMjU2Olx0XG4zMjU3Olx0XHRpZiAocXVvdGEtXHUwMDNlbXMpIHtcbjMyNTg6XHRcdFx0aWYgKHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXG4zMjU5Olx0XHRcdFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxuMzI2MDpcdFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbjMyNjE6XHRcdFx0ZWxzZVxuMzI2MjpcdFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuMzI2MzpcdFx0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbjMyNjQ6XHRcdFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xuMzI2NTpcdFx0fVxuMzI2NjpcdFxuMzI2NzpcdFx0aWYgKHF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2VzeiBcdTAwM2MgZXN6KVxuMzI2ODpcdFx0XHRlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNjk6XHRcbjMyNzA6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IGVzejtcbjMyNzE6XHR9XG4zMjcyOlx0XG4zMjczOlx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbjMyNzQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjMyNzU6XHR7XG4zMjc2Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xuMzI3NzpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcbjMyNzg6XHRcbjMyNzk6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xuMzI4MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMyODE6XHRcdFx0XHRicmVhaztcbjMyODI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMjgzOlx0XHR9XG4zMjg0Olx0XHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXHUwMDNlZXN6KTtcbjMyODU6XHR9XG4zMjg2Olx0XG4zMjg3Olx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbjMyODg6XHR7XG4zMjg5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpbW1lZGlhdGVseTogdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gY2FsY3VsYXRpbmcgYGVzemAgaGFzIGJlZW4gYWx0ZXJlZC4gUHJldmlvdXNseSwgYGVzemAgd2FzIGNvbXB1dGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBgcXVvdGEtJmd0O2dvYWxzYCwgYW5kIHRoZW4gY2xhbXBlZCB1cCB0byBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4gTm93LCB3ZSBjYWxjdWxhdGUgYGVzel90aW1lYCDigJMgdGhlIHRpbWUtYmFzZWQgcXVvdGEg4oCTIGFuZCAqdGhlbiogdGFrZSB0aGUgbWluaW11bSBvZiB0aGF0IGFuZCB0aGUgZ29hbC1iYXNlZCBgZXN6YC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBvcmlnaW5hbCBsb2dpYyBjb3VsZCBhcnRpZmljaWFsbHkgaW5mbGF0ZSB0aGUgcXVvdGEsIGlnbm9yaW5nIHBvdGVudGlhbGx5IHNtYWxsZXIgcXVvdGFzIHNwZWNpZmllZCBpbiB0aGUgYGdvYWxzYCBzZXR1cCBieSB0aGUgdXNlci4gQnkgY2xhbXBpbmcgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKmJlZm9yZSogdGFraW5nIHRoZSBtaW5pbXVtLCB3ZSBlbnN1cmUgdGhhdCB0aGUgdGltZSBxdW90YSBpcyBhdCBsZWFzdCBgY3R4LSZndDttaW5fcmVnaW9uX3N6YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gdGhlIGFjdHVhbCBxdW90YSBpcyB0aGUgbWluaW11bSBvZiB0aGUgdGltZSBxdW90YSBhbmQgdGhlIGdvYWwgcXVvdGEuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCBvdXIgY2hlY2tsaXN0IGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEZpcnN0LCBhcmUgd2Ugc2VuZGluZyBhbnkgbmV3IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBvciBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcyBpbiBhIHdheSB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBZ2Fpbiwgbm8uIGBlc3pfdGltZWAgaXMgYSBwdXJlbHkgbG9jYWwgdmFyaWFibGUsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgaW5pdGlhbGl6ZWQuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gc2lnbiBvZiB0aGF0IGVpdGhlci4gRm91cnRoLCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIHRvIGRvIHdpdGggYnVmZmVyIGhhbmRsaW5nIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZD8gTm8uIFRoaXMgaXMgYWxsIGFib3V0IG51bWVyaWNhbCBsaW1pdHMgd2l0aGluIERBTU9OJiMzOTtzIHF1b3RhIGNhbGN1bGF0aW9uLgoKQmFzaWNhbGx5LCB0aGlzIGlzIGEgY2xlYW4gbG9naWMvYXJpdGhtZXRpYyBmaXggaW4gaG93IERBTU9OIHF1b3RhcyBhcmUgZGV0ZXJtaW5lZC4gTm8gYGNvcHlfdG9fdXNlcmAsIG5vIGhlYXAgb3Igc3RhY2sgYnVmZmVyIGhhbmRsaW5nLCBubyBvYnZpb3VzIGlzc3Vlcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgY29uZmlybSBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBhbmQgaXQgc2VlbXMgc2FmZS4gTm93LCBsZXQmIzM5O3MgY3JhZnQgYSBjb25jaXNlIGV4cGxhbmF0aW9uIGZvciB0aGUgY29kZSByZXZpZXcuIFRoZSBjb250cmFzdCBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTiBhcHBsaWNhYmlsaXR5IG5lZWRzIHRvIGJlIG1hZGUgY2xlYXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXG5cblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXG5cblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjIwODI0Mjc3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTQ0NzI4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gaW4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCBmaXhlcyBhbiBhcml0aG1ldGljL2xvZ2ljIGlzc3VlIHdoZXJlIGBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXFxuXFxuVGhlIGNoYW5nZSBvcGVyYXRlcyBwdXJlbHkgb24gbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoYHVuc2lnbmVkIGxvbmcgZXN6YCwgYGVzel90aW1lYCwgYHRocm91Z2hwdXRgKSB3aXRoIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBhbmQgbm8gZGF0YSB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgcXVvdGEgYWRqdXN0bWVudHMgYW5kIHByZXZlbnQgZWRnZS1jYXNlIGFjY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjIwODI0ODcyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyOTQwMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjNlOWM5YjYzODVkNGUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMyMzksNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XFxuIFxcbiBcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuIFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuQEAgLTMyNTksOCArMzI2MCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdFxcdFxcdFxcdDEwMDAwMDAsIHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcXG4tXFx0XFx0ZXN6ID0gbWluKHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGVzeik7XFxuLVxcdFxcdGVzeiA9IG1heChjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XFxuK1xcdFxcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuK1xcdFxcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlc3ogXFx1MDAzYyBlc3opXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjcwMjAzNzY3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk1MzIzMTE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gREFNT1MgKGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEpIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWY1MzQ0MzBmNGVkZDQ3N2E3YzAxYTY0YzcxYzdmNzdkZTg5Y2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzozMDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uM2U5YzliNjM4NWQ0ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzIzOSw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuIFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XG4rXHR1bnNpZ25lZCBsb25nIGVzel90aW1lO1xuIFxuIFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZxdW90YS1cdTAwM2Vnb2FscykpIHtcbiBcdFx0cXVvdGEtXHUwMDNlZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG5AQCAtMzI1OSw4ICszMjYwLDggQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4gXHRcdGVsc2VcbiBcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbi1cdFx0ZXN6ID0gbWluKHRocm91Z2hwdXQgKiBxdW90YS1cdTAwM2VtcywgZXN6KTtcbi1cdFx0ZXN6ID0gbWF4KGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6LCBlc3opO1xuK1x0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbitcdFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xuIFx0fVxuIFxuIFx0aWYgKHF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2VzeiBcdTAwM2MgZXN6KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6MjcuNzAyMDM5NDE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2OTQwMzk2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaDogQSBRdWljayBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZWZpbmluZyBob3cgZWZmZWN0aXZlIHF1b3RhcyBhcmUgc2V0IHdpdGhpbiBEQU1PTiwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0P1wiIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBEQU1PTiBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgcXVvdGFzIGFyZSBjYWxjdWxhdGVkIGFuZCB1dGlsaXplZC4gV2hhdCB0cmlnZ2VycyB0aGlzIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIGNhbGw/IFdoYXQncyB0aGUgaW1wYWN0IGlmIHRoZSBgZXN6YCB2YWx1ZSBpcyBhZGp1c3RlZD9cblxuSSdsbCBjaGVjayB0aGUgZGlmZiBpdHNlbGYgY2xvc2VseS4gSXQgbG9va3MgbGlrZSBgZXN6YCBjYWxjdWxhdGlvbiBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNvcnBvcmF0ZSBgZXN6X3RpbWVgLiBUaGUgb2xkIGBlc3pgIGNhbGN1bGF0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggb25lIHRoYXQgaW5jbHVkZXMgYSB0aW1lIGVsZW1lbnQ7IG5vdywgdGhyb3VnaHB1dCBpcyBjYWxjdWxhdGVkLCBtdWx0aXBsaWVkIGJ5IGBxdW90YS1cdTAwM2Vtc2AsIGFuZCB0aGVuIGNvbnN0cmFpbmVkIGJ5IGBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zemAuIEkgaGF2ZSB0byBjb25maXJtIHRoZSB1bml0cy4gSXQgc2VlbXMgdGhhdCB3ZSBhcmUgdGFraW5nIHRoZSBtYXhpbXVtIG9mIHRocm91Z2hwdXQgKiBxdW90YSBhbmQgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBgZXN6YC5cblxuVG8gZ2V0IGEgZnVsbCBwaWN0dXJlLCBJJ2xsIHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGFmZmVjdC4gSSdsbCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHRvIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiBEQU1PTidzIGNvcmUgbG9naWMuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ29hbHMgb2YgdGhlIG9yaWdpbmFsIGRlc2lnbiwgdGhlIHJlYXNvbnMgZm9yIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgb3V0Y29tZSBpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjM4LjM5NjA4MTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODA4OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyMjA9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXFxubW0vZGFtb24vY29yZS5jOjMyMzc6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzIzOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI4Nz1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMDAtXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxubW0vZGFtb24vY29yZS5jOjMzMDE6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMi1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzE2LVxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzozMzE3OlxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzMTgtXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDozOC40NDk4OTgxMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0Mzk4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIERBTU9OJ3MgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIGZpbGUg4oCTIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24ga25vYnMgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIERBTU9OIG1pZ2h0IGhhdmUuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBzdHJhaWdodCB0byBgbW0vZGFtb24vS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBmZWF0dXJlIHNldC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMsIGFueSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBvYnNjdXJlIG9uZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBwbGF0Zm9ybS1zcGVjaWZpYyBjaG9pY2VzLCBvciBmZWF0dXJlcyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzbW9vdGggYW5kIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBleHBlY3RlZCBjaG9pY2VzIHRoYXQgd2lsbCBpbmZsdWVuY2UgREFNT04ncyBiZWhhdmlvciBhbmQgdGhlIHJlc291cmNlIGNvbnN1bXB0aW9uIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDAuNTk0Mjk5NDkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDIyMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQwLjY0MTcyOTEwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjYyNjk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIERBTU9OJ3MgQ29yZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBUaGUgTWFrZWZpbGUgaXMgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMsIHNvIEknbGwgY2hlY2sgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBob3cgYGNvcmUuY2AgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHRoZSB3YXkgSSB0aGluayBpdCBpcyBhbmQgdGhhdCBub3RoaW5nIHVuZXhwZWN0ZWQgaXMgZ29pbmcgb24uIEknbSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBmbGFncywgb3B0aW1pemF0aW9uIGxldmVscyB0aGF0IG1pZ2h0IGFmZmVjdCBwcm9maWxpbmcsIG9yIGluY2x1ZGUgcGF0aHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJlaGF2aW9yYWwgY2hhbmdlcyB0aGF0IEkgd291bGRuJ3QgcmVhZGlseSBleHBlY3QuIEVzc2VudGlhbGx5LCBJJ20gdmVyaWZ5aW5nIHRoZSByZWNpcGUgZm9yIGJ1aWxkaW5nIHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgbW9uaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQyLjgwODAwMTA1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQyLjgwODA2MjYwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjcxMjIxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCdWlsZCBQcm9jZXNzIG9mIHRoZSBEQU1PTiBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIERBTU9OIHN1YnN5c3RlbSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJ2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIHNlZSBob3cgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIHJ1bGVzIGFyZSBpbiBwbGFjZSwgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyBldmVyeXRoaW5nIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBMZXQncyBzZWUgaWYgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24sIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgdHdpc3RzIG9yIGN1c3RvbSBidWlsZCBzdGVwcyBpbnZvbHZlZC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQ1LjA3NTE4NzI5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MDk0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDUuMTIyNjAxNzQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MDE2NDU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipEaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAzMjMwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJ20gZ29pbmcgaW4gd2l0aCBhIHNwZWNpZmljIHB1cnBvc2UsIHByb2JhYmx5IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBmcm9tIGxpbmUgMzIzMCB0byAzMjgwLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgb3IgZnVuY3Rpb24gY2FsbHMgaW4gdGhhdCByZWdpb24gdGhhdCBhcmUgcGVydGluZW50IHRvIHRoZSBwcm9ibGVtIGF0IGhhbmQuIEhvcGVmdWxseSwgd2l0aGluIHRoaXMgc25pcHBldCBsaWVzIHRoZSBjb3JlIGluZm9ybWF0aW9uIEknbSBhZnRlciwgYW5kIGl0IHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgbG9naWMgdW5mb2xkcywgYW5kIHRoZSByZWFsIGluc2lnaHRzIGFyZSBsaWtlbHkgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDkuOTI0MjQ5NzcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzIzNTpcXHQgKiBDYWxsZWQgb25seSBpZiBxdW90YS1cXHUwMDNlbXMsIG9yIHF1b3RhLVxcdTAwM2VzeiBhcmUgc2V0LCBvciBxdW90YS1cXHUwMDNlZ29hbHMgaXMgbm90IGVtcHR5XFxuMzIzNjpcXHQgKi9cXG4zMjM3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzIzODpcXHR7XFxuMzIzOTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjMyNDA6XFx0XFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xcbjMyNDE6XFx0XFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XFxuMzI0MjpcXHRcXHR1bnNpZ25lZCBsb25nIGVzel90aW1lO1xcbjMyNDM6XFx0XFxuMzI0NDpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuMzI0NTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gcXVvdGEtXFx1MDAzZXN6O1xcbjMyNDY6XFx0XFx0XFx0cmV0dXJuO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFxuMzI0OTpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpIHtcXG4zMjUwOlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXFxuMzI1MTpcXHRcXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcXG4zMjUyOlxcdFxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxuMzI1MzpcXHRcXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XFxuMzI1NDpcXHRcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlZXN6X2JwIC8gMTAwMDA7XFxuMzI1NTpcXHRcXHR9XFxuMzI1NjpcXHRcXG4zMjU3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlbXMpIHtcXG4zMjU4OlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucylcXG4zMjU5OlxcdFxcdFxcdFxcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3osXFxuMzI2MDpcXHRcXHRcXHRcXHRcXHRcXHQxMDAwMDAwLCBxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XFxuMzI2MTpcXHRcXHRcXHRlbHNlXFxuMzI2MjpcXHRcXHRcXHRcXHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcXG4zMjYzOlxcdFxcdFxcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMzI2NDpcXHRcXHRcXHRlc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7XFxuMzI2NTpcXHRcXHR9XFxuMzI2NjpcXHRcXG4zMjY3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZXN6IFxcdTAwM2MgZXN6KVxcbjMyNjg6XFx0XFx0XFx0ZXN6ID0gcXVvdGEtXFx1MDAzZXN6O1xcbjMyNjk6XFx0XFxuMzI3MDpcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gZXN6O1xcbjMyNzE6XFx0fVxcbjMyNzI6XFx0XFxuMzI3MzpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbjMyNzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4zMjc1OlxcdHtcXG4zMjc2OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuMzI3NzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcbjMyNzg6XFx0XFxuMzI3OTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4zMjgwOlxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjMyODE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MjpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MzpcXHRcXHR9XFxuMzI4NDpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NTpcXHR9XFxuMzI4NjpcXHRcXG4zMjg3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzI4ODpcXHR7XFxuMzI4OTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjMyOTA6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkxOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuMzI5MjpcXHRcXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcXG4zMjkzOlxcdFxcdHVuc2lnbmVkIGludCBzY29yZSwgbWF4X3Njb3JlID0gMDtcXG4zMjk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo0OS45MjQ0ODU4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc0NDEwNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrLiBEQU1PTiwgZm9yIHRob3NlIG5vdCBpbnRpbWF0ZWx5IGZhbWlsaWFyLCBsaXZlcyBpbiBgbW0vZGFtb25gIGFuZCBjYW4gYmUgY29udHJvbGxlZCB2aWEgc3lzZnMg4oCTIHRoYXQncyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYCBhbmQgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIFN5emthbGxlciBjYW4sIG9mIGNvdXJzZSwgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIGEgc29mdHdhcmUtYmFzZWQgdGFyZ2V0LCBwZXJmZWN0LlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEluaXRpYWxseSwgdGhlIGNvZGUgdXNlZCB0byBjbGFtcCB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBiYXNlZCBvbiBgdGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zYCBhbmQgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgaWYgZ29hbHMgd2VyZSBzZXQgaW4gdGhlIHF1b3RhLCBvciB0aGUgdGltZSBiYXNlZCBxdW90YSB3YXMgYmVsb3cgdGhlIGBtaW5fcmVnaW9uX3N6YCwgdGhlIGNvZGUgZW5zdXJlZCBgZXN6YCB3YXMgKmF0IGxlYXN0KiBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyB0aGlzLiBOb3csIHRoZSB0aW1lLWJhc2VkIHF1b3RhIGlzIGxvd2VyLWJvdW5kZWQgYnkgYG1pbl9yZWdpb25fc3pgIGFuZCB0aGF0IGlzIHRoZW4gY29tcGFyZWQgYWdhaW5zdCB0aGUgZ29hbHMtYmFzZWQgcXVvdGEuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgbm93IGFsbG93cyBmb3IgYSBxdW90YSB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGBtaW5fcmVnaW9uX3N6YCBpZiBhIGdvYWwtYmFzZWQgcXVvdGEgaXMgYWxzbyBhY3RpdmUuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LiBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSBtYWtlcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB0YXJnZXQuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIGhvdyBEQU1PTiBjYWxjdWxhdGVzIHF1b3RhcyDigJMgYW5kIHJlc2lkZXMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIHRoZSBzY29wZSBpcyBjb250YWluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGUgY2FsbGVycyBhcmUgYGRhbW9zX2FkanVzdF9xdW90YWAgd2hpY2ggaXMgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1NC42Njg1OTQ2MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODU0NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNzM9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg2LVxcbm1tL2RhbW9uL2NvcmUuYzozMjg3OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjg9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cXG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1NS4wMDcxNDQ1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NDY2Mzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCBpbiBMaW51eCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhyZWUga2V5IGZ1bmN0aW9ucyBoZXJlOiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBpbmxpbmVkIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBxdW90YSBhZGp1c3RtZW50cyBhcmUgcHJvcGFnYXRlZC4gSSdtIHRoaW5raW5nIGV2ZW4gaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJZiBub3Qgc3RhdGljLCBpdCBtdXN0IGJlIGluIHRoZSBzeW1ib2wgdGFibGUsIGluIHdoaWNoIGNhc2UgSSBuZWVkIHRvIGtub3cgdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHRoZWlyIGJlaGF2aW9yLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZXhwbG9yZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQgYXJvdW5kIGhvdyB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyBhbmQgZWZmZWN0aXZlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1vbml0b3JpbmcgYW5kIHJlY2xhbWF0aW9uIGZyYW1ld29yay4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIHN5bWJvbHMgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1Ny4zMDE4MTEyMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjczMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkwOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTA5OlxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy05MTAtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTE1LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo5MTY6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtOTE3LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTkxOS1cXG5tbS9kYW1vbi9jb3JlLmM6OTIwOlxcdG11dGV4X2luaXQoXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtOTIxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0NS1cXHRcXHQgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDQ2OlxcdFxcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny1cXHRcXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTEwNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTExMTItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTE0NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MjA1MzpcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIwNTQtXFx0aWYgKCFjdHgtXFx1MDAzZWtkYW1vbmQpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjA1NS1cXHRcXHRlcnIgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzoyMDU2OlxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjIwNTc6XFx0XFx0Y3R4LVxcdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcXFwia2RhbW9uZC4lZFxcXCIsXFxubW0vZGFtb24vY29yZS5jLTIwNTgtXFx0XFx0XFx0XFx0bnJfcnVubmluZ19jdHhzKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDYyLVxcdFxcdH0gZWxzZSB7XFxubW0vZGFtb24vY29yZS5jOjIwNjM6XFx0XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2NS1cXHR9XFxubW0vZGFtb24vY29yZS5jOjIwNjY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIwNjctXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEzMT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMzQtXFxubW0vZGFtb24vY29yZS5jOjIxMzU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LVxcdHRzayA9IGN0eC1cXHUwMDNla2RhbW9uZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTM4LVxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbm1tL2RhbW9uL2NvcmUuYzoyMTM5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTQwLVxcdFxcdGt0aHJlYWRfc3RvcF9wdXQodHNrKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTQyLVxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MjE0MzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjE0NC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2OS1cXG5tbS9kYW1vbi9jb3JlLmM6MjE3MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIxNzEtXFx0cnVubmluZyA9IGN0eC1cXHUwMDNla2RhbW9uZCAhPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyMTcyOlxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTczLVxcdHJldHVybiBydW5uaW5nO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXFxubW0vZGFtb24vY29yZS5jOjIxNzc6ICogZGFtb25fa2RhbW9uZF9waWQoKSAtIFJldHVybiBwaWQgb2YgYSBnaXZlbiBEQU1PTiBjb250ZXh0J3Mgd29ya2VyIHRocmVhZC5cXG5tbS9kYW1vbi9jb3JlLmMtMjE3OC0gKiBAY3R4OlxcdFRoZSBEQU1PTiBjb250ZXh0IG9mIHRoZSBxdWVzdGlvbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTgxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTgyOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIxODMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxODUtXFxubW0vZGFtb24vY29yZS5jOjIxODY6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTg3LVxcdGlmIChjdHgtXFx1MDAzZWtkYW1vbmQpXFxubW0vZGFtb24vY29yZS5jLTIxODgtXFx0XFx0cGlkID0gY3R4LVxcdTAwM2VrZGFtb25kLVxcdTAwM2VwaWQ7XFxubW0vZGFtb24vY29yZS5jOjIxODk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIxOTAtXFx0cmV0dXJuIHBpZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjY5PWludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMjkzOnN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2dldF9pbnRlcnZhbHNfYWRhcHRhdGlvbl9icChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzNjMtXFxubW0vZGFtb24vY29yZS5jOjIzNjQ6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMjM2NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM1Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVxcbm1tL2RhbW9uL2NvcmUuYzozMzY4OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYyPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MDgtICogb3ZlcmhlYWQgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm4uICBJZiBhIG1lcmdlIHdhc1xcbm1tL2RhbW9uL2NvcmUuYzozNTA5OiAqIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJ2tkYW1vbmRfc3BsaXRfcmVnaW9ucygpJyB3aWxsIHJldmVydCBpdC5cXG5tbS9kYW1vbi9jb3JlLmMtMzUxMC0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MTYtICovXFxubW0vZGFtb24vY29yZS5jOjM1MTc6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxubW0vZGFtb24vY29yZS5jLTM1MTgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN6X2xpbWl0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2MjI9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjU4LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxcbm1tL2RhbW9uL2NvcmUuYzozNjU5OiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICdrZGFtb25kX21lcmdlX3JlZ2lvbnMoKScgd2lsbCByZXZlcnRcXG5tbS9kYW1vbi9jb3JlLmMtMzY2MC0gKiBpdC5cXG5tbS9kYW1vbi9jb3JlLmMtMzY2MS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzY2MjpzdGF0aWMgdm9pZCBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzAzOnN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzcwNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzczOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NjAtXFxubW0vZGFtb24vY29yZS5jOjM3NjE6c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG5tbS9kYW1vbi9jb3JlLmMtMzc2Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc5NT1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzgwMC0vKlxcbm1tL2RhbW9uL2NvcmUuYzozODAxOiAqIGtkYW1vbmRfY2FsbCgpIC0gaGFuZGxlIGRhbW9uX2NhbGxfY29udHJvbCBvYmplY3RzLlxcbm1tL2RhbW9uL2NvcmUuYy0zODAyLSAqIEBjdHg6XFx0VGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IG9mIHRoZSBrZGFtb25kLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MDktICovXFxubW0vZGFtb24vY29yZS5jOjM4MTA6c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXFxubW0vZGFtb24vY29yZS5jLTM4MTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4NDMtLyogUmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGl0J3Mgbm90IGFjdGl2YXRlZCBidXQgc2hvdWxkIHJldHVybiAqL1xcbm1tL2RhbW9uL2NvcmUuYzozODQ0OnN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zODQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODUwLVxcbm1tL2RhbW9uL2NvcmUuYzozODUxOlxcdHdoaWxlICgha2RhbW9uZF9uZWVkX3N0b3AoY3R4KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0zODUyLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODYxLVxcbm1tL2RhbW9uL2NvcmUuYzozODYyOlxcdFxcdGtkYW1vbmRfdXNsZWVwKG1pbl93YWl0X3RpbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0zODYzLVxcbm1tL2RhbW9uL2NvcmUuYzozODY0OlxcdFxcdGtkYW1vbmRfY2FsbChjdHgsIGZhbHNlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzg2NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg3MS1cXG5tbS9kYW1vbi9jb3JlLmM6Mzg3MjpzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzg3My17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg5My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzg5NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9jb3JlLmMtMzg5NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkwNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozOTA1OlxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjM5MDY6XFx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTA3LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MTYtXFxubW0vZGFtb24vY29yZS5jOjM5MTc6XFx0d2hpbGUgKCFrZGFtb25kX25lZWRfc3RvcChjdHgpKSB7XFxubW0vZGFtb24vY29yZS5jLTM5MTgtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmMtMzkxOS1cXHRcXHQgKiBjdHgtXFx1MDAzZWF0dHJzIGFuZCBjdHgtXFx1MDAzZW5leHRfe2FnZ3JlZ2F0aW9uLG9wc191cGRhdGV9X3NpcyBjb3VsZFxcbm1tL2RhbW9uL2NvcmUuYzozOTIwOlxcdFxcdCAqIGJlIGNoYW5nZWQgZnJvbSBrZGFtb25kX2NhbGwoKS4gIFJlYWQgdGhlIHZhbHVlcyBoZXJlLCBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMzkyMS1cXHRcXHQgKiB1c2UgdGhvc2UgZm9yIHRoaXMgaXRlcmF0aW9uLiAgVGhhdCBpcywgZGFtb25fc2V0X2F0dHJzKClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMxLVxcbm1tL2RhbW9uL2NvcmUuYzozOTMyOlxcdFxcdGlmIChrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihjdHgpKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDEtXFxubW0vZGFtb24vY29yZS5jOjM5NDI6XFx0XFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0My1cXHRcXHRjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk2Mi1cXHRcXHRcXHRcXHRcXHRuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk2MzpcXHRcXHRcXHRrZGFtb25kX21lcmdlX3JlZ2lvbnMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTY0LVxcdFxcdFxcdFxcdFxcdG1heF9tZXJnZV9zY29yZSAvIDEwLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NzAtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3MTpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3MjpcXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxubW0vZGFtb24vY29yZS5jLTM5NzMtXFx0XFx0ICovXFxubW0vZGFtb24vY29yZS5jOjM5NzQ6XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTc1LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1heWJlX2NvcnJ1cHRlZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTc4LVxcdFxcdFxcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XFxubW0vZGFtb24vY29yZS5jOjM5Nzk6XFx0XFx0XFx0a2RhbW9uZF91c2xlZXAoY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTgwLVxcdFxcdFxcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXFxubW0vZGFtb24vY29yZS5jOjM5ODE6XFx0XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTgyOlxcdFxcdFxcdGlmIChrZGFtb25kX25lZWRfc3RvcChjdHgpIHx8IGN0eC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgzLVxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTg1LVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2Y3R4LVxcdTAwM2VzY2hlbWVzKSlcXG5tbS9kYW1vbi9jb3JlLmM6Mzk4NjpcXHRcXHRcXHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk4Ny1cXHRcXHRlbHNlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5OS1cXHRcXHRcXHRcXHQgKiBjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIG1pZ2h0IGJlIHVwZGF0ZWRcXG5tbS9kYW1vbi9jb3JlLmM6NDAwMDpcXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jLTQwMDEtXFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYzo0MDAyOlxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxubW0vZGFtb24vY29yZS5jLTQwMDMtXFx0XFx0XFx0XFx0ICogdGhpcyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJyZW50XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwNS1cXHRcXHRcXHRcXHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxcbm1tL2RhbW9uL2NvcmUuYzo0MDA2OlxcdFxcdFxcdFxcdCAqIGZvbGxvd2luZyBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBjYWxsXFxubW0vZGFtb24vY29yZS5jLTQwMDctXFx0XFx0XFx0XFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDE3LVxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnM7XFxubW0vZGFtb24vY29yZS5jOjQwMTg6XFx0XFx0XFx0XFx0a2RhbW9uZF90dW5lX2ludGVydmFscyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDE5LVxcdFxcdFxcdFxcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDI1LVxcbm1tL2RhbW9uL2NvcmUuYzo0MDI2OlxcdFxcdFxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDI3OlxcdFxcdFxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDI4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDQ1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDQ2OlxcdGtkYW1vbmRfY2FsbChjdHgsIHRydWUpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDQ3LVxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwNTEtXFxubW0vZGFtb24vY29yZS5jOjQwNTI6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy00MDUzLVxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jOjQwNTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTQwNTUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ4Nj1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5MC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkyLVxcdC8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0OTM6XFx0ICoga2RhbW9uZF9waWQgaXMgcmVhZC1vbmx5LCBidXQga2VybmVsIGNvbW1hbmQgbGluZSBjb3VsZCB3cml0ZSBpdC5cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5NC1cXHQgKiBEbyBub3RoaW5nIGhlcmUuXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQoY2hhciAqYnVmZmVyLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTAwLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTAxLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjUwMjpcXHRpbnQga2RhbW9uZF9waWQgPSAtMTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNC1cXHRpZiAoY3R4KSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDU6XFx0XFx0a2RhbW9uZF9waWQgPSBkYW1vbl9rZGFtb25kX3BpZChjdHgpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA2OlxcdFxcdGlmIChrZGFtb25kX3BpZCBcXHUwMDNjIDApXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDc6XFx0XFx0XFx0a2RhbW9uZF9waWQgPSAtMTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwOC1cXHR9XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDk6XFx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcXFwiJWRcXFxcblxcXCIsIGtkYW1vbmRfcGlkKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMC19XFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTI6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjUxMzpcXHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfc3RvcmUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTQ6XFx0LmdldCA9IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTUtfTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIyLSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIzOm1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MjQtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9NDA5PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjQxMjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE1LVxcdC8qXFxubW0vZGFtb24vcmVjbGFpbS5jOjQxNjpcXHQgKiBrZGFtb25kX3BpZCBpcyByZWFkLW9ubHksIGJ1dCBrZXJuZWwgY29tbWFuZCBsaW5lIGNvdWxkIHdyaXRlIGl0Llxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTctXFx0ICogRG8gbm90aGluZyBoZXJlLlxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDIzLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjQte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MjU6XFx0aW50IGtkYW1vbmRfcGlkID0gLTE7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDI3LVxcdGlmIChjdHgpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI4OlxcdFxcdGtkYW1vbmRfcGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI5OlxcdFxcdGlmIChrZGFtb25kX3BpZCBcXHUwMDNjIDApXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzMDpcXHRcXHRcXHRrZGFtb25kX3BpZCA9IC0xO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzEtXFx0fVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzI6XFx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcXFwiJWRcXFxcblxcXCIsIGtkYW1vbmRfcGlkKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDMzLX1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDM2OlxcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mzc6XFx0LmdldCA9IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM4LX07XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDQ1LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NDY6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDQ3LVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTI2ND1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9sb2FkKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjY4LVxcbm1tL2RhbW9uL3N0YXQuYzoyNjk6c3RhdGljIGludCBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX3N0b3JlKFxcbm1tL2RhbW9uL3N0YXQuYy0yNzAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yNzItXFx0LypcXG5tbS9kYW1vbi9zdGF0LmM6MjczOlxcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXFxubW0vZGFtb24vc3RhdC5jLTI3NC1cXHQgKiBEbyBub3RoaW5nIGhlcmUuXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjc4LVxcbm1tL2RhbW9uL3N0YXQuYzoyNzk6c3RhdGljIGludCBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX2xvYWQoXFxubW0vZGFtb24vc3RhdC5jLTI4MC1cXHRcXHRjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTI4Ni1cXHR9IGVsc2Uge1xcbm1tL2RhbW9uL3N0YXQuYzoyODc6XFx0XFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoZGFtb25fc3RhdF9jb250ZXh0KTtcXG5tbS9kYW1vbi9zdGF0LmMtMjg4LVxcdFxcdGlmIChwaWQgXFx1MDAzYyAxKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTI5My1cXG5tbS9kYW1vbi9zdGF0LmM6Mjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vc3RhdC5jOjI5NTpcXHQuc2V0ID0gZGFtb25fc3RhdF9rZGFtb25kX3BpZF9zdG9yZSxcXG5tbS9kYW1vbi9zdGF0LmM6Mjk2OlxcdC5nZXQgPSBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX2xvYWQsXFxubW0vZGFtb24vc3RhdC5jLTI5Ny19O1xcbi0tXFxubW0vZGFtb24vc3RhdC5jLTMwNC0gKi9cXG5tbS9kYW1vbi9zdGF0LmM6MzA1Om1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vc3RhdC5jOjMwNjpNT0RVTEVfUEFSTV9ERVNDKGtkYW1vbmRfcGlkLCBcXFwicGlkIG9mIHRoZSBrZGFtb25kXFxcIik7XFxubW0vZGFtb24vc3RhdC5jLTMwNy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAzMj1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzktXFxubW0vZGFtb24vc3lzZnMuYzoyMDQwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA0MS17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDQtXFxubW0vZGFtb24vc3lzZnMuYzoyMDQ1OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDYte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDY1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA2NjpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxubW0vZGFtb24vc3lzZnMuYy0yMDY3LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTYtXFxubW0vZGFtb24vc3lzZnMuYzoyMzU3OnN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoXFxubW0vZGFtb24vc3lzZnMuYy0yMzU4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDYtXFxubW0vZGFtb24vc3lzZnMuYzoyNDA3OlxcdGlmICghZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjQyMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MjYtXFxubW0vZGFtb24vc3lzZnMuYzoyNDI3OlxcdGlmICghZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKHN5c2ZzX2tkYW1vbmQpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQyOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTYtXFxubW0vZGFtb24vc3lzZnMuYzoyNTE3OlxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxubW0vZGFtb24vc3lzZnMuYy0yNTE4LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2OTQ9c3RhdGljIHNzaXplX3QgcGlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3MDctXFxubW0vZGFtb24vc3lzZnMuYzoyNzA4OlxcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzA5LVxcdGlmIChwaWQgXFx1MDAzYyAwKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNzI1PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3MzktXFxubW0vZGFtb24vc3lzZnMuYzoyNzQwOnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NDEte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfc3RhdGVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMuYy0yNzUxLVxcdFxcdF9fQVRUUl9SV19NT0RFKHN0YXRlLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NTItXFxubW0vZGFtb24vc3lzZnMuYzoyNzUzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfa2RhbW9uZF9waWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMuYy0yNzU0LVxcdFxcdF9fQVRUUl9ST19NT0RFKHBpZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzU1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVmcmVzaF9tc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3NTctXFx0XFx0X19BVFRSX1JXX01PREUocmVmcmVzaF9tcywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzU4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1OTpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfa2RhbW9uZF9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2MDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9zdGF0ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYzoyNzYxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX3BpZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYzoyNzYyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX3JlZnJlc2hfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjc2My1cXHROVUxMLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNzY1PUFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzY2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2ODpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NjktXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMuYy0yNzcxLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI3ODg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzkzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrZGFtb25kcy1cXHUwMDNlbnI7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc5NDpcXHRcXHRkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoa2RhbW9uZHNfYXJyW2ldKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI3OTUtXFx0XFx0a29iamVjdF9kZWwoXFx1MDAyNmtkYW1vbmRzX2FycltpXS1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI4MDM9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfa2RhbW9uZHNfYnVzeShzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqKmtkYW1vbmRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yODA4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9rZGFtb25kczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoyODA5OlxcdFxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZHNbaV0pKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjgxMC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjgxNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI4MzUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2tkYW1vbmRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjI4MzY6XFx0XFx0a2RhbW9uZCA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI4MzctXFx0XFx0aWYgKCFrZGFtb25kKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI4NDItXFx0XFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlLCBcXHUwMDI2a2RhbW9uZHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0yODQ0LVxcdFxcdFxcdFxcdFxcXCIlZFxcXCIsIGkpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yODQ3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjg0ODpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FkZF9kaXJzKGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjg0OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGFyZ2V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03Ni0vKlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NzogKiBUZXN0IGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4LSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAtICogYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIHJlZ2lvbi4gIEluIGRldGFpbCwgaXQgaW5jcmVhc2VzICctXFx1MDAzZW5yX2FjY2Vzc2VzJyBvZlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTogKiByZWdpb25zIHRoYXQgYW4gYWNjZXNzIGhhcyBjb25maXJtZWQuICAna2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCknIGZsdXNoZXNcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODItICogdGhlIGFnZ3JlZ2F0ZWQgaW5mb3JtYXRpb24gKCctXFx1MDAzZW5yX2FjY2Vzc2VzJyBvZiBlYWNoIHJlZ2lvbnMpIHRvIHRoZSByZXN1bHRcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwLVxcdH1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIxOlxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjItXFx0aXQgPSAwO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ni0gKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1NzogKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU4LSAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZ1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM2MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDA1LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0MDY6XFx0a2RhbW9uZF9zcGxpdF9yZWdpb25zKGMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MDctXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgwOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM0LSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5Olxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODM1OiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFxcXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcXFwiKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM2LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1Ny4zNDk0OTExNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MDQ2NDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGZ1bmN0aW9uIGFuZCBob3cgaXQncyB1c2VkLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxscy4gTG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIGBrZGFtb25kX2ZuYC4gR290IGl0LiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHdlIGhhdmUgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUEFERFJgLiBHb29kLCBnb29kLiBUaGVzZSBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIE5leHQgc3RlcCwgSSB3YW50IHRvIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzIGluIEtjb25maWcgZm9yIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCB0aGUgcmVzdC4gVGhpcyB3aWxsIHNob3cgaG93IHRoZXNlIGZlYXR1cmVzIHJlbGF0ZSBhbmQgaW50ZXJhY3Qgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1OS43OTk5NTkyNDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjU5LjgwMDAzODA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU4MjQyMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGU6IEEgUXVpY2sgQXVkaXQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlIHJldmlldyBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgaW4gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBtaWdodCBiZSBoYXBwZW5pbmcgaGVyZS4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBpdCdzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowMi40NTgyODMyMjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxuIDEwNTpcXHRcXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuIDEwNjpcXHRcXHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBEQU1PTl9TVEFUXFxuIDEwOTpcXHRcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowMi40NTgzNTkyODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Mzg0MDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIHRpbWUtYmFzZWQgcXVvdGFzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdGhlIGNhbGN1bGF0aW9uIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCB3aGVuIHRpbWUgcXVvdGFzIGFyZSBpbiBwbGF5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBlbnN1cmVzIHRoYXQgbWluaW11bSByZWdpb24gc2l6ZSBpcyB0YWtlbiBpbnRvIGFjY291bnQgKmJlZm9yZSogdGhlIHBhdGNoIHBlcmZvcm1zIGFueSBvdGhlciBjb21wYXJpc29ucyB3aXRoIHF1b3RhIGxpbWl0cy4gVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoYXQncyBhIGtleSBhcmVhIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIHRoaXMgdGllcyBpbnRvIHN5c2ZzIGludGVyZmFjZXMgKGBEQU1PTl9TWVNGU2ApIGZvciBtYW5hZ2luZyBtb25pdG9yaW5nIHNjaGVtZXMsIHRoYXQgd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBhIGJpdC5cblxuSSd2ZSBmbGFnZ2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIHN5bWJvbHM6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhpcyBzaG93cyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGllZCB0byB0aGUgY2hhbmdlcy5cblxuVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGUgY2FsbCBncmFwaCBzaG93cyBhIGNsZWFyIGRlcGVuZGVuY3kgY2hhaW46IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIE1ha2VzIHRoZSBzY29wZSB2ZXJ5IGNsZWFybHkgZGVmaW5lZC5cblxuR2l2ZW4gdGhhdCB0aGlzIGFsdGVycyBxdW90YSBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLCB3aGljaCBkaXJlY3RseSByZWxhdGVzIHRvIG1lbW9yeSBtb25pdG9yaW5nIGFuZCByZWdpb24gc2l6ZSwgYW5kIHRoYXQgd2UgaGF2ZSBhIGNsZWFyIHN5c2ZzIGludGVyZmFjZSBhdmFpbGFibGUsIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBmdXp6aW5nIHRoaXMuIFRoZSBleHBsYW5hdGlvbiBpcyBzb3VuZCBhbmQgZm9jdXNlZC5cblxuSSdtIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogQ29uZmlybWVkLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCDigJMgaXQncyB0aGUgcmlnaHQgbGlzdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIOKAkyBjb3ZlcnMgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy5cbiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlLCBhY2N1cmF0ZSwgYW5kIHBvaW50cyB0byB0aGUgcmlnaHQgY3JpdGljYWwgYXJlYXMuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGlzIGZ1enppbmcgcGxhbiBpbiBtb3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjkwLCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMxOjA3LjE1MjIwMjgwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTQzMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgcXVvdGEgYWRqdXN0bWVudHMgYW5kIHByZXZlbnQgZWRnZS1jYXNlIGFjY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMxOjA3LjIzNDM1Mzk1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMTg2MDcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowNy4yMzQ4NzQ2NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzExODA4MTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cXG5cXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZjUzNDQzMGY0ZWRkNDc3YTdjMDFhNjRjNzFjN2Y3N2RlODljY2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi4zZTljOWI2Mzg1ZDRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM5LDYgKzMyMzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4gXHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4gXHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbitcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4gXG4gXHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuIFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbkBAIC0zMjU5LDggKzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuLVx0XHRlc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBlc3opO1xuLVx0XHRlc3ogPSBtYXgoY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XG4rXHRcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cdTAwM2VtcywgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuK1x0XHRlc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7XG4gXHR9XG4gXG4gXHRpZiAocXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZXN6IFx1MDAzYyBlc3opXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowNy4yMzQ4NzU3MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwOTEzNTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFZmZlY3RpdmUgUXVvdGEgU2V0dGluZyoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlzIHR1Y2tlZCBhd2F5IGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGtub3cgZXhhY3RseSBob3cgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBJJ2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBkcmlsbCBpbnRvIHRoaXMuIEknbGwgZmlyZSB1cCBlaXRoZXIgcmVhZC1maWxlIGZvciBhIHF1aWNrLCBpbnRlcmFjdGl2ZSBicm93c2Ugb3IsIGlmIEkgbmVlZCBtb3JlIHByZWNpc2lvbiwgYSBncmVwcGVyIHNlYXJjaCBmb2N1c2luZyBvbiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24uIFRoYXQgd2F5LCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcXVvdGEgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTEuOTQ0MDE0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzIxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjIwPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjM2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjM3OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMzgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyODc9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAwLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbm1tL2RhbW9uL2NvcmUuYzozMzAxOlxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzMDItXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cXHRcXHRcXHRjYWNoZWRfZXN6ID0gcXVvdGEtXFx1MDAzZWVzejtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxNzpcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzE4LVxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTIuMTE4MzQxMTY1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDkwNDUxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCBzdHJ1Y3R1cmVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkFuYWx5emluZyBEQU1PTidzIENvcmUgRnVuY3Rpb25hbGl0eSAobW0vZGFtb24vY29yZS5jLCBsaW5lcyAzMjMwLTMyOTApKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc2VjdGlvbiBvZiB0aGUgREFNT04gY29yZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDMyMzAgdG8gMzI5MCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGNodW5rJ3Mgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgREFNT04gZnJhbWV3b3JrLiBGcm9tIGNvbnRleHQgYW5kIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcml0aWNhbCBtYW5hZ2VtZW50IGZ1bmN0aW9uLlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IGJ5IGNvbnNpZGVyaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlOiBXaGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24/IFdoYXQgZnVuY3Rpb25zIGRvZXMgaXQgY2FsbD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHNjb3BlIGFuZCBiZWluZyBtYW5pcHVsYXRlZCBoZXJlPyBJJ20gYW50aWNpcGF0aW5nIHRoaXMgaXMgYSB2aXRhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMsIHBlcmhhcHMgcGVyZm9ybWluZyBtb25pdG9yaW5nLCBvciBtYWtpbmcgb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhvc2UgcmVnaW9ucy4gQ291bGQgYmUgdGhlIHdvcmtob3JzZXMgb2YgdGhlIG1vbml0b3Jpbmcgb3Igb3B0aW1pemF0aW9uIHN0ZXBzLlxuXG5JJ20gemVyb2luZyBpbiBvbiB0aGlzIHJhbmdlIGJlY2F1c2UgSSBleHBlY3QgaXQgdG8gY29udGFpbiBrZXkgbG9naWMuIElzIGl0IGFsbG9jYXRpbmcgb3IgZnJlZWluZyBEQU1PTidzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gSXMgaXQgbWFuYWdpbmcgdGhlIG1vbml0b3Jpbmcgb3Igb3B0aW1pemF0aW9uIGN5Y2xlIGl0c2VsZiDigJMgc2V0dGluZyB1cCBuZXcgcmVnaW9ucywgdXBkYXRpbmcgZXhpc3Rpbmcgb25lcywgb3IgcG90ZW50aWFsbHkgaGFuZGxpbmcgcmVtb3ZhbC9kZWFjdGl2YXRpb24/IEkgd2lsbCBkZWZpbml0ZWx5IGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGBrbWFwYCwgYGt1bm1hcGAsIGBnZXRfcGFnZWAsIGBwdXRfcGFnZWAgKG9yIHRoZWlyIG5ld2VyIGNvdW50ZXJwYXJ0cykgdG8gY2hlY2sgZm9yIHBhZ2UgbWFuYWdlbWVudCBpc3N1ZXMuIEnigJltIGFsd2F5cyB3YXJ5IG9mIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcywgc28gSSB3aWxsIGFuYWx5emUgdGhlIGxvY2tpbmcgcHJpbWl0aXZlcyB1c2VkIGhlcmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIERBTU9OIGNvcmUncyBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIElzIHRoaXMgZnVuY3Rpb24gbXVsdGl0aHJlYWRlZD9cblxuTXkgcHJpbWFyeSBnb2FsIHJpZ2h0IG5vdyBpcyB0byBmb3JtIGEgcHJlY2lzZSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzdHJhdGVneS4gQW55IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVpbmcgdHJhY2tlZCBvciB1cGRhdGVkIGluIHRoaXMgcmVnaW9uIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCwgYW5kIGFyZSBhIGhpZ2ggcHJpb3JpdHkgdG8gbG9vayBhdC4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGxpa2VseSBwaXZvdGFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5IHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzLiBBZnRlciB0aGlzIHJldmlldywgSSBzaG91bGQgaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiBiZWluZyBleGVjdXRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTUuNDI3Mzg4NzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzIzMDpcXHRcXHRlbHNlXFxuMzIzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gVUxPTkdfTUFYO1xcbjMyMzI6XFx0fVxcbjMyMzM6XFx0XFxuMzIzNDpcXHQvKlxcbjMyMzU6XFx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXFx1MDAzZW1zLCBvciBxdW90YS1cXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXFx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxcbjMyMzY6XFx0ICovXFxuMzIzNzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbjMyMzg6XFx0e1xcbjMyMzk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjQwOlxcdFxcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcXG4zMjQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYO1xcbjMyNDI6XFx0XFx0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcXG4zMjQzOlxcdFxcbjMyNDQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbjMyNDU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IHF1b3RhLVxcdTAwM2VzejtcXG4zMjQ2OlxcdFxcdFxcdHJldHVybjtcXG4zMjQ3OlxcdFxcdH1cXG4zMjQ4OlxcdFxcbjMyNDk6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuMzI1MDpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUKVxcbjMyNTE6XFx0XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XFxuMzI1MjpcXHRcXHRcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxcbjMyNTM6XFx0XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbjMyNTQ6XFx0XFx0XFx0ZXN6ID0gcXVvdGEtXFx1MDAzZWVzel9icCAvIDEwMDAwO1xcbjMyNTU6XFx0XFx0fVxcbjMyNTY6XFx0XFxuMzI1NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZW1zKSB7XFxuMzI1ODpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXFxuMzI1OTpcXHRcXHRcXHRcXHR0aHJvdWdocHV0ID0gbXVsdF9mcmFjKHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxcbjMyNjA6XFx0XFx0XFx0XFx0XFx0XFx0MTAwMDAwMCwgcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpO1xcbjMyNjE6XFx0XFx0XFx0ZWxzZVxcbjMyNjI6XFx0XFx0XFx0XFx0dGhyb3VnaHB1dCA9IFBBR0VfU0laRSAqIDEwMjQ7XFxuMzI2MzpcXHRcXHRcXHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXFx1MDAzZW1zLCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbjMyNjQ6XFx0XFx0XFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xcbjMyNjU6XFx0XFx0fVxcbjMyNjY6XFx0XFxuMzI2NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2VzeiBcXHUwMDNjIGVzeilcXG4zMjY4OlxcdFxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2VzejtcXG4zMjY5OlxcdFxcbjMyNzA6XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IGVzejtcXG4zMjcxOlxcdH1cXG4zMjcyOlxcdFxcbjMyNzM6XFx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4zMjc0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuMzI3NTpcXHR7XFxuMzI3NjpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xcbjMyNzc6XFx0XFx0c3RydWN0IGRhbW9zICpzaXRlcjtcXG4zMjc4OlxcdFxcbjMyNzk6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XFxuMzI4MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMjgxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyODI6XFx0XFx0XFx0c2lkeCsrO1xcbjMyODM6XFx0XFx0fVxcbjMyODQ6XFx0XFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVxcdTAwM2Vlc3opO1xcbjMyODU6XFx0fVxcbjMyODY6XFx0XFxuMzI4NzpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTUuNDI3NjUyNzUzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MjUyODM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBJIHNlZSB0aGUgY29yZSBjaGFuZ2UgaW1tZWRpYXRlbHk6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGNhbGN1bGF0aW5nIGBlc3pgIGhhcyBiZWVuIGFsdGVyZWQuIFByZXZpb3VzbHksIGBlc3pgIHdhcyBjb21wdXRlZCwgcG90ZW50aWFsbHkgYmFzZWQgb24gYHF1b3RhLVx1MDAzZWdvYWxzYCwgYW5kIHRoZW4gY2xhbXBlZCB1cCB0byBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgLiBOb3csIHdlIGNhbGN1bGF0ZSBgZXN6X3RpbWVgIOKAkyB0aGUgdGltZS1iYXNlZCBxdW90YSDigJMgYW5kICp0aGVuKiB0YWtlIHRoZSBtaW5pbXVtIG9mIHRoYXQgYW5kIHRoZSBnb2FsLWJhc2VkIGBlc3pgLlxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgb3JpZ2luYWwgbG9naWMgY291bGQgYXJ0aWZpY2lhbGx5IGluZmxhdGUgdGhlIHF1b3RhLCBpZ25vcmluZyBwb3RlbnRpYWxseSBzbWFsbGVyIHF1b3RhcyBzcGVjaWZpZWQgaW4gdGhlIGBnb2Fsc2Agc2V0dXAgYnkgdGhlIHVzZXIuIEJ5IGNsYW1waW5nIHRoZSB0aW1lLWJhc2VkIHF1b3RhICpiZWZvcmUqIHRha2luZyB0aGUgbWluaW11bSwgd2UgZW5zdXJlIHRoYXQgdGhlIHRpbWUgcXVvdGEgaXMgYXQgbGVhc3QgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gdGhlIGFjdHVhbCBxdW90YSBpcyB0aGUgbWluaW11bSBvZiB0aGUgdGltZSBxdW90YSBhbmQgdGhlIGdvYWwgcXVvdGEuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggb3VyIGNoZWNrbGlzdCBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBGaXJzdCwgYXJlIHdlIHNlbmRpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugb3IgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMgaW4gYSB3YXkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBZ2Fpbiwgbm8uIGBlc3pfdGltZWAgaXMgYSBwdXJlbHkgbG9jYWwgdmFyaWFibGUsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgaW5pdGlhbGl6ZWQuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gc2lnbiBvZiB0aGF0IGVpdGhlci4gRm91cnRoLCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIHRvIGRvIHdpdGggYnVmZmVyIGhhbmRsaW5nIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZD8gTm8uIFRoaXMgaXMgYWxsIGFib3V0IG51bWVyaWNhbCBsaW1pdHMgd2l0aGluIERBTU9OJ3MgcXVvdGEgY2FsY3VsYXRpb24uXG5cbkJhc2ljYWxseSwgdGhpcyBpcyBhIGNsZWFuIGxvZ2ljL2FyaXRobWV0aWMgZml4IGluIGhvdyBEQU1PTiBxdW90YXMgYXJlIGRldGVybWluZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBubyBoZWFwIG9yIHN0YWNrIGJ1ZmZlciBoYW5kbGluZywgbm8gb2J2aW91cyBpc3N1ZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBjb25maXJtIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBhbmQgaXQgc2VlbXMgc2FmZS4gTm93LCBsZXQncyBjcmFmdCBhIGNvbmNpc2UgZXhwbGFuYXRpb24gZm9yIHRoZSBjb2RlIHJldmlldy4gVGhlIGNvbnRyYXN0IGJldHdlZW4gS01TQU4gYW5kIEtBU0FOIGFwcGxpY2FiaWxpdHkgbmVlZHMgdG8gYmUgbWFkZSBjbGVhciwgc28gdGhhdCB0aGVyZSBpcyBubyBjb25mdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDUsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MjAuMzUyOTM5NzUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6YCB3YXMgaW1wcm9wZXJseSBjbGFtcGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RpdmUgc2l6ZSAoYGVzemApIHJhdGhlciB0aGFuIGp1c3QgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKGBlc3pfdGltZWApLlxcblxcblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cXG5cXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 17:28:20 +0000 UTC FinishedAt: 2026-09-08 17:31:21 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_VADDR", "DAMON_PADDR" ], "series_id": "e58ebbfe-2c6b-494f-861a-d962c9915a4b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damos_set_effective_quota", "damos_adjust_quota", "kdamond_apply_schemes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICAgJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAgICYjMzQ7a2RhbW9uZF9hcHBseV9zY2hlbWVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YCB3YXMgaW1wcm9wZXJseSBjbGFtcGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RpdmUgc2l6ZSAoYGVzemApIHJhdGhlciB0aGFuIGp1c3QgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKGBlc3pfdGltZWApLlxuXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMTc6MzA6MjYgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi4zZTljOWI2Mzg1ZDRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM5LDYgJiM0MzszMjM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuIFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcbiBcbiBcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4gXHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xuQEAgLTMyNTksOCAmIzQzOzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuLVx0XHRlc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBlc3opO1xuLVx0XHRlc3ogPSBtYXgoY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XG4mIzQzO1x0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbiYjNDM7XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbiBcdH1cbiBcbiBcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEmIzM0OywKICAgICYjMzQ7ZGFtb3NfYWRqdXN0X3F1b3RhJiMzNDssCiAgICAmIzM0O2tkYW1vbmRfYXBwbHlfc2NoZW1lcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMTc6MzA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmMKaW5kZXggY2U4YzZmOTkxMDZlZC4uM2U5YzliNjM4NWQ0ZSAxMDA2NDQKLS0tIGEvbW0vZGFtb24vY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuYwpAQCAtMzIzOSw2ICYjNDM7MzIzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpCiAJc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9ICZhbXA7cy0mZ3Q7cXVvdGE7CiAJdW5zaWduZWQgbG9uZyB0aHJvdWdocHV0OwogCXVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYOwomIzQzOwl1bnNpZ25lZCBsb25nIGVzel90aW1lOwogCiAJaWYgKCFxdW90YS0mZ3Q7bXMgJmFtcDsmYW1wOyBsaXN0X2VtcHR5KCZhbXA7cXVvdGEtJmd0O2dvYWxzKSkgewogCQlxdW90YS0mZ3Q7ZXN6ID0gcXVvdGEtJmd0O3N6OwpAQCAtMzI1OSw4ICYjNDM7MzI2MCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpCiAJCQkJCTEwMDAwMDAsIHF1b3RhLSZndDt0b3RhbF9jaGFyZ2VkX25zKTsKIAkJZWxzZQogCQkJdGhyb3VnaHB1dCA9IFBBR0VfU0laRSAqIDEwMjQ7Ci0JCWVzeiA9IG1pbih0aHJvdWdocHV0ICogcXVvdGEtJmd0O21zLCBlc3opOwotCQllc3ogPSBtYXgoY3R4LSZndDttaW5fcmVnaW9uX3N6LCBlc3opOwomIzQzOwkJZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLSZndDttcywgY3R4LSZndDttaW5fcmVnaW9uX3N6KTsKJiM0MzsJCWVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTsKIAl9CiAKIAlpZiAocXVvdGEtJmd0O3N6ICZhbXA7JmFtcDsgcXVvdGEtJmd0O3N6ICZsdDsgZXN6KQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDI5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgREFNT04gUGF0Y2g6IEEgUXVpY2sgRGVlcCBEaXZlKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSYjMzk7cmUgcmVmaW5pbmcgaG93IGVmZmVjdGl2ZSBxdW90YXMgYXJlIHNldCB3aXRoaW4gREFNT04sIGxpa2VseSByZWxhdGVkIHRvIG1lbW9yeSBhY2Nlc3MgbW9uaXRvcmluZyBhbmQgb3B0aW1pemF0aW9uLgoKTXkgZmlyc3QgdGhvdWdodCBpcywgJiMzNDtXaGF0JiMzOTtzIHRoZSBjb250ZXh0PyYjMzQ7IEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBEQU1PTiBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHF1b3RhcyBhcmUgY2FsY3VsYXRlZCBhbmQgdXRpbGl6ZWQuIFdoYXQgdHJpZ2dlcnMgdGhpcyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCBjYWxsPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3QgaWYgdGhlIGBlc3pgIHZhbHVlIGlzIGFkanVzdGVkPwoKSSYjMzk7bGwgY2hlY2sgdGhlIGRpZmYgaXRzZWxmIGNsb3NlbHkuIEl0IGxvb2tzIGxpa2UgYGVzemAgY2FsY3VsYXRpb24gaGFzIGJlZW4gbW9kaWZpZWQgdG8gaW5jb3Jwb3JhdGUgYGVzel90aW1lYC4gVGhlIG9sZCBgZXN6YCBjYWxjdWxhdGlvbiBoYXMgYmVlbiByZXBsYWNlZCB3aXRoIG9uZSB0aGF0IGluY2x1ZGVzIGEgdGltZSBlbGVtZW50OyBub3csIHRocm91Z2hwdXQgaXMgY2FsY3VsYXRlZCwgbXVsdGlwbGllZCBieSBgcXVvdGEtJmd0O21zYCwgYW5kIHRoZW4gY29uc3RyYWluZWQgYnkgYGN0eC0mZ3Q7bWluX3JlZ2lvbl9zemAuIEkgaGF2ZSB0byBjb25maXJtIHRoZSB1bml0cy4gSXQgc2VlbXMgdGhhdCB3ZSBhcmUgdGFraW5nIHRoZSBtYXhpbXVtIG9mIHRocm91Z2hwdXQgKiBxdW90YSBhbmQgY3R4LSZndDttaW5fcmVnaW9uX3N6LCBiZWZvcmUgY2FsY3VsYXRpbmcgdGhlIG1pbmltdW0gYGVzemAuCgpUbyBnZXQgYSBmdWxsIHBpY3R1cmUsIEkmIzM5O2xsIHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGFmZmVjdC4gSSYjMzk7bGwgYWxzbyBjaGVjayB0aGUgY2FsbGVycyBvZiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB0byBzZWUgaG93IGl0JiMzOTtzIHVzZWQgd2l0aGluIERBTU9OJiMzOTtzIGNvcmUgbG9naWMuIEkmIzM5O20gbG9va2luZyBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCBwZXJmb3JtYW5jZSBpbXBhY3RzLCBvciB1bmV4cGVjdGVkIGludGVyYWN0aW9ucy4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBnb2FscyBvZiB0aGUgb3JpZ2luYWwgZGVzaWduLCB0aGUgcmVhc29ucyBmb3IgdGhpcyBjaGFuZ2UsIGFuZCB3aGF0IHRoZSBpbnRlbmRlZCBvdXRjb21lIGlzLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgY2hhbmdlIGlzIHNvdW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjg3PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzAyLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMTc6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxOC1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyNjUKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhIHNlYXNvbmVkIHByb2Zlc3Npb25hbCBpbiB0aGUgZmllbGQsIHNwZWFraW5nIGRpcmVjdGx5IHRvIGFub3RoZXIgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIERBTU9OJiMzOTtzIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIGZpbGUg4oCTIHRoYXQmIzM5O3MgdGhlIHBsYWNlIHRvIHN0YXJ0IHdoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIGtub2JzIGFuZCB3aGF0IGRlcGVuZGVuY2llcyBEQU1PTiBtaWdodCBoYXZlLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBtbS9kYW1vbi9LY29uZmlnYC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIHBvc3NpYmxlIGZlYXR1cmUgc2V0LiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMsIGFueSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBvYnNjdXJlIG9uZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBwbGF0Zm9ybS1zcGVjaWZpYyBjaG9pY2VzLCBvciBmZWF0dXJlcyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzbW9vdGggYW5kIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIHRoZXJlLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHRoZSBleHBlY3RlZCBjaG9pY2VzIHRoYXQgd2lsbCBpbmZsdWVuY2UgREFNT04mIzM5O3MgYmVoYXZpb3IgYW5kIHRoZSByZXNvdXJjZSBjb25zdW1wdGlvbiBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgREFNT04mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcJiMzNDtEYXRhIEFjY2VzcyBNb25pdG9yaW5nXCYjMzQ7XG5tbS9kYW1vbi9LY29uZmlnLTQtXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXG5tbS9kYW1vbi9LY29uZmlnLTYtXHRib29sIFwmIzM0O0RBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTQtXG5tbS9kYW1vbi9LY29uZmlnOjE1OmNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbm1tL2RhbW9uL0tjb25maWctMTYtXHRib29sIFwmIzM0O0NoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0yNS1cbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctMjctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcbm1tL2RhbW9uL0tjb25maWctMzktXHRib29sIFwmIzM0O0RhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1wmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNDYtXG5tbS9kYW1vbi9LY29uZmlnOjQ3OmNvbmZpZyBEQU1PTl9QQUREUlxubW0vZGFtb24vS2NvbmZpZy00OC1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNTUtXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcbm1tL2RhbW9uL0tjb25maWctNjktXHRib29sIFwmIzM0O0RBTU9OIHN5c2ZzIGludGVyZmFjZVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctNzUtXG5tbS9kYW1vbi9LY29uZmlnOjc2OmNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXG5tbS9kYW1vbi9LY29uZmlnLTc3LVx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctODctXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXG5tbS9kYW1vbi9LY29uZmlnLTg5LVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctOTktXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcbm1tL2RhbW9uL0tjb25maWctMTAxLVx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xMDctXG5tbS9kYW1vbi9LY29uZmlnOjEwODpjb25maWcgREFNT05fU1RBVFxubW0vZGFtb24vS2NvbmZpZy0xMDktXHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTExNS1cbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxubW0vZGFtb24vS2NvbmZpZy0xMTctXHRib29sIFwmIzM0O0VuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjY3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIERBTU9OJiMzOTtzIENvcmUqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBUaGUgTWFrZWZpbGUgaXMgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMsIHNvIEkmIzM5O2xsIGNoZWNrIGBtbS9kYW1vbi9NYWtlZmlsZWAuIFRoaXMgc2hvdWxkIGdpdmUgbWUgdGhlIGxvdy1kb3duIG9uIHRoZSBjb21waWxhdGlvbiBmbGFncywgZGVwZW5kZW5jaWVzLCBhbmQgaG93IGBjb3JlLmNgIGZpdHMgaW50byB0aGUgYnJvYWRlciBwaWN0dXJlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgY29tcGlsYXRpb24gZW52aXJvbm1lbnQgaXMgY29uZmlndXJlZCB0aGUgd2F5IEkgdGhpbmsgaXQgaXMgYW5kIHRoYXQgbm90aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uLiBJJiMzOTttIGxvb2tpbmcgZm9yIGFueSB1bnVzdWFsIGZsYWdzLCBvcHRpbWl6YXRpb24gbGV2ZWxzIHRoYXQgbWlnaHQgYWZmZWN0IHByb2ZpbGluZywgb3IgaW5jbHVkZSBwYXRocyB0aGF0IGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgSSB3b3VsZG4mIzM5O3QgcmVhZGlseSBleHBlY3QuIEVzc2VudGlhbGx5LCBJJiMzOTttIHZlcmlmeWluZyB0aGUgcmVjaXBlIGZvciBidWlsZGluZyB0aGlzIGNydWNpYWwgcGllY2Ugb2YgdGhlIG1vbml0b3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRcbiAgIDM6XHRvYmoteVx0XHRcdFx0Oj0gY29yZS5vXG4gICA0Olx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyB2YWRkci5vXG4gICA1Olx0b2JqLSQoQ09ORklHX0RBTU9OX1BBRERSKVx0JiM0Mzs9IG9wcy1jb21tb24ubyBwYWRkci5vXG4gICA2Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVx0JiM0Mzs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXG4gICA3Olx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cbiAgIDg6XHRvYmotJChDT05GSUdfREFNT05fTFJVX1NPUlQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBscnVfc29ydC5vXG4gICA5Olx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXHQmIzQzOz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1NzUwCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBCdWlsZCBQcm9jZXNzIG9mIHRoZSBEQU1PTiBTdWJzeXN0ZW0qKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBEQU1PTiBzdWJzeXN0ZW0gaXMgaW50ZWdyYXRlZCBpbnRvIHRoZSBrZXJuZWwgYnVpbGQuIFRoZSBwbGFjZSB0byBzdGFydCwgYXMgYWx3YXlzLCBpcyB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcmlnaHQ/IEkmIzM5O2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIHNlZSBob3cgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIHJ1bGVzIGFyZSBpbiBwbGFjZSwgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyBldmVyeXRoaW5nIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBMZXQmIzM5O3Mgc2VlIGlmIGl0JiMzOTtzIGEgc3RyYWlnaHRmb3J3YXJkIGluY2x1c2lvbiwgb3IgaWYgdGhlcmUgYXJlIGFueSBpbnRlcmVzdGluZyB0d2lzdHMgb3IgY3VzdG9tIGJ1aWxkIHN0ZXBzIGludm9sdmVkLiBJJiMzOTttIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNzgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKkRpdmluZyBpbnRvIGBtbS9kYW1vbi9jb3JlLmNgIGZvciBDb250ZXh0KioKClJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGFyb3VuZCBsaW5lIDMyMzAgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIFRoaXMgaXNuJiMzOTt0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJiMzOTttIGdvaW5nIGluIHdpdGggYSBzcGVjaWZpYyBwdXJwb3NlLCBwcm9iYWJseSBkZWJ1Z2dpbmcgb3IgdHJ5aW5nIHRvIG9wdGltaXplIHNvbWV0aGluZyByZWxhdGVkIHRvIERBTU9OJiMzOTtzIGNvcmUgZnVuY3Rpb25hbGl0eS4gSSYjMzk7bSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBmcm9tIGxpbmUgMzIzMCB0byAzMjgwLiBJJiMzOTttIGxpa2VseSBsb29raW5nIGZvciB0aGUgcmVsZXZhbnQgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgbG9vcHMsIG9yIGZ1bmN0aW9uIGNhbGxzIGluIHRoYXQgcmVnaW9uIHRoYXQgYXJlIHBlcnRpbmVudCB0byB0aGUgcHJvYmxlbSBhdCBoYW5kLiBIb3BlZnVsbHksIHdpdGhpbiB0aGlzIHNuaXBwZXQgbGllcyB0aGUgY29yZSBpbmZvcm1hdGlvbiBJJiMzOTttIGFmdGVyLCBhbmQgaXQgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcy4gVGhpcyBpcyB3aGVyZSB0aGUgY3J1Y2lhbCBsb2dpYyB1bmZvbGRzLCBhbmQgdGhlIHJlYWwgaW5zaWdodHMgYXJlIGxpa2VseSBoaWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjM1Olx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXHUwMDNlbXMsIG9yIHF1b3RhLVx1MDAzZXN6IGFyZSBzZXQsIG9yIHF1b3RhLVx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxuMzIzNjpcdCAqL1xuMzIzNzpcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjM4Olx0e1xuMzIzOTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjQwOlx0XHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4zMjQxOlx0XHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbjMyNDI6XHRcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4zMjQzOlx0XG4zMjQ0Olx0XHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI0NTpcdFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNDY6XHRcdFx0cmV0dXJuO1xuMzI0NzpcdFx0fVxuMzI0ODpcdFxuMzI0OTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuMzI1MDpcdFx0XHRpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXG4zMjUxOlx0XHRcdFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XG4zMjUyOlx0XHRcdGVsc2UgaWYgKHF1b3RhLVx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9URU1QT1JBTClcbjMyNTM6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XG4zMjU0Olx0XHRcdGVzeiA9IHF1b3RhLVx1MDAzZWVzel9icCAvIDEwMDAwO1xuMzI1NTpcdFx0fVxuMzI1NjpcdFxuMzI1NzpcdFx0aWYgKHF1b3RhLVx1MDAzZW1zKSB7XG4zMjU4Olx0XHRcdGlmIChxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKVxuMzI1OTpcdFx0XHRcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeixcbjMyNjA6XHRcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4zMjYxOlx0XHRcdGVsc2VcbjMyNjI6XHRcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbjMyNjM6XHRcdFx0ZXN6X3RpbWUgPSBtYXgodGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zeik7XG4zMjY0Olx0XHRcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcbjMyNjU6XHRcdH1cbjMyNjY6XHRcbjMyNjc6XHRcdGlmIChxdW90YS1cdTAwM2VzeiBcdTAwMjZcdTAwMjYgcXVvdGEtXHUwMDNlc3ogXHUwMDNjIGVzeilcbjMyNjg6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG4zMjY5Olx0XG4zMjcwOlx0XHRxdW90YS1cdTAwM2Vlc3ogPSBlc3o7XG4zMjcxOlx0fVxuMzI3MjpcdFxuMzI3MzpcdHN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX2VzeihzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMsXG4zMjc0Olx0XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4zMjc1Olx0e1xuMzI3NjpcdFx0dW5zaWduZWQgaW50IGNpZHggPSAwLCBzaWR4ID0gMDtcbjMyNzc6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XG4zMjc4Olx0XG4zMjc5Olx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcbjMyODA6XHRcdFx0aWYgKHNpdGVyID09IHMpXG4zMjgxOlx0XHRcdFx0YnJlYWs7XG4zMjgyOlx0XHRcdHNpZHgmIzQzOyYjNDM7O1xuMzI4MzpcdFx0fVxuMzI4NDpcdFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVx1MDAzZWVzeik7XG4zMjg1Olx0fVxuMzI4NjpcdFxuMzI4NzpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMjg4Olx0e1xuMzI4OTpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMjkwOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzI5MTpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMyOTI6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzI5MzpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzI5NDpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3Mjg5CgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNDkxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIERBTU9OIFBhdGNoOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCByZWxhdGVkIHRvIERBTU9OLCB0aGUgRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBmcmFtZXdvcmsuIERBTU9OLCBmb3IgdGhvc2Ugbm90IGludGltYXRlbHkgZmFtaWxpYXIsIGxpdmVzIGluIGBtbS9kYW1vbmAgYW5kIGNhbiBiZSBjb250cm9sbGVkIHZpYSBzeXNmcyDigJMgdGhhdCYjMzk7cyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYCBhbmQgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIFN5emthbGxlciBjYW4sIG9mIGNvdXJzZSwgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIGEgc29mdHdhcmUtYmFzZWQgdGFyZ2V0LCBwZXJmZWN0LgoKTm93LCB0aGUgcGF0Y2ggaXRzZWxmIHRhcmdldHMgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJbml0aWFsbHksIHRoZSBjb2RlIHVzZWQgdG8gY2xhbXAgdGhlIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgYmFzZWQgb24gYHRocm91Z2hwdXQgKiBxdW90YS0mZ3Q7bXNgIGFuZCBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgaWYgZ29hbHMgd2VyZSBzZXQgaW4gdGhlIHF1b3RhLCBvciB0aGUgdGltZSBiYXNlZCBxdW90YSB3YXMgYmVsb3cgdGhlIGBtaW5fcmVnaW9uX3N6YCwgdGhlIGNvZGUgZW5zdXJlZCBgZXN6YCB3YXMgKmF0IGxlYXN0KiBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4KClRoZSBwYXRjaCBjaGFuZ2VzIHRoaXMuIE5vdywgdGhlIHRpbWUtYmFzZWQgcXVvdGEgaXMgbG93ZXItYm91bmRlZCBieSBgbWluX3JlZ2lvbl9zemAgYW5kIHRoYXQgaXMgdGhlbiBjb21wYXJlZCBhZ2FpbnN0IHRoZSBnb2Fscy1iYXNlZCBxdW90YS4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgdGhpcyBub3cgYWxsb3dzIGZvciBhIHF1b3RhIHRvIGJlIHNtYWxsZXIgdGhhbiB0aGUgYG1pbl9yZWdpb25fc3pgIGlmIGEgZ29hbC1iYXNlZCBxdW90YSBpcyBhbHNvIGFjdGl2ZS4KClRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LiBEQU1PTiYjMzk7cyBzeXNmcyBpbnRlcmZhY2UgbWFrZXMgaXQgYSBzdHJhaWdodGZvcndhcmQgdGFyZ2V0LiBHaXZlbiB0aGF0IGl0IHRvdWNoZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYyDigJMgc3BlY2lmaWNhbGx5LCBob3cgREFNT04gY2FsY3VsYXRlcyBxdW90YXMg4oCTIGFuZCByZXNpZGVzIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCwgaXQmIzM5O3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJdCYjMzk7cyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy4KCk15IG5leHQgc3RlcCBpcyB0byBmaWd1cmUgb3V0IHRoZSBjYWxsIGdyYXBoIGZvciB0aGlzIGZ1bmN0aW9uLiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgaXMgc3RhdGljLCB3aGljaCB0ZWxscyBtZSB0aGUgc2NvcGUgaXMgY29udGFpbmVkIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gVGhlIGNhbGxlcnMgYXJlIGBkYW1vc19hZGp1c3RfcXVvdGFgIHdoaWNoIGlzIHRoZSBuZXh0IHBsYWNlIHRvIGxvb2sgZm9yIGVudHJ5IHBvaW50cyB0byBmdXp6LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19hZGp1c3RfcXVvdGEmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzI3Mz1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMjg2LVxubW0vZGFtb24vY29yZS5jOjMyODc6c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy0zMjg4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzM2OD1zdGF0aWMgdm9pZCBrZGFtb25kX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cbm1tL2RhbW9uL2NvcmUuYzozMzg0Olx0XHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzM4NS1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ3MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDEwMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCBpbiBMaW51eCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJIHNlZSB0aHJlZSBrZXkgZnVuY3Rpb25zIGhlcmU6IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIGFib3V0IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYC4gSSBuZWVkIHRvIGRldGVybWluZSBpZiBpdCYjMzk7cyBpbmxpbmVkIG9yIG5vdC4gSXQmIzM5O3MgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgcXVvdGEgYWRqdXN0bWVudHMgYXJlIHByb3BhZ2F0ZWQuIEkmIzM5O20gdGhpbmtpbmcgZXZlbiBpZiBpdCYjMzk7cyBkZWNsYXJlZCBgc3RhdGljYCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgd2hldGhlciBpdCYjMzk7cyBhY3R1YWxseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gSWYgbm90IHN0YXRpYywgaXQgbXVzdCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBpbiB3aGljaCBjYXNlIEkgbmVlZCB0byBrbm93IHRoZSBmb2N1cyBzeW1ib2xzIGFuZCB0aGVpciBiZWhhdmlvci4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSBzaG91bGQgcHJvYmFibHkgYWxzbyBleHBsb3JlIG90aGVyIG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIHN5c2ZzIGludGVyZmFjZS4gVGhpcyB3aWxsIGdpdmUgbWUgY29udGV4dCBhcm91bmQgaG93IHRoZXNlIHF1b3RhIGFkanVzdG1lbnRzIGFuZCBlZmZlY3RpdmUgc2V0dGluZ3MgaW50ZXJhY3Qgd2l0aCB0aGUgb3ZlcmFsbCBtZW1vcnkgbW9uaXRvcmluZyBhbmQgcmVjbGFtYXRpb24gZnJhbWV3b3JrLiBJIG5lZWQgdG8gc2VlIHdoYXQgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgb3Igc3ltYm9scyBJIGNhbiBmaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrZGFtb25kXyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy05MDgtXG5tbS9kYW1vbi9jb3JlLmM6OTA5Olx0aW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jLTkxMC1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtOTE1LVx0Y3R4LVx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzID0gMDtcbm1tL2RhbW9uL2NvcmUuYzo5MTY6XHQvKiBUaGVzZSB3aWxsIGJlIHNldCBmcm9tIGtkYW1vbmRfaW5pdF9jdHgoKSAqL1xubW0vZGFtb24vY29yZS5jLTkxNy1cdGN0eC1cdTAwM2VuZXh0X2FnZ3JlZ2F0aW9uX3NpcyA9IDA7XG4tLVxubW0vZGFtb24vY29yZS5jLTkxOS1cbm1tL2RhbW9uL2NvcmUuYzo5MjA6XHRtdXRleF9pbml0KFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTkyMS1cdElOSVRfTElTVF9IRUFEKFx1MDAyNmN0eC1cdTAwM2VjYWxsX2NvbnRyb2xzKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTAzMD1zdGF0aWMgdm9pZCBkYW1vbl91cGRhdGVfbW9uaXRvcmluZ19yZXN1bHQoc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA0NS1cdFx0ICogaW50ZXJ2YWwuICBJbiBvdGhlciB3b3JkcywgbWFrZSB0aGUgc3RhdHVzIGxpa2Vcbm1tL2RhbW9uL2NvcmUuYzoxMDQ2Olx0XHQgKiBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBpcyBjYWxsZWQuXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny1cdFx0ICovXG4tLVxubW0vZGFtb24vY29yZS5jPTEwODM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcbm1tL2RhbW9uL2NvcmUuYzoxMTA2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTEwNy0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTEwLSAqIGFsc28gaW5kaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gdmlhIGRhbW9uX2NhbGwoKSAtXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXG5tbS9kYW1vbi9jb3JlLmMtMTExMi0gKiBhcHBseWluZyBhdXRvLXR1bmVkIG1vbml0b3JpbmcgaW50ZXJ2YWxzLlxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xMTQ0LVx0Lypcbm1tL2RhbW9uL2NvcmUuYzoxMTQ1Olx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cdCAqL1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC1cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDQwLVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwNTItXG5tbS9kYW1vbi9jb3JlLmM6MjA1MzpcdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtMjA1NC1cdGlmICghY3R4LVx1MDAzZWtkYW1vbmQpIHtcbm1tL2RhbW9uL2NvcmUuYy0yMDU1LVx0XHRlcnIgPSAwO1xubW0vZGFtb24vY29yZS5jOjIwNTY6XHRcdHJlaW5pdF9jb21wbGV0aW9uKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjIwNTc6XHRcdGN0eC1cdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcJiMzNDtrZGFtb25kLiVkXCYjMzQ7LFxubW0vZGFtb24vY29yZS5jLTIwNTgtXHRcdFx0XHRucl9ydW5uaW5nX2N0eHMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMDYyLVx0XHR9IGVsc2Uge1xubW0vZGFtb24vY29yZS5jOjIwNjM6XHRcdFx0d2FpdF9mb3JfY29tcGxldGlvbihcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LVx0XHR9XG5tbS9kYW1vbi9jb3JlLmMtMjA2NS1cdH1cbm1tL2RhbW9uL2NvcmUuYzoyMDY2Olx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTIwNjctXG4tLVxubW0vZGFtb24vY29yZS5jPTIxMzE9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjEzNC1cbm1tL2RhbW9uL2NvcmUuYzoyMTM1Olx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LVx0dHNrID0gY3R4LVx1MDAzZWtkYW1vbmQ7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMzgtXHRcdGdldF90YXNrX3N0cnVjdCh0c2spO1xubW0vZGFtb24vY29yZS5jOjIxMzk6XHRcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTQwLVx0XHRrdGhyZWFkX3N0b3BfcHV0KHRzayk7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxNDItXHR9XG5tbS9kYW1vbi9jb3JlLmM6MjE0MzpcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTQ0LX1cbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTU1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcdFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVx0XHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XG4tLVxubW0vZGFtb24vY29yZS5jPTIxNjY9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjE2OS1cbm1tL2RhbW9uL2NvcmUuYzoyMTcwOlx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTcxLVx0cnVubmluZyA9IGN0eC1cdTAwM2VrZGFtb25kICE9IE5VTEw7XG5tbS9kYW1vbi9jb3JlLmM6MjE3MjpcdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy0yMTczLVx0cmV0dXJuIHJ1bm5pbmc7XG4tLVxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXG5tbS9kYW1vbi9jb3JlLmM6MjE3NzogKiBkYW1vbl9rZGFtb25kX3BpZCgpIC0gUmV0dXJuIHBpZCBvZiBhIGdpdmVuIERBTU9OIGNvbnRleHQmIzM5O3Mgd29ya2VyIHRocmVhZC5cbm1tL2RhbW9uL2NvcmUuYy0yMTc4LSAqIEBjdHg6XHRUaGUgREFNT04gY29udGV4dCBvZiB0aGUgcXVlc3Rpb24uXG4tLVxubW0vZGFtb24vY29yZS5jLTIxODEtICovXG5tbS9kYW1vbi9jb3JlLmM6MjE4MjppbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTIxODMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMTg1LVxubW0vZGFtb24vY29yZS5jOjIxODY6XHRtdXRleF9sb2NrKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX2xvY2spO1xubW0vZGFtb24vY29yZS5jLTIxODctXHRpZiAoY3R4LVx1MDAzZWtkYW1vbmQpXG5tbS9kYW1vbi9jb3JlLmMtMjE4OC1cdFx0cGlkID0gY3R4LVx1MDAzZWtkYW1vbmQtXHUwMDNlcGlkO1xubW0vZGFtb24vY29yZS5jOjIxODk6XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtMjE5MC1cdHJldHVybiBwaWQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTIyNjk9aW50IGRhbW9zX3dhbGsoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3Nfd2Fsa19jb250cm9sICpjb250cm9sKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMjkyLSAqL1xubW0vZGFtb24vY29yZS5jOjIyOTM6c3RhdGljIHZvaWQga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMjI5NC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIzNDg9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fZ2V0X2ludGVydmFsc19hZGFwdGF0aW9uX2JwKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTIzNjMtXG5tbS9kYW1vbi9jb3JlLmM6MjM2NDpzdGF0aWMgbm9pbmxpbmVfZm9yX3N0YWNrIHZvaWQga2RhbW9uZF90dW5lX2ludGVydmFscyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxubW0vZGFtb24vY29yZS5jLTIzNjUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMzUyPXN0YXRpYyB2b2lkIGRhbW9zX3RyYWNlX3N0YXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVxubW0vZGFtb24vY29yZS5jOjMzNjg6c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG5tbS9kYW1vbi9jb3JlLmMtMzM2OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTM0NjI9c3RhdGljIHZvaWQgZGFtb25fbWVyZ2VfcmVnaW9uc19vZihzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCB1bnNpZ25lZCBpbnQgdGhyZXMsXG4tLVxubW0vZGFtb24vY29yZS5jLTM1MDgtICogb3ZlcmhlYWQgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm4uICBJZiBhIG1lcmdlIHdhc1xubW0vZGFtb24vY29yZS5jOjM1MDk6ICogdW5uZWNlc3NhcmlseSBtYWRlLCBsYXRlciAmIzM5O2tkYW1vbmRfc3BsaXRfcmVnaW9ucygpJiMzOTsgd2lsbCByZXZlcnQgaXQuXG5tbS9kYW1vbi9jb3JlLmMtMzUxMC0gKlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNTE2LSAqL1xubW0vZGFtb24vY29yZS5jOjM1MTc6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXG5tbS9kYW1vbi9jb3JlLmMtMzUxOC1cdFx0XHRcdCAgdW5zaWduZWQgbG9uZyBzel9saW1pdClcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzYyMj1zdGF0aWMgdm9pZCBkYW1vbl9zcGxpdF9zb21lX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNjU4LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxubW0vZGFtb24vY29yZS5jOjM2NTk6ICogc3BsaXQgd2FzIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJiMzOTtrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSYjMzk7IHdpbGwgcmV2ZXJ0XG5tbS9kYW1vbi9jb3JlLmMtMzY2MC0gKiBpdC5cbm1tL2RhbW9uL2NvcmUuYy0zNjYxLSAqL1xubW0vZGFtb24vY29yZS5jOjM2NjI6c3RhdGljIHZvaWQga2RhbW9uZF9zcGxpdF9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzcwMi0gKi9cbm1tL2RhbW9uL2NvcmUuYzozNzAzOnN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zNzA0LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MzczOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zNzYwLVxubW0vZGFtb24vY29yZS5jOjM3NjE6c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2Vjcylcbm1tL2RhbW9uL2NvcmUuYy0zNzYyLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9Mzc5NT1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4MDAtLypcbm1tL2RhbW9uL2NvcmUuYzozODAxOiAqIGtkYW1vbmRfY2FsbCgpIC0gaGFuZGxlIGRhbW9uX2NhbGxfY29udHJvbCBvYmplY3RzLlxubW0vZGFtb24vY29yZS5jLTM4MDItICogQGN0eDpcdFRoZSBcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IG9mIHRoZSBrZGFtb25kLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODA5LSAqL1xubW0vZGFtb24vY29yZS5jOjM4MTA6c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXG5tbS9kYW1vbi9jb3JlLmMtMzgxMS17XG4tLVxubW0vZGFtb24vY29yZS5jLTM4NDMtLyogUmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGl0JiMzOTtzIG5vdCBhY3RpdmF0ZWQgYnV0IHNob3VsZCByZXR1cm4gKi9cbm1tL2RhbW9uL2NvcmUuYzozODQ0OnN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTM4NDUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zODUwLVxubW0vZGFtb24vY29yZS5jOjM4NTE6XHR3aGlsZSAoIWtkYW1vbmRfbmVlZF9zdG9wKGN0eCkpIHtcbm1tL2RhbW9uL2NvcmUuYy0zODUyLVx0XHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUocywgY3R4KSB7XG4tLVxubW0vZGFtb24vY29yZS5jLTM4NjEtXG5tbS9kYW1vbi9jb3JlLmM6Mzg2MjpcdFx0a2RhbW9uZF91c2xlZXAobWluX3dhaXRfdGltZSk7XG5tbS9kYW1vbi9jb3JlLmMtMzg2My1cbm1tL2RhbW9uL2NvcmUuYzozODY0Olx0XHRrZGFtb25kX2NhbGwoY3R4LCBmYWxzZSk7XG5tbS9kYW1vbi9jb3JlLmMtMzg2NS1cdFx0aWYgKGN0eC1cdTAwM2VtYXliZV9jb3JydXB0ZWQpXG4tLVxubW0vZGFtb24vY29yZS5jLTM4NzEtXG5tbS9kYW1vbi9jb3JlLmM6Mzg3MjpzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0zODczLXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzg5My0gKi9cbm1tL2RhbW9uL2NvcmUuYzozODk0OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKVxubW0vZGFtb24vY29yZS5jLTM4OTUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTA0LVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2V3YWxrX2NvbnRyb2xfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmM6MzkwNTpcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xubW0vZGFtb24vY29yZS5jOjM5MDY6XHRrZGFtb25kX2luaXRfY3R4KGN0eCk7XG5tbS9kYW1vbi9jb3JlLmMtMzkwNy1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzkxNi1cbm1tL2RhbW9uL2NvcmUuYzozOTE3Olx0d2hpbGUgKCFrZGFtb25kX25lZWRfc3RvcChjdHgpKSB7XG5tbS9kYW1vbi9jb3JlLmMtMzkxOC1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYy0zOTE5LVx0XHQgKiBjdHgtXHUwMDNlYXR0cnMgYW5kIGN0eC1cdTAwM2VuZXh0X3thZ2dyZWdhdGlvbixvcHNfdXBkYXRlfV9zaXMgY291bGRcbm1tL2RhbW9uL2NvcmUuYzozOTIwOlx0XHQgKiBiZSBjaGFuZ2VkIGZyb20ga2RhbW9uZF9jYWxsKCkuICBSZWFkIHRoZSB2YWx1ZXMgaGVyZSwgYW5kXG5tbS9kYW1vbi9jb3JlLmMtMzkyMS1cdFx0ICogdXNlIHRob3NlIGZvciB0aGlzIGl0ZXJhdGlvbi4gIFRoYXQgaXMsIGRhbW9uX3NldF9hdHRycygpXG4tLVxubW0vZGFtb24vY29yZS5jLTM5MzEtXG5tbS9kYW1vbi9jb3JlLmM6MzkzMjpcdFx0aWYgKGtkYW1vbmRfd2FpdF9hY3RpdmF0aW9uKGN0eCkpXG5tbS9kYW1vbi9jb3JlLmMtMzkzMy1cdFx0XHRicmVhaztcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk0MS1cbm1tL2RhbW9uL2NvcmUuYzozOTQyOlx0XHRrZGFtb25kX3VzbGVlcChzYW1wbGVfaW50ZXJ2YWwpO1xubW0vZGFtb24vY29yZS5jLTM5NDMtXHRcdGN0eC1cdTAwM2VwYXNzZWRfc2FtcGxlX2ludGVydmFscyYjNDM7JiM0Mzs7XG4tLVxubW0vZGFtb24vY29yZS5jLTM5NjItXHRcdFx0XHRcdG5leHRfYWdncmVnYXRpb25fc2lzKSkge1xubW0vZGFtb24vY29yZS5jOjM5NjM6XHRcdFx0a2RhbW9uZF9tZXJnZV9yZWdpb25zKGN0eCxcbm1tL2RhbW9uL2NvcmUuYy0zOTY0LVx0XHRcdFx0XHRtYXhfbWVyZ2Vfc2NvcmUgLyAxMCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk3MC1cdFx0Lypcbm1tL2RhbW9uL2NvcmUuYzozOTcxOlx0XHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcbm1tL2RhbW9uL2NvcmUuYzozOTcyOlx0XHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXG5tbS9kYW1vbi9jb3JlLmMtMzk3My1cdFx0ICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk3NDpcdFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xubW0vZGFtb24vY29yZS5jLTM5NzUtXHRcdGlmIChjdHgtXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0zOTc4LVx0XHRcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XG5tbS9kYW1vbi9jb3JlLmM6Mzk3OTpcdFx0XHRrZGFtb25kX3VzbGVlcChjdHgtXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsKTtcbm1tL2RhbW9uL2NvcmUuYy0zOTgwLVx0XHRcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXG5tbS9kYW1vbi9jb3JlLmM6Mzk4MTpcdFx0XHRrZGFtb25kX2NhbGwoY3R4LCBmYWxzZSk7XG5tbS9kYW1vbi9jb3JlLmM6Mzk4MjpcdFx0XHRpZiAoa2RhbW9uZF9uZWVkX3N0b3AoY3R4KSB8fCBjdHgtXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxubW0vZGFtb24vY29yZS5jLTM5ODMtXHRcdFx0XHRnb3RvIGRvbmU7XG4tLVxubW0vZGFtb24vY29yZS5jLTM5ODUtXHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjdHgtXHUwMDNlc2NoZW1lcykpXG5tbS9kYW1vbi9jb3JlLmM6Mzk4NjpcdFx0XHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy0zOTg3LVx0XHRlbHNlXG4tLVxubW0vZGFtb24vY29yZS5jLTM5OTktXHRcdFx0XHQgKiBjdHgtXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgbWlnaHQgYmUgdXBkYXRlZFxubW0vZGFtb24vY29yZS5jOjQwMDA6XHRcdFx0XHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXG5tbS9kYW1vbi9jb3JlLmMtNDAwMS1cdFx0XHRcdCAqIGRhbW9uX3NldF9hdHRycygpIHdoaWNoIHdpbGwgYmUgY2FsbGVkIGZyb21cbm1tL2RhbW9uL2NvcmUuYzo0MDAyOlx0XHRcdFx0ICoga2RhbW9uZF90dW5lX2ludGVydmFsKCkgbWF5IHdyb25nbHkgdGhpbmtcbm1tL2RhbW9uL2NvcmUuYy00MDAzLVx0XHRcdFx0ICogdGhpcyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJyZW50XG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDUtXHRcdFx0XHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxubW0vZGFtb24vY29yZS5jOjQwMDY6XHRcdFx0XHQgKiBmb2xsb3dpbmcga2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCkgY2FsbFxubW0vZGFtb24vY29yZS5jLTQwMDctXHRcdFx0XHQgKiB3aWxsIG1ha2UgdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpbnZhbGlkLlxuLS1cbm1tL2RhbW9uL2NvcmUuYy00MDE3LVx0XHRcdFx0XHRjdHgtXHUwMDNlYXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnM7XG5tbS9kYW1vbi9jb3JlLmM6NDAxODpcdFx0XHRcdGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYy00MDE5LVx0XHRcdFx0c2FtcGxlX2ludGVydmFsID0gY3R4LVx1MDAzZWF0dHJzLnNhbXBsZV9pbnRlcnZhbCA/XG4tLVxubW0vZGFtb24vY29yZS5jLTQwMjUtXG5tbS9kYW1vbi9jb3JlLmM6NDAyNjpcdFx0XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL2NvcmUuYzo0MDI3Olx0XHRcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xubW0vZGFtb24vY29yZS5jLTQwMjgtXHRcdH1cbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA0NS1cdG11dGV4X3VubG9jayhcdTAwMjZjdHgtXHUwMDNlY2FsbF9jb250cm9sc19sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYzo0MDQ2Olx0a2RhbW9uZF9jYWxsKGN0eCwgdHJ1ZSk7XG5tbS9kYW1vbi9jb3JlLmMtNDA0Ny1cdG11dGV4X2xvY2soXHUwMDI2Y3R4LVx1MDAzZXdhbGtfY29udHJvbF9sb2NrKTtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtNDA1MS1cbm1tL2RhbW9uL2NvcmUuYzo0MDUyOlx0bXV0ZXhfbG9jayhcdTAwMjZjdHgtXHUwMDNla2RhbW9uZF9sb2NrKTtcbm1tL2RhbW9uL2NvcmUuYy00MDUzLVx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBOVUxMO1xubW0vZGFtb24vY29yZS5jOjQwNTQ6XHRtdXRleF91bmxvY2soXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfbG9jayk7XG5tbS9kYW1vbi9jb3JlLmMtNDA1NS1cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ4Nj1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vbHJ1X3NvcnQuYy00ODgtXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkwLVx0XHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5Mi1cdC8qXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5MzpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5NC1cdCAqIERvIG5vdGhpbmcgaGVyZS5cbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDk5OnN0YXRpYyBpbnQgZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfbG9hZChjaGFyICpidWZmZXIsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMC1cdFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMS17XG5tbS9kYW1vbi9scnVfc29ydC5jOjUwMjpcdGludCBrZGFtb25kX3BpZCA9IC0xO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MDMtXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNC1cdGlmIChjdHgpIHtcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA1Olx0XHRrZGFtb25kX3BpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XG5tbS9kYW1vbi9scnVfc29ydC5jOjUwNjpcdFx0aWYgKGtkYW1vbmRfcGlkIFx1MDAzYyAwKVxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDc6XHRcdFx0a2RhbW9uZF9waWQgPSAtMTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTA4LVx0fVxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDk6XHRyZXR1cm4gc3ByaW50ZihidWZmZXIsIFwmIzM0OyVkXFxuXCYjMzQ7LCBrZGFtb25kX3BpZCk7XG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMC19XG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NTEyOnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9scnVfc29ydC5jOjUxMzpcdC5zZXQgPSBkYW1vbl9scnVfc29ydF9rZGFtb25kX3BpZF9zdG9yZSxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTE0Olx0LmdldCA9IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQsXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxNS19O1xuLS1cbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIyLSAqL1xubW0vZGFtb24vbHJ1X3NvcnQuYzo1MjM6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vbHJ1X3NvcnQuYy01MjQtXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jPTQwOT1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQxMS1cbm1tL2RhbW9uL3JlY2xhaW0uYzo0MTI6c3RhdGljIGludCBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MTUtXHQvKlxubW0vZGFtb24vcmVjbGFpbS5jOjQxNjpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE3LVx0ICogRG8gbm90aGluZyBoZXJlLlxuLS1cbm1tL2RhbW9uL3JlY2xhaW0uYy00MjEtXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjMtXHRcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNC17XG5tbS9kYW1vbi9yZWNsYWltLmM6NDI1Olx0aW50IGtkYW1vbmRfcGlkID0gLTE7XG5tbS9kYW1vbi9yZWNsYWltLmMtNDI2LVxubW0vZGFtb24vcmVjbGFpbS5jLTQyNy1cdGlmIChjdHgpIHtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjg6XHRcdGtkYW1vbmRfcGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mjk6XHRcdGlmIChrZGFtb25kX3BpZCBcdTAwM2MgMClcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzA6XHRcdFx0a2RhbW9uZF9waWQgPSAtMTtcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzEtXHR9XG5tbS9kYW1vbi9yZWNsYWltLmM6NDMyOlx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcJiMzNDslZFxcblwmIzM0Oywga2RhbW9uZF9waWQpO1xubW0vZGFtb24vcmVjbGFpbS5jLTQzMy19XG5tbS9kYW1vbi9yZWNsYWltLmMtNDM0LVxubW0vZGFtb24vcmVjbGFpbS5jOjQzNTpzdGF0aWMgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbV9vcHMga2RhbW9uZF9waWRfcGFyYW1fb3BzID0ge1xubW0vZGFtb24vcmVjbGFpbS5jOjQzNjpcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlLFxubW0vZGFtb24vcmVjbGFpbS5jOjQzNzpcdC5nZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX2xvYWQsXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM4LX07XG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTQ0NS0gKi9cbm1tL2RhbW9uL3JlY2xhaW0uYzo0NDY6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcdTAwMjZrZGFtb25kX3BpZF9wYXJhbV9vcHMsIE5VTEwsIDA0MDApO1xubW0vZGFtb24vcmVjbGFpbS5jLTQ0Ny1cbi0tXG5tbS9kYW1vbi9zdGF0LmM9MjY0PXN0YXRpYyBpbnQgZGFtb25fc3RhdF9lbmFibGVkX2xvYWQoY2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjY4LVxubW0vZGFtb24vc3RhdC5jOjI2OTpzdGF0aWMgaW50IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfc3RvcmUoXG5tbS9kYW1vbi9zdGF0LmMtMjcwLVx0XHRjb25zdCBjaGFyICp2YWwsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yNzItXHQvKlxubW0vZGFtb24vc3RhdC5jOjI3MzpcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXG5tbS9kYW1vbi9zdGF0LmMtMjc0LVx0ICogRG8gbm90aGluZyBoZXJlLlxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yNzgtXG5tbS9kYW1vbi9zdGF0LmM6Mjc5OnN0YXRpYyBpbnQgZGFtb25fc3RhdF9rZGFtb25kX3BpZF9sb2FkKFxubW0vZGFtb24vc3RhdC5jLTI4MC1cdFx0Y2hhciAqYnVmZmVyLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjg2LVx0fSBlbHNlIHtcbm1tL2RhbW9uL3N0YXQuYzoyODc6XHRcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGRhbW9uX3N0YXRfY29udGV4dCk7XG5tbS9kYW1vbi9zdGF0LmMtMjg4LVx0XHRpZiAocGlkIFx1MDAzYyAxKVxuLS1cbm1tL2RhbW9uL3N0YXQuYy0yOTMtXG5tbS9kYW1vbi9zdGF0LmM6Mjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XG5tbS9kYW1vbi9zdGF0LmM6Mjk1Olx0LnNldCA9IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfc3RvcmUsXG5tbS9kYW1vbi9zdGF0LmM6Mjk2Olx0LmdldCA9IGRhbW9uX3N0YXRfa2RhbW9uZF9waWRfbG9hZCxcbm1tL2RhbW9uL3N0YXQuYy0yOTctfTtcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMzA0LSAqL1xubW0vZGFtb24vc3RhdC5jOjMwNTptb2R1bGVfcGFyYW1fY2Ioa2RhbW9uZF9waWQsIFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XG5tbS9kYW1vbi9zdGF0LmM6MzA2Ok1PRFVMRV9QQVJNX0RFU0Moa2RhbW9uZF9waWQsIFwmIzM0O3BpZCBvZiB0aGUga2RhbW9uZFwmIzM0Oyk7XG5tbS9kYW1vbi9zdGF0LmMtMzA3LVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjAzMj1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XG4tLVxubW0vZGFtb24vc3lzZnMuYy0yMDM5LVxubW0vZGFtb24vc3lzZnMuYzoyMDQwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxubW0vZGFtb24vc3lzZnMuYy0yMDQxLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDQtXG5tbS9kYW1vbi9zeXNmcy5jOjIwNDU6c3RhdGljIGludCBkYW1vbl9zeXNmc19rZGFtb25kX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMDQ2LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTIwNjUtXG5tbS9kYW1vbi9zeXNmcy5jOjIwNjY6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9ybV9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxubW0vZGFtb24vc3lzZnMuYy0yMDY3LXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIzNDc9c3RhdGljIGludCBkYW1vbl9zeXNmc191cGRfc2NoZW1lc19zdGF0cyh2b2lkICpkYXRhKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjM1Ni1cbm1tL2RhbW9uL3N5c2ZzLmM6MjM1NzpzdGF0aWMgaW5saW5lIGJvb2wgZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKFxubW0vZGFtb24vc3lzZnMuYy0yMzU4LVx0XHRzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI0MDE9c3RhdGljIGludCBkYW1vbl9zeXNmc19jb21taXRfaW5wdXQodm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0MDc6XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhrZGFtb25kKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNDIxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X3NjaGVtZXNfcXVvdGFfZ29hbHModm9pZCAqZGF0YSlcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI0MjYtXG5tbS9kYW1vbi9zeXNmcy5jOjI0Mjc6XHRpZiAoIWRhbW9uX3N5c2ZzX2tkYW1vbmRfcnVubmluZyhzeXNmc19rZGFtb25kKSlcbm1tL2RhbW9uL3N5c2ZzLmMtMjQyOC1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNTExPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfdHVybl9kYW1vbl9vbihzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTYtXG5tbS9kYW1vbi9zeXNmcy5jOjI1MTc6XHRpZiAoZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxubW0vZGFtb24vc3lzZnMuYy0yNTE4LVx0XHRyZXR1cm4gLUVCVVNZO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjY5ND1zdGF0aWMgc3NpemVfdCBwaWRfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MDctXG5tbS9kYW1vbi9zeXNmcy5jOjI3MDg6XHRwaWQgPSBkYW1vbl9rZGFtb25kX3BpZChjdHgpO1xubW0vZGFtb24vc3lzZnMuYy0yNzA5LVx0aWYgKHBpZCBcdTAwM2MgMClcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3MjU9c3RhdGljIHNzaXplX3QgcmVmcmVzaF9tc19zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaixcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3MzktXG5tbS9kYW1vbi9zeXNmcy5jOjI3NDA6c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZF9yZWxlYXNlKHN0cnVjdCBrb2JqZWN0ICprb2JqKVxubW0vZGFtb24vc3lzZnMuYy0yNzQxLXtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI3NDktXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTA6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19rZGFtb25kX3N0YXRlX2F0dHIgPVxubW0vZGFtb24vc3lzZnMuYy0yNzUxLVx0XHRfX0FUVFJfUldfTU9ERShzdGF0ZSwgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NTItXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTM6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBkYW1vbl9zeXNmc19rZGFtb25kX3BpZF9hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1NC1cdFx0X19BVFRSX1JPX01PREUocGlkLCAwNDAwKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc1NS1cbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVmcmVzaF9tc19hdHRyID1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc1Ny1cdFx0X19BVFRSX1JXX01PREUocmVmcmVzaF9tcywgMDYwMCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NTgtXG5tbS9kYW1vbi9zeXNmcy5jOjI3NTk6c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmRhbW9uX3N5c2ZzX2tkYW1vbmRfYXR0cnNbXSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2MDpcdFx1MDAyNmRhbW9uX3N5c2ZzX2tkYW1vbmRfc3RhdGVfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMuYzoyNzYxOlx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9waWRfYXR0ci5hdHRyLFxubW0vZGFtb24vc3lzZnMuYzoyNzYyOlx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9yZWZyZXNoX21zX2F0dHIuYXR0cixcbm1tL2RhbW9uL3N5c2ZzLmMtMjc2My1cdE5VTEwsXG4tLVxubW0vZGFtb24vc3lzZnMuYz0yNzY1PUFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI3NjYtXG5tbS9kYW1vbi9zeXNmcy5jOjI3Njc6c3RhdGljIGNvbnN0IHN0cnVjdCBrb2JqX3R5cGUgZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSA9IHtcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2ODpcdC5yZWxlYXNlID0gZGFtb25fc3lzZnNfa2RhbW9uZF9yZWxlYXNlLFxubW0vZGFtb24vc3lzZnMuYy0yNzY5LVx0LnN5c2ZzX29wcyA9IFx1MDAyNmtvYmpfc3lzZnNfb3BzLFxubW0vZGFtb24vc3lzZnMuYzoyNzcwOlx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXG5tbS9kYW1vbi9zeXNmcy5jLTI3NzEtfTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTI3ODg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjc5My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGtkYW1vbmRzLVx1MDAzZW5yOyBpJiM0MzsmIzQzOykge1xubW0vZGFtb24vc3lzZnMuYzoyNzk0Olx0XHRkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoa2RhbW9uZHNfYXJyW2ldKTtcbm1tL2RhbW9uL3N5c2ZzLmMtMjc5NS1cdFx0a29iamVjdF9kZWwoXHUwMDI2a2RhbW9uZHNfYXJyW2ldLVx1MDAzZWtvYmopO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjgwMz1zdGF0aWMgYm9vbCBkYW1vbl9zeXNmc19rZGFtb25kc19idXN5KHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICoqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yODA4LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI4MDk6XHRcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZHNbaV0pKVxubW0vZGFtb24vc3lzZnMuYy0yODEwLVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmM9MjgxNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXG4tLVxubW0vZGFtb24vc3lzZnMuYy0yODM1LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfa2RhbW9uZHM7IGkmIzQzOyYjNDM7KSB7XG5tbS9kYW1vbi9zeXNmcy5jOjI4MzY6XHRcdGtkYW1vbmQgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FsbG9jKCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI4MzctXHRcdGlmICgha2RhbW9uZCkge1xuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjg0Mi1cdFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXHUwMDI2a2RhbW9uZC1cdTAwM2Vrb2JqLFxubW0vZGFtb24vc3lzZnMuYzoyODQzOlx0XHRcdFx0XHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9rdHlwZSwgXHUwMDI2a2RhbW9uZHMtXHUwMDNla29iaixcbm1tL2RhbW9uL3N5c2ZzLmMtMjg0NC1cdFx0XHRcdFwmIzM0OyVkXCYjMzQ7LCBpKTtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jLTI4NDctXG5tbS9kYW1vbi9zeXNmcy5jOjI4NDg6XHRcdGVyciA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWRkX2RpcnMoa2RhbW9uZCk7XG5tbS9kYW1vbi9zeXNmcy5jLTI4NDktXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGFyZ2V0KHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzYtLypcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NzogKiBUZXN0IGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNzgtICpcbi0tXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAtICogYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIHJlZ2lvbi4gIEluIGRldGFpbCwgaXQgaW5jcmVhc2VzICYjMzk7LVx1MDAzZW5yX2FjY2Vzc2VzJiMzOTsgb2Zcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTogKiByZWdpb25zIHRoYXQgYW4gYWNjZXNzIGhhcyBjb25maXJtZWQuICAmIzM5O2tkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpJiMzOTsgZmx1c2hlc1xubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTgyLSAqIHRoZSBhZ2dyZWdhdGVkIGluZm9ybWF0aW9uICgmIzM5Oy1cdTAwM2Vucl9hY2Nlc3NlcyYjMzk7IG9mIGVhY2ggcmVnaW9ucykgdG8gdGhlIHJlc3VsdFxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTEyMC1cdH1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxMjE6XHRrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoY3R4KTtcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjItXHRpdCA9IDA7XG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTYtICogV2hlbiB0aGUgdG90YWwgcmVnaW9uIGNvdW50IGlzIGFscmVhZHkgYWJvdmUgbWF4X25yX3JlZ2lvbnMgLyAyLFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1NzogKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0zNTgtICogZnJhY3Rpb24gb2YgdGhlIHJlZ2lvbnMgKG1ha2luZyBwcm9ncmVzcyksIHdpdGhvdXQgZXhjZWVkaW5nXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM2MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXG4tLVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTQwNS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0MDY6XHRrZGFtb25kX3NwbGl0X3JlZ2lvbnMoYyk7XG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDA3LVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xODA4PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM0LSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE4MzU6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE4MzYtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjA4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBmdW5jdGlvbiBhbmQgaG93IGl0JiMzOTtzIHVzZWQuIFRpbWUgdG8gdHJhY2UgaXRzIGNhbGxzLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSBpbnZvbHZlZDogYGRhbW9zX2FkanVzdF9xdW90YWAsIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLCBhbmQgYGtkYW1vbmRfZm5gLiBHb3QgaXQuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgdGhlIGJyb2FkZXIgY29udGV4dC4KCkxldCYjMzk7cyBxdWlja2x5IGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMuIFJpZ2h0LCB3ZSBoYXZlIGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9WQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1BBRERSYC4gR29vZCwgZ29vZC4gVGhlc2UgYXJlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBhbmQgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgREFNT04gc3Vic3lzdGVtLiBOZXh0IHN0ZXAsIEkgd2FudCB0byBuYWlsIGRvd24gdGhlIGRlcGVuZGVuY2llcyBpbiBLY29uZmlnIGZvciBgREFNT05gLCBgREFNT05fU1lTRlNgLCBhbmQgdGhlIHJlc3QuIFRoaXMgd2lsbCBzaG93IGhvdyB0aGVzZSBmZWF0dXJlcyByZWxhdGUgYW5kIGludGVyYWN0IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGJ1aWxkIHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgb3ZlcmFsbCBkZXNpZ24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdFxuICAgMzpcdG1lbnUgXCYjMzQ7RGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1wmIzM0O1xuICAgNDpcdFxuICAgNTpcdGNvbmZpZyBEQU1PTlxuICAgNjpcdFx0Ym9vbCBcJiMzNDtEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcJiMzNDtcbiAgIDc6XHRcdGhlbHBcbiAgIDg6XHRcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxuICAgOTpcdFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcbiAgMTA6XHRcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cbiAgMTE6XHRcbiAgMTI6XHRcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXG4gIDEzOlx0XHQgIG1vcmUgaW5mb3JtYXRpb24uXG4gIDE0Olx0XG4gIDE1Olx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxuICAxNjpcdFx0Ym9vbCBcJiMzNDtDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVwmIzM0O1xuICAxNzpcdFx0ZGVwZW5kcyBvbiBEQU1PTlxuICAxODpcdFx0aGVscFxuICAxOTpcdFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXG4gIDIwOlx0XHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxuICAyMTpcdFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxuICAyMjpcdFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cbiAgMjM6XHRcbiAgMjQ6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjU6XHRcbiAgMjY6XHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxuICAyNzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBkYW1vblwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4gIDI4Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBLVU5JVD15XG4gIDI5Olx0XHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xuICAzMDpcdFx0aGVscFxuICAzMTpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cbiAgMzI6XHRcbiAgMzM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDM0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICAzNTpcdFxuICAzNjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICAzNzpcdFxuICAzODpcdGNvbmZpZyBEQU1PTl9WQUREUlxuICAzOTpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcJiMzNDtcbiAgNDA6XHRcdGRlcGVuZHMgb24gREFNT04gXHUwMDI2XHUwMDI2IE1NVVxuICA0MTpcdFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXG4gIDQyOlx0XHRkZWZhdWx0IERBTU9OXG4gIDQzOlx0XHRoZWxwXG4gIDQ0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cbiAgNDU6XHRcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxuICA0NjpcdFxuICA0NzpcdGNvbmZpZyBEQU1PTl9QQUREUlxuICA0ODpcdFx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4gIDQ5Olx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNTA6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTYzNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLY29uZmlnIExhbmRzY2FwZTogQSBRdWljayBBdWRpdCoqCgpSaWdodCwgbGV0JiMzOTtzIHNlZS4uLiB0aGUgY29kZSByZXZpZXcgaGFzIGZsYWdnZWQgc29tZXRoaW5nIGluIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyB3aGF0IG1pZ2h0IGJlIGhhcHBlbmluZyBoZXJlLiBHaXZlbiB0aGUgc2NvcGUgb2YgdGhlIHBvdGVudGlhbCBpbXBhY3QsIGl0JiMzOTtzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4gIDgxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiBzeXNmcyBpbnRlcmZhY2UgS3VuaXQgdGVzdCBzdWl0ZS5cbiAgODI6XHRcbiAgODM6XHRcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXG4gIDg0Olx0XHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxuICA4NTpcdFxuICA4NjpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NzpcdFxuICA4ODpcdGNvbmZpZyBEQU1PTl9SRUNMQUlNXG4gIDg5Olx0XHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4gIDkwOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xuICA5MzpcdFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXG4gIDk0Olx0XHQgIHRob3NlLlxuICA5NTpcdFxuICA5NjpcdFx0ICBUaGlzIGlzIHN1Z2dlc3RlZCB0byBiZSB1c2VkIGFzIGEgcHJvYWN0aXZlIGFuZCBsaWdodHdlaWdodFxuICA5NzpcdFx0ICByZWNsYW1hdGlvbiB1bmRlciBsaWdodCBtZW1vcnkgcHJlc3N1cmUsIHdoaWxlIHRoZSB0cmFkaXRpb25hbCBwYWdlXG4gIDk4Olx0XHQgIHNjYW5uaW5nLWJhc2VkIHJlY2xhbWF0aW9uIGlzIHVzZWQgZm9yIGhlYXZ5IHByZXNzdXJlLlxuICA5OTpcdFxuIDEwMDpcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxuIDEwMTpcdFx0Ym9vbCBcJiMzNDtCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXCYjMzQ7XG4gMTAyOlx0XHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXG4gMTAzOlx0XHRoZWxwXG4gMTA0Olx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyBzdWJzeXN0ZW0uICBJdCB0cmllcyB0b1xuIDEwNTpcdFx0ICBwcm90ZWN0IGZyZXF1ZW50bHkgYWNjZXNzZWQgKGhvdCkgcGFnZXMgd2hpbGUgcmFyZWx5IGFjY2Vzc2VkIChjb2xkKVxuIDEwNjpcdFx0ICBwYWdlcyByZWNsYWltZWQgZmlyc3QgdW5kZXIgbWVtb3J5IHByZXNzdXJlLlxuIDEwNzpcdFxuIDEwODpcdGNvbmZpZyBEQU1PTl9TVEFUXG4gMTA5Olx0XHRib29sIFwmIzM0O0J1aWxkIGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgc3RhdCAoREFNT05fU1RBVClcJiMzNDtcbiAxMTA6XHRcdGRlcGVuZHMgb24gREFNT05fUEFERFJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA2OTAKCQkJCQkJCW91dHB1dDogMTUyCgkJCQkJCQl0aG91Z2h0czogMzE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIERBTU9OIFF1b3RhIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gaG93IERBTU9OIGhhbmRsZXMgdGltZS1iYXNlZCBxdW90YXMuIFNwZWNpZmljYWxseSwgaXQmIzM5O3MgYWJvdXQgdGhlIGNhbGN1bGF0aW9uIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCB3aGVuIHRpbWUgcXVvdGFzIGFyZSBpbiBwbGF5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBlbnN1cmVzIHRoYXQgbWluaW11bSByZWdpb24gc2l6ZSBpcyB0YWtlbiBpbnRvIGFjY291bnQgKmJlZm9yZSogdGhlIHBhdGNoIHBlcmZvcm1zIGFueSBvdGhlciBjb21wYXJpc29ucyB3aXRoIHF1b3RhIGxpbWl0cy4gVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoYXQmIzM5O3MgYSBrZXkgYXJlYSB0byBwYXkgYXR0ZW50aW9uIHRvLiBTaW5jZSB0aGlzIHRpZXMgaW50byBzeXNmcyBpbnRlcmZhY2VzIChgREFNT05fU1lTRlNgKSBmb3IgbWFuYWdpbmcgbW9uaXRvcmluZyBzY2hlbWVzLCB0aGF0IHdpZGVucyB0aGUgYXR0YWNrIHN1cmZhY2UgYSBiaXQuCgpJJiMzOTt2ZSBmbGFnZ2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIHN5bWJvbHM6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhpcyBzaG93cyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGllZCB0byB0aGUgY2hhbmdlcy4KClRoZSBjcml0aWNhbCBmdW5jdGlvbnMgYXBwZWFyIHRvIGJlIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYC4gVGhlIGNhbGwgZ3JhcGggc2hvd3MgYSBjbGVhciBkZXBlbmRlbmN5IGNoYWluOiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgaXMgY2FsbGVkIGJ5IGBkYW1vc19hZGp1c3RfcXVvdGFgLCB3aGljaCwgaW4gdHVybiwgaXMgY2FsbGVkIGJ5IGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBNYWtlcyB0aGUgc2NvcGUgdmVyeSBjbGVhcmx5IGRlZmluZWQuCgpHaXZlbiB0aGF0IHRoaXMgYWx0ZXJzIHF1b3RhIGNhbGN1bGF0aW9ucyB3aXRoaW4gREFNT04sIHdoaWNoIGRpcmVjdGx5IHJlbGF0ZXMgdG8gbWVtb3J5IG1vbml0b3JpbmcgYW5kIHJlZ2lvbiBzaXplLCBhbmQgdGhhdCB3ZSBoYXZlIGEgY2xlYXIgc3lzZnMgaW50ZXJmYWNlIGF2YWlsYWJsZSwgSSYjMzk7bSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBmdXp6aW5nIHRoaXMuIFRoZSBleHBsYW5hdGlvbiBpcyBzb3VuZCBhbmQgZm9jdXNlZC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLCBqdXN0IHRvIGJlIHN1cmU6CgoqICAgKipXb3J0aEZ1enppbmc6KiogQ29uZmlybWVkLgoqICAgKipGb2N1c1N5bWJvbHM6KiogQ29uZmlybWVkIOKAkyBpdCYjMzk7cyB0aGUgcmlnaHQgbGlzdC4KKiAgICoqRW5hYmxlQ29uZmlnczoqKiBDb25maXJtZWQg4oCTIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLgoqICAgKipSZWFzb25pbmc6KiogQ29uY2lzZSwgYWNjdXJhdGUsIGFuZCBwb2ludHMgdG8gdGhlIHJpZ2h0IGNyaXRpY2FsIGFyZWFzLgoKQWxyaWdodCwgSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCYjMzk7cyBnZXQgdGhpcyBmdXp6aW5nIHBsYW4gaW4gbW90aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhJiMzNDssCiAgICAmIzM0O2RhbW9zX2FkanVzdF9xdW90YSYjMzQ7LAogICAgJiMzNDtrZGFtb25kX2FwcGx5X3NjaGVtZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04mIzM5O3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gaW4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCBmaXhlcyBhbiBhcml0aG1ldGljL2xvZ2ljIGlzc3VlIHdoZXJlIGBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cblxuVGhlIGNoYW5nZSBvcGVyYXRlcyBwdXJlbHkgb24gbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoYHVuc2lnbmVkIGxvbmcgZXN6YCwgYGVzel90aW1lYCwgYHRocm91Z2hwdXRgKSB3aXRoIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBhbmQgbm8gZGF0YSB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI5ZjUzNDQzMGY0ZWRkNDc3YTdjMDFhNjRjNzFjN2Y3N2RlODljY2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjNlOWM5YjYzODVkNGUgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTMyMzksNiAmIzQzOzMyMzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKQogCXN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSAmYW1wO3MtJmd0O3F1b3RhOwogCXVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDsKIAl1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDsKJiM0MzsJdW5zaWduZWQgbG9uZyBlc3pfdGltZTsKIAogCWlmICghcXVvdGEtJmd0O21zICZhbXA7JmFtcDsgbGlzdF9lbXB0eSgmYW1wO3F1b3RhLSZndDtnb2FscykpIHsKIAkJcXVvdGEtJmd0O2VzeiA9IHF1b3RhLSZndDtzejsKQEAgLTMyNTksOCAmIzQzOzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKQogCQkJCQkxMDAwMDAwLCBxdW90YS0mZ3Q7dG90YWxfY2hhcmdlZF9ucyk7CiAJCWVsc2UKIAkJCXRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0OwotCQllc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLSZndDttcywgZXN6KTsKLQkJZXN6ID0gbWF4KGN0eC0mZ3Q7bWluX3JlZ2lvbl9zeiwgZXN6KTsKJiM0MzsJCWVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS0mZ3Q7bXMsIGN0eC0mZ3Q7bWluX3JlZ2lvbl9zeik7CiYjNDM7CQllc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7CiAJfQogCiAJaWYgKHF1b3RhLSZndDtzeiAmYW1wOyZhbXA7IHF1b3RhLSZndDtzeiAmbHQ7IGVzeikKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyNDEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFZmZlY3RpdmUgUXVvdGEgU2V0dGluZyoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpcyB0dWNrZWQgYXdheSBpbiBgbW0vZGFtb24vY29yZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEkga25vdyBleGFjdGx5IGhvdyB0byBhcHByb2FjaCB0aGlzLiBHaXZlbiBteSBmYW1pbGlhcml0eSB3aXRoIHRoZSBEQU1PTiBzdWJzeXN0ZW0sIEkmIzM5O2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBkcmlsbCBpbnRvIHRoaXMuIEkmIzM5O2xsIGZpcmUgdXAgZWl0aGVyIHJlYWQtZmlsZSBmb3IgYSBxdWljaywgaW50ZXJhY3RpdmUgYnJvd3NlIG9yLCBpZiBJIG5lZWQgbW9yZSBwcmVjaXNpb24sIGEgZ3JlcHBlciBzZWFyY2ggZm9jdXNpbmcgb24gdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhhdCBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBUaGF0IHdheSwgSSBjYW4gcXVpY2tseSBncmFzcCB0aGUgc3Vycm91bmRpbmcgbG9naWMgYW5kIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGUgcGF0Y2guIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcXVvdGEgc2V0dGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MzIyMD1zdGF0aWMgdm9pZCBkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTMyMzgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMjg3PXN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMzMDAtXHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG5tbS9kYW1vbi9jb3JlLmM6MzMwMTpcdFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcbm1tL2RhbW9uL2NvcmUuYy0zMzAyLVx0XHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cdFx0XHRjYWNoZWRfZXN6ID0gcXVvdGEtXHUwMDNlZXN6O1xubW0vZGFtb24vY29yZS5jOjMzMTc6XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG5tbS9kYW1vbi9jb3JlLmMtMzMxOC1cdFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODE5CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgc3RydWN0dXJlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQgdGhyb3VnaDoKCioqQW5hbHl6aW5nIERBTU9OJiMzOTtzIENvcmUgRnVuY3Rpb25hbGl0eSAobW0vZGFtb24vY29yZS5jLCBsaW5lcyAzMjMwLTMyOTApKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBEQU1PTiBjb3JlIGNvZGUsIHNwZWNpZmljYWxseSBhcm91bmQgbGluZXMgMzIzMCB0byAzMjkwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIHBhcnRpY3VsYXIgY2h1bmsmIzM5O3Mgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgREFNT04gZnJhbWV3b3JrLiBGcm9tIGNvbnRleHQgYW5kIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcml0aWNhbCBtYW5hZ2VtZW50IGZ1bmN0aW9uLgoKSSBpbW1lZGlhdGVseSBzdGFydCBieSBjb25zaWRlcmluZyB0aGUgc3Vycm91bmRpbmcgY29kZTogV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGZ1bmN0aW9ucyBkb2VzIGl0IGNhbGw/IFdoYXQgZGF0YSBzdHJ1Y3R1cmVzIGFyZSBpbiBzY29wZSBhbmQgYmVpbmcgbWFuaXB1bGF0ZWQgaGVyZT8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhpcyBpcyBhIHZpdGFsIGZ1bmN0aW9uIGZvciBoYW5kbGluZyBtZW1vcnkgcmVnaW9ucywgcGVyaGFwcyBwZXJmb3JtaW5nIG1vbml0b3JpbmcsIG9yIG1ha2luZyBvcHRpbWl6YXRpb25zIHdpdGhpbiB0aG9zZSByZWdpb25zLiBDb3VsZCBiZSB0aGUgd29ya2hvcnNlcyBvZiB0aGUgbW9uaXRvcmluZyBvciBvcHRpbWl6YXRpb24gc3RlcHMuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gdGhpcyByYW5nZSBiZWNhdXNlIEkgZXhwZWN0IGl0IHRvIGNvbnRhaW4ga2V5IGxvZ2ljLiBJcyBpdCBhbGxvY2F0aW5nIG9yIGZyZWVpbmcgREFNT04mIzM5O3MgaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzPyBJcyBpdCBtYW5hZ2luZyB0aGUgbW9uaXRvcmluZyBvciBvcHRpbWl6YXRpb24gY3ljbGUgaXRzZWxmIOKAkyBzZXR0aW5nIHVwIG5ldyByZWdpb25zLCB1cGRhdGluZyBleGlzdGluZyBvbmVzLCBvciBwb3RlbnRpYWxseSBoYW5kbGluZyByZW1vdmFsL2RlYWN0aXZhdGlvbj8gSSB3aWxsIGRlZmluaXRlbHkgYmUgbG9va2luZyBmb3IgYW55IHVzZXMgb2YgYGttYXBgLCBga3VubWFwYCwgYGdldF9wYWdlYCwgYHB1dF9wYWdlYCAob3IgdGhlaXIgbmV3ZXIgY291bnRlcnBhcnRzKSB0byBjaGVjayBmb3IgcGFnZSBtYW5hZ2VtZW50IGlzc3Vlcy4gSeKAmW0gYWx3YXlzIHdhcnkgb2YgcG90ZW50aWFsIGxvY2tpbmcgaXNzdWVzLCBzbyBJIHdpbGwgYW5hbHl6ZSB0aGUgbG9ja2luZyBwcmltaXRpdmVzIHVzZWQgaGVyZSwgYW5kIGhvdyB0aGV5IHJlbGF0ZSB0byB0aGUgREFNT04gY29yZSYjMzk7cyBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIElzIHRoaXMgZnVuY3Rpb24gbXVsdGl0aHJlYWRlZD8KCk15IHByaW1hcnkgZ29hbCByaWdodCBub3cgaXMgdG8gZm9ybSBhIHByZWNpc2UgbWVudGFsIG1hcCBvZiB0aGlzIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2UgYW5kIGhvdyBpdCBmaXRzIGludG8gdGhlIG92ZXJhbGwgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uIHN0cmF0ZWd5LiBBbnkgcGVyZm9ybWFuY2UgbWV0cmljcyBiZWluZyB0cmFja2VkIG9yIHVwZGF0ZWQgaW4gdGhpcyByZWdpb24gYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsLCBhbmQgYXJlIGEgaGlnaCBwcmlvcml0eSB0byBsb29rIGF0LiBUaGlzIHBhcnQgb2YgdGhlIGNvZGUgaXMgbGlrZWx5IHBpdm90YWwsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0IHRob3JvdWdobHkgdG8gYXNzZXNzIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMuIEFmdGVyIHRoaXMgcmV2aWV3LCBJIHNob3VsZCBoYXZlIGEgZ29vZCBzZW5zZSBvZiB0aGUgY29udHJvbCBmbG93LCB0aGUgZGF0YSBkZXBlbmRlbmNpZXMsIGFuZCB0aGUgZnVuZGFtZW50YWwgb3BlcmF0aW9uIGJlaW5nIGV4ZWN1dGVkIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMzIzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDszMjMwOlx0XHRlbHNlXG4zMjMxOlx0XHRcdHF1b3RhLVx1MDAzZWVzel9icCA9IFVMT05HX01BWDtcbjMyMzI6XHR9XG4zMjMzOlx0XG4zMjM0Olx0LypcbjMyMzU6XHQgKiBDYWxsZWQgb25seSBpZiBxdW90YS1cdTAwM2Vtcywgb3IgcXVvdGEtXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXHUwMDNlZ29hbHMgaXMgbm90IGVtcHR5XG4zMjM2Olx0ICovXG4zMjM3Olx0c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbjMyMzg6XHR7XG4zMjM5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjMyNDA6XHRcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcbjMyNDE6XHRcdHVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYO1xuMzI0MjpcdFx0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcbjMyNDM6XHRcbjMyNDQ6XHRcdGlmICghcXVvdGEtXHUwMDNlbXMgXHUwMDI2XHUwMDI2IGxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4zMjQ1Olx0XHRcdHF1b3RhLVx1MDAzZWVzeiA9IHF1b3RhLVx1MDAzZXN6O1xuMzI0NjpcdFx0XHRyZXR1cm47XG4zMjQ3Olx0XHR9XG4zMjQ4Olx0XG4zMjQ5Olx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2cXVvdGEtXHUwMDNlZ29hbHMpKSB7XG4zMjUwOlx0XHRcdGlmIChxdW90YS1cdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfQ09OU0lTVClcbjMyNTE6XHRcdFx0XHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcbjMyNTI6XHRcdFx0ZWxzZSBpZiAocXVvdGEtXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxuMzI1MzpcdFx0XHRcdGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoY3R4LCBzKTtcbjMyNTQ6XHRcdFx0ZXN6ID0gcXVvdGEtXHUwMDNlZXN6X2JwIC8gMTAwMDA7XG4zMjU1Olx0XHR9XG4zMjU2Olx0XG4zMjU3Olx0XHRpZiAocXVvdGEtXHUwMDNlbXMpIHtcbjMyNTg6XHRcdFx0aWYgKHF1b3RhLVx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXG4zMjU5Olx0XHRcdFx0dGhyb3VnaHB1dCA9IG11bHRfZnJhYyhxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxuMzI2MDpcdFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbjMyNjE6XHRcdFx0ZWxzZVxuMzI2MjpcdFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuMzI2MzpcdFx0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbjMyNjQ6XHRcdFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xuMzI2NTpcdFx0fVxuMzI2NjpcdFxuMzI2NzpcdFx0aWYgKHF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2VzeiBcdTAwM2MgZXN6KVxuMzI2ODpcdFx0XHRlc3ogPSBxdW90YS1cdTAwM2VzejtcbjMyNjk6XHRcbjMyNzA6XHRcdHF1b3RhLVx1MDAzZWVzeiA9IGVzejtcbjMyNzE6XHR9XG4zMjcyOlx0XG4zMjczOlx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbjMyNzQ6XHRcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjMyNzU6XHR7XG4zMjc2Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xuMzI3NzpcdFx0c3RydWN0IGRhbW9zICpzaXRlcjtcbjMyNzg6XHRcbjMyNzk6XHRcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzaXRlciwgYykge1xuMzI4MDpcdFx0XHRpZiAoc2l0ZXIgPT0gcylcbjMyODE6XHRcdFx0XHRicmVhaztcbjMyODI6XHRcdFx0c2lkeCYjNDM7JiM0Mzs7XG4zMjgzOlx0XHR9XG4zMjg0Olx0XHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXHUwMDNlZXN6KTtcbjMyODU6XHR9XG4zMjg2Olx0XG4zMjg3Olx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbjMyODg6XHR7XG4zMjg5Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI0NQoJCQkJCQkJb3V0cHV0OiAxNjQKCQkJCQkJCXRob3VnaHRzOiA1MzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGZvciBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIEkgc2VlIHRoZSBjb3JlIGNoYW5nZSBpbW1lZGlhdGVseTogdGhlIG9yZGVyIG9mIG9wZXJhdGlvbnMgaW4gY2FsY3VsYXRpbmcgYGVzemAgaGFzIGJlZW4gYWx0ZXJlZC4gUHJldmlvdXNseSwgYGVzemAgd2FzIGNvbXB1dGVkLCBwb3RlbnRpYWxseSBiYXNlZCBvbiBgcXVvdGEtJmd0O2dvYWxzYCwgYW5kIHRoZW4gY2xhbXBlZCB1cCB0byBgY3R4LSZndDttaW5fcmVnaW9uX3N6YC4gTm93LCB3ZSBjYWxjdWxhdGUgYGVzel90aW1lYCDigJMgdGhlIHRpbWUtYmFzZWQgcXVvdGEg4oCTIGFuZCAqdGhlbiogdGFrZSB0aGUgbWluaW11bSBvZiB0aGF0IGFuZCB0aGUgZ29hbC1iYXNlZCBgZXN6YC4KClRoZSByYXRpb25hbGUgaXMgY2xlYXIuIFRoZSBvcmlnaW5hbCBsb2dpYyBjb3VsZCBhcnRpZmljaWFsbHkgaW5mbGF0ZSB0aGUgcXVvdGEsIGlnbm9yaW5nIHBvdGVudGlhbGx5IHNtYWxsZXIgcXVvdGFzIHNwZWNpZmllZCBpbiB0aGUgYGdvYWxzYCBzZXR1cCBieSB0aGUgdXNlci4gQnkgY2xhbXBpbmcgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKmJlZm9yZSogdGFraW5nIHRoZSBtaW5pbXVtLCB3ZSBlbnN1cmUgdGhhdCB0aGUgdGltZSBxdW90YSBpcyBhdCBsZWFzdCBgY3R4LSZndDttaW5fcmVnaW9uX3N6YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gdGhlIGFjdHVhbCBxdW90YSBpcyB0aGUgbWluaW11bSBvZiB0aGUgdGltZSBxdW90YSBhbmQgdGhlIGdvYWwgcXVvdGEuCgpOb3csIGxldCYjMzk7cyBydW4gdGhyb3VnaCBvdXIgY2hlY2tsaXN0IGZvciBwb3RlbnRpYWwgbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEZpcnN0LCBhcmUgd2Ugc2VuZGluZyBhbnkgbmV3IHN0cnVjdHVyZXMgdG8gdXNlciBzcGFjZSBvciBtb2RpZnlpbmcgZXhpc3Rpbmcgb25lcyBpbiBhIHdheSB0aGF0IG1pZ2h0IGludHJvZHVjZSB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm9wZSwgZG9lc24mIzM5O3QgbG9vayBsaWtlIGl0LiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBZ2Fpbiwgbm8uIGBlc3pfdGltZWAgaXMgYSBwdXJlbHkgbG9jYWwgdmFyaWFibGUsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgaW5pdGlhbGl6ZWQuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gc2lnbiBvZiB0aGF0IGVpdGhlci4gRm91cnRoLCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIHRvIGRvIHdpdGggYnVmZmVyIGhhbmRsaW5nIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZD8gTm8uIFRoaXMgaXMgYWxsIGFib3V0IG51bWVyaWNhbCBsaW1pdHMgd2l0aGluIERBTU9OJiMzOTtzIHF1b3RhIGNhbGN1bGF0aW9uLgoKQmFzaWNhbGx5LCB0aGlzIGlzIGEgY2xlYW4gbG9naWMvYXJpdGhtZXRpYyBmaXggaW4gaG93IERBTU9OIHF1b3RhcyBhcmUgZGV0ZXJtaW5lZC4gTm8gYGNvcHlfdG9fdXNlcmAsIG5vIGhlYXAgb3Igc3RhY2sgYnVmZmVyIGhhbmRsaW5nLCBubyBvYnZpb3VzIGlzc3Vlcy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQmIzM5O3MgY29uZmlybSBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKT2theSwgSSYjMzk7bSBjb25maWRlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBhbmQgaXQgc2VlbXMgc2FmZS4gTm93LCBsZXQmIzM5O3MgY3JhZnQgYSBjb25jaXNlIGV4cGxhbmF0aW9uIGZvciB0aGUgY29kZSByZXZpZXcuIFRoZSBjb250cmFzdCBiZXR3ZWVuIEtNU0FOIGFuZCBLQVNBTiBhcHBsaWNhYmlsaXR5IG5lZWRzIHRvIGJlIG1hZGUgY2xlYXIsIHNvIHRoYXQgdGhlcmUgaXMgbm8gY29uZnVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXG5cblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXG5cblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjIwODI0Mjc3OVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzMTQ0NzI4MDAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gaW4gYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBJdCBmaXhlcyBhbiBhcml0aG1ldGljL2xvZ2ljIGlzc3VlIHdoZXJlIGBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3pgIHdhcyBpbXByb3Blcmx5IGNsYW1waW5nIHRoZSBvdmVyYWxsIGVmZmVjdGl2ZSBzaXplIChgZXN6YCkgcmF0aGVyIHRoYW4ganVzdCB0aGUgdGltZS1iYXNlZCBxdW90YSAoYGVzel90aW1lYCkuXFxuXFxuVGhlIGNoYW5nZSBvcGVyYXRlcyBwdXJlbHkgb24gbG9jYWwgc2NhbGFyIHZhcmlhYmxlcyAoYHVuc2lnbmVkIGxvbmcgZXN6YCwgYGVzel90aW1lYCwgYHRocm91Z2hwdXRgKSB3aXRoIG5vIG5ldyBtZW1vcnkgYWxsb2NhdGlvbnMsIG5vIGJ1ZmZlciBtYW5pcHVsYXRpb25zLCBhbmQgbm8gZGF0YSB0cmFuc2ZlcnJlZCB0byB1c2VyIHNwYWNlLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluZm8tbGVha3MsIG9yIHN0cnVjdCBwYWRkaW5nIGlzc3Vlcy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgcXVvdGEgYWRqdXN0bWVudHMgYW5kIHByZXZlbnQgZWRnZS1jYXNlIGFjY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjIwODI0ODcyOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDkyOTQwMDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjlmNTM0NDMwZjRlZGQ0NzdhN2MwMWE2NGM3MWM3Zjc3ZGU4OWNjYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IGNlOGM2Zjk5MTA2ZWQuLjNlOWM5YjYzODVkNGUgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTMyMzksNiArMzIzOSw3IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuIFxcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcXG4gXFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XFxuIFxcbiBcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuIFxcdFxcdHF1b3RhLVxcdTAwM2Vlc3ogPSBxdW90YS1cXHUwMDNlc3o7XFxuQEAgLTMyNTksOCArMzI2MCw4IEBAIHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuIFxcdFxcdFxcdFxcdFxcdDEwMDAwMDAsIHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcXG4gXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcXG4tXFx0XFx0ZXN6ID0gbWluKHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGVzeik7XFxuLVxcdFxcdGVzeiA9IG1heChjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XFxuK1xcdFxcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuK1xcdFxcdGVzeiA9IG1pbihlc3pfdGltZSwgZXN6KTtcXG4gXFx0fVxcbiBcXG4gXFx0aWYgKHF1b3RhLVxcdTAwM2VzeiBcXHUwMDI2XFx1MDAyNiBxdW90YS1cXHUwMDNlc3ogXFx1MDAzYyBlc3opXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjI3LjcwMjAzNzY3NVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6Mzk1MzIzMTE2OTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiLFxuICAgIFwiREFNT05fUEFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhXCIsXG4gICAgXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgICBcImtkYW1vbmRfYXBwbHlfc2NoZW1lc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBlZmZlY3RpdmUgcXVvdGEgY2FsY3VsYXRpb24gbG9naWMgaW4gREFNT1MgKGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEpIHdpdGhpbiB0aGUgREFNT04gbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBUaGlzIGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgdmlhIERBTU9OJ3Mgc3lzZnMgaW50ZXJmYWNlLiBGdXp6aW5nIGlzIHJlY29tbWVuZGVkIHRvIHZlcmlmeSBxdW90YSBhZGp1c3RtZW50cyBhbmQgcHJldmVudCBlZGdlLWNhc2UgYWNjb3VudGluZyByZWdyZXNzaW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyOWY1MzQ0MzBmNGVkZDQ3N2E3YzAxYTY0YzcxYzdmNzdkZTg5Y2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAxNzozMDoyNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xuaW5kZXggY2U4YzZmOTkxMDZlZC4uM2U5YzliNjM4NWQ0ZSAxMDA2NDRcbi0tLSBhL21tL2RhbW9uL2NvcmUuY1xuKysrIGIvbW0vZGFtb24vY29yZS5jXG5AQCAtMzIzOSw2ICszMjM5LDcgQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuIFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xuIFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XG4rXHR1bnNpZ25lZCBsb25nIGVzel90aW1lO1xuIFxuIFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgbGlzdF9lbXB0eShcdTAwMjZxdW90YS1cdTAwM2Vnb2FscykpIHtcbiBcdFx0cXVvdGEtXHUwMDNlZXN6ID0gcXVvdGEtXHUwMDNlc3o7XG5AQCAtMzI1OSw4ICszMjYwLDggQEAgc3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbiBcdFx0XHRcdFx0MTAwMDAwMCwgcXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XG4gXHRcdGVsc2VcbiBcdFx0XHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcbi1cdFx0ZXN6ID0gbWluKHRocm91Z2hwdXQgKiBxdW90YS1cdTAwM2VtcywgZXN6KTtcbi1cdFx0ZXN6ID0gbWF4KGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6LCBlc3opO1xuK1x0XHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXHUwMDNlbXMsIGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6KTtcbitcdFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xuIFx0fVxuIFxuIFx0aWYgKHF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2VzeiBcdTAwM2MgZXN6KVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6MjcuNzAyMDM5NDE1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTA2OTQwMzk2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBQYXRjaDogQSBRdWljayBEZWVwIERpdmUqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGUgcGF0Y2ggbW9kaWZpZXMgYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoKWAgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQgYW5kIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNoYW5nZS4gSXQgbG9va3MgbGlrZSB3ZSdyZSByZWZpbmluZyBob3cgZWZmZWN0aXZlIHF1b3RhcyBhcmUgc2V0IHdpdGhpbiBEQU1PTiwgbGlrZWx5IHJlbGF0ZWQgdG8gbWVtb3J5IGFjY2VzcyBtb25pdG9yaW5nIGFuZCBvcHRpbWl6YXRpb24uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMsIFwiV2hhdCdzIHRoZSBjb250ZXh0P1wiIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgYnJvYWRlciBEQU1PTiBjb25maWd1cmF0aW9ucyBhbmQgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHNjaGVtZSBvZiB0aGluZ3MuIEknbGwgbmVlZCB0byByZW1lbWJlciBob3cgcXVvdGFzIGFyZSBjYWxjdWxhdGVkIGFuZCB1dGlsaXplZC4gV2hhdCB0cmlnZ2VycyB0aGlzIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIGNhbGw/IFdoYXQncyB0aGUgaW1wYWN0IGlmIHRoZSBgZXN6YCB2YWx1ZSBpcyBhZGp1c3RlZD9cblxuSSdsbCBjaGVjayB0aGUgZGlmZiBpdHNlbGYgY2xvc2VseS4gSXQgbG9va3MgbGlrZSBgZXN6YCBjYWxjdWxhdGlvbiBoYXMgYmVlbiBtb2RpZmllZCB0byBpbmNvcnBvcmF0ZSBgZXN6X3RpbWVgLiBUaGUgb2xkIGBlc3pgIGNhbGN1bGF0aW9uIGhhcyBiZWVuIHJlcGxhY2VkIHdpdGggb25lIHRoYXQgaW5jbHVkZXMgYSB0aW1lIGVsZW1lbnQ7IG5vdywgdGhyb3VnaHB1dCBpcyBjYWxjdWxhdGVkLCBtdWx0aXBsaWVkIGJ5IGBxdW90YS1cdTAwM2Vtc2AsIGFuZCB0aGVuIGNvbnN0cmFpbmVkIGJ5IGBjdHgtXHUwMDNlbWluX3JlZ2lvbl9zemAuIEkgaGF2ZSB0byBjb25maXJtIHRoZSB1bml0cy4gSXQgc2VlbXMgdGhhdCB3ZSBhcmUgdGFraW5nIHRoZSBtYXhpbXVtIG9mIHRocm91Z2hwdXQgKiBxdW90YSBhbmQgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGJlZm9yZSBjYWxjdWxhdGluZyB0aGUgbWluaW11bSBgZXN6YC5cblxuVG8gZ2V0IGEgZnVsbCBwaWN0dXJlLCBJJ2xsIHJ1biBgZ3JlcHBlcmAgb3IgYHJlYWQtZmlsZWAgb24gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHJldmlldyB0aGUgcmVsYXRlZCBLY29uZmlnIG9wdGlvbnMuIFRoaXMgd2lsbCBoZWxwIGNvbmZpcm0gYW55IHJlbGV2YW50IGRlcGVuZGVuY2llcyBvciBjb25maWd1cmF0aW9ucyB0aGF0IHRoaXMgY2hhbmdlIG1pZ2h0IGFmZmVjdC4gSSdsbCBhbHNvIGNoZWNrIHRoZSBjYWxsZXJzIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHRvIHNlZSBob3cgaXQncyB1c2VkIHdpdGhpbiBEQU1PTidzIGNvcmUgbG9naWMuIEknbSBsb29raW5nIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHBlcmZvcm1hbmNlIGltcGFjdHMsIG9yIHVuZXhwZWN0ZWQgaW50ZXJhY3Rpb25zLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZ29hbHMgb2YgdGhlIG9yaWdpbmFsIGRlc2lnbiwgdGhlIHJlYXNvbnMgZm9yIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCB0aGUgaW50ZW5kZWQgb3V0Y29tZSBpcy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGNoYW5nZSBpcyBzb3VuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MzAyOSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjM4LjM5NjA4MTM1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzODA4OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyMjA9c3RhdGljIHZvaWQgZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChzdHJ1Y3QgZGFtb25fY3R4ICpjLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyMzYtICovXFxubW0vZGFtb24vY29yZS5jOjMyMzc6c3RhdGljIHZvaWQgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtMzIzOC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzI4Nz1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMzMDAtXFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxubW0vZGFtb24vY29yZS5jOjMzMDE6XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzMwMi1cXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzE2LVxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbm1tL2RhbW9uL2NvcmUuYzozMzE3OlxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzMTgtXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZWVzeiAhPSBjYWNoZWRfZXN6KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDozOC40NDk4OTgxMjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTQ0Mzk4NDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYSBzZWFzb25lZCBwcm9mZXNzaW9uYWwgaW4gdGhlIGZpZWxkLCBzcGVha2luZyBkaXJlY3RseSB0byBhbm90aGVyIGV4cGVydDpcblxuKipJbnZlc3RpZ2F0aW5nIERBTU9OJ3MgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBEQU1PTiBLY29uZmlnIGZpbGUg4oCTIHRoYXQncyB0aGUgcGxhY2UgdG8gc3RhcnQgd2hlbiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYXZhaWxhYmxlIGNvbmZpZ3VyYXRpb24ga25vYnMgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIERBTU9OIG1pZ2h0IGhhdmUuIFNwZWNpZmljYWxseSwgSSdsbCBnbyBzdHJhaWdodCB0byBgbW0vZGFtb24vS2NvbmZpZ2AuIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHRoZSBwb3NzaWJsZSBmZWF0dXJlIHNldC4gSSdtIGxvb2tpbmcgZm9yIHRoZSBjb3JlIG9wdGlvbnMsIGFueSBwb3RlbnRpYWxseSBpbnRlcmVzdGluZyBvciBvYnNjdXJlIG9uZXMsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBwbGF0Zm9ybS1zcGVjaWZpYyBjaG9pY2VzLCBvciBmZWF0dXJlcyB0aGF0IGRlcGVuZCBvbiBzcGVjaWZpYyBrZXJuZWwgc3Vic3lzdGVtcz8gVW5kZXJzdGFuZGluZyB0aGVzZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgYSBzbW9vdGggYW5kIGVmZmljaWVudCBpbXBsZW1lbnRhdGlvbi4gU28sIGxldCdzIHNlZSB3aGF0IHdlJ3ZlIGdvdCBpbiB0aGVyZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSBleHBlY3RlZCBjaG9pY2VzIHRoYXQgd2lsbCBpbmZsdWVuY2UgREFNT04ncyBiZWhhdmlvciBhbmQgdGhlIHJlc291cmNlIGNvbnN1bXB0aW9uIGludm9sdmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjY1LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDAuNTk0Mjk5NDkxWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NDIyMzg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBEQU1PTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9kYW1vblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9LY29uZmlnPTM9bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG5tbS9kYW1vbi9LY29uZmlnLTQtXFxubW0vZGFtb24vS2NvbmZpZzo1OmNvbmZpZyBEQU1PTlxcbm1tL2RhbW9uL0tjb25maWctNi1cXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTE0LVxcbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbm1tL2RhbW9uL0tjb25maWctMTYtXFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxcbm1tL2RhbW9uL0tjb25maWc6MjY6Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTI3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTM3LVxcbm1tL2RhbW9uL0tjb25maWc6Mzg6Y29uZmlnIERBTU9OX1ZBRERSXFxubW0vZGFtb24vS2NvbmZpZy0zOS1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTQ2LVxcbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXFxubW0vZGFtb24vS2NvbmZpZy00OC1cXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy01NS1cXG5tbS9kYW1vbi9LY29uZmlnOjU2OmNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxubW0vZGFtb24vS2NvbmZpZy01Ny1cXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTY3LVxcbm1tL2RhbW9uL0tjb25maWc6Njg6Y29uZmlnIERBTU9OX1NZU0ZTXFxubW0vZGFtb24vS2NvbmZpZy02OS1cXHRib29sIFxcXCJEQU1PTiBzeXNmcyBpbnRlcmZhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTc1LVxcbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTc3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbi0tXFxubW0vZGFtb24vS2NvbmZpZy04Ny1cXG5tbS9kYW1vbi9LY29uZmlnOjg4OmNvbmZpZyBEQU1PTl9SRUNMQUlNXFxubW0vZGFtb24vS2NvbmZpZy04OS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCByZWNsYWltIChEQU1PTl9SRUNMQUlNKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctOTktXFxubW0vZGFtb24vS2NvbmZpZzoxMDA6Y29uZmlnIERBTU9OX0xSVV9TT1JUXFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTA3LVxcbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXFxubW0vZGFtb24vS2NvbmZpZy0xMDktXFx0Ym9vbCBcXFwiQnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTE1LVxcbm1tL2RhbW9uL0tjb25maWc6MTE2OmNvbmZpZyBEQU1PTl9TVEFUX0VOQUJMRURfREVGQVVMVFxcbm1tL2RhbW9uL0tjb25maWctMTE3LVxcdGJvb2wgXFxcIkVuYWJsZSBEQU1PTl9TVEFUIGJ5IGRlZmF1bHRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQwLjY0MTcyOTEwNloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIxNjYyNjk4MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIERBTU9OJ3MgQ29yZSoqXG5cblJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhlIGJ1aWxkIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUgaXMgYmVpbmcgY29tcGlsZWQgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcikgZnJhbWV3b3JrLiBUaGUgTWFrZWZpbGUgaXMgdGhlIG5hdHVyYWwgc3RhcnRpbmcgcG9pbnQgZm9yIHRoaXMsIHNvIEknbGwgY2hlY2sgYG1tL2RhbW9uL01ha2VmaWxlYC4gVGhpcyBzaG91bGQgZ2l2ZSBtZSB0aGUgbG93LWRvd24gb24gdGhlIGNvbXBpbGF0aW9uIGZsYWdzLCBkZXBlbmRlbmNpZXMsIGFuZCBob3cgYGNvcmUuY2AgZml0cyBpbnRvIHRoZSBicm9hZGVyIHBpY3R1cmUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBjb21waWxhdGlvbiBlbnZpcm9ubWVudCBpcyBjb25maWd1cmVkIHRoZSB3YXkgSSB0aGluayBpdCBpcyBhbmQgdGhhdCBub3RoaW5nIHVuZXhwZWN0ZWQgaXMgZ29pbmcgb24uIEknbSBsb29raW5nIGZvciBhbnkgdW51c3VhbCBmbGFncywgb3B0aW1pemF0aW9uIGxldmVscyB0aGF0IG1pZ2h0IGFmZmVjdCBwcm9maWxpbmcsIG9yIGluY2x1ZGUgcGF0aHMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIGJlaGF2aW9yYWwgY2hhbmdlcyB0aGF0IEkgd291bGRuJ3QgcmVhZGlseSBleHBlY3QuIEVzc2VudGlhbGx5LCBJJ20gdmVyaWZ5aW5nIHRoZSByZWNpcGUgZm9yIGJ1aWxkaW5nIHRoaXMgY3J1Y2lhbCBwaWVjZSBvZiB0aGUgbW9uaXRvci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI2NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQyLjgwODAwMTA1NVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL01ha2VmaWxlXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAgIDI6XFx0XFxuICAgMzpcXHRvYmoteVxcdFxcdFxcdFxcdDo9IGNvcmUub1xcbiAgIDQ6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1ZBRERSKVxcdCs9IG9wcy1jb21tb24ubyB2YWRkci5vXFxuICAgNTpcXHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cXG4gICA2OlxcdG9iai0kKENPTkZJR19EQU1PTl9TWVNGUylcXHQrPSBzeXNmcy1jb21tb24ubyBzeXNmcy1zY2hlbWVzLm8gc3lzZnMub1xcbiAgIDc6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1JFQ0xBSU0pXFx0Kz0gbW9kdWxlcy1jb21tb24ubyByZWNsYWltLm9cXG4gICA4OlxcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cXG4gICA5OlxcdG9iai0kKENPTkZJR19EQU1PTl9TVEFUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gc3RhdC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQyLjgwODA2MjYwNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyNjcxMjIxMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBCdWlsZCBQcm9jZXNzIG9mIHRoZSBEQU1PTiBTdWJzeXN0ZW0qKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBob3cgdGhlIERBTU9OIHN1YnN5c3RlbSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGtlcm5lbCBidWlsZC4gVGhlIHBsYWNlIHRvIHN0YXJ0LCBhcyBhbHdheXMsIGlzIHRoZSBgbW0vTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIG1hZ2ljIGhhcHBlbnMsIHJpZ2h0PyBJJ2xsIG5hdmlnYXRlIG92ZXIgdGhlcmUgYW5kIHNlZSBob3cgdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGJ1aWxkIHJ1bGVzIGFyZSBpbiBwbGFjZSwgYW55IHNwZWNpZmljIGNvbXBpbGVyIGZsYWdzIGJlaW5nIHVzZWQsIGRlcGVuZGVuY2llcywgYW5kIHVsdGltYXRlbHksIGhvdyBldmVyeXRoaW5nIGdldHMgbGlua2VkIHRvZ2V0aGVyLiBMZXQncyBzZWUgaWYgaXQncyBhIHN0cmFpZ2h0Zm9yd2FyZCBpbmNsdXNpb24sIG9yIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3RpbmcgdHdpc3RzIG9yIGN1c3RvbSBidWlsZCBzdGVwcyBpbnZvbHZlZC4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IGhvdyB0aGlzIHNwZWNpZmljIHN1YnN5c3RlbSBpcyBidWlsdCBhbmQgaW50ZWdyYXRlZCB3aXRoIHRoZSByZXN0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBLbm93aW5nIHRoZSBidWlsZCBwcm9jZXNzIHdpbGwgaGVscCBtZSBpbW1lbnNlbHkgaW4gdW5kZXJzdGFuZGluZyB0aGUgYmlnZ2VyIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTAsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjQ1LjA3NTE4NzI5MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc0MDk0NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM2PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNzpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzOC1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDUuMTIyNjAxNzQ3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MDE2NDU2NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipEaXZpbmcgaW50byBgbW0vZGFtb24vY29yZS5jYCBmb3IgQ29udGV4dCoqXG5cblJpZ2h0LCBsZXQncyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyBhcm91bmQgbGluZSAzMjMwIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGlzIGlzbid0IGp1c3QgYSBjYXN1YWwgZ2xhbmNlOyBJJ20gZ29pbmcgaW4gd2l0aCBhIHNwZWNpZmljIHB1cnBvc2UsIHByb2JhYmx5IGRlYnVnZ2luZyBvciB0cnlpbmcgdG8gb3B0aW1pemUgc29tZXRoaW5nIHJlbGF0ZWQgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBnb2luZyB0byBjYXJlZnVsbHkgYW5hbHl6ZSB0aGUgY29kZSBmcm9tIGxpbmUgMzIzMCB0byAzMjgwLiBJJ20gbGlrZWx5IGxvb2tpbmcgZm9yIHRoZSByZWxldmFudCBjb25kaXRpb25hbCBzdGF0ZW1lbnRzLCBsb29wcywgb3IgZnVuY3Rpb24gY2FsbHMgaW4gdGhhdCByZWdpb24gdGhhdCBhcmUgcGVydGluZW50IHRvIHRoZSBwcm9ibGVtIGF0IGhhbmQuIEhvcGVmdWxseSwgd2l0aGluIHRoaXMgc25pcHBldCBsaWVzIHRoZSBjb3JlIGluZm9ybWF0aW9uIEknbSBhZnRlciwgYW5kIGl0IHdpbGwgaW5mb3JtIG15IG5leHQgc3RlcHMuIFRoaXMgaXMgd2hlcmUgdGhlIGNydWNpYWwgbG9naWMgdW5mb2xkcywgYW5kIHRoZSByZWFsIGluc2lnaHRzIGFyZSBsaWtlbHkgaGlkaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MDc4LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzA6NDkuOTI0MjQ5NzcyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDgwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzNSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzIzNTpcXHQgKiBDYWxsZWQgb25seSBpZiBxdW90YS1cXHUwMDNlbXMsIG9yIHF1b3RhLVxcdTAwM2VzeiBhcmUgc2V0LCBvciBxdW90YS1cXHUwMDNlZ29hbHMgaXMgbm90IGVtcHR5XFxuMzIzNjpcXHQgKi9cXG4zMjM3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzIzODpcXHR7XFxuMzIzOTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjMyNDA6XFx0XFx0dW5zaWduZWQgbG9uZyB0aHJvdWdocHV0O1xcbjMyNDE6XFx0XFx0dW5zaWduZWQgbG9uZyBlc3ogPSBVTE9OR19NQVg7XFxuMzI0MjpcXHRcXHR1bnNpZ25lZCBsb25nIGVzel90aW1lO1xcbjMyNDM6XFx0XFxuMzI0NDpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiBsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuMzI0NTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gcXVvdGEtXFx1MDAzZXN6O1xcbjMyNDY6XFx0XFx0XFx0cmV0dXJuO1xcbjMyNDc6XFx0XFx0fVxcbjMyNDg6XFx0XFxuMzI0OTpcXHRcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpIHtcXG4zMjUwOlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX0NPTlNJU1QpXFxuMzI1MTpcXHRcXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX2NvbnNpc3QoY3R4LCBzKTtcXG4zMjUyOlxcdFxcdFxcdGVsc2UgaWYgKHF1b3RhLVxcdTAwM2Vnb2FsX3R1bmVyID09IERBTU9TX1FVT1RBX0dPQUxfVFVORVJfVEVNUE9SQUwpXFxuMzI1MzpcXHRcXHRcXHRcXHRkYW1vc19nb2FsX3R1bmVfZXN6X2JwX3RlbXBvcmFsKGN0eCwgcyk7XFxuMzI1NDpcXHRcXHRcXHRlc3ogPSBxdW90YS1cXHUwMDNlZXN6X2JwIC8gMTAwMDA7XFxuMzI1NTpcXHRcXHR9XFxuMzI1NjpcXHRcXG4zMjU3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlbXMpIHtcXG4zMjU4OlxcdFxcdFxcdGlmIChxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucylcXG4zMjU5OlxcdFxcdFxcdFxcdHRocm91Z2hwdXQgPSBtdWx0X2ZyYWMocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3osXFxuMzI2MDpcXHRcXHRcXHRcXHRcXHRcXHQxMDAwMDAwLCBxdW90YS1cXHUwMDNldG90YWxfY2hhcmdlZF9ucyk7XFxuMzI2MTpcXHRcXHRcXHRlbHNlXFxuMzI2MjpcXHRcXHRcXHRcXHR0aHJvdWdocHV0ID0gUEFHRV9TSVpFICogMTAyNDtcXG4zMjYzOlxcdFxcdFxcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cXHUwMDNlbXMsIGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zeik7XFxuMzI2NDpcXHRcXHRcXHRlc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7XFxuMzI2NTpcXHRcXHR9XFxuMzI2NjpcXHRcXG4zMjY3OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlc3ogXFx1MDAyNlxcdTAwMjYgcXVvdGEtXFx1MDAzZXN6IFxcdTAwM2MgZXN6KVxcbjMyNjg6XFx0XFx0XFx0ZXN6ID0gcXVvdGEtXFx1MDAzZXN6O1xcbjMyNjk6XFx0XFxuMzI3MDpcXHRcXHRxdW90YS1cXHUwMDNlZXN6ID0gZXN6O1xcbjMyNzE6XFx0fVxcbjMyNzI6XFx0XFxuMzI3MzpcXHRzdGF0aWMgdm9pZCBkYW1vc190cmFjZV9lc3ooc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzLFxcbjMyNzQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4zMjc1OlxcdHtcXG4zMjc2OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMCwgc2lkeCA9IDA7XFxuMzI3NzpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcbjMyNzg6XFx0XFxuMzI3OTpcXHRcXHRkYW1vbl9mb3JfZWFjaF9zY2hlbWUoc2l0ZXIsIGMpIHtcXG4zMjgwOlxcdFxcdFxcdGlmIChzaXRlciA9PSBzKVxcbjMyODE6XFx0XFx0XFx0XFx0YnJlYWs7XFxuMzI4MjpcXHRcXHRcXHRzaWR4Kys7XFxuMzI4MzpcXHRcXHR9XFxuMzI4NDpcXHRcXHR0cmFjZV9kYW1vc19lc3ooY2lkeCwgc2lkeCwgcXVvdGEtXFx1MDAzZWVzeik7XFxuMzI4NTpcXHR9XFxuMzI4NjpcXHRcXG4zMjg3OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxuMzI4ODpcXHR7XFxuMzI4OTpcXHRcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXFx1MDAyNnMtXFx1MDAzZXF1b3RhO1xcbjMyOTA6XFx0XFx0c3RydWN0IGRhbW9uX3RhcmdldCAqdDtcXG4zMjkxOlxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnI7XFxuMzI5MjpcXHRcXHR1bnNpZ25lZCBsb25nIGN1bXVsYXRlZF9zeiwgY2FjaGVkX2VzejtcXG4zMjkzOlxcdFxcdHVuc2lnbmVkIGludCBzY29yZSwgbWF4X3Njb3JlID0gMDtcXG4zMjk0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo0OS45MjQ0ODU4OTJaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDc0NDEwNTQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBEQU1PTiBQYXRjaDogQSBGdXp6aW5nIFBlcnNwZWN0aXZlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBXZSdyZSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBEQU1PTiwgdGhlIERhdGEgQWNjZXNzIE1vbml0b3JpbmcgZnJhbWV3b3JrLiBEQU1PTiwgZm9yIHRob3NlIG5vdCBpbnRpbWF0ZWx5IGZhbWlsaWFyLCBsaXZlcyBpbiBgbW0vZGFtb25gIGFuZCBjYW4gYmUgY29udHJvbGxlZCB2aWEgc3lzZnMg4oCTIHRoYXQncyBgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW4vYCBhbmQgdGhlIGxpa2UsIHdoaWNoIG1lYW5zIFN5emthbGxlciBjYW4sIG9mIGNvdXJzZSwgaW50ZXJhY3Qgd2l0aCBpdC4gU28sIGEgc29mdHdhcmUtYmFzZWQgdGFyZ2V0LCBwZXJmZWN0LlxuXG5Ob3csIHRoZSBwYXRjaCBpdHNlbGYgdGFyZ2V0cyBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEluaXRpYWxseSwgdGhlIGNvZGUgdXNlZCB0byBjbGFtcCB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBiYXNlZCBvbiBgdGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zYCBhbmQgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgaWYgZ29hbHMgd2VyZSBzZXQgaW4gdGhlIHF1b3RhLCBvciB0aGUgdGltZSBiYXNlZCBxdW90YSB3YXMgYmVsb3cgdGhlIGBtaW5fcmVnaW9uX3N6YCwgdGhlIGNvZGUgZW5zdXJlZCBgZXN6YCB3YXMgKmF0IGxlYXN0KiBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgLlxuXG5UaGUgcGF0Y2ggY2hhbmdlcyB0aGlzLiBOb3csIHRoZSB0aW1lLWJhc2VkIHF1b3RhIGlzIGxvd2VyLWJvdW5kZWQgYnkgYG1pbl9yZWdpb25fc3pgIGFuZCB0aGF0IGlzIHRoZW4gY29tcGFyZWQgYWdhaW5zdCB0aGUgZ29hbHMtYmFzZWQgcXVvdGEuIFRoZSBpbXBsaWNhdGlvbiBpcyB0aGF0IHRoaXMgbm93IGFsbG93cyBmb3IgYSBxdW90YSB0byBiZSBzbWFsbGVyIHRoYW4gdGhlIGBtaW5fcmVnaW9uX3N6YCBpZiBhIGdvYWwtYmFzZWQgcXVvdGEgaXMgYWxzbyBhY3RpdmUuXG5cblRoZSBxdWVzdGlvbiB0aGVuIGJlY29tZXM6IGlzIHRoaXMgcmVhY2hhYmxlIGluIGEgUUVNVS1iYXNlZCBmdXp6aW5nIHNldHVwPyBBYnNvbHV0ZWx5LiBEQU1PTidzIHN5c2ZzIGludGVyZmFjZSBtYWtlcyBpdCBhIHN0cmFpZ2h0Zm9yd2FyZCB0YXJnZXQuIEdpdmVuIHRoYXQgaXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljIOKAkyBzcGVjaWZpY2FsbHksIGhvdyBEQU1PTiBjYWxjdWxhdGVzIHF1b3RhcyDigJMgYW5kIHJlc2lkZXMgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLCBpdCdzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSXQncyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgdW5jb3ZlcmluZyBzdWJ0bGUgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyBvciB1bmV4cGVjdGVkIGJlaGF2aW9ycy5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGNhbGwgZ3JhcGggZm9yIHRoaXMgZnVuY3Rpb24uIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBzdGF0aWMsIHdoaWNoIHRlbGxzIG1lIHRoZSBzY29wZSBpcyBjb250YWluZWQgd2l0aGluIGBtbS9kYW1vbi9jb3JlLmNgLiBUaGUgY2FsbGVycyBhcmUgYGRhbW9zX2FkanVzdF9xdW90YWAgd2hpY2ggaXMgdGhlIG5leHQgcGxhY2UgdG8gbG9vayBmb3IgZW50cnkgcG9pbnRzIHRvIGZ1enouXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1NC42Njg1OTQ2MTFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzODU0NDQ4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19hZGp1c3RfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTMyNzM9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjg2LVxcbm1tL2RhbW9uL2NvcmUuYzozMjg3OnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyODgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMzNjg9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzM4My1cXG5tbS9kYW1vbi9jb3JlLmM6MzM4NDpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzODUtXFx0fVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1NS4wMDcxNDQ1ODFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI5NDY2Mzg0MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCBpbiBMaW51eCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSBzZWUgdGhyZWUga2V5IGZ1bmN0aW9ucyBoZXJlOiBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYGRhbW9zX2FkanVzdF9xdW90YWAsIGFuZCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyBhYm91dCBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQncyBpbmxpbmVkIG9yIG5vdC4gSXQncyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBxdW90YSBhZGp1c3RtZW50cyBhcmUgcHJvcGFnYXRlZC4gSSdtIHRoaW5raW5nIGV2ZW4gaWYgaXQncyBkZWNsYXJlZCBgc3RhdGljYCwgdGhlIGNydWNpYWwgcG9pbnQgaXMgd2hldGhlciBpdCdzIGFjdHVhbGx5IGlubGluZWQgYnkgdGhlIGNvbXBpbGVyLiBJZiBub3Qgc3RhdGljLCBpdCBtdXN0IGJlIGluIHRoZSBzeW1ib2wgdGFibGUsIGluIHdoaWNoIGNhc2UgSSBuZWVkIHRvIGtub3cgdGhlIGZvY3VzIHN5bWJvbHMgYW5kIHRoZWlyIGJlaGF2aW9yLlxuXG5UbyBnZXQgYSBjbGVhcmVyIHBpY3R1cmUsIEkgc2hvdWxkIHByb2JhYmx5IGFsc28gZXhwbG9yZSBvdGhlciBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoaXMgd2lsbCBnaXZlIG1lIGNvbnRleHQgYXJvdW5kIGhvdyB0aGVzZSBxdW90YSBhZGp1c3RtZW50cyBhbmQgZWZmZWN0aXZlIHNldHRpbmdzIGludGVyYWN0IHdpdGggdGhlIG92ZXJhbGwgbWVtb3J5IG1vbml0b3JpbmcgYW5kIHJlY2xhbWF0aW9uIGZyYW1ld29yay4gSSBuZWVkIHRvIHNlZSB3aGF0IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIG9yIHN5bWJvbHMgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ3MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1Ny4zMDE4MTEyMjJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjczMjg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImtkYW1vbmRfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz05MDE9c3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X2N0eCh2b2lkKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTkwOC1cXG5tbS9kYW1vbi9jb3JlLmM6OTA5OlxcdGluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy05MTAtXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTE1LVxcdGN0eC1cXHUwMDNlcGFzc2VkX3NhbXBsZV9pbnRlcnZhbHMgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzo5MTY6XFx0LyogVGhlc2Ugd2lsbCBiZSBzZXQgZnJvbSBrZGFtb25kX2luaXRfY3R4KCkgKi9cXG5tbS9kYW1vbi9jb3JlLmMtOTE3LVxcdGN0eC1cXHUwMDNlbmV4dF9hZ2dyZWdhdGlvbl9zaXMgPSAwO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTkxOS1cXG5tbS9kYW1vbi9jb3JlLmM6OTIwOlxcdG11dGV4X2luaXQoXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtOTIxLVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZjdHgtXFx1MDAzZWNhbGxfY29udHJvbHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTEwMzA9c3RhdGljIHZvaWQgZGFtb25fdXBkYXRlX21vbml0b3JpbmdfcmVzdWx0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0NS1cXHRcXHQgKiBpbnRlcnZhbC4gIEluIG90aGVyIHdvcmRzLCBtYWtlIHRoZSBzdGF0dXMgbGlrZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDQ2OlxcdFxcdCAqIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpIGlzIGNhbGxlZC5cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny1cXHRcXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDgzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTEwNS0gKiBiZSBjYWxsZWQgZnJvbSBhIHNhZmUgY29udGV4dHMuICBTdWNoIGNvbnRleHRzIGluY2x1ZGUgZGFtb25fY3R4IHNldHVwIHRpbWVcXG5tbS9kYW1vbi9jb3JlLmM6MTEwNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxcbm1tL2RhbW9uL2NvcmUuYy0xMTA3LSAqXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTExMC0gKiBhbHNvIGluZGlyZWN0bHkgY2FsbCB0aGlzIGZ1bmN0aW9uIHZpYSBkYW1vbl9jYWxsKCkgLVxcdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXFxubW0vZGFtb24vY29yZS5jOjExMTE6ICogb25saW5lIHBhcmFtZXRlcnMgdXBkYXRlcy4gIEZpbmFsbHksIGtkYW1vbmRfZm4oKSBpdHNlbGYgdXNlIHRoaXMgZm9yXFxubW0vZGFtb24vY29yZS5jLTExMTItICogYXBwbHlpbmcgYXV0by10dW5lZCBtb25pdG9yaW5nIGludGVydmFscy5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMTE4PWludCBkYW1vbl9zZXRfYXR0cnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fYXR0cnMgKmF0dHJzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTExNDQtXFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6MTE0NTpcXHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cXG5tbS9kYW1vbi9jb3JlLmMtMTE0Ni1cXHQgKi9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDE5PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2FwcGx5X21pbl9ucl9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDM4LVxcbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnN0YXRpYyBpbnQga2RhbW9uZF9mbih2b2lkICpkYXRhKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMDQ5PXN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjA1Mi1cXG5tbS9kYW1vbi9jb3JlLmM6MjA1MzpcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIwNTQtXFx0aWYgKCFjdHgtXFx1MDAzZWtkYW1vbmQpIHtcXG5tbS9kYW1vbi9jb3JlLmMtMjA1NS1cXHRcXHRlcnIgPSAwO1xcbm1tL2RhbW9uL2NvcmUuYzoyMDU2OlxcdFxcdHJlaW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjIwNTc6XFx0XFx0Y3R4LVxcdTAwM2VrZGFtb25kID0ga3RocmVhZF9ydW4oa2RhbW9uZF9mbiwgY3R4LCBcXFwia2RhbW9uZC4lZFxcXCIsXFxubW0vZGFtb24vY29yZS5jLTIwNTgtXFx0XFx0XFx0XFx0bnJfcnVubmluZ19jdHhzKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDYyLVxcdFxcdH0gZWxzZSB7XFxubW0vZGFtb24vY29yZS5jOjIwNjM6XFx0XFx0XFx0d2FpdF9mb3JfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX3N0YXJ0ZWQpO1xcbm1tL2RhbW9uL2NvcmUuYy0yMDY0LVxcdFxcdH1cXG5tbS9kYW1vbi9jb3JlLmMtMjA2NS1cXHR9XFxubW0vZGFtb24vY29yZS5jOjIwNjY6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIwNjctXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjEzMT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxMzQtXFxubW0vZGFtb24vY29yZS5jOjIxMzU6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTM2LVxcdHRzayA9IGN0eC1cXHUwMDNla2RhbW9uZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTM4LVxcdFxcdGdldF90YXNrX3N0cnVjdCh0c2spO1xcbm1tL2RhbW9uL2NvcmUuYzoyMTM5OlxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTQwLVxcdFxcdGt0aHJlYWRfc3RvcF9wdXQodHNrKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTQyLVxcdH1cXG5tbS9kYW1vbi9jb3JlLmM6MjE0MzpcXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9sb2NrKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjE0NC19XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjE1MT12b2lkIGRhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2N0eHM7IGkrKylcXG5tbS9kYW1vbi9jb3JlLmM6MjE1NjpcXHRcXHQvKiBucl9ydW5uaW5nX2N0eHMgaXMgZGVjcmVtZW50ZWQgaW4ga2RhbW9uZF9mbiAqL1xcbm1tL2RhbW9uL2NvcmUuYy0yMTU3LVxcdFxcdF9fZGFtb25fc3RvcChjdHhzW2ldKTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMTY2PWJvb2wgZGFtb25faXNfcnVubmluZyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjE2OS1cXG5tbS9kYW1vbi9jb3JlLmM6MjE3MDpcXHRtdXRleF9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIxNzEtXFx0cnVubmluZyA9IGN0eC1cXHUwMDNla2RhbW9uZCAhPSBOVUxMO1xcbm1tL2RhbW9uL2NvcmUuYzoyMTcyOlxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTczLVxcdHJldHVybiBydW5uaW5nO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNzYtLyoqXFxubW0vZGFtb24vY29yZS5jOjIxNzc6ICogZGFtb25fa2RhbW9uZF9waWQoKSAtIFJldHVybiBwaWQgb2YgYSBnaXZlbiBEQU1PTiBjb250ZXh0J3Mgd29ya2VyIHRocmVhZC5cXG5tbS9kYW1vbi9jb3JlLmMtMjE3OC0gKiBAY3R4OlxcdFRoZSBEQU1PTiBjb250ZXh0IG9mIHRoZSBxdWVzdGlvbi5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMTgxLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMTgyOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTIxODMte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxODUtXFxubW0vZGFtb24vY29yZS5jOjIxODY6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy0yMTg3LVxcdGlmIChjdHgtXFx1MDAzZWtkYW1vbmQpXFxubW0vZGFtb24vY29yZS5jLTIxODgtXFx0XFx0cGlkID0gY3R4LVxcdTAwM2VrZGFtb25kLVxcdTAwM2VwaWQ7XFxubW0vZGFtb24vY29yZS5jOjIxODk6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTIxOTAtXFx0cmV0dXJuIHBpZDtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMjY5PWludCBkYW1vc193YWxrKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zX3dhbGtfY29udHJvbCAqY29udHJvbClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoyMjkzOnN0YXRpYyB2b2lkIGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0yMjk0LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yMzQ4PXN0YXRpYyB1bnNpZ25lZCBsb25nIGRhbW9uX2dldF9pbnRlcnZhbHNfYWRhcHRhdGlvbl9icChzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIzNjMtXFxubW0vZGFtb24vY29yZS5jOjIzNjQ6c3RhdGljIG5vaW5saW5lX2Zvcl9zdGFjayB2b2lkIGtkYW1vbmRfdHVuZV9pbnRlcnZhbHMoc3RydWN0IGRhbW9uX2N0eCAqYylcXG5tbS9kYW1vbi9jb3JlLmMtMjM2NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzM1Mj1zdGF0aWMgdm9pZCBkYW1vc190cmFjZV9zdGF0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY3LVxcbm1tL2RhbW9uL2NvcmUuYzozMzY4OnN0YXRpYyB2b2lkIGtkYW1vbmRfYXBwbHlfc2NoZW1lcyhzdHJ1Y3QgZGFtb25fY3R4ICpjKVxcbm1tL2RhbW9uL2NvcmUuYy0zMzY5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0zNDYyPXN0YXRpYyB2b2lkIGRhbW9uX21lcmdlX3JlZ2lvbnNfb2Yoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgdW5zaWduZWQgaW50IHRocmVzLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MDgtICogb3ZlcmhlYWQgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm4uICBJZiBhIG1lcmdlIHdhc1xcbm1tL2RhbW9uL2NvcmUuYzozNTA5OiAqIHVubmVjZXNzYXJpbHkgbWFkZSwgbGF0ZXIgJ2tkYW1vbmRfc3BsaXRfcmVnaW9ucygpJyB3aWxsIHJldmVydCBpdC5cXG5tbS9kYW1vbi9jb3JlLmMtMzUxMC0gKlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM1MTYtICovXFxubW0vZGFtb24vY29yZS5jOjM1MTc6c3RhdGljIHZvaWQga2RhbW9uZF9tZXJnZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmMsIHVuc2lnbmVkIGludCB0aHJlc2hvbGQsXFxubW0vZGFtb24vY29yZS5jLTM1MTgtXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBsb25nIHN6X2xpbWl0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM2MjI9c3RhdGljIHZvaWQgZGFtb25fc3BsaXRfc29tZV9yZWdpb25zKHN0cnVjdCBkYW1vbl9jdHggKmN0eCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNjU4LSAqIG1vbml0b3JpbmcgYWNjdXJhY3kgdW5kZXIgdGhlIGR5bmFtaWNhbGx5IGNoYW5nZWFibGUgYWNjZXNzIHBhdHRlcm5zLiAgSWYgYVxcbm1tL2RhbW9uL2NvcmUuYzozNjU5OiAqIHNwbGl0IHdhcyB1bm5lY2Vzc2FyaWx5IG1hZGUsIGxhdGVyICdrZGFtb25kX21lcmdlX3JlZ2lvbnMoKScgd2lsbCByZXZlcnRcXG5tbS9kYW1vbi9jb3JlLmMtMzY2MC0gKiBpdC5cXG5tbS9kYW1vbi9jb3JlLmMtMzY2MS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzY2MjpzdGF0aWMgdm9pZCBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zNjYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zNzAyLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozNzAzOnN0YXRpYyBib29sIGtkYW1vbmRfbmVlZF9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzcwNC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzczOT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vc193bWFya193YWl0X3VzKHN0cnVjdCBkYW1vcyAqc2NoZW1lKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM3NjAtXFxubW0vZGFtb24vY29yZS5jOjM3NjE6c3RhdGljIHZvaWQga2RhbW9uZF91c2xlZXAodW5zaWduZWQgbG9uZyB1c2VjcylcXG5tbS9kYW1vbi9jb3JlLmMtMzc2Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9Mzc5NT1zdGF0aWMgdm9pZCBkYW1vbl92ZXJpZnlfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzgwMC0vKlxcbm1tL2RhbW9uL2NvcmUuYzozODAxOiAqIGtkYW1vbmRfY2FsbCgpIC0gaGFuZGxlIGRhbW9uX2NhbGxfY29udHJvbCBvYmplY3RzLlxcbm1tL2RhbW9uL2NvcmUuYy0zODAyLSAqIEBjdHg6XFx0VGhlIFxcdTAwMjZzdHJ1Y3QgZGFtb25fY3R4IG9mIHRoZSBrZGFtb25kLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4MDktICovXFxubW0vZGFtb24vY29yZS5jOjM4MTA6c3RhdGljIHZvaWQga2RhbW9uZF9jYWxsKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgYm9vbCBjYW5jZWwpXFxubW0vZGFtb24vY29yZS5jLTM4MTEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM4NDMtLyogUmV0dXJucyBuZWdhdGl2ZSBlcnJvciBjb2RlIGlmIGl0J3Mgbm90IGFjdGl2YXRlZCBidXQgc2hvdWxkIHJldHVybiAqL1xcbm1tL2RhbW9uL2NvcmUuYzozODQ0OnN0YXRpYyBpbnQga2RhbW9uZF93YWl0X2FjdGl2YXRpb24oc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy0zODQ1LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODUwLVxcbm1tL2RhbW9uL2NvcmUuYzozODUxOlxcdHdoaWxlICgha2RhbW9uZF9uZWVkX3N0b3AoY3R4KSkge1xcbm1tL2RhbW9uL2NvcmUuYy0zODUyLVxcdFxcdGRhbW9uX2Zvcl9lYWNoX3NjaGVtZShzLCBjdHgpIHtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zODYxLVxcbm1tL2RhbW9uL2NvcmUuYzozODYyOlxcdFxcdGtkYW1vbmRfdXNsZWVwKG1pbl93YWl0X3RpbWUpO1xcbm1tL2RhbW9uL2NvcmUuYy0zODYzLVxcbm1tL2RhbW9uL2NvcmUuYzozODY0OlxcdFxcdGtkYW1vbmRfY2FsbChjdHgsIGZhbHNlKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzg2NS1cXHRcXHRpZiAoY3R4LVxcdTAwM2VtYXliZV9jb3JydXB0ZWQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg3MS1cXG5tbS9kYW1vbi9jb3JlLmM6Mzg3MjpzdGF0aWMgdm9pZCBrZGFtb25kX2luaXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMzg3My17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzg5My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzg5NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9jb3JlLmMtMzg5NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzkwNC1cXHRtdXRleF91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzozOTA1OlxcdGNvbXBsZXRlKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XFxubW0vZGFtb24vY29yZS5jOjM5MDY6XFx0a2RhbW9uZF9pbml0X2N0eChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTA3LVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5MTYtXFxubW0vZGFtb24vY29yZS5jOjM5MTc6XFx0d2hpbGUgKCFrZGFtb25kX25lZWRfc3RvcChjdHgpKSB7XFxubW0vZGFtb24vY29yZS5jLTM5MTgtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmMtMzkxOS1cXHRcXHQgKiBjdHgtXFx1MDAzZWF0dHJzIGFuZCBjdHgtXFx1MDAzZW5leHRfe2FnZ3JlZ2F0aW9uLG9wc191cGRhdGV9X3NpcyBjb3VsZFxcbm1tL2RhbW9uL2NvcmUuYzozOTIwOlxcdFxcdCAqIGJlIGNoYW5nZWQgZnJvbSBrZGFtb25kX2NhbGwoKS4gIFJlYWQgdGhlIHZhbHVlcyBoZXJlLCBhbmRcXG5tbS9kYW1vbi9jb3JlLmMtMzkyMS1cXHRcXHQgKiB1c2UgdGhvc2UgZm9yIHRoaXMgaXRlcmF0aW9uLiAgVGhhdCBpcywgZGFtb25fc2V0X2F0dHJzKClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMxLVxcbm1tL2RhbW9uL2NvcmUuYzozOTMyOlxcdFxcdGlmIChrZGFtb25kX3dhaXRfYWN0aXZhdGlvbihjdHgpKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTMzLVxcdFxcdFxcdGJyZWFrO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NDEtXFxubW0vZGFtb24vY29yZS5jOjM5NDI6XFx0XFx0a2RhbW9uZF91c2xlZXAoc2FtcGxlX2ludGVydmFsKTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk0My1cXHRcXHRjdHgtXFx1MDAzZXBhc3NlZF9zYW1wbGVfaW50ZXJ2YWxzKys7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk2Mi1cXHRcXHRcXHRcXHRcXHRuZXh0X2FnZ3JlZ2F0aW9uX3NpcykpIHtcXG5tbS9kYW1vbi9jb3JlLmM6Mzk2MzpcXHRcXHRcXHRrZGFtb25kX21lcmdlX3JlZ2lvbnMoY3R4LFxcbm1tL2RhbW9uL2NvcmUuYy0zOTY0LVxcdFxcdFxcdFxcdFxcdG1heF9tZXJnZV9zY29yZSAvIDEwLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTM5NzAtXFx0XFx0LypcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3MTpcXHRcXHQgKiBkbyBrZGFtb25kX2NhbGwoKSBhbmQga2RhbW9uZF9hcHBseV9zY2hlbWVzKCkgYWZ0ZXJcXG5tbS9kYW1vbi9jb3JlLmM6Mzk3MjpcXHRcXHQgKiBrZGFtb25kX21lcmdlX3JlZ2lvbnMoKSBpZiBwb3NzaWJsZSwgdG8gcmVkdWNlIG92ZXJoZWFkXFxubW0vZGFtb24vY29yZS5jLTM5NzMtXFx0XFx0ICovXFxubW0vZGFtb24vY29yZS5jOjM5NzQ6XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTc1LVxcdFxcdGlmIChjdHgtXFx1MDAzZW1heWJlX2NvcnJ1cHRlZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTc4LVxcdFxcdFxcdGRhbW9zX3dhbGtfY2FuY2VsKGN0eCk7XFxubW0vZGFtb24vY29yZS5jOjM5Nzk6XFx0XFx0XFx0a2RhbW9uZF91c2xlZXAoY3R4LVxcdTAwM2VhdHRycy5zYW1wbGVfaW50ZXJ2YWwpO1xcbm1tL2RhbW9uL2NvcmUuYy0zOTgwLVxcdFxcdFxcdC8qIGFsbG93IGNhbGxlciB1bnNldCBwYXVzZSB2aWEgZGFtb25fY2FsbCgpICovXFxubW0vZGFtb24vY29yZS5jOjM5ODE6XFx0XFx0XFx0a2RhbW9uZF9jYWxsKGN0eCwgZmFsc2UpO1xcbm1tL2RhbW9uL2NvcmUuYzozOTgyOlxcdFxcdFxcdGlmIChrZGFtb25kX25lZWRfc3RvcChjdHgpIHx8IGN0eC1cXHUwMDNlbWF5YmVfY29ycnVwdGVkKVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgzLVxcdFxcdFxcdFxcdGdvdG8gZG9uZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTg1LVxcdFxcdGlmICghbGlzdF9lbXB0eShcXHUwMDI2Y3R4LVxcdTAwM2VzY2hlbWVzKSlcXG5tbS9kYW1vbi9jb3JlLmM6Mzk4NjpcXHRcXHRcXHRrZGFtb25kX2FwcGx5X3NjaGVtZXMoY3R4KTtcXG5tbS9kYW1vbi9jb3JlLmMtMzk4Ny1cXHRcXHRlbHNlXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzk5OS1cXHRcXHRcXHRcXHQgKiBjdHgtXFx1MDAzZW5leHRfYWdncmVnYXRpb25fc2lzIG1pZ2h0IGJlIHVwZGF0ZWRcXG5tbS9kYW1vbi9jb3JlLmM6NDAwMDpcXHRcXHRcXHRcXHQgKiBmcm9tIGtkYW1vbmRfY2FsbCgpLiAgSW4gdGhlIGNhc2UsXFxubW0vZGFtb24vY29yZS5jLTQwMDEtXFx0XFx0XFx0XFx0ICogZGFtb25fc2V0X2F0dHJzKCkgd2hpY2ggd2lsbCBiZSBjYWxsZWQgZnJvbVxcbm1tL2RhbW9uL2NvcmUuYzo0MDAyOlxcdFxcdFxcdFxcdCAqIGtkYW1vbmRfdHVuZV9pbnRlcnZhbCgpIG1heSB3cm9uZ2x5IHRoaW5rXFxubW0vZGFtb24vY29yZS5jLTQwMDMtXFx0XFx0XFx0XFx0ICogdGhpcyBpcyBpbiB0aGUgbWlkZGxlIG9mIHRoZSBjdXJyZW50XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNDAwNS1cXHRcXHRcXHRcXHQgKiBpbmZvcm1hdGlvbiByZXNldCBmb3IgYWxsIHJlZ2lvbnMuICBUaGVuLFxcbm1tL2RhbW9uL2NvcmUuYzo0MDA2OlxcdFxcdFxcdFxcdCAqIGZvbGxvd2luZyBrZGFtb25kX3Jlc2V0X2FnZ3JlZ2F0ZWQoKSBjYWxsXFxubW0vZGFtb24vY29yZS5jLTQwMDctXFx0XFx0XFx0XFx0ICogd2lsbCBtYWtlIHRoZSByZWdpb24gaW5mb3JtYXRpb24gaW52YWxpZC5cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDE3LVxcdFxcdFxcdFxcdFxcdGN0eC1cXHUwMDNlYXR0cnMuaW50ZXJ2YWxzX2dvYWwuYWdncnM7XFxubW0vZGFtb24vY29yZS5jOjQwMTg6XFx0XFx0XFx0XFx0a2RhbW9uZF90dW5lX2ludGVydmFscyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDE5LVxcdFxcdFxcdFxcdHNhbXBsZV9pbnRlcnZhbCA9IGN0eC1cXHUwMDNlYXR0cnMuc2FtcGxlX2ludGVydmFsID9cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDI1LVxcbm1tL2RhbW9uL2NvcmUuYzo0MDI2OlxcdFxcdFxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDI3OlxcdFxcdFxcdGtkYW1vbmRfc3BsaXRfcmVnaW9ucyhjdHgpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDI4LVxcdFxcdH1cXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy00MDQ1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VjYWxsX2NvbnRyb2xzX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYzo0MDQ2OlxcdGtkYW1vbmRfY2FsbChjdHgsIHRydWUpO1xcbm1tL2RhbW9uL2NvcmUuYy00MDQ3LVxcdG11dGV4X2xvY2soXFx1MDAyNmN0eC1cXHUwMDNld2Fsa19jb250cm9sX2xvY2spO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwNTEtXFxubW0vZGFtb24vY29yZS5jOjQwNTI6XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y3R4LVxcdTAwM2VrZGFtb25kX2xvY2spO1xcbm1tL2RhbW9uL2NvcmUuYy00MDUzLVxcdGN0eC1cXHUwMDNla2RhbW9uZCA9IE5VTEw7XFxubW0vZGFtb24vY29yZS5jOjQwNTQ6XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWtkYW1vbmRfbG9jayk7XFxubW0vZGFtb24vY29yZS5jLTQwNTUtXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQ4Nj1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZWQsXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ4OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ4OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX3N0b3JlKGNvbnN0IGNoYXIgKnZhbCxcXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5MC1cXHRcXHRjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDkyLVxcdC8qXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo0OTM6XFx0ICoga2RhbW9uZF9waWQgaXMgcmVhZC1vbmx5LCBidXQga2VybmVsIGNvbW1hbmQgbGluZSBjb3VsZCB3cml0ZSBpdC5cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5NC1cXHQgKiBEbyBub3RoaW5nIGhlcmUuXFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTQ5OC1cXG5tbS9kYW1vbi9scnVfc29ydC5jOjQ5OTpzdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQoY2hhciAqYnVmZmVyLFxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTAwLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTAxLXtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjUwMjpcXHRpbnQga2RhbW9uZF9waWQgPSAtMTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwMy1cXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwNC1cXHRpZiAoY3R4KSB7XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDU6XFx0XFx0a2RhbW9uZF9waWQgPSBkYW1vbl9rZGFtb25kX3BpZChjdHgpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTA2OlxcdFxcdGlmIChrZGFtb25kX3BpZCBcXHUwMDNjIDApXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDc6XFx0XFx0XFx0a2RhbW9uZF9waWQgPSAtMTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUwOC1cXHR9XFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MDk6XFx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcXFwiJWRcXFxcblxcXCIsIGtkYW1vbmRfcGlkKTtcXG5tbS9kYW1vbi9scnVfc29ydC5jLTUxMC19XFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTEtXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTI6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9scnVfc29ydC5jOjUxMzpcXHQuc2V0ID0gZGFtb25fbHJ1X3NvcnRfa2RhbW9uZF9waWRfc3RvcmUsXFxubW0vZGFtb24vbHJ1X3NvcnQuYzo1MTQ6XFx0LmdldCA9IGRhbW9uX2xydV9zb3J0X2tkYW1vbmRfcGlkX2xvYWQsXFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MTUtfTtcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNTIyLSAqL1xcbm1tL2RhbW9uL2xydV9zb3J0LmM6NTIzOm1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vbHJ1X3NvcnQuYy01MjQtXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9NDA5PU1PRFVMRV9QQVJNX0RFU0MoZW5hYmxlZCxcXG4tLVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTEtXFxubW0vZGFtb24vcmVjbGFpbS5jOjQxMjpzdGF0aWMgaW50IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfc3RvcmUoY29uc3QgY2hhciAqdmFsLFxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTMtXFx0XFx0Y29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDE1LVxcdC8qXFxubW0vZGFtb24vcmVjbGFpbS5jOjQxNjpcXHQgKiBrZGFtb25kX3BpZCBpcyByZWFkLW9ubHksIGJ1dCBrZXJuZWwgY29tbWFuZCBsaW5lIGNvdWxkIHdyaXRlIGl0Llxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MTctXFx0ICogRG8gbm90aGluZyBoZXJlLlxcbi0tXFxubW0vZGFtb24vcmVjbGFpbS5jLTQyMS1cXG5tbS9kYW1vbi9yZWNsYWltLmM6NDIyOnN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV9rZGFtb25kX3BpZF9sb2FkKGNoYXIgKmJ1ZmZlcixcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDIzLVxcdFxcdGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbm1tL2RhbW9uL3JlY2xhaW0uYy00MjQte1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MjU6XFx0aW50IGtkYW1vbmRfcGlkID0gLTE7XFxubW0vZGFtb24vcmVjbGFpbS5jLTQyNi1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDI3LVxcdGlmIChjdHgpIHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI4OlxcdFxcdGtkYW1vbmRfcGlkID0gZGFtb25fa2RhbW9uZF9waWQoY3R4KTtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDI5OlxcdFxcdGlmIChrZGFtb25kX3BpZCBcXHUwMDNjIDApXFxubW0vZGFtb24vcmVjbGFpbS5jOjQzMDpcXHRcXHRcXHRrZGFtb25kX3BpZCA9IC0xO1xcbm1tL2RhbW9uL3JlY2xhaW0uYy00MzEtXFx0fVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzI6XFx0cmV0dXJuIHNwcmludGYoYnVmZmVyLCBcXFwiJWRcXFxcblxcXCIsIGtkYW1vbmRfcGlkKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDMzLX1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM0LVxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0MzU6c3RhdGljIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW1fb3BzIGtkYW1vbmRfcGlkX3BhcmFtX29wcyA9IHtcXG5tbS9kYW1vbi9yZWNsYWltLmM6NDM2OlxcdC5zZXQgPSBkYW1vbl9yZWNsYWltX2tkYW1vbmRfcGlkX3N0b3JlLFxcbm1tL2RhbW9uL3JlY2xhaW0uYzo0Mzc6XFx0LmdldCA9IGRhbW9uX3JlY2xhaW1fa2RhbW9uZF9waWRfbG9hZCxcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDM4LX07XFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtNDQ1LSAqL1xcbm1tL2RhbW9uL3JlY2xhaW0uYzo0NDY6bW9kdWxlX3BhcmFtX2NiKGtkYW1vbmRfcGlkLCBcXHUwMDI2a2RhbW9uZF9waWRfcGFyYW1fb3BzLCBOVUxMLCAwNDAwKTtcXG5tbS9kYW1vbi9yZWNsYWltLmMtNDQ3LVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTI2ND1zdGF0aWMgaW50IGRhbW9uX3N0YXRfZW5hYmxlZF9sb2FkKGNoYXIgKmJ1ZmZlciwgY29uc3Qgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjY4LVxcbm1tL2RhbW9uL3N0YXQuYzoyNjk6c3RhdGljIGludCBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX3N0b3JlKFxcbm1tL2RhbW9uL3N0YXQuYy0yNzAtXFx0XFx0Y29uc3QgY2hhciAqdmFsLCBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtICprcClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yNzItXFx0LypcXG5tbS9kYW1vbi9zdGF0LmM6MjczOlxcdCAqIGtkYW1vbmRfcGlkIGlzIHJlYWQtb25seSwgYnV0IGtlcm5lbCBjb21tYW5kIGxpbmUgY291bGQgd3JpdGUgaXQuXFxubW0vZGFtb24vc3RhdC5jLTI3NC1cXHQgKiBEbyBub3RoaW5nIGhlcmUuXFxuLS1cXG5tbS9kYW1vbi9zdGF0LmMtMjc4LVxcbm1tL2RhbW9uL3N0YXQuYzoyNzk6c3RhdGljIGludCBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX2xvYWQoXFxubW0vZGFtb24vc3RhdC5jLTI4MC1cXHRcXHRjaGFyICpidWZmZXIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTI4Ni1cXHR9IGVsc2Uge1xcbm1tL2RhbW9uL3N0YXQuYzoyODc6XFx0XFx0cGlkID0gZGFtb25fa2RhbW9uZF9waWQoZGFtb25fc3RhdF9jb250ZXh0KTtcXG5tbS9kYW1vbi9zdGF0LmMtMjg4LVxcdFxcdGlmIChwaWQgXFx1MDAzYyAxKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jLTI5My1cXG5tbS9kYW1vbi9zdGF0LmM6Mjk0OnN0YXRpYyBjb25zdCBzdHJ1Y3Qga2VybmVsX3BhcmFtX29wcyBrZGFtb25kX3BpZF9wYXJhbV9vcHMgPSB7XFxubW0vZGFtb24vc3RhdC5jOjI5NTpcXHQuc2V0ID0gZGFtb25fc3RhdF9rZGFtb25kX3BpZF9zdG9yZSxcXG5tbS9kYW1vbi9zdGF0LmM6Mjk2OlxcdC5nZXQgPSBkYW1vbl9zdGF0X2tkYW1vbmRfcGlkX2xvYWQsXFxubW0vZGFtb24vc3RhdC5jLTI5Ny19O1xcbi0tXFxubW0vZGFtb24vc3RhdC5jLTMwNC0gKi9cXG5tbS9kYW1vbi9zdGF0LmM6MzA1Om1vZHVsZV9wYXJhbV9jYihrZGFtb25kX3BpZCwgXFx1MDAyNmtkYW1vbmRfcGlkX3BhcmFtX29wcywgTlVMTCwgMDQwMCk7XFxubW0vZGFtb24vc3RhdC5jOjMwNjpNT0RVTEVfUEFSTV9ERVNDKGtkYW1vbmRfcGlkLCBcXFwicGlkIG9mIHRoZSBrZGFtb25kXFxcIik7XFxubW0vZGFtb24vc3RhdC5jLTMwNy1cXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjAzMj1zdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwMzktXFxubW0vZGFtb24vc3lzZnMuYzoyMDQwOnN0YXRpYyBzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqZGFtb25fc3lzZnNfa2RhbW9uZF9hbGxvYyh2b2lkKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjA0MS17XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDQtXFxubW0vZGFtb24vc3lzZnMuYzoyMDQ1OnN0YXRpYyBpbnQgZGFtb25fc3lzZnNfa2RhbW9uZF9hZGRfZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqa2RhbW9uZClcXG5tbS9kYW1vbi9zeXNmcy5jLTIwNDYte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yMDY1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjA2NjpzdGF0aWMgdm9pZCBkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxubW0vZGFtb24vc3lzZnMuYy0yMDY3LXtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjM0Nz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3VwZF9zY2hlbWVzX3N0YXRzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIzNTYtXFxubW0vZGFtb24vc3lzZnMuYzoyMzU3OnN0YXRpYyBpbmxpbmUgYm9vbCBkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoXFxubW0vZGFtb24vc3lzZnMuYy0yMzU4LVxcdFxcdHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNDAxPXN0YXRpYyBpbnQgZGFtb25fc3lzZnNfY29tbWl0X2lucHV0KHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MDYtXFxubW0vZGFtb24vc3lzZnMuYzoyNDA3OlxcdGlmICghZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKGtkYW1vbmQpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQwOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjQyMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2NvbW1pdF9zY2hlbWVzX3F1b3RhX2dvYWxzKHZvaWQgKmRhdGEpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI0MjYtXFxubW0vZGFtb24vc3lzZnMuYzoyNDI3OlxcdGlmICghZGFtb25fc3lzZnNfa2RhbW9uZF9ydW5uaW5nKHN5c2ZzX2tkYW1vbmQpKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjQyOC1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjUxMT1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI1MTYtXFxubW0vZGFtb24vc3lzZnMuYzoyNTE3OlxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZCkpXFxubW0vZGFtb24vc3lzZnMuYy0yNTE4LVxcdFxcdHJldHVybiAtRUJVU1k7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI2OTQ9c3RhdGljIHNzaXplX3QgcGlkX3Nob3coc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3MDctXFxubW0vZGFtb24vc3lzZnMuYzoyNzA4OlxcdHBpZCA9IGRhbW9uX2tkYW1vbmRfcGlkKGN0eCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzA5LVxcdGlmIChwaWQgXFx1MDAzYyAwKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNzI1PXN0YXRpYyBzc2l6ZV90IHJlZnJlc2hfbXNfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3MzktXFxubW0vZGFtb24vc3lzZnMuYzoyNzQwOnN0YXRpYyB2b2lkIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZShzdHJ1Y3Qga29iamVjdCAqa29iailcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NDEte1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzQ5LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1MDpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfc3RhdGVfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMuYy0yNzUxLVxcdFxcdF9fQVRUUl9SV19NT0RFKHN0YXRlLCAwNjAwKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NTItXFxubW0vZGFtb24vc3lzZnMuYzoyNzUzOnN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgZGFtb25fc3lzZnNfa2RhbW9uZF9waWRfYXR0ciA9XFxubW0vZGFtb24vc3lzZnMuYy0yNzU0LVxcdFxcdF9fQVRUUl9ST19NT0RFKHBpZCwgMDQwMCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzU1LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1NjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVmcmVzaF9tc19hdHRyID1cXG5tbS9kYW1vbi9zeXNmcy5jLTI3NTctXFx0XFx0X19BVFRSX1JXX01PREUocmVmcmVzaF9tcywgMDYwMCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzU4LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc1OTpzdGF0aWMgc3RydWN0IGF0dHJpYnV0ZSAqZGFtb25fc3lzZnNfa2RhbW9uZF9hdHRyc1tdID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2MDpcXHRcXHUwMDI2ZGFtb25fc3lzZnNfa2RhbW9uZF9zdGF0ZV9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYzoyNzYxOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX3BpZF9hdHRyLmF0dHIsXFxubW0vZGFtb24vc3lzZnMuYzoyNzYyOlxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX3JlZnJlc2hfbXNfYXR0ci5hdHRyLFxcbm1tL2RhbW9uL3N5c2ZzLmMtMjc2My1cXHROVUxMLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYz0yNzY1PUFUVFJJQlVURV9HUk9VUFMoZGFtb25fc3lzZnNfa2RhbW9uZCk7XFxubW0vZGFtb24vc3lzZnMuYy0yNzY2LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2NzpzdGF0aWMgY29uc3Qgc3RydWN0IGtvYmpfdHlwZSBkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlID0ge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc2ODpcXHQucmVsZWFzZSA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfcmVsZWFzZSxcXG5tbS9kYW1vbi9zeXNmcy5jLTI3NjktXFx0LnN5c2ZzX29wcyA9IFxcdTAwMjZrb2JqX3N5c2ZzX29wcyxcXG5tbS9kYW1vbi9zeXNmcy5jOjI3NzA6XFx0LmRlZmF1bHRfZ3JvdXBzID0gZGFtb25fc3lzZnNfa2RhbW9uZF9ncm91cHMsXFxubW0vZGFtb24vc3lzZnMuYy0yNzcxLX07XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI3ODg9c3RhdGljIHZvaWQgZGFtb25fc3lzZnNfa2RhbW9uZHNfcm1fZGlycyhzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZHMgKmtkYW1vbmRzKVxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yNzkzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBrZGFtb25kcy1cXHUwMDNlbnI7IGkrKykge1xcbm1tL2RhbW9uL3N5c2ZzLmM6Mjc5NDpcXHRcXHRkYW1vbl9zeXNmc19rZGFtb25kX3JtX2RpcnMoa2RhbW9uZHNfYXJyW2ldKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI3OTUtXFx0XFx0a29iamVjdF9kZWwoXFx1MDAyNmtkYW1vbmRzX2FycltpXS1cXHUwMDNla29iaik7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jPTI4MDM9c3RhdGljIGJvb2wgZGFtb25fc3lzZnNfa2RhbW9uZHNfYnVzeShzdHJ1Y3QgZGFtb25fc3lzZnNfa2RhbW9uZCAqKmtkYW1vbmRzLFxcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yODA4LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9rZGFtb25kczsgaSsrKSB7XFxubW0vZGFtb24vc3lzZnMuYzoyODA5OlxcdFxcdGlmIChkYW1vbl9zeXNmc19rZGFtb25kX3J1bm5pbmcoa2RhbW9uZHNbaV0pKVxcbm1tL2RhbW9uL3N5c2ZzLmMtMjgxMC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjgxNj1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX2tkYW1vbmRzX2FkZF9kaXJzKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kcyAqa2RhbW9uZHMsXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI4MzUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2tkYW1vbmRzOyBpKyspIHtcXG5tbS9kYW1vbi9zeXNmcy5jOjI4MzY6XFx0XFx0a2RhbW9uZCA9IGRhbW9uX3N5c2ZzX2tkYW1vbmRfYWxsb2MoKTtcXG5tbS9kYW1vbi9zeXNmcy5jLTI4MzctXFx0XFx0aWYgKCFrZGFtb25kKSB7XFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTI4NDItXFx0XFx0ZXJyID0ga29iamVjdF9pbml0X2FuZF9hZGQoXFx1MDAyNmtkYW1vbmQtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMuYzoyODQzOlxcdFxcdFxcdFxcdFxcdTAwMjZkYW1vbl9zeXNmc19rZGFtb25kX2t0eXBlLCBcXHUwMDI2a2RhbW9uZHMtXFx1MDAzZWtvYmosXFxubW0vZGFtb24vc3lzZnMuYy0yODQ0LVxcdFxcdFxcdFxcdFxcXCIlZFxcXCIsIGkpO1xcbi0tXFxubW0vZGFtb24vc3lzZnMuYy0yODQ3LVxcbm1tL2RhbW9uL3N5c2ZzLmM6Mjg0ODpcXHRcXHRlcnIgPSBkYW1vbl9zeXNmc19rZGFtb25kX2FkZF9kaXJzKGtkYW1vbmQpO1xcbm1tL2RhbW9uL3N5c2ZzLmMtMjg0OS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTUyPXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfdGFyZ2V0KHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC03Ni0vKlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo3NzogKiBUZXN0IGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZCgpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTc4LSAqXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODAtICogYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIHJlZ2lvbi4gIEluIGRldGFpbCwgaXQgaW5jcmVhc2VzICctXFx1MDAzZW5yX2FjY2Vzc2VzJyBvZlxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo4MTogKiByZWdpb25zIHRoYXQgYW4gYWNjZXNzIGhhcyBjb25maXJtZWQuICAna2RhbW9uZF9yZXNldF9hZ2dyZWdhdGVkKCknIGZsdXNoZXNcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtODItICogdGhlIGFnZ3JlZ2F0ZWQgaW5mb3JtYXRpb24gKCctXFx1MDAzZW5yX2FjY2Vzc2VzJyBvZiBlYWNoIHJlZ2lvbnMpIHRvIHRoZSByZXN1bHRcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD04Nj1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2FnZ3JlZ2F0ZShzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMTIwLVxcdH1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg6MTIxOlxcdGtkYW1vbmRfcmVzZXRfYWdncmVnYXRlZChjdHgpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xMjItXFx0aXQgPSAwO1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTI4Nz1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X3JlZ2lvbnNfb2Yoc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTM1Ni0gKiBXaGVuIHRoZSB0b3RhbCByZWdpb24gY291bnQgaXMgYWxyZWFkeSBhYm92ZSBtYXhfbnJfcmVnaW9ucyAvIDIsXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjM1NzogKiBrZGFtb25kX3NwbGl0X3JlZ2lvbnMoKSBtdXN0IGtlZXAgcmVmaW5pbmcgdGhlIHJlc29sdXRpb24gYnkgc3BsaXR0aW5nIGFcXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtMzU4LSAqIGZyYWN0aW9uIG9mIHRoZSByZWdpb25zIChtYWtpbmcgcHJvZ3Jlc3MpLCB3aXRob3V0IGV4Y2VlZGluZ1xcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oPTM2MT1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X3NwbGl0X2Fib3ZlX2hhbGZfcHJvZ3Jlc3NlcyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0LmgtNDA1LVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDo0MDY6XFx0a2RhbW9uZF9zcGxpdF9yZWdpb25zKGMpO1xcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC00MDctXFxuLS1cXG5tbS9kYW1vbi90ZXN0cy9jb3JlLWt1bml0Lmg9MTgwOD1zdGF0aWMgdm9pZCBkYW1vbl90ZXN0X2lzX2xhc3RfcmVnaW9uKHN0cnVjdCBrdW5pdCAqdGVzdClcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM0LSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5Olxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaDoxODM1OiAqIGNvbW1pdCAzM2MzZjZjMmI0OGMgKFxcXCJtbS9kYW1vbi9jb3JlOiBmaXggZGFtb3Nfd2FsaygpIHZzIGtkYW1vbmRfZm4oKSBleGl0IHJhY2VcXFwiKVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xODM2LSAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1Ny4zNDk0OTExNDdaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1MDQ2NDQ4MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgREFNT04gUXVvdGEgTWFuYWdlbWVudCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW4uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgIGZ1bmN0aW9uIGFuZCBob3cgaXQncyB1c2VkLiBUaW1lIHRvIHRyYWNlIGl0cyBjYWxscy4gTG9va3MgbGlrZSB0aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgaW52b2x2ZWQ6IGBkYW1vc19hZGp1c3RfcXVvdGFgLCBga2RhbW9uZF9hcHBseV9zY2hlbWVzYCwgYW5kIGBrZGFtb25kX2ZuYC4gR290IGl0LiBOb3cgSSBuZWVkIHRvIGNvbnNpZGVyIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cbkxldCdzIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gUmlnaHQsIHdlIGhhdmUgYENPTkZJR19EQU1PTmAsIGBDT05GSUdfREFNT05fU1lTRlNgLCBgQ09ORklHX0RBTU9OX1ZBRERSYCwgYW5kIGBDT05GSUdfREFNT05fUEFERFJgLiBHb29kLCBnb29kLiBUaGVzZSBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFuZCBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBEQU1PTiBzdWJzeXN0ZW0uIE5leHQgc3RlcCwgSSB3YW50IHRvIG5haWwgZG93biB0aGUgZGVwZW5kZW5jaWVzIGluIEtjb25maWcgZm9yIGBEQU1PTmAsIGBEQU1PTl9TWVNGU2AsIGFuZCB0aGUgcmVzdC4gVGhpcyB3aWxsIHNob3cgaG93IHRoZXNlIGZlYXR1cmVzIHJlbGF0ZSBhbmQgaW50ZXJhY3Qgd2l0aGluIHRoZSBrZXJuZWwncyBidWlsZCBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODYwOCwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMDo1OS43OTk5NTkyNDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUwNDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0XFxuICAgMzpcXHRtZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbiAgIDQ6XFx0XFxuICAgNTpcXHRjb25maWcgREFNT05cXG4gICA2OlxcdFxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4gICA3OlxcdFxcdGhlbHBcXG4gICA4OlxcdFxcdCAgVGhpcyBidWlsZHMgYSBmcmFtZXdvcmsgdGhhdCBhbGxvd3Mga2VybmVsIHN1YnN5c3RlbXMgdG8gbW9uaXRvclxcbiAgIDk6XFx0XFx0ICBhY2Nlc3MgZnJlcXVlbmN5IG9mIGVhY2ggbWVtb3J5IHJlZ2lvbi4gVGhlIGluZm9ybWF0aW9uIGNhbiBiZSB1c2VmdWxcXG4gIDEwOlxcdFxcdCAgZm9yIHBlcmZvcm1hbmNlLWNlbnRyaWMgRFJBTSBsZXZlbCBtZW1vcnkgbWFuYWdlbWVudC5cXG4gIDExOlxcdFxcbiAgMTI6XFx0XFx0ICBTZWUgaHR0cHM6Ly93d3cua2VybmVsLm9yZy9kb2MvaHRtbC9sYXRlc3QvbW0vZGFtb24vaW5kZXguaHRtbCBmb3JcXG4gIDEzOlxcdFxcdCAgbW9yZSBpbmZvcm1hdGlvbi5cXG4gIDE0OlxcdFxcbiAgMTU6XFx0Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiQ2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcXFwiXFxuICAxNzpcXHRcXHRkZXBlbmRzIG9uIERBTU9OXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIFRoaXMgZW5hYmxlcyBhZGRpdGlvbmFsIERBTU9OIGRlYnVnZ2luZy1wdXJwb3NlIHNhbml0eSBjaGVja3MgaW5cXG4gIDIwOlxcdFxcdCAgREFNT04gY29kZS4gIFRoaXMgY2FuIGJlIHVzZWZ1bCBmb3IgZmluZGluZyBidWdzLCBidXQgaW1wb3NlXFxuICAyMTpcXHRcXHQgIGFkZGl0aW9uYWwgb3ZlcmhlYWQuICBUaGlzIGlzIHRoZXJlZm9yZSByZWNvbW1lbmRlZCB0byBiZSBlbmFibGVkIG9uXFxuICAyMjpcXHRcXHQgIG9ubHkgZGV2ZWxvcG1lbnQgYW5kIHRlc3Qgc2V0dXBzLlxcbiAgMjM6XFx0XFxuICAyNDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyNTpcXHRcXG4gIDI2OlxcdGNvbmZpZyBEQU1PTl9LVU5JVF9URVNUXFxuICAyNzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vblxcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgMjg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICAyOTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgMzA6XFx0XFx0aGVscFxcbiAgMzE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gS3VuaXQgdGVzdCBzdWl0ZS5cXG4gIDMyOlxcdFxcbiAgMzM6XFx0XFx0ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiBLVW5pdCBhbmQgdW5pdCB0ZXN0cyBpbiBnZW5lcmFsLCBwbGVhc2UgcmVmZXJcXG4gIDM0OlxcdFxcdCAgdG8gdGhlIEtVbml0IGRvY3VtZW50YXRpb24uXFxuICAzNTpcXHRcXG4gIDM2OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gIDM3OlxcdFxcbiAgMzg6XFx0Y29uZmlnIERBTU9OX1ZBRERSXFxuICAzOTpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHZpcnR1YWwgYWRkcmVzcyBzcGFjZXNcXFwiXFxuICA0MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNDE6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuICA0MjpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA0MzpcXHRcXHRoZWxwXFxuICA0NDpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDQ1OlxcdFxcdCAgdGhhdCB3b3JrIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzLlxcbiAgNDY6XFx0XFxuICA0NzpcXHRjb25maWcgREFNT05fUEFERFJcXG4gIDQ4OlxcdFxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuICA0OTpcXHRcXHRkZXBlbmRzIG9uIERBTU9OIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAgNTA6XFx0XFx0c2VsZWN0IFBBR0VfSURMRV9GTEFHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMwOjU5LjgwMDAzODA0OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNjU4MjQyMjE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYW5kc2NhcGU6IEEgUXVpY2sgQXVkaXQqKlxuXG5SaWdodCwgbGV0J3Mgc2VlLi4uIHRoZSBjb2RlIHJldmlldyBoYXMgZmxhZ2dlZCBzb21ldGhpbmcgaW4gdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBHaXZlbiBteSBleHBlcmllbmNlLCBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgd2hhdCBtaWdodCBiZSBoYXBwZW5pbmcgaGVyZS4gR2l2ZW4gdGhlIHNjb3BlIG9mIHRoZSBwb3RlbnRpYWwgaW1wYWN0LCBpdCdzIGVzc2VudGlhbCB0byBxdWlja2x5IGFuZCBjYXJlZnVsbHkgcmV2aWV3IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhpcyBzcGVjaWZpYyBLY29uZmlnIGZpbGUuIFRoaXMgbGlrZWx5IHJlbGF0ZXMgdG8gdGhlIER5bmFtaWMgQWRhcHRpdmUgTWVtb3J5IE9wdGltaXplciAoREFNT04pIGZyYW1ld29yaywgc28gSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGdyYXNwIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHBvdGVudGlhbCBpbXBhY3RzIG9mIGFueSBjaGFuZ2VzIGJlaW5nIHByb3Bvc2VkLiBUaGlzIHF1aWNrIGNoZWNrIHdpbGwgZ2l2ZSBtZSBhIGJhc2VsaW5lIHRvIGRlY2lkZSB0aGUgbmV4dCBhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5NjM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowMi40NTgyODMyMjJaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MSxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA1MTpcXHRcXHRkZWZhdWx0IERBTU9OXFxuICA1MjpcXHRcXHRoZWxwXFxuICA1MzpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBkZWZhdWx0IGRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgREFNT05cXG4gIDU0OlxcdFxcdCAgdGhhdCB3b3JrcyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2UuXFxuICA1NTpcXHRcXG4gIDU2OlxcdGNvbmZpZyBEQU1PTl9WQUREUl9LVU5JVF9URVNUXFxuICA1NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA1ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1ZBRERSIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDU5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA2MDpcXHRcXHRoZWxwXFxuICA2MTpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXFxuICA2MjpcXHRcXG4gIDYzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICA2NDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgNjU6XFx0XFxuICA2NjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA2NzpcXHRcXG4gIDY4OlxcdGNvbmZpZyBEQU1PTl9TWVNGU1xcbiAgNjk6XFx0XFx0Ym9vbCBcXFwiREFNT04gc3lzZnMgaW50ZXJmYWNlXFxcIlxcbiAgNzA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBTWVNGU1xcbiAgNzE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNzI6XFx0XFx0aGVscFxcbiAgNzM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcXG4gIDc0OlxcdFxcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXFxuICA3NTpcXHRcXG4gIDc2OlxcdGNvbmZpZyBEQU1PTl9TWVNGU19LVU5JVF9URVNUXFxuICA3NzpcXHRcXHRib29sIFxcXCJUZXN0IGZvciBkYW1vbiBzeXNmcyBpbnRlcmZhY2VcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDc4OlxcdFxcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgNzk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDgwOlxcdFxcdGhlbHBcXG4gIDgxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIHN5c2ZzIGludGVyZmFjZSBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgODI6XFx0XFxuICA4MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgODQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDg1OlxcdFxcbiAgODY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODc6XFx0XFxuICA4ODpcXHRjb25maWcgREFNT05fUkVDTEFJTVxcbiAgODk6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgcmVjbGFpbSAoREFNT05fUkVDTEFJTSlcXFwiXFxuICA5MDpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1BBRERSXFxuICA5MTpcXHRcXHRoZWxwXFxuICA5MjpcXHRcXHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTi1iYXNlZCByZWNsYW1hdGlvbiBzdWJzeXN0ZW0uICBJdCBmaW5kcyBwYWdlc1xcbiAgOTM6XFx0XFx0ICB0aGF0IG5vdCBhY2Nlc3NlZCBmb3IgYSBsb25nIHRpbWUgKGNvbGQpIHVzaW5nIERBTU9OIGFuZCByZWNsYWltXFxuICA5NDpcXHRcXHQgIHRob3NlLlxcbiAgOTU6XFx0XFxuICA5NjpcXHRcXHQgIFRoaXMgaXMgc3VnZ2VzdGVkIHRvIGJlIHVzZWQgYXMgYSBwcm9hY3RpdmUgYW5kIGxpZ2h0d2VpZ2h0XFxuICA5NzpcXHRcXHQgIHJlY2xhbWF0aW9uIHVuZGVyIGxpZ2h0IG1lbW9yeSBwcmVzc3VyZSwgd2hpbGUgdGhlIHRyYWRpdGlvbmFsIHBhZ2VcXG4gIDk4OlxcdFxcdCAgc2Nhbm5pbmctYmFzZWQgcmVjbGFtYXRpb24gaXMgdXNlZCBmb3IgaGVhdnkgcHJlc3N1cmUuXFxuICA5OTpcXHRcXG4gMTAwOlxcdGNvbmZpZyBEQU1PTl9MUlVfU09SVFxcbiAxMDE6XFx0XFx0Ym9vbCBcXFwiQnVpbGQgREFNT04tYmFzZWQgTFJVLWxpc3RzIHNvcnRpbmcgKERBTU9OX0xSVV9TT1JUKVxcXCJcXG4gMTAyOlxcdFxcdGRlcGVuZHMgb24gREFNT05fUEFERFJcXG4gMTAzOlxcdFxcdGhlbHBcXG4gMTA0OlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIHN1YnN5c3RlbS4gIEl0IHRyaWVzIHRvXFxuIDEwNTpcXHRcXHQgIHByb3RlY3QgZnJlcXVlbnRseSBhY2Nlc3NlZCAoaG90KSBwYWdlcyB3aGlsZSByYXJlbHkgYWNjZXNzZWQgKGNvbGQpXFxuIDEwNjpcXHRcXHQgIHBhZ2VzIHJlY2xhaW1lZCBmaXJzdCB1bmRlciBtZW1vcnkgcHJlc3N1cmUuXFxuIDEwNzpcXHRcXG4gMTA4OlxcdGNvbmZpZyBEQU1PTl9TVEFUXFxuIDEwOTpcXHRcXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbiAxMTA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9QQUREUlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowMi40NTgzNTkyODNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDY5Mzg0MDYzNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEknbSBzZWVpbmcsIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIGhvdyBEQU1PTiBoYW5kbGVzIHRpbWUtYmFzZWQgcXVvdGFzLiBTcGVjaWZpY2FsbHksIGl0J3MgYWJvdXQgdGhlIGNhbGN1bGF0aW9uIG9mIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCB3aGVuIHRpbWUgcXVvdGFzIGFyZSBpbiBwbGF5LiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBlbnN1cmVzIHRoYXQgbWluaW11bSByZWdpb24gc2l6ZSBpcyB0YWtlbiBpbnRvIGFjY291bnQgKmJlZm9yZSogdGhlIHBhdGNoIHBlcmZvcm1zIGFueSBvdGhlciBjb21wYXJpc29ucyB3aXRoIHF1b3RhIGxpbWl0cy4gVGhpcyBoYXMgaW1tZWRpYXRlIGltcGxpY2F0aW9ucyBmb3IgbWVtb3J5IG1hbmFnZW1lbnQg4oCTIHRoYXQncyBhIGtleSBhcmVhIHRvIHBheSBhdHRlbnRpb24gdG8uIFNpbmNlIHRoaXMgdGllcyBpbnRvIHN5c2ZzIGludGVyZmFjZXMgKGBEQU1PTl9TWVNGU2ApIGZvciBtYW5hZ2luZyBtb25pdG9yaW5nIHNjaGVtZXMsIHRoYXQgd2lkZW5zIHRoZSBhdHRhY2sgc3VyZmFjZSBhIGJpdC5cblxuSSd2ZSBmbGFnZ2VkIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlnIHN5bWJvbHM6IGBDT05GSUdfREFNT05gLCBgQ09ORklHX0RBTU9OX1NZU0ZTYCwgYENPTkZJR19EQU1PTl9QQUREUmAsIGFuZCBgQ09ORklHX0RBTU9OX1ZBRERSYC4gVGhpcyBzaG93cyB0aGUgc3BlY2lmaWMgZmVhdHVyZXMgdGllZCB0byB0aGUgY2hhbmdlcy5cblxuVGhlIGNyaXRpY2FsIGZ1bmN0aW9ucyBhcHBlYXIgdG8gYmUgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLCBgZGFtb3NfYWRqdXN0X3F1b3RhYCwgYW5kIGBrZGFtb25kX2FwcGx5X3NjaGVtZXNgLiBUaGUgY2FsbCBncmFwaCBzaG93cyBhIGNsZWFyIGRlcGVuZGVuY3kgY2hhaW46IGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhYCBpcyBjYWxsZWQgYnkgYGRhbW9zX2FkanVzdF9xdW90YWAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsZWQgYnkgYGtkYW1vbmRfYXBwbHlfc2NoZW1lc2AuIE1ha2VzIHRoZSBzY29wZSB2ZXJ5IGNsZWFybHkgZGVmaW5lZC5cblxuR2l2ZW4gdGhhdCB0aGlzIGFsdGVycyBxdW90YSBjYWxjdWxhdGlvbnMgd2l0aGluIERBTU9OLCB3aGljaCBkaXJlY3RseSByZWxhdGVzIHRvIG1lbW9yeSBtb25pdG9yaW5nIGFuZCByZWdpb24gc2l6ZSwgYW5kIHRoYXQgd2UgaGF2ZSBhIGNsZWFyIHN5c2ZzIGludGVyZmFjZSBhdmFpbGFibGUsIEknbSBsZWFuaW5nIGhlYXZpbHkgdG93YXJkcyBmdXp6aW5nIHRoaXMuIFRoZSBleHBsYW5hdGlvbiBpcyBzb3VuZCBhbmQgZm9jdXNlZC5cblxuSSdtIGRvdWJsZS1jaGVja2luZywganVzdCB0byBiZSBzdXJlOlxuXG4qICAgKipXb3J0aEZ1enppbmc6KiogQ29uZmlybWVkLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIENvbmZpcm1lZCDigJMgaXQncyB0aGUgcmlnaHQgbGlzdC5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogQ29uZmlybWVkIOKAkyBjb3ZlcnMgYWxsIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy5cbiogICAqKlJlYXNvbmluZzoqKiBDb25jaXNlLCBhY2N1cmF0ZSwgYW5kIHBvaW50cyB0byB0aGUgcmlnaHQgY3JpdGljYWwgYXJlYXMuXG5cbkFscmlnaHQsIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuIExldCdzIGdldCB0aGlzIGZ1enppbmcgcGxhbiBpbiBtb3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjkwLCJPdXRwdXRUb2tlbnMiOjE1MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMxOjA3LjE1MjIwMjgwNloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyMTQzMjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1ZBRERSXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgICBcImRhbW9zX2FkanVzdF9xdW90YVwiLFxuICAgIFwia2RhbW9uZF9hcHBseV9zY2hlbWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBsb2dpYyBpbiBEQU1PUyAoZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSkgd2l0aGluIHRoZSBEQU1PTiBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgaXMgcmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyB2aWEgREFNT04ncyBzeXNmcyBpbnRlcmZhY2UuIEZ1enppbmcgaXMgcmVjb21tZW5kZWQgdG8gdmVyaWZ5IHF1b3RhIGFkanVzdG1lbnRzIGFuZCBwcmV2ZW50IGVkZ2UtY2FzZSBhY2NvdW50aW5nIHJlZ3Jlc3Npb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRBTU9OXCIsXG4gICAgXCJEQU1PTl9TWVNGU1wiLFxuICAgIFwiREFNT05fVkFERFJcIixcbiAgICBcIkRBTU9OX1BBRERSXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YVwiLFxuICAgIFwiZGFtb3NfYWRqdXN0X3F1b3RhXCIsXG4gICAgXCJrZGFtb25kX2FwcGx5X3NjaGVtZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGxvZ2ljIGluIERBTU9TIChkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKSB3aXRoaW4gdGhlIERBTU9OIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBpcyByZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIHZpYSBEQU1PTidzIHN5c2ZzIGludGVyZmFjZS4gRnV6emluZyBpcyByZWNvbW1lbmRlZCB0byB2ZXJpZnkgcXVvdGEgYWRqdXN0bWVudHMgYW5kIHByZXZlbnQgZWRnZS1jYXNlIGFjY291bnRpbmcgcmVncmVzc2lvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDE3OjMxOjA3LjIzNDM1Mzk1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMTg2MDcwMDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowNy4yMzQ4NzQ2NTRaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMzExODA4MTkzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cXG5cXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI5ZjUzNDQzMGY0ZWRkNDc3YTdjMDFhNjRjNzFjN2Y3N2RlODljY2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCA4IDE3OjMwOjI2IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCBjZThjNmY5OTEwNmVkLi4zZTljOWI2Mzg1ZDRlIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0zMjM5LDYgKzMyMzksNyBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4gXHR1bnNpZ25lZCBsb25nIHRocm91Z2hwdXQ7XG4gXHR1bnNpZ25lZCBsb25nIGVzeiA9IFVMT05HX01BWDtcbitcdHVuc2lnbmVkIGxvbmcgZXN6X3RpbWU7XG4gXG4gXHRpZiAoIXF1b3RhLVx1MDAzZW1zIFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSkge1xuIFx0XHRxdW90YS1cdTAwM2Vlc3ogPSBxdW90YS1cdTAwM2VzejtcbkBAIC0zMjU5LDggKzMyNjAsOCBAQCBzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxuIFx0XHRcdFx0XHQxMDAwMDAwLCBxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX25zKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHRocm91Z2hwdXQgPSBQQUdFX1NJWkUgKiAxMDI0O1xuLVx0XHRlc3ogPSBtaW4odGhyb3VnaHB1dCAqIHF1b3RhLVx1MDAzZW1zLCBlc3opO1xuLVx0XHRlc3ogPSBtYXgoY3R4LVx1MDAzZW1pbl9yZWdpb25fc3osIGVzeik7XG4rXHRcdGVzel90aW1lID0gbWF4KHRocm91Z2hwdXQgKiBxdW90YS1cdTAwM2VtcywgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3opO1xuK1x0XHRlc3ogPSBtaW4oZXN6X3RpbWUsIGVzeik7XG4gXHR9XG4gXG4gXHRpZiAocXVvdGEtXHUwMDNlc3ogXHUwMDI2XHUwMDI2IHF1b3RhLVx1MDAzZXN6IFx1MDAzYyBlc3opXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQxNzozMTowNy4yMzQ4NzU3MzRaIiwiU2VxIjoyNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcwOTEzNTYyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9OIFBhdGNoIGZvciBFZmZlY3RpdmUgUXVvdGEgU2V0dGluZyoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2UgSSBuZWVkIHRvIGludmVzdGlnYXRlIGlzIHR1Y2tlZCBhd2F5IGluIGBtbS9kYW1vbi9jb3JlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YWAgZnVuY3Rpb24uIFRoYXQncyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIGtub3cgZXhhY3RseSBob3cgdG8gYXBwcm9hY2ggdGhpcy4gR2l2ZW4gbXkgZmFtaWxpYXJpdHkgd2l0aCB0aGUgREFNT04gc3Vic3lzdGVtLCBJJ2xsIGxldmVyYWdlIG15IHByZWZlcnJlZCB0b29scyB0byBkcmlsbCBpbnRvIHRoaXMuIEknbGwgZmlyZSB1cCBlaXRoZXIgcmVhZC1maWxlIGZvciBhIHF1aWNrLCBpbnRlcmFjdGl2ZSBicm93c2Ugb3IsIGlmIEkgbmVlZCBtb3JlIHByZWNpc2lvbiwgYSBncmVwcGVyIHNlYXJjaCBmb2N1c2luZyBvbiB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGF0IHBhcnRpY3VsYXIgZnVuY3Rpb24uIFRoYXQgd2F5LCBJIGNhbiBxdWlja2x5IGdyYXNwIHRoZSBzdXJyb3VuZGluZyBsb2dpYyBhbmQgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZSBwYXRjaC4gTGV0J3Mgc2VlIHdoYXQncyBjaGFuZ2VkIGFuZCBob3cgaXQgaW1wYWN0cyB0aGUgcXVvdGEgc2V0dGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0MSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTEuOTQ0MDE0MloiLCJTZXEiOjI2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MzIxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb24vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0zMjIwPXN0YXRpYyB2b2lkIGRhbW9zX2dvYWxfdHVuZV9lc3pfYnBfdGVtcG9yYWwoc3RydWN0IGRhbW9uX2N0eCAqYyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMjM2LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozMjM3OnN0YXRpYyB2b2lkIGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMyMzgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyODc9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMzAwLVxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbm1tL2RhbW9uL2NvcmUuYzozMzAxOlxcdFxcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMzMDItXFx0XFx0aWYgKHRyYWNlX2RhbW9zX2Vzel9lbmFibGVkKCkpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzMxNi1cXHRcXHRcXHRjYWNoZWRfZXN6ID0gcXVvdGEtXFx1MDAzZWVzejtcXG5tbS9kYW1vbi9jb3JlLmM6MzMxNzpcXHRcXHRkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKGMsIHMpO1xcbm1tL2RhbW9uL2NvcmUuYy0zMzE4LVxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTIuMTE4MzQxMTY1WiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDkwNDUxNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCBzdHJ1Y3R1cmVkIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdCB0aHJvdWdoOlxuXG4qKkFuYWx5emluZyBEQU1PTidzIENvcmUgRnVuY3Rpb25hbGl0eSAobW0vZGFtb24vY29yZS5jLCBsaW5lcyAzMjMwLTMyOTApKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgc2VjdGlvbiBvZiB0aGUgREFNT04gY29yZSBjb2RlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDMyMzAgdG8gMzI5MCBpbiBgbW0vZGFtb24vY29yZS5jYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBwYXJ0aWN1bGFyIGNodW5rJ3Mgcm9sZSB3aXRoaW4gdGhlIGJyb2FkZXIgREFNT04gZnJhbWV3b3JrLiBGcm9tIGNvbnRleHQgYW5kIG15IGV4aXN0aW5nIHVuZGVyc3RhbmRpbmcsIHRoaXMgaXMgbGlrZWx5IHJlbGF0ZWQgdG8gc29tZSBjcml0aWNhbCBtYW5hZ2VtZW50IGZ1bmN0aW9uLlxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IGJ5IGNvbnNpZGVyaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlOiBXaGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24/IFdoYXQgZnVuY3Rpb25zIGRvZXMgaXQgY2FsbD8gV2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGluIHNjb3BlIGFuZCBiZWluZyBtYW5pcHVsYXRlZCBoZXJlPyBJJ20gYW50aWNpcGF0aW5nIHRoaXMgaXMgYSB2aXRhbCBmdW5jdGlvbiBmb3IgaGFuZGxpbmcgbWVtb3J5IHJlZ2lvbnMsIHBlcmhhcHMgcGVyZm9ybWluZyBtb25pdG9yaW5nLCBvciBtYWtpbmcgb3B0aW1pemF0aW9ucyB3aXRoaW4gdGhvc2UgcmVnaW9ucy4gQ291bGQgYmUgdGhlIHdvcmtob3JzZXMgb2YgdGhlIG1vbml0b3Jpbmcgb3Igb3B0aW1pemF0aW9uIHN0ZXBzLlxuXG5JJ20gemVyb2luZyBpbiBvbiB0aGlzIHJhbmdlIGJlY2F1c2UgSSBleHBlY3QgaXQgdG8gY29udGFpbiBrZXkgbG9naWMuIElzIGl0IGFsbG9jYXRpbmcgb3IgZnJlZWluZyBEQU1PTidzIGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gSXMgaXQgbWFuYWdpbmcgdGhlIG1vbml0b3Jpbmcgb3Igb3B0aW1pemF0aW9uIGN5Y2xlIGl0c2VsZiDigJMgc2V0dGluZyB1cCBuZXcgcmVnaW9ucywgdXBkYXRpbmcgZXhpc3Rpbmcgb25lcywgb3IgcG90ZW50aWFsbHkgaGFuZGxpbmcgcmVtb3ZhbC9kZWFjdGl2YXRpb24/IEkgd2lsbCBkZWZpbml0ZWx5IGJlIGxvb2tpbmcgZm9yIGFueSB1c2VzIG9mIGBrbWFwYCwgYGt1bm1hcGAsIGBnZXRfcGFnZWAsIGBwdXRfcGFnZWAgKG9yIHRoZWlyIG5ld2VyIGNvdW50ZXJwYXJ0cykgdG8gY2hlY2sgZm9yIHBhZ2UgbWFuYWdlbWVudCBpc3N1ZXMuIEnigJltIGFsd2F5cyB3YXJ5IG9mIHBvdGVudGlhbCBsb2NraW5nIGlzc3Vlcywgc28gSSB3aWxsIGFuYWx5emUgdGhlIGxvY2tpbmcgcHJpbWl0aXZlcyB1c2VkIGhlcmUsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gdGhlIERBTU9OIGNvcmUncyBvdmVyYWxsIGxvY2tpbmcgc3RyYXRlZ3kuIElzIHRoaXMgZnVuY3Rpb24gbXVsdGl0aHJlYWRlZD9cblxuTXkgcHJpbWFyeSBnb2FsIHJpZ2h0IG5vdyBpcyB0byBmb3JtIGEgcHJlY2lzZSBtZW50YWwgbWFwIG9mIHRoaXMgZnVuY3Rpb24ncyBwdXJwb3NlIGFuZCBob3cgaXQgZml0cyBpbnRvIHRoZSBvdmVyYWxsIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbiBzdHJhdGVneS4gQW55IHBlcmZvcm1hbmNlIG1ldHJpY3MgYmVpbmcgdHJhY2tlZCBvciB1cGRhdGVkIGluIHRoaXMgcmVnaW9uIGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCwgYW5kIGFyZSBhIGhpZ2ggcHJpb3JpdHkgdG8gbG9vayBhdC4gVGhpcyBwYXJ0IG9mIHRoZSBjb2RlIGlzIGxpa2VseSBwaXZvdGFsLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCB0aG9yb3VnaGx5IHRvIGFzc2VzcyBhbnkgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIGluZWZmaWNpZW5jaWVzLiBBZnRlciB0aGlzIHJldmlldywgSSBzaG91bGQgaGF2ZSBhIGdvb2Qgc2Vuc2Ugb2YgdGhlIGNvbnRyb2wgZmxvdywgdGhlIGRhdGEgZGVwZW5kZW5jaWVzLCBhbmQgdGhlIGZ1bmRhbWVudGFsIG9wZXJhdGlvbiBiZWluZyBleGVjdXRlZCBoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODE5LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTUuNDI3Mzg4NzEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MTg4MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzIzMCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzIzMDpcXHRcXHRlbHNlXFxuMzIzMTpcXHRcXHRcXHRxdW90YS1cXHUwMDNlZXN6X2JwID0gVUxPTkdfTUFYO1xcbjMyMzI6XFx0fVxcbjMyMzM6XFx0XFxuMzIzNDpcXHQvKlxcbjMyMzU6XFx0ICogQ2FsbGVkIG9ubHkgaWYgcXVvdGEtXFx1MDAzZW1zLCBvciBxdW90YS1cXHUwMDNlc3ogYXJlIHNldCwgb3IgcXVvdGEtXFx1MDAzZWdvYWxzIGlzIG5vdCBlbXB0eVxcbjMyMzY6XFx0ICovXFxuMzIzNzpcXHRzdGF0aWMgdm9pZCBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICpzKVxcbjMyMzg6XFx0e1xcbjMyMzk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4zMjQwOlxcdFxcdHVuc2lnbmVkIGxvbmcgdGhyb3VnaHB1dDtcXG4zMjQxOlxcdFxcdHVuc2lnbmVkIGxvbmcgZXN6ID0gVUxPTkdfTUFYO1xcbjMyNDI6XFx0XFx0dW5zaWduZWQgbG9uZyBlc3pfdGltZTtcXG4zMjQzOlxcdFxcbjMyNDQ6XFx0XFx0aWYgKCFxdW90YS1cXHUwMDNlbXMgXFx1MDAyNlxcdTAwMjYgbGlzdF9lbXB0eShcXHUwMDI2cXVvdGEtXFx1MDAzZWdvYWxzKSkge1xcbjMyNDU6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IHF1b3RhLVxcdTAwM2VzejtcXG4zMjQ2OlxcdFxcdFxcdHJldHVybjtcXG4zMjQ3OlxcdFxcdH1cXG4zMjQ4OlxcdFxcbjMyNDk6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZxdW90YS1cXHUwMDNlZ29hbHMpKSB7XFxuMzI1MDpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWdvYWxfdHVuZXIgPT0gREFNT1NfUVVPVEFfR09BTF9UVU5FUl9DT05TSVNUKVxcbjMyNTE6XFx0XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF9jb25zaXN0KGN0eCwgcyk7XFxuMzI1MjpcXHRcXHRcXHRlbHNlIGlmIChxdW90YS1cXHUwMDNlZ29hbF90dW5lciA9PSBEQU1PU19RVU9UQV9HT0FMX1RVTkVSX1RFTVBPUkFMKVxcbjMyNTM6XFx0XFx0XFx0XFx0ZGFtb3NfZ29hbF90dW5lX2Vzel9icF90ZW1wb3JhbChjdHgsIHMpO1xcbjMyNTQ6XFx0XFx0XFx0ZXN6ID0gcXVvdGEtXFx1MDAzZWVzel9icCAvIDEwMDAwO1xcbjMyNTU6XFx0XFx0fVxcbjMyNTY6XFx0XFxuMzI1NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZW1zKSB7XFxuMzI1ODpcXHRcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpXFxuMzI1OTpcXHRcXHRcXHRcXHR0aHJvdWdocHV0ID0gbXVsdF9mcmFjKHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6LFxcbjMyNjA6XFx0XFx0XFx0XFx0XFx0XFx0MTAwMDAwMCwgcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfbnMpO1xcbjMyNjE6XFx0XFx0XFx0ZWxzZVxcbjMyNjI6XFx0XFx0XFx0XFx0dGhyb3VnaHB1dCA9IFBBR0VfU0laRSAqIDEwMjQ7XFxuMzI2MzpcXHRcXHRcXHRlc3pfdGltZSA9IG1heCh0aHJvdWdocHV0ICogcXVvdGEtXFx1MDAzZW1zLCBjdHgtXFx1MDAzZW1pbl9yZWdpb25fc3opO1xcbjMyNjQ6XFx0XFx0XFx0ZXN6ID0gbWluKGVzel90aW1lLCBlc3opO1xcbjMyNjU6XFx0XFx0fVxcbjMyNjY6XFx0XFxuMzI2NzpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2VzeiBcXHUwMDNjIGVzeilcXG4zMjY4OlxcdFxcdFxcdGVzeiA9IHF1b3RhLVxcdTAwM2VzejtcXG4zMjY5OlxcdFxcbjMyNzA6XFx0XFx0cXVvdGEtXFx1MDAzZWVzeiA9IGVzejtcXG4zMjcxOlxcdH1cXG4zMjcyOlxcdFxcbjMyNzM6XFx0c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4zMjc0OlxcdFxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuMzI3NTpcXHR7XFxuMzI3NjpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDAsIHNpZHggPSAwO1xcbjMyNzc6XFx0XFx0c3RydWN0IGRhbW9zICpzaXRlcjtcXG4zMjc4OlxcdFxcbjMyNzk6XFx0XFx0ZGFtb25fZm9yX2VhY2hfc2NoZW1lKHNpdGVyLCBjKSB7XFxuMzI4MDpcXHRcXHRcXHRpZiAoc2l0ZXIgPT0gcylcXG4zMjgxOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjMyODI6XFx0XFx0XFx0c2lkeCsrO1xcbjMyODM6XFx0XFx0fVxcbjMyODQ6XFx0XFx0dHJhY2VfZGFtb3NfZXN6KGNpZHgsIHNpZHgsIHF1b3RhLVxcdTAwM2Vlc3opO1xcbjMyODU6XFx0fVxcbjMyODY6XFx0XFxuMzI4NzpcXHRzdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbjMyODg6XFx0e1xcbjMyODk6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MTUuNDI3NjUyNzUzWiIsIlNlcSI6MjksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ5MjUyODM0MjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEQU1PTiBRdW90YSBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIGRvd24gdGhpcyBwYXRjaCBmb3IgYGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGFgLiBJIHNlZSB0aGUgY29yZSBjaGFuZ2UgaW1tZWRpYXRlbHk6IHRoZSBvcmRlciBvZiBvcGVyYXRpb25zIGluIGNhbGN1bGF0aW5nIGBlc3pgIGhhcyBiZWVuIGFsdGVyZWQuIFByZXZpb3VzbHksIGBlc3pgIHdhcyBjb21wdXRlZCwgcG90ZW50aWFsbHkgYmFzZWQgb24gYHF1b3RhLVx1MDAzZWdvYWxzYCwgYW5kIHRoZW4gY2xhbXBlZCB1cCB0byBgY3R4LVx1MDAzZW1pbl9yZWdpb25fc3pgLiBOb3csIHdlIGNhbGN1bGF0ZSBgZXN6X3RpbWVgIOKAkyB0aGUgdGltZS1iYXNlZCBxdW90YSDigJMgYW5kICp0aGVuKiB0YWtlIHRoZSBtaW5pbXVtIG9mIHRoYXQgYW5kIHRoZSBnb2FsLWJhc2VkIGBlc3pgLlxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyLiBUaGUgb3JpZ2luYWwgbG9naWMgY291bGQgYXJ0aWZpY2lhbGx5IGluZmxhdGUgdGhlIHF1b3RhLCBpZ25vcmluZyBwb3RlbnRpYWxseSBzbWFsbGVyIHF1b3RhcyBzcGVjaWZpZWQgaW4gdGhlIGBnb2Fsc2Agc2V0dXAgYnkgdGhlIHVzZXIuIEJ5IGNsYW1waW5nIHRoZSB0aW1lLWJhc2VkIHF1b3RhICpiZWZvcmUqIHRha2luZyB0aGUgbWluaW11bSwgd2UgZW5zdXJlIHRoYXQgdGhlIHRpbWUgcXVvdGEgaXMgYXQgbGVhc3QgYGN0eC1cdTAwM2VtaW5fcmVnaW9uX3N6YCwgd2hpY2ggbWFrZXMgc2Vuc2UuIFRoZW4gdGhlIGFjdHVhbCBxdW90YSBpcyB0aGUgbWluaW11bSBvZiB0aGUgdGltZSBxdW90YSBhbmQgdGhlIGdvYWwgcXVvdGEuXG5cbk5vdywgbGV0J3MgcnVuIHRocm91Z2ggb3VyIGNoZWNrbGlzdCBmb3IgcG90ZW50aWFsIG1lbW9yeSBzYWZldHkgaXNzdWVzLiBGaXJzdCwgYXJlIHdlIHNlbmRpbmcgYW55IG5ldyBzdHJ1Y3R1cmVzIHRvIHVzZXIgc3BhY2Ugb3IgbW9kaWZ5aW5nIGV4aXN0aW5nIG9uZXMgaW4gYSB3YXkgdGhhdCBtaWdodCBpbnRyb2R1Y2UgdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vcGUsIGRvZXNuJ3QgbG9vayBsaWtlIGl0LiBTZWNvbmQsIGFyZSB0aGVyZSBhbnkgY29uZGl0aW9uYWwgYnJhbmNoZXMgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBBZ2Fpbiwgbm8uIGBlc3pfdGltZWAgaXMgYSBwdXJlbHkgbG9jYWwgdmFyaWFibGUsIGFuZCBldmVyeXRoaW5nIGVsc2UgaXMgaW5pdGlhbGl6ZWQuIFRoaXJkLCBhcmUgd2UgYWxsb2NhdGluZyBhbnkgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2l0aCB1bmluaXRpYWxpemVkIGZpZWxkcz8gTm8gc2lnbiBvZiB0aGF0IGVpdGhlci4gRm91cnRoLCBkb2VzIHRoaXMgY2hhbmdlIGFueXRoaW5nIHRvIGRvIHdpdGggYnVmZmVyIGhhbmRsaW5nIG9yIGJvdW5kcyBjaGVja3MgdGhhdCBjb3VsZCBsZWFkIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgYmVpbmcgcmVhZD8gTm8uIFRoaXMgaXMgYWxsIGFib3V0IG51bWVyaWNhbCBsaW1pdHMgd2l0aGluIERBTU9OJ3MgcXVvdGEgY2FsY3VsYXRpb24uXG5cbkJhc2ljYWxseSwgdGhpcyBpcyBhIGNsZWFuIGxvZ2ljL2FyaXRobWV0aWMgZml4IGluIGhvdyBEQU1PTiBxdW90YXMgYXJlIGRldGVybWluZWQuIE5vIGBjb3B5X3RvX3VzZXJgLCBubyBoZWFwIG9yIHN0YWNrIGJ1ZmZlciBoYW5kbGluZywgbm8gb2J2aW91cyBpc3N1ZXMuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBsZXQncyBjb25maXJtIGBOZWVkc0tNU0FOYCBpcyBkZWZpbml0ZWx5IGBmYWxzZWAuXG5cbk9rYXksIEknbSBjb25maWRlbnQuIFRoaXMgaXMgYSBzdHJhaWdodGZvcndhcmQgZml4LCBhbmQgaXQgc2VlbXMgc2FmZS4gTm93LCBsZXQncyBjcmFmdCBhIGNvbmNpc2UgZXhwbGFuYXRpb24gZm9yIHRoZSBjb2RlIHJldmlldy4gVGhlIGNvbnRyYXN0IGJldHdlZW4gS01TQU4gYW5kIEtBU0FOIGFwcGxpY2FiaWxpdHkgbmVlZHMgdG8gYmUgbWFkZSBjbGVhciwgc28gdGhhdCB0aGVyZSBpcyBubyBjb25mdXNpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQyNDUsIk91dHB1dFRva2VucyI6MTY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTM5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMTc6MzE6MjAuMzUyOTM5NzUyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU1NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZWZmZWN0aXZlIHF1b3RhIGNhbGN1bGF0aW9uIGluIGBkYW1vc19zZXRfZWZmZWN0aXZlX3F1b3RhKClgIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYC4gSXQgZml4ZXMgYW4gYXJpdGhtZXRpYy9sb2dpYyBpc3N1ZSB3aGVyZSBgY3R4LVxcdTAwM2VtaW5fcmVnaW9uX3N6YCB3YXMgaW1wcm9wZXJseSBjbGFtcGluZyB0aGUgb3ZlcmFsbCBlZmZlY3RpdmUgc2l6ZSAoYGVzemApIHJhdGhlciB0aGFuIGp1c3QgdGhlIHRpbWUtYmFzZWQgcXVvdGEgKGBlc3pfdGltZWApLlxcblxcblRoZSBjaGFuZ2Ugb3BlcmF0ZXMgcHVyZWx5IG9uIGxvY2FsIHNjYWxhciB2YXJpYWJsZXMgKGB1bnNpZ25lZCBsb25nIGVzemAsIGBlc3pfdGltZWAsIGB0aHJvdWdocHV0YCkgd2l0aCBubyBuZXcgbWVtb3J5IGFsbG9jYXRpb25zLCBubyBidWZmZXIgbWFuaXB1bGF0aW9ucywgYW5kIG5vIGRhdGEgdHJhbnNmZXJyZWQgdG8gdXNlciBzcGFjZS4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBpbmZvLWxlYWtzLCBvciBzdHJ1Y3QgcGFkZGluZyBpc3N1ZXMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGVmZmVjdGl2ZSBxdW90YSBjYWxjdWxhdGlvbiBpbiBgZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YSgpYCB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEl0IGZpeGVzIGFuIGFyaXRobWV0aWMvbG9naWMgaXNzdWUgd2hlcmUgYGN0eC1cXHUwMDNlbWluX3JlZ2lvbl9zemAgd2FzIGltcHJvcGVybHkgY2xhbXBpbmcgdGhlIG92ZXJhbGwgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSByYXRoZXIgdGhhbiBqdXN0IHRoZSB0aW1lLWJhc2VkIHF1b3RhIChgZXN6X3RpbWVgKS5cXG5cXG5UaGUgY2hhbmdlIG9wZXJhdGVzIHB1cmVseSBvbiBsb2NhbCBzY2FsYXIgdmFyaWFibGVzIChgdW5zaWduZWQgbG9uZyBlc3pgLCBgZXN6X3RpbWVgLCBgdGhyb3VnaHB1dGApIHdpdGggbm8gbmV3IG1lbW9yeSBhbGxvY2F0aW9ucywgbm8gYnVmZmVyIG1hbmlwdWxhdGlvbnMsIGFuZCBubyBkYXRhIHRyYW5zZmVycmVkIHRvIHVzZXIgc3BhY2UuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW5mby1sZWFrcywgb3Igc3RydWN0IHBhZGRpbmcgaXNzdWVzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[1] Phase: Succeeded StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 17:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 17:31:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2] Phase: Succeeded StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 17:31:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 17:31:31 +0000 UTC FinishedAt: 2026-09-08 17:31:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8h84w/series-workflow8h84w-convert-artifact-387712166/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 17:31:41 +0000 UTC FinishedAt: 2026-09-08 17:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 17:31:41 +0000 UTC FinishedAt: 2026-09-08 17:49:18 +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:*8d5b3b8f-9e09-40d2-971c-0e28d71d9096,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-workflow8h84w/series-workflow8h84w-convert-artifact-387712166/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": "000592e0-da82-4bb1-a2bf-176f643a1909", "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-workflow8h84w/series-workflow8h84w-build-action-1222780220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:31:41 +0000 UTC FinishedAt: 2026-09-08 17:49:16 +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:*8d5b3b8f-9e09-40d2-971c-0e28d71d9096,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-workflow8h84w/series-workflow8h84w-convert-artifact-387712166/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": "000592e0-da82-4bb1-a2bf-176f643a1909", "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-workflow8h84w/series-workflow8h84w-build-action-1222780220/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 17:49:18 +0000 UTC FinishedAt: 2026-09-08 17:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 17:49:18 +0000 UTC FinishedAt: 2026-09-08 17:49:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 17:49:18 +0000 UTC FinishedAt: 2026-09-08 17:49:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 17:49:18 +0000 UTC FinishedAt: 2026-09-08 17:49:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow8h84w/series-workflow8h84w-convert-artifact-2113999097/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 17:49:28 +0000 UTC FinishedAt: 2026-09-08 17:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 17:49:28 +0000 UTC FinishedAt: 2026-09-08 17:51:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*000592e0-da82-4bb1-a2bf-176f643a1909,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-workflow8h84w/series-workflow8h84w-build-action-1222780220/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-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 17:51:23 +0000 UTC FinishedAt: 2026-09-08 17:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 17:51:23 +0000 UTC FinishedAt: 2026-09-08 17:51:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 17:51:23 +0000 UTC FinishedAt: 2026-09-08 18:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 17:51:23 +0000 UTC FinishedAt: 2026-09-08 18:09:50 +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:*8d5b3b8f-9e09-40d2-971c-0e28d71d9096,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-workflow8h84w/series-workflow8h84w-convert-artifact-2113999097/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": "d3b557cd-f898-46ad-8482-9aa44a821acc", "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-workflow8h84w/series-workflow8h84w-build-action-1096602325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 17:51:23 +0000 UTC FinishedAt: 2026-09-08 18:09:40 +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:*8d5b3b8f-9e09-40d2-971c-0e28d71d9096,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-workflow8h84w/series-workflow8h84w-convert-artifact-2113999097/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": "d3b557cd-f898-46ad-8482-9aa44a821acc", "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-workflow8h84w/series-workflow8h84w-build-action-1096602325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 18:09:50 +0000 UTC FinishedAt: 2026-09-08 18:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 18:09:50 +0000 UTC FinishedAt: 2026-09-08 18:09:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 18:09:50 +0000 UTC FinishedAt: 2026-09-08 18:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 18:09:50 +0000 UTC FinishedAt: 2026-09-08 18:11:27 +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:*d3b557cd-f898-46ad-8482-9aa44a821acc,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-workflow8h84w/series-workflow8h84w-build-action-1096602325/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-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},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:*000592e0-da82-4bb1-a2bf-176f643a1909,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3b557cd-f898-46ad-8482-9aa44a821acc,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-workflow8h84w/series-workflow8h84w-build-action-1222780220/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-workflow8h84w/series-workflow8h84w-build-action-1096602325/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 18:11:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 18:11:43 +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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},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-workflow8h84w/series-workflow8h84w-convert-artifact-3385841774/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 18:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 18:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 18:11:37 +0000 UTC FinishedAt: 2026-09-08 18:11:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 18:11:47 +0000 UTC FinishedAt: 2026-09-08 21:13:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8h84w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damos_set_effective_quota","damos_adjust_quota","kdamond_apply_schemes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_VADDR","DAMON_PADDR"],"series_id":"e58ebbfe-2c6b-494f-861a-d962c9915a4b","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 18:11:47 +0000 UTC FinishedAt: 2026-09-08 21:13:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*000592e0-da82-4bb1-a2bf-176f643a1909,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d3b557cd-f898-46ad-8482-9aa44a821acc,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-workflow8h84w/series-workflow8h84w-build-action-1222780220/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-workflow8h84w/series-workflow8h84w-build-action-1096602325/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-workflow8h84w/series-workflow8h84w-convert-artifact-3385841774/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,}