Name: series-workflowzzc55 Phase: Succeeded StartedAt: 2026-07-24 19:50:01 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[0] Phase: Succeeded StartedAt: 2026-07-24 19:50:01 +0000 UTC FinishedAt: 2026-07-24 20:08:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 19:50:01 +0000 UTC FinishedAt: 2026-07-24 20:08:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "e2a02dbc-1381-4048-b249-020e6546ab14" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dbFree", "dbUpdatePMap", "dbAlloc", "dbAllocBottomUp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RiRnJlZSYjMzQ7LAogICAgJiMzNDtkYlVwZGF0ZVBNYXAmIzM0OywKICAgICYjMzQ7ZGJBbGxvYyYjMzQ7LAogICAgJiMzNDtkYkFsbG9jQm90dG9tVXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIEpGUyBkbWFwIHN0cnVjdHVyZXMgKGBkYlZhbGlkYXRlRG1hcGApIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IGRtYXAgcGFnZSBhY2Nlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEpGUyBibG9jayBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdhZTM4ZGMzNTA1NWUwMGU5NTAxNjNiZWU4ODcwNTBhZWQzOTViYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDowNzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jXG5pbmRleCBhODQxY2YyMWRhN2RlNi4uZjE1OTU0YzFmMTk2ZGIgMTAwNjQ0XG4tLS0gYS9mcy9qZnMvamZzX2RtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19kbWFwLmNcbkBAIC05OCw2ICYjNDM7OTgsOSBAQCBzdGF0aWMgaW50IGJsa3N0b2wyKHM2NCBuYik7XG4gc3RhdGljIGludCBjbnRseih1MzIgdmFsdWUpO1xuIHN0YXRpYyBpbnQgY250dHoodTMyIHdvcmQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4mIzQzO1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydCk7XG4mIzQzO1xuIHN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuIFx0XHRcdCBpbnQgbmJsb2Nrcyk7XG4gc3RhdGljIGludCBkYkluaXREbWFwKHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubywgaW50IG5ibG9ja3MpO1xuQEAgLTQ3Niw2ICYjNDM7NDc5LDEyIEBAIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb21cbiBcdFx0ICogdGhpcyBkbWFwLlxuIFx0XHQgKi9cbkBAIC01NjgsNiAmIzQzOzU3NywxMyBAQCBkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXG4gXHRcdFx0aWYgKG1wID09IE5VTEwpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0XHRtZXRhcGFnZV93YWl0X2Zvcl9pbyhtcCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwYm1hcC1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0ICAgIChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGJsa25vIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG5AQCAtODg2LDYgJiM0Mzs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxuIFxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0Z290byByZWFkX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIGZpcnN0LCB0cnkgdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IHdpdGggdGhlXG4gXHRcdCAqIGJsb2NrcyBiZWdpbm5pbmcgYXQgdGhlIGhpbnQuXG4gXHRcdCAqL1xuQEAgLTExMTgsNiAmIzQzOzExMzksMTIgQEAgc3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcbiBcbiBcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4mIzQzO1x0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgZXh0Ymxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXG4gXHQgKiBjdXJyZW50IGFsbG9jYXRpb24uXG4gXHQgKi9cbkBAIC0xOTAyLDcgJiM0MzsxOTI5LDcgQEAgZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4tXHRcdGlmIChkcC1cdTAwM2V0cmVlLmJ1ZG1pbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXHUwMDNlZGJfaXBibWFwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4gXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbkBAIC0xOTM2LDYgJiM0MzsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4mIzQzO1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC1cdTAwM2VkYl9pcGJtYXAtXHUwMDNlaV9zYiwgZHAsIGIgXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0cmMgPSAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIGJhY2tvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoZHAtXHUwMDNldHJlZS5zdHJlZVtST09UXSAhPSBMMkJQRVJETUFQKSB7XG5AQCAtMTk5Myw2ICYjNDM7MjAyNiwxMSBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXHUwMDNlZGJfaXBibWFwLVx1MDAzZWlfc2IsIGRwLCBiIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogZnJlZSB0aGUgYmxvY2tzIGlzIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChkYkZyZWVEbWFwKGJtcCwgZHAsIGIsIEJQRVJETUFQKSkge1xuQEAgLTIxMzQsNiAmIzQzOzIxNzIsMTggQEAgc3RhdGljIGludCBkYkFsbG9jRG1hcChzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuIFx0cmV0dXJuIChyYyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4mIzQzO1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcbiYjNDM7e1xuJiM0MztcdGlmIChsZTY0X3RvX2NwdShkcC1cdTAwM2VzdGFydCkgIT0gZXhwZWN0ZWRfc3RhcnQpIHtcbiYjNDM7XHRcdGpmc19lcnJvcihzYiwgXCYjMzQ7Y29ycnVwdCBkbWFwIHBhZ2U6IHN0YXJ0ICVsbGQgZXhwZWN0ZWQgJWxsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLVx1MDAzZXN0YXJ0KSxcbiYjNDM7XHRcdFx0ICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4gXG4gLypcbiAgKiBOQU1FOlx0ZGJGcmVlRG1hcCgpXG5AQCAtMzMwOCw2ICYjNDM7MzM1OCwxMiBAQCBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4gXHRcdH1cbiBcdFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXHUwMDNlZGF0YTtcbiBcbiYjNDM7XHRcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXHUwMDNlaV9zYiwgZHAsIGJsa25vIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRcdElSRUFEX1VOTE9DSyhpcGJtYXApO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgZnJvbVxuIFx0XHQgKiB0aGlzIGRtYXAuXG4gXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtKRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYkZyZWUmIzM0OywKICAgICYjMzQ7ZGJVcGRhdGVQTWFwJiMzNDssCiAgICAmIzM0O2RiQWxsb2MmIzM0OywKICAgICYjMzQ7ZGJBbGxvY0JvdHRvbVVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWUzOGRjMzUwNTVlMDBlOTUwMTYzYmVlODg3MDUwYWVkMzk1YmE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjA6MDc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IGE4NDFjZjIxZGE3ZGU2Li5mMTU5NTRjMWYxOTZkYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19kbWFwLmMKQEAgLTk4LDYgJiM0Mzs5OCw5IEBAIHN0YXRpYyBpbnQgYmxrc3RvbDIoczY0IG5iKTsKIHN0YXRpYyBpbnQgY250bHoodTMyIHZhbHVlKTsKIHN0YXRpYyBpbnQgY250dHoodTMyIHdvcmQpOwogCiYjNDM7c3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLAomIzQzOwkJCSAgIHM2NCBleHBlY3RlZF9zdGFydCk7CiYjNDM7CiBzdGF0aWMgaW50IGRiQWxsb2NEbWFwQlUoc3RydWN0IGJtYXAgKiBibXAsIHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubywKIAkJCSBpbnQgbmJsb2Nrcyk7CiBzdGF0aWMgaW50IGRiSW5pdERtYXAoc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLCBpbnQgbmJsb2Nrcyk7CkBAIC00NzYsNiAmIzQzOzQ3OSwxMiBAQCBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpCiAJCX0KIAkJZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtJmd0O2RhdGE7CiAKJiM0MzsJCWlmICghZGJWYWxpZGF0ZURtYXAoaXAtJmd0O2lfc2IsIGRwLCBibGtubyAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCQlJUkVBRF9VTkxPQ0soaXBibWFwKTsKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCX0KJiM0MzsKIAkJLyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb20KIAkJICogdGhpcyBkbWFwLgogCQkgKi8KQEAgLTU2OCw2ICYjNDM7NTc3LDEzIEBAIGRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwKIAkJCWlmIChtcCA9PSBOVUxMKQogCQkJCXJldHVybiAtRUlPOwogCQkJbWV0YXBhZ2Vfd2FpdF9mb3JfaW8obXApOwomIzQzOwomIzQzOwkJCWlmICghZGJWYWxpZGF0ZURtYXAoaXBibWFwLSZndDtpX3NiLAomIzQzOwkJCQkJICAgIChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCSAgICBibGtubyAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJCXJldHVybiAtRUlPOwomIzQzOwkJCX0KIAkJfQogCQlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIApAQCAtODg2LDYgJiM0Mzs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKQogCiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJZ290byByZWFkX3VubG9jazsKJiM0MzsJCX0KJiM0MzsKIAkJLyogZmlyc3QsIHRyeSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uIHJlcXVlc3Qgd2l0aCB0aGUKIAkJICogYmxvY2tzIGJlZ2lubmluZyBhdCB0aGUgaGludC4KIAkJICovCkBAIC0xMTE4LDYgJiM0MzsxMTM5LDEyIEBAIHN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpCiAKIAlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIAomIzQzOwlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgZXh0Ymxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCUlSRUFEX1VOTE9DSyhpcGJtYXApOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKIAkvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCiAJICogY3VycmVudCBhbGxvY2F0aW9uLgogCSAqLwpAQCAtMTkwMiw3ICYjNDM7MTkyOSw3IEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKQogCQkJcmV0dXJuIC1FSU87CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCi0JCWlmIChkcC0mZ3Q7dHJlZS5idWRtaW4gJmx0OyAwKSB7CiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC0mZ3Q7ZGJfaXBibWFwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiAJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC0xOTM2LDYgJiM0MzsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKQogCQl9CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC0mZ3Q7ZGJfaXBibWFwLSZndDtpX3NiLCBkcCwgYiAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCQlyYyA9IC1FSU87CiYjNDM7CQkJZ290byBiYWNrb3V0OwomIzQzOwkJfQomIzQzOwogCQkvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuCiAJCSAqLwogCQlpZiAoZHAtJmd0O3RyZWUuc3RyZWVbUk9PVF0gIT0gTDJCUEVSRE1BUCkgewpAQCAtMTk5Myw2ICYjNDM7MjAyNiwxMSBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cykKIAkJfQogCQlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIAomIzQzOwkJaWYgKCFkYlZhbGlkYXRlRG1hcChibXAtJmd0O2RiX2lwYm1hcC0mZ3Q7aV9zYiwgZHAsIGIgJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIGZyZWUgdGhlIGJsb2NrcyBpcyB0aGlzIGRtYXAuCiAJCSAqLwogCQlpZiAoZGJGcmVlRG1hcChibXAsIGRwLCBiLCBCUEVSRE1BUCkpIHsKQEAgLTIxMzQsNiAmIzQzOzIxNzIsMTggQEAgc3RhdGljIGludCBkYkFsbG9jRG1hcChzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLAogCXJldHVybiAocmMpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLAomIzQzOwkJCSAgIHM2NCBleHBlY3RlZF9zdGFydCkKJiM0Mzt7CiYjNDM7CWlmIChsZTY0X3RvX2NwdShkcC0mZ3Q7c3RhcnQpICE9IGV4cGVjdGVkX3N0YXJ0KSB7CiYjNDM7CQlqZnNfZXJyb3Ioc2IsICYjMzQ7Y29ycnVwdCBkbWFwIHBhZ2U6IHN0YXJ0ICVsbGQgZXhwZWN0ZWQgJWxsZFxuJiMzNDssCiYjNDM7CQkJICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLSZndDtzdGFydCksCiYjNDM7CQkJICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiAKIC8qCiAgKiBOQU1FOglkYkZyZWVEbWFwKCkKQEAgLTMzMDgsNiAmIzQzOzMzNTgsMTIgQEAgaW50IGRiQWxsb2NCb3R0b21VcChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKQogCQl9CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJSVJFQURfVU5MT0NLKGlwYm1hcCk7CiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CQl9CiYjNDM7CiAJCS8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgZnJvbQogCQkgKiB0aGlzIGRtYXAuCiAJCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBgZGJWYWxpZGF0ZURtYXBgIGZ1bmN0aW9uIGludG8gYGZzL2pmcy9qZnNfZG1hcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEpGUyBmaWxlc3lzdGVtLCBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIGZvciB0aGUgYGRtYXBgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoZSBgZHAtJmd0O3N0YXJ0YCB2YWx1ZSBhZ2FpbnN0IGFuIGBleHBlY3RlZF9zdGFydGAuIElmIHRoYXQgdmFsaWRhdGlvbiBmYWlscywgd2UmIzM5O3JlIGdldHRpbmcgYW4gYC1FSU9gIGVycm9yIGJhY2suIFNlZW1zIGxpa2UgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KClRoZSBpbXBvcnRhbnQgdGhpbmcgbm93IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHdheSB0byBmdXp6IHRoaXMuIEJhc2VkIG9uIHRoZSBjb2RlLCBgZGJWYWxpZGF0ZURtYXBgIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmdW5jdGlvbnM6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJFeHRlbmRgLCBgZGJBbGxvY0N0bGAgKGFuZCB0aGlzIG9uZSYjMzk7cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMpLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugc2hvdWxkIGZvY3VzIG91ciBlZmZvcnRzLgoKRmlyc3QsIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvc2VkLiBJdCBsb29rcyBsaWtlIGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJBbGxvY0N0bGAgYW5kIGBkYkFsbG9jQm90dG9tVXBgIGFyZSBhbGwgbm90IHN0YXRpYywgd2hpbGUgYGRiRXh0ZW5kYCBpcyBzdGF0aWMuIFRoYXQgZ2l2ZXMgdXMgYSBzdGFydGluZyBwb2ludC4gV2UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gdG8gc2VhcmNoIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgpPZiBjb3Vyc2UsIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIEpGUyBjb25maWcgb3B0aW9ucyBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgYENPTkZJR19KRlNfRlNgLiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIEpGUyBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgYmVmb3JlIHdlIHN0YXJ0IGZ1enppbmcuCgpJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG92ZXIgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGBkYkV4dGVuZGAsIGBkYkFsbG9jQ3RsYCwgYW5kIGBkYkFsbG9jQm90dG9tVXBgIHRvIG1hcCBvdXQgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSBpZiBhbnkgb2YgdGhlbSBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBsb29raW5nIGZvciBob3QgcGF0aHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBleHBvc2UgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8c3RhdGljKS4qIGRiRnJlZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9MzY2PWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtNDMzLSAqL1xuZnMvamZzL2pmc19kbWFwLmM6NDM0OmludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbmZzL2pmcy9qZnNfZG1hcC5jLTQzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSkZTIEJsb2NrIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEpGUyBmdW5jdGlvbnM6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJFeHRlbmRgLCBgZGJBbGxvY0N0bGAsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhdGVnb3JpemUgdGhlbSBiYXNlZCBvbiB0aGVpciByb2xlcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCmBkYkZyZWVgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIHRoZSBmdW5jdGlvbiBmb3IgZnJlZWluZyBibG9ja3MsIHRha2luZyB0aGUgaW5vZGUsIHRoZSBzdGFydGluZyBibG9jayBudW1iZXIsIGFuZCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBmcmVlIGFzIGFyZ3VtZW50cy4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gdXBkYXRlIGJpdG1hcHMgYW5kIHBvc3NpYmx5IGNvYWxlc2NlIGZyZWUgZXh0ZW50cy4gYGRiVXBkYXRlUE1hcGAgaXMgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgaXQgaXMgdG8gdXBkYXRlIHRoZSBwaHlzaWNhbCBtYXBwaW5nLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBwZXJzaXN0ZW50IG1hcCwgYW5kIHRoZSBgZnJlZWAgdmFyaWFibGUgaW1wbGllcyBhIHN0YXRlIGNoYW5nZS4gSXQgbGlrZWx5IHBsYXlzIGEgcm9sZSBkdXJpbmcgYmxvY2sgZGVhbGxvY2F0aW9uLCBvciBhbGxvY2F0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIHRvIHdyaXRlIGRhdGEgb24gdGhlIG1hcCB0aGF0IGlzIHN0b3JlZCBzb21ld2hlcmUuCgpgZGJBbGxvY2AgaXMsIG9idmlvdXNseSwgZm9yIGJsb2NrIGFsbG9jYXRpb24uIEl0IGFsc28gdGFrZXMgYW4gaW5vZGUsIGEgaGludCAod2hpY2ggaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UpLCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZSwgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVzdWx0LCB3aGljaCBJJiMzOTtkIGJldCBpcyB0aGUgYWxsb2NhdGVkIGJsb2NrIG51bWJlcnMuIGBkYkV4dGVuZGAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGUgYHN0YXRpY2Aga2V5d29yZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwuIFRoZSBgYWRkbmJsb2Nrc2AgcGFyYW1ldGVyIGhlcmUgc3VnZ2VzdHMgdGhlIGFiaWxpdHkgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBibG9ja3MuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKRlMgY29udGV4dC4KCmBkYkFsbG9jQ3RsYCBpcyBhbm90aGVyIGFsbG9jYXRpb24gZnVuY3Rpb24uIFRoZSBgYm1hcGAgc3RydWN0dXJlIHN1Z2dlc3RzIGl0IG9wZXJhdGVzIG9uIGEgYml0bWFwIGFuZCBjb3VsZCBiZSBhIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1ldGFkYXRhIGJsb2NrIG1hbmFnZW1lbnQuIFRoZSBgbDJuYmAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGxvZyBiYXNlIDIgbnVtYmVyIG9mIGJsb2NrcywgaXMgYSBoaW50IHRoYXQgaXQgbWlnaHQgYmUgb3BlcmF0aW5nIG9uIGEgcG93ZXItb2YtdHdvIGJsb2NrIGFsbG9jYXRpb24gc2NoZW1lLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhIGJsb2NrIGFuZCBtZXRhZGF0YSBibG9jayBhbGxvY2F0aW9uLgoKRmluYWxseSwgYGRiQWxsb2NCb3R0b21VcGAgY291bGQgYmUgYSBzcGVjaWFsIGFsbG9jYXRpb24gdmFyaWFudCwgcG9zc2libHkgdXNlZCBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zIG9yIHRvIG9wdGltaXplIGEgY2VydGFpbiBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJdCB0YWtlcyBhbiBpbm9kZSwgYW5kIHN0YXJ0aW5nIGJsb2NrIG51bWJlciBhbmQgbnVtYmVyIG9mIGJsb2NrcywgbGlrZSB0aGUgb3RoZXIgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZnVuY3Rpb25zLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBpZiB0aGV5IGFyZSBpbnRlcm5hbCwgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgSkZTIGNvZGViYXNlLiBUaGF0JiMzOTtzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0YXRpYykuKiBkYkFsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX2RtYXAuYz03MjA9aW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXG5mcy9qZnMvamZzX2RtYXAuYy04MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEpGUyBpbnRlcm5hbHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQga25vd2xlZGdlIGFuZCBob3cgKkkqIHdvdWxkIHRoaW5rIGFib3V0IHRoZW06CgoqKk5hdmlnYXRpbmcgRHluYW1pYyBEYXRhIFN0cnVjdHVyZXMgd2l0aGluIEpGUyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEpGUyBmdW5jdGlvbnMsIGFuZCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqZHluYW1pYyogb25lcy4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgYSBsb3Qgb2Ygd2hhdCBnb2VzIG9uIGluIEpGUyBpcyByZWxhdGl2ZWx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBtb3ZpbmcgcGFydHMgdGhhdCByZWFsbHkga2VlcCB5b3Ugb24geW91ciB0b2VzLCBhbmQgdGhvc2UgYXJlIHdoYXQgSSYjMzk7bSBjb25jZW50cmF0aW5nIG9uIHJpZ2h0IG5vdy4gRXhjZXB0IGZvciBgZGJFeHRlbmRgLCB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LgoKU28sIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gc29tZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgbWFwLiBUaGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBmb3IgdGhpcyBkeW5hbWljIGJlaGF2aW9yIGFyZSBgZGJGcmVlYCwgb2J2aW91c2x5LiBJdCYjMzk7cyB0aGUgcmVsZWFzZSBtZWNoYW5pc20sIHNvIGl0cyBkeW5hbWlzbSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIHRoZSBoZWFsdGggb2YgdGhlIGZpbGVzeXN0ZW0uIEhvdyBkb2VzIGl0IGhhbmRsZSBjb2FsZXNjaW5nIGZyZWUgYmxvY2tzPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gdGhlIGFsbG9jYXRpb24gbWFwPyBUaGVuIHRoZXJlJiMzOTtzIGBkYlVwZGF0ZVBNYXBgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGF0IGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHBlcnNpc3RlbnQgbWFwIChQTWFwKSBzdGF5cyBjb25zaXN0ZW50IHdpdGggd2hhdCYjMzk7cyBhY3R1YWxseSBvbiBkaXNrLiBBbnkgY29ycnVwdGlvbiBoZXJlIGFuZCB3ZSYjMzk7cmUgaW4gZGVlcCB0cm91YmxlLiBNb3Zpbmcgb24gdG8gYWxsb2NhdGlvbi4gSSB3YW50IHRvIGNoZWNrIGludG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBwcmltaXRpdmVzLiBgZGJBbGxvY2AgYW5kIGBkYkFsbG9jQ3RsYCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24gYmVjYXVzZSB0aGV5IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLiBIb3cgYXJlIHRoZXNlIGxpbmtlZCB0b2dldGhlcj8gQXJlIHRoZXkgYm90dG9tIHVwICh3aXRoIGBkYkFsbG9jQm90dG9tVXBgKSBvciBhIHRvcCBkb3duPyBXaGF0IHN0cmF0ZWdpZXMgZG8gdGhleSB1c2UgdG8gcHJldmVudCBmcmFnbWVudGF0aW9uLCBhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyBkaWZmZXJlbnQgSS9PIGNvbmRpdGlvbnM/IEl0JiMzOTtzIGFsbCBhYm91dCByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGZyYWdtZW50YXRpb24sIGFuZCBlZmZpY2llbnQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIC0gYSBjb3JuZXJzdG9uZSBvZiBKRlMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdHJpY2t5IGJ1ZyByZXBvcnRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RiRnJlZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9MzY2PWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtNDE2LS8qXG5mcy9qZnMvamZzX2RtYXAuYzo0MTc6ICogTkFNRTpcdGRiRnJlZSgpXG5mcy9qZnMvamZzX2RtYXAuYy00MTgtICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy00MzMtICovXG5mcy9qZnMvamZzX2RtYXAuYzo0MzQ6aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuZnMvamZzL2pmc19kbWFwLmMtNDM1LXtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0xNjg1PXM2NCBkYkRpc2NhcmRBRyhzdHJ1Y3QgaW5vZGUgKmlwLCBpbnQgYWdubywgczY0IG1pbmxlbilcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU0LVx0Zm9yICh0dCA9IHRvdHJpbTsgdHQtXHUwMDNlbmJsb2NrcyAhPSAwOyB0dCYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTU6XHRcdC8qIHdoZW4gbW91bnRlZCB3aXRoIG9ubGluZSBkaXNjYXJkLCBkYkZyZWUoKSB3aWxsXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU2LVx0XHQgKiBjYWxsIGpmc19pc3N1ZV9kaXNjYXJkKCkgaXRzZWxmICovXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc1OC1cdFx0XHRqZnNfaXNzdWVfZGlzY2FyZChpcCwgdHQtXHUwMDNlYmxrbm8sIHR0LVx1MDAzZW5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc1OTpcdFx0ZGJGcmVlKGlwLCB0dC1cdTAwM2VibGtubywgdHQtXHUwMDNlbmJsb2Nrcyk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNzYwLVx0XHR0cmltbWVkICYjNDM7PSB0dC1cdTAwM2VuYmxvY2tzO1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5oPTI4Mj1leHRlcm4gaW50IGRiVW5tb3VudChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgaW50IG1vdW50ZXJyb3IpO1xuZnMvamZzL2pmc19kbWFwLmgtMjgzLVxuZnMvamZzL2pmc19kbWFwLmg6Mjg0OmV4dGVybiBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXBibWFwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKTtcbmZzL2pmcy9qZnNfZG1hcC5oLTI4NS1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzk1LVx0XHRcdCAgICAgICBzaXplb2YgKHRlbXBfdGFibGUpKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzozOTY6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgc2JpLVx1MDAzZW5icGVycGFnZSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzk3LVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHNiaS1cdTAwM2VuYnBlcnBhZ2UpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy05OTItXHRcdGlmIChyYylcbmZzL2pmcy9qZnNfZHRyZWUuYzo5OTM6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgeGxlbik7XG5mcy9qZnMvamZzX2R0cmVlLmMtOTk0LVx0XHRlbHNlXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDMtXHRcdFx0XHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XG5mcy9qZnMvamZzX2R0cmVlLmM6MTA0NDpcdFx0XHRcdGRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSB4bGVuKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDQ1LVx0XHRcdH0gZWxzZSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDgtXHRcdFx0XHR4YWRkciA9IGFkZHJlc3NQWEQocHhkKSAmIzQzOyB4bGVuO1xuZnMvamZzL2pmc19kdHJlZS5jOjEwNDk6XHRcdFx0XHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSBuKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDUwLVx0XHRcdH1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMTI5Ni1cdGZvciAoOyBuIFx1MDAzYyBweGRsaXN0Lm1heG5weGQ7IG4mIzQzOyYjNDM7LCBweGQmIzQzOyYjNDM7KVxuZnMvamZzL2pmc19kdHJlZS5jOjEyOTc6XHRcdGRiRnJlZShpcCwgYWRkcmVzc1BYRChweGQpLCAoczY0KSBsZW5ndGhQWEQocHhkKSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMTI5OC1cbi0tXG5mcy9qZnMvamZzX2V4dGVudC5jPTcwPWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sIGFibnIpXG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0xMzQtXHRpZiAocmMpIHtcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTM1Olx0XHRkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pO1xuZnMvamZzL2pmc19leHRlbnQuYy0xMzYtXHRcdG11dGV4X3VubG9jayhcdTAwMjZKRlNfSVAoaXApLVx1MDAzZWNvbW1pdF9tdXRleCk7XG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0xNTUtXHRpZiAocmMpIHtcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTU2Olx0XHRkYkZyZWUoaXAsIG54YWRkciwgbnhsZW4pO1xuZnMvamZzL2pmc19leHRlbnQuYy0xNTctXHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIG54bGVuKTtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz0yNDQwPWRpTmV3SUFHKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgKmlhZ25vcCwgaW50IGFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMjUzMS1cdFx0XHQgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjI1MzI6XHRcdFx0ZGJGcmVlKGlwaW1hcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xuZnMvamZzL2pmc19pbWFwLmMtMjUzMy1cbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jPTI0NTE9dm9pZCB0eEZyZWVNYXAoc3RydWN0IGlub2RlICppcCxcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTYtXHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI1MTc6XHRcdFx0XHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUxOC1cdFx0XHRcdHhhZC1cdTAwM2VmbGFnID0gMDtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjUtXHRcdFx0eGxlbiA9IGxlbmd0aFBYRChcdTAwMjZweGRsb2NrLVx1MDAzZXB4ZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI1MjY6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjctXHRcdFx0amZzX2luZm8oXCYjMzQ7ZnJlZVdNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcJiMzNDssXG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNTM1LVx0XHRcdFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNTM2Olx0XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MzctXHRcdFx0XHRqZnNfaW5mbyhcJiMzNDtmcmVlV01hcDogeGFkZHI6MHglbHggeGxlbjolZFwmIzM0Oyxcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmM9NTI4PWludCB4dEluc2VydCh0aWRfdCB0aWQsXHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTYxMC1cdFx0XHRpZiAoKnhhZGRycCA9PSAwKSB7XG5mcy9qZnMvamZzX3h0cmVlLmM6NjExOlx0XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3h0cmVlLmMtNjEyLVx0XHRcdFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcdFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA1OC1cdFx0LyogdW5kbyBkYXRhIGV4dGVudCBhbGxvY2F0aW9uICovXG5mcy9qZnMvamZzX3h0cmVlLmM6MjA1OTpcdFx0ZGJGcmVlKGlwLCAqeGFkZHJwLCAoczY0KSAqIHhsZW5wKTtcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDYwLVxuLS1cbmZzL2pmcy9uYW1laS5jPTM3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2VhX3dtYXAoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9qZnMvbmFtZWkuYy00My1cdFx0aW52YWxpZGF0ZV9keGRfbWV0YXBhZ2VzKGlub2RlLCAqZWEpO1xuZnMvamZzL25hbWVpLmM6NDQ6XHRcdGRiRnJlZShpbm9kZSwgYWRkcmVzc0RYRChlYSksIGxlbmd0aERYRChlYSkpO1xuZnMvamZzL25hbWVpLmMtNDUtXHR9XG4tLVxuZnMvamZzL3hhdHRyLmM9MjAxPXN0YXRpYyBpbnQgZWFfd3JpdGUoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGpmc19lYV9saXN0ICplYWxpc3QsIGludCBzaXplLFxuLS1cbmZzL2pmcy94YXR0ci5jLTMwMS1cbmZzL2pmcy94YXR0ci5jOjMwMjpcdGRiRnJlZShpcCwgYmxrbm8sIG5ibG9ja3MpO1xuZnMvamZzL3hhdHRyLmMtMzAzLVx0cmV0dXJuIHJjO1xuLS1cbmZzL2pmcy94YXR0ci5jPTQyNj1zdGF0aWMgaW50IGVhX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYsIGludCBtaW5fc2l6ZSlcbi0tXG5mcy9qZnMveGF0dHIuYy01MzEtXHRcdGlmIChlYV9idWYtXHUwMDNlbXAgPT0gTlVMTCkge1xuZnMvamZzL3hhdHRyLmM6NTMyOlx0XHRcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xuZnMvamZzL3hhdHRyLmMtNTMzLVx0XHRcdHJjID0gLUVJTztcbi0tXG5mcy9qZnMveGF0dHIuYy01NDItXHRcdFx0ZGlzY2FyZF9tZXRhcGFnZShlYV9idWYtXHUwMDNlbXApO1xuZnMvamZzL3hhdHRyLmM6NTQzOlx0XHRcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xuZnMvamZzL3hhdHRyLmMtNTQ0LVx0XHRcdGdvdG8gY2xlYW5fdXA7XG4tLVxuZnMvamZzL3hhdHRyLmM9NTg3PXN0YXRpYyB2b2lkIGVhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmKVxuLS1cbmZzL2pmcy94YXR0ci5jLTU5NS1cdFx0aWYgKGVhX2J1Zi1cdTAwM2VmbGFnIFx1MDAyNiBFQV9ORVcpXG5mcy9qZnMveGF0dHIuYzo1OTY6XHRcdFx0ZGJGcmVlKGlub2RlLCBhZGRyZXNzRFhEKFx1MDAyNmVhX2J1Zi1cdTAwM2VuZXdfZWEpLFxuZnMvamZzL3hhdHRyLmMtNTk3LVx0XHRcdCAgICAgICBsZW5ndGhEWEQoXHUwMDI2ZWFfYnVmLVx1MDAzZW5ld19lYSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIEF1ZGl0IG9mIGRiRnJlZSBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgZGJGcmVlYCBwb3AgdXAgYWxsIG92ZXIgdGhlIHBsYWNlLCBhbmQgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBqZnNfaXNzdWVfZGlzY2FyZGAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gZGlzY2FyZCBvcGVyYXRpb25zIOKAkyBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGR0U3BsaXRVcGAsIHdoaWNoIHN1Z2dlc3RzIGRpcmVjdG9yeSB0cmVlIG1hbmlwdWxhdGlvbiwgYW5kIGBleHRBbGxvY2AsIGluZGljYXRpbmcgYmxvY2sgYWxsb2NhdGlvbiBmb3IgZXh0ZW50cy4gYGRpTmV3SUFHYCwgdGhhdCYjMzk7cyBpbm9kZSBhbGxvY2F0aW9uIGdyb3VwIHdvcmssIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgc29tZSBwYXR0ZXJuIGhlcmUuIGB0eEZyZWVNYXBgIHBvaW50cyB0byB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LCBjcml0aWNhbCBmb3IgZW5zdXJpbmcgY29uc2lzdGVuY3kgYWZ0ZXIgd3JpdGVzLiBUaGVuIGB4dEluc2VydGAgYW5kIGB4dEFwcGVuZGAsIHdoaWNoIGFyZSBib3RoIG9idmlvdXNseSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIGBmcmVlX2VhX3dtYXBgLCBgZWFfd3JpdGVgLCBgZWFfZ2V0YCwgYW5kIGBlYV9yZWxlYXNlYCwgdGhlc2UgYXJlIGFsbCB4YXR0ciByZWxhdGVkLgoKQWxyaWdodCwgc28gdGhlIGNvbW1vbiB0aHJlYWQgaXMgY2xlYXI6IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBGaWxlIGNyZWF0aW9uLCB3cml0ZXMsIGRlbGV0aW9uLCBhbmQgb2J2aW91c2x5IHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGxvdy1sZXZlbCBzdHVmZiB3aGVyZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgY2FuIGVhc2lseSBoaWRlLgoKSSYjMzk7dmUgZ290IHRvIGZvbGxvdyB0aGlzIHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbXBhbmlvbiBgZGJBbGxvY2AgaXMgZG9pbmcuLi4gYW5kIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtaXNtYXRjaGVzLCBkb3VibGUtZnJlZXMsIG9yIGxlYWtzLiBUaGlzIHdhcnJhbnRzIGEgbW9yZSBkZXRhaWxlZCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYkFsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX2RtYXAuYz03MjA9aW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTc3OS0vKlxuZnMvamZzL2pmc19kbWFwLmM6NzgwOiAqIE5BTUU6XHRkYkFsbG9jKClcbmZzL2pmcy9qZnNfZG1hcC5jLTc4MS0gKlxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXG5mcy9qZnMvamZzX2RtYXAuYy04MTgte1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTQ9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjA3Ni0gKlxuZnMvamZzL2pmc19kbWFwLmM6MjA3NzogKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxuZnMvamZzL2pmc19kbWFwLmMtMjA3OC0gKlx0SVdSSVRFX0xPQ0soaXBibWFwKSwgZS5nLiwgZGJBbGxvY0N0bCgpLCBoZWxkIG9uIGVudHJ5L2V4aXQ7XG4tLVxuZnMvamZzL2pmc19kbWFwLmg9Mjg5PWV4dGVybiBpbnQgZGJOZXh0QUcoc3RydWN0IGlub2RlICppcGJtYXApO1xuZnMvamZzL2pmc19kbWFwLmgtMjkwLVxuZnMvamZzL2pmc19kbWFwLmg6MjkxOmV4dGVybiBpbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5oLTI5Mi1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzcxLVx0XHRcdGdvdG8gY2xlYW5fdXA7XG5mcy9qZnMvamZzX2R0cmVlLmM6MzcyOlx0XHRpZiAoZGJBbGxvYyhpcCwgMCwgc2JpLVx1MDAzZW5icGVycGFnZSwgXHUwMDI2eGFkZHIpKSB7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzczLVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHNiaS1cdTAwM2VuYnBlcnBhZ2UpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy05NzgtXHRcdFx0eGxlbiYjNDM7JiM0Mzs7XG5mcy9qZnMvamZzX2R0cmVlLmM6OTc5Olx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKSkge1xuZnMvamZzL2pmc19kdHJlZS5jLTk4MC1cdFx0XHREVF9QVVRQQUdFKHNtcCk7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNzQtXHRmb3IgKHB4ZCA9IHB4ZGxpc3QucHhkOyBuIFx1MDAzZSAwOyBuLS0sIHB4ZCYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDc1Olx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKSA9PSAwKSB7XG5mcy9qZnMvamZzX2R0cmVlLmMtMTA3Ni1cdFx0XHRQWERhZGRyZXNzKHB4ZCwgeGFkZHIpO1xuLS1cbmZzL2pmcy9qZnNfZXh0ZW50LmM9MzA5PWV4dEJhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0ICogbmJsb2NrcywgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0zMzUtXHQvKiB0cnkgdG8gYWxsb2NhdGUgYmxvY2tzICovXG5mcy9qZnMvamZzX2V4dGVudC5jOjMzNjpcdHdoaWxlICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCBuYiwgXHUwMDI2ZGFkZHIpKSAhPSAwKSB7XG5mcy9qZnMvamZzX2V4dGVudC5jLTMzNy1cdFx0LyogaWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gb3V0IG9mIHNwYWNlIGVycm9yLFxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yMjYwLVxuZnMvamZzL2pmc19pbWFwLmM6MjI2MTpcdGlmICgocmMgPSBkYkFsbG9jKGlwaW1hcCwgaGludCwgKHM2NCkgaW1hcC1cdTAwM2VpbV9uYnBlcmlleHQsIFx1MDAyNmJsa25vKSkpXG5mcy9qZnMvamZzX2ltYXAuYy0yMjYyLVx0XHRnb3RvIGVycm9yX291dDtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz0yNDQwPWRpTmV3SUFHKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgKmlhZ25vcCwgaW50IGFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMjUwOS1cdFx0eGxlbiA9IHNiaS1cdTAwM2VuYnBlcnBhZ2U7XG5mcy9qZnMvamZzX2ltYXAuYzoyNTEwOlx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcGltYXAsIDAsIChzNjQpIHhsZW4sIFx1MDAyNnhhZGRyKSkpIHtcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MTEtXHRcdFx0LyogcmVsZWFzZSB0aGUgaW5vZGUgbWFwIGxvY2sgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmM9NTI4PWludCB4dEluc2VydCh0aWRfdCB0aWQsXHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTU4MS1cdFx0XHRnb3RvIG91dDtcbmZzL2pmcy9qZnNfeHRyZWUuYzo1ODI6XHRcdGlmICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCAoczY0KSB4bGVuLCBcdTAwMjZ4YWRkcikpKSB7XG5mcy9qZnMvamZzX3h0cmVlLmMtNTgzLVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHhsZW4pO1xuLS1cbmZzL2pmcy9qZnNfeHRyZWUuYz02Nzk9eHRTcGxpdFVwKHRpZF90IHRpZCxcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtNzU5LVx0XHRmb3IgKDsgbnNwbGl0IFx1MDAzZSAwOyBuc3BsaXQtLSwgcHhkJiM0MzsmIzQzOykge1xuZnMvamZzL2pmc194dHJlZS5jOjc2MDpcdFx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgKHM2NCkgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKVxuZnMvamZzL2pmc194dHJlZS5jLTc2MS1cdFx0XHQgICAgPT0gMCkge1xuLS1cbmZzL2pmcy94YXR0ci5jLTUzLSAqXG5mcy9qZnMveGF0dHIuYzo1NDogKlx0RkVBTElTVHMgYXJlIHN0b3JlZCBvbiBkaXNrIHVzaW5nIGJsb2NrcyBhbGxvY2F0ZWQgYnkgZGJBbGxvYygpIGFuZFxuZnMvamZzL3hhdHRyLmMtNTUtICpcdHdyaXR0ZW4gZGlyZWN0bHkuIEFuIEVBIGxpc3QgbWF5IGJlIGluLWxpbmVkIGluIHRoZSBpbm9kZSBpZiB0aGVyZSBpc1xuLS1cbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcbi0tXG5mcy9qZnMveGF0dHIuYy0yMzEtXG5mcy9qZnMveGF0dHIuYzoyMzI6XHRyYyA9IGRiQWxsb2MoaXAsIElOT0hJTlQoaXApLCBuYmxvY2tzLCBcdTAwMjZibGtubyk7XG5mcy9qZnMveGF0dHIuYy0yMzMtXHRpZiAocmMpIHtcbi0tXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXG4tLVxuZnMvamZzL3hhdHRyLmMtNTE1LVxuZnMvamZzL3hhdHRyLmM6NTE2Olx0XHRyYyA9IGRiQWxsb2MoaW5vZGUsIElOT0hJTlQoaW5vZGUpLCAoczY0KSBibG9ja3NfbmVlZGVkLFxuZnMvamZzL3hhdHRyLmMtNTE3LVx0XHRcdCAgICAgXHUwMDI2Ymxrbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkFuYWx5emluZyBgZGJBbGxvY2AgVXNhZ2UqKgoKT2theSwgc28gYGRiQWxsb2NgIGlzIHNob3dpbmcgdXAgcXVpdGUgYSBiaXQuIExvb2tpbmcgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMsIGl0JiMzOTtzIHVzZWQgaW4gYGR0U3BsaXRVcGAsIGBleHRCYWxsb2NgLCBgZGlOZXdFeHRgLCBgZGlOZXdJQUdgLCBgeHRJbnNlcnRgLCBgeHRTcGxpdFVwYCwgYGVhX3dyaXRlYCwgYW5kIGBlYV9nZXRgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0LiBHaXZlbiB0aG9zZSBmdW5jdGlvbnMsIHdoaWNoIGRlYWwgd2l0aCBkYXRhIHN0cnVjdHVyZXMsIGV4dGVudCBoYW5kbGluZywgYW5kIGRpcmVjdCBhY2Nlc3MsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IGBkYkFsbG9jYCBpcyAqaGVhdmlseSogdXNlZCBhbmQgYWxtb3N0IGNlcnRhaW5seSByZWFjaGFibGUgZnJvbSB0aGUgc3lzdGVtIGVudHJ5IHBvaW50cy4gSSBzaG91bGQga2VlcCBpdCBpbiBtaW5kIGFzIGFuIGFyZWEgd2hlcmUgcGVyZm9ybWFuY2UgZ2FpbnMgbWlnaHQgYmUgYWNoaWV2YWJsZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBkYlVwZGF0ZVBNYXBgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RiVXBkYXRlUE1hcFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9NDM0PWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy01MTItLypcbmZzL2pmcy9qZnNfZG1hcC5jOjUxMzogKiBOQU1FOlx0ZGJVcGRhdGVQTWFwKClcbmZzL2pmcy9qZnNfZG1hcC5jLTUxNC0gKlxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTUzMz1pbnRcbmZzL2pmcy9qZnNfZG1hcC5jOjUzNDpkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXG5mcy9qZnMvamZzX2RtYXAuYy01MzUtXHQgICAgIGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsaylcbi0tXG5mcy9qZnMvamZzX2RtYXAuaD0yODQ9ZXh0ZXJuIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmgtMjg1LVxuZnMvamZzL2pmc19kbWFwLmg6Mjg2OmV4dGVybiBpbnQgZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuZnMvamZzL2pmc19kbWFwLmgtMjg3LVx0XHRcdGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYz0yMzkzPXN0YXRpYyB2b2lkIHR4QWxsb2NQTWFwKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBtYXBsb2NrICogbWFwbG9jayxcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MTUtXHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0MTY6XHRcdFx0XHRkYlVwZGF0ZVBNYXAoaXBibWFwLCBmYWxzZSwgeGFkZHIsXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MTctXHRcdFx0XHRcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI2LVx0XHR4bGVuID0gbGVuZ3RoUFhEKFx1MDAyNnB4ZGxvY2stXHUwMDNlcHhkKTtcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjQyNzpcdFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgZmFsc2UsIHhhZGRyLCAoczY0KSB4bGVuLCB0YmxrKTtcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQyOC1cdFx0amZzX2luZm8oXCYjMzQ7YWxsb2NQTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkXCYjMzQ7LCAodWxvbmcpIHhhZGRyLCB4bGVuKTtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MzUtXHRcdFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNDM2Olx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbixcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQzNy1cdFx0XHRcdCAgICAgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYz0yNDUxPXZvaWQgdHhGcmVlTWFwKHN0cnVjdCBpbm9kZSAqaXAsXG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc3LVx0XHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0Nzg6XHRcdFx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIHRydWUsIHhhZGRyLFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc5LVx0XHRcdFx0XHRcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg3LVx0XHRcdHhsZW4gPSBsZW5ndGhQWEQoXHUwMDI2cHhkbG9jay1cdTAwM2VweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNDg4Olx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIHRydWUsIHhhZGRyLCAoczY0KSB4bGVuLFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg5LVx0XHRcdFx0ICAgICB0YmxrKTtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0OTgtXHRcdFx0XHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0OTk6XHRcdFx0XHRkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkcixcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUwMC1cdFx0XHRcdFx0ICAgICAoczY0KSB4bGVuLCB0YmxrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlRyYW5zYWN0aW9uIE1hbmFnZXIgQW5hbHlzaXMqKgoKQWxyaWdodCwgc28gYGRiVXBkYXRlUE1hcGAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIuIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIHV0aWxpemVkIGluIGB0eEFsbG9jUE1hcGAgYW5kIGB0eEZyZWVNYXBgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBtYXAgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LiBTbywgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcmVjb3ZlcmFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhcnRzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGRiQWxsb2NDdGxgIHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgdGllZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGJBbGxvY0N0bFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9ODM9c3RhdGljIGludCBkYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsXG5mcy9qZnMvamZzX2RtYXAuYy04NC1cdFx0ICAgICBzNjQgKiByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg1OnN0YXRpYyBpbnQgZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sXG5mcy9qZnMvamZzX2RtYXAuYy04Ni1cdFx0ICAgICAgczY0ICogcmVzdWx0cyk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTQyNj1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1My1cdCAqIGdyb3VwIGlzIGFscmVhZHkgZnVsbHkgZGVzY3JpYmVkIGJ5IGEgZG1hcC4gIGluIHRoaXMgY2FzZSwgd2VcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTQ6XHQgKiBqdXN0IGNhbGwgZGJBbGxvY0N0bCgpIHRvIHNlYXJjaCB0aGUgZG1hcCB0cmVlIGFuZCBhbGxvY2F0ZSB0aGVcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTUtXHQgKiByZXF1aXJlZCBzcGFjZSBpZiBhdmFpbGFibGUuXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU2LVx0ICpcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTc6XHQgKiBpZiB0aGUgYWxsb2NhdGlvbiBncm91cCBpcyBjb21wbGV0ZWx5IGZyZWUsIGRiQWxsb2NDdGwoKSBpc1xuZnMvamZzL2pmc19kbWFwLmMtMTQ1OC1cdCAqIGFsc28gY2FsbGVkIHRvIGFsbG9jYXRlIHRoZSByZXF1aXJlZCBzcGFjZS4gIHRoaXMgaXMgZG9uZSBmb3Jcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNDY2LVx0ICAgIHx8IGJtcC1cdTAwM2VkYl9hZ2ZyZWVbYWdub10gPT0gYm1wLVx1MDAzZWRiX2Fnc2l6ZSkge1xuZnMvamZzL2pmc19kbWFwLmM6MTQ2NzpcdFx0cmMgPSBkYkFsbG9jQ3RsKGJtcCwgbmJsb2NrcywgbDJuYiwgYmxrbm8sIHJlc3VsdHMpO1xuZnMvamZzL2pmc19kbWFwLmMtMTQ2OC1cdFx0aWYgKChyYyA9PSAtRU5PU1BDKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNTg1LVx0XHQgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjE1ODY6XHRcdHJjID0gZGJBbGxvY0N0bChibXAsIG5ibG9ja3MsIGwybmIsIGJsa25vLCByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE1ODctXHRcdGlmIChyYyA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTYzMD1zdGF0aWMgaW50IGRiQWxsb2NBbnkoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNjQ1LVx0ICovXG5mcy9qZnMvamZzX2RtYXAuYzoxNjQ2Olx0cmMgPSBkYkFsbG9jQ3RsKGJtcCwgbmJsb2NrcywgbDJuYiwgYmxrbm8sIHJlc3VsdHMpO1xuZnMvamZzL2pmc19kbWFwLmMtMTY0Ny1cdGlmIChyYyA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc5NT1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTg2OC0vKlxuZnMvamZzL2pmc19kbWFwLmM6MTg2OTogKiBOQU1FOlx0ZGJBbGxvY0N0bCgpXG5mcy9qZnMvamZzX2RtYXAuYy0xODcwLSAqXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTkxMz1zdGF0aWMgaW50XG5mcy9qZnMvamZzX2RtYXAuYzoxOTE0OmRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuZnMvamZzL2pmc19kbWFwLmMtMTkxNS17XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjA3Ny0gKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxuZnMvamZzL2pmc19kbWFwLmM6MjA3ODogKlx0SVdSSVRFX0xPQ0soaXBibWFwKSwgZS5nLiwgZGJBbGxvY0N0bCgpLCBoZWxkIG9uIGVudHJ5L2V4aXQ7XG5mcy9qZnMvamZzX2RtYXAuYy0yMDc5LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkYkFsbG9jQ3RsYCBhbmQgYGRiQWxsb2NCb3R0b21VcGAqKgoKQWxyaWdodCwgc28gYGRiQWxsb2NDdGxgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGltbWVkaWF0ZWx5IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgY29uZmluZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24gY29udHJvbCB3aXRoaW4gKnRoaXMqIG1vZHVsZS4gTm93LCBgZGJBbGxvY0JvdHRvbVVwYCwgdGhhdCBvbmUmIzM5O3MgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYkFsbG9jQm90dG9tVXBcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfZG1hcC5jPTMyODA9c3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMxMC0vKlxuZnMvamZzL2pmc19kbWFwLmM6MzMxMTogKiBOQU1FOlx0ZGJBbGxvY0JvdHRvbVVwKClcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMTItICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI3LSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzMyODppbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI5LXtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0zMzg5PXN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTYtICogRlVOQ1RJT046XHRleHRlbmQgYm1hcCBmcm9tIGJsa25vIGZvciBuYmxvY2tzO1xuZnMvamZzL2pmc19kbWFwLmM6MzQ5NzogKlx0XHRkYkV4dGVuZEZTKCkgdXBkYXRlcyBibWFwIHJlYWR5IGZvciBkYkFsbG9jQm90dG9tVXAoKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTgtICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuaD0yOTY9ZXh0ZXJuIGludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApO1xuZnMvamZzL2pmc19kbWFwLmg6Mjk3OmV4dGVybiBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmgtMjk4LWV4dGVybiBpbnQgZGJFeHRlbmRGUyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcyk7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcdFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjAyOC1cdGZvciAoOyBuc3BsaXQgXHUwMDNlIDA7IG5zcGxpdC0tLCBweGQmIzQzOyYjNDM7LCB4YWRkciAmIzQzOz0gbmJsb2NrcywgbWF4YmxvY2tzIC09IG5ibG9ja3MpIHtcbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDI5Olx0XHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgbmJsb2NrcykpID09IDApIHtcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDMwLVx0XHRcdFBYRGFkZHJlc3MocHhkLCB4YWRkcik7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTIwNDctXHQgKi9cbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDQ4Olx0aWYgKChyYyA9IGRiQWxsb2NCb3R0b21VcChpcCwgeGFkZHIsIChzNjQpIHhsZW4pKSlcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDQ5LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA3NC1cdCAqL1xuZnMvamZzL2pmc194dHJlZS5jOjIwNzU6XHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgeGxlbikpKVxuZnMvamZzL2pmc194dHJlZS5jLTIwNzYtXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgYW4gZXhwZXJ0IHdvdWxkOgoKKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBkYkFsbG9jQm90dG9tVXBgIGlzIHV0aWxpemVkIHdpdGhpbiBgeHRBcHBlbmRgLiBUaGF0IGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3JrcyBhdCB0aGlzIGxvdyBsZXZlbC4gTXkgcHJpbWFyeSBhcmVhcyBvZiBmb2N1cyBhcmU6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IGZ1bmN0aW9uLCBgZGJBbGxvY0JvdHRvbVVwYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlcnBsYXkuIE15IHByaW9yaXR5IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGFuZCB3aGVyZSBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZS4KCk5leHQgc3RlcDogTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZGVmaW5lZCBmb3IgSkZTLiBJdCYjMzk7cyBjb21tb24gdG8gaGF2ZSBvcHRpbWl6ZWQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGJhc2VkIG9uIGZpbGVzeXN0ZW0gY2hhcmFjdGVyaXN0aWNzLiBUaGUgcHJlc2VuY2Ugb2YgSkZTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGNvdWxkIGdyZWF0bHkgaW5mbHVlbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBKRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcbmZzL2pmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBKRlNfRlMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSkZTX0ZTLCByaWdodD8gQmVmb3JlIEkgZGl2ZSBpbiBhbmQgc3RhcnQgdGlua2VyaW5nLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvLCB0aGUgKmFic29sdXRlKiBmaXJzdCB0aGluZywgaXMgbWFwIG91dCB0aG9zZSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hhdCBKRlNfRlMgcmVsaWVzIG9uIGlzIGNydWNpYWwuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gaW1tZWRpYXRlbHkgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIGJsb2NrIGRldmljZSBkcml2ZXJzLCB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgZmlsZSBzeXN0ZW0gKFZGUykgbGF5ZXIsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcHJvYmFibHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgZm9yIGNvbmN1cnJlbmN5LgoKV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBidXQga25vd2luZyB0aGUgZXhhY3QgaW50ZXJhY3Rpb25zIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBoZWFkZXJzLCBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBkZWZpbmVzIGl0cyBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBhbGwgY2FsbHMgdXAgYW5kIGRvd24gdGhlIHN0YWNrIHRvIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgbGF0ZXIgb24uIElmIGl0IHRvdWNoZXMgc29tZSBzcGVjaWZpYyBoYXJkd2FyZSwgSSB3YW50IHRvIGtub3cgYWJvdXQgaXQuIFRoaXMgd2lsbCBwcmV2ZW50IGFueSBtYWpvciBwaXRmYWxscyBkb3duIHRoZSByb2FkLgoKVGhpcyBpbml0aWFsIGFuYWx5c2lzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBteSB3b3JrIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgaW1wYWN0LiBJIGRvbiYjMzk7dCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyBkb3duc3RyZWFtIHdpdGhvdXQga25vd2luZy4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJJiMzOTtsbCBidWlsZCB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEpGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SkZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgTkxTXG4gICA2Olx0XHRzZWxlY3QgTkxTX1VDUzJfVVRJTFNcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBpcyBhIHBvcnQgb2YgSUJNJiMzOTtzIEpvdXJuYWxlZCBGaWxlc3lzdGVtIC4gIE1vcmUgaW5mb3JtYXRpb24gaXNcbiAgMTE6XHRcdCAgYXZhaWxhYmxlIGluIHRoZSBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9qZnMucnN0XHUwMDNlLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgdGhlIEpGUyBmaWxlc3lzdGVtLCBzYXkgTi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgSkZTX1BPU0lYX0FDTFxuICAxNjpcdFx0Ym9vbCBcJiMzNDtKRlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gSkZTX0ZTXG4gIDE4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDAKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEpGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBKRlMgcGF0Y2ggYW5kIHRoZSBrZXkgY29uZmlnIGlzIGBKRlNfRlNgLCBnb3QgaXQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdmFsaWRhdGluZyB0aGUgZG1hcCBzdHJ1Y3R1cmVzLCBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBwYWdlIGFjY2Vzc2VzLiBTZWVtcyBwcmV0dHkgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3RhYmlsaXR5LiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nIHRvIHJlYWxseSBoYW1tZXIgb24gaXQgYW5kIHJvb3Qgb3V0IGFueSBsdXJraW5nIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cy4gRGVmaW5pdGVseSB0aG9zZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgbGlrZWx5IHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLgoKSnVzdCB0byBiZSBzdXJlLCBJ4oCZbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9kaWZpZWQuIEFoYSwgaXQgbG9va3MgbGlrZSBgZGJFeHRlbmRgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGJ5IGBleHRCYWxsb2NgLCBhbmQgYGRiQWxsb2NDdGxgIGlzIGFsc28gc3RhdGljLCBjYWxsZWQgYnkgYGRiQWxsb2NBR2AsIGBkYkFsbG9jQW55YCwgYW5kIGBkYkFsbG9jYC4gR29vZCB0byBrbm93LCBidXQgbXkgZm9jdXMgcmVtYWlucyBvbiB0aGUgaW5pdGlhbCBmb3VyIGZ1bmN0aW9ucyBhcyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGRlZXBlciBhbmFseXNpcyBhbmQgdGVzdGluZy4KClJpZ2h0LCBzbyBJIGhhdmUgYSBjbGVhciBzZXQgb2YgZm9jYWwgcG9pbnRzIG5vdy4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgYW5kIGdldCB0aGVzZSBzeW1ib2xzIHVuZGVyIHRoZSBtaWNyb3Njb3BlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGJGcmVlJiMzNDssCiAgICAmIzM0O2RiVXBkYXRlUE1hcCYjMzQ7LAogICAgJiMzNDtkYkFsbG9jJiMzNDssCiAgICAmIzM0O2RiQWxsb2NCb3R0b21VcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtKRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYkZyZWUmIzM0OywKICAgICYjMzQ7ZGJVcGRhdGVQTWFwJiMzNDssCiAgICAmIzM0O2RiQWxsb2MmIzM0OywKICAgICYjMzQ7ZGJBbGxvY0JvdHRvbVVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowNzozNi4wMTU5MTc5MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxODc2NzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYkZyZWVcIixcbiAgICBcImRiVXBkYXRlUE1hcFwiLFxuICAgIFwiZGJBbGxvY1wiLFxuICAgIFwiZGJBbGxvY0JvdHRvbVVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIEpGUyBkbWFwIHN0cnVjdHVyZXMgKGBkYlZhbGlkYXRlRG1hcGApIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IGRtYXAgcGFnZSBhY2Nlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEpGUyBibG9jayBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6MzYuMDE1OTMzMTM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc3MTQzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YWUzOGRjMzUwNTVlMDBlOTUwMTYzYmVlODg3MDUwYWVkMzk1YmE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjA3OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmNcXG5pbmRleCBhODQxY2YyMWRhN2RlNi4uZjE1OTU0YzFmMTk2ZGIgMTAwNjQ0XFxuLS0tIGEvZnMvamZzL2pmc19kbWFwLmNcXG4rKysgYi9mcy9qZnMvamZzX2RtYXAuY1xcbkBAIC05OCw2ICs5OCw5IEBAIHN0YXRpYyBpbnQgYmxrc3RvbDIoczY0IG5iKTtcXG4gc3RhdGljIGludCBjbnRseih1MzIgdmFsdWUpO1xcbiBzdGF0aWMgaW50IGNudHR6KHUzMiB3b3JkKTtcXG4gXFxuK3N0YXRpYyBib29sIGRiVmFsaWRhdGVEbWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBkbWFwICpkcCxcXG4rXFx0XFx0XFx0ICAgczY0IGV4cGVjdGVkX3N0YXJ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxcbiBcXHRcXHRcXHQgaW50IG5ibG9ja3MpO1xcbiBzdGF0aWMgaW50IGRiSW5pdERtYXAoc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLCBpbnQgbmJsb2Nrcyk7XFxuQEAgLTQ3Niw2ICs0NzksMTIgQEAgaW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cXHUwMDNlaV9zYiwgZHAsIGJsa25vIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBmcmVlZCBmcm9tXFxuIFxcdFxcdCAqIHRoaXMgZG1hcC5cXG4gXFx0XFx0ICovXFxuQEAgLTU2OCw2ICs1NzcsMTMgQEAgZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxcbiBcXHRcXHRcXHRpZiAobXAgPT0gTlVMTClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdFxcdG1ldGFwYWdlX3dhaXRfZm9yX2lvKG1wKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoaXBibWFwLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgYmxrbm8gXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXFx1MDAzZWRhdGE7XFxuIFxcbkBAIC04ODYsNiArOTAyLDExIEBAIGludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcXG4gXFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cXHUwMDNlaV9zYiwgZHAsIGJsa25vIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRnb3RvIHJlYWRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBmaXJzdCwgdHJ5IHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aXRoIHRoZVxcbiBcXHRcXHQgKiBibG9ja3MgYmVnaW5uaW5nIGF0IHRoZSBoaW50LlxcbiBcXHRcXHQgKi9cXG5AQCAtMTExOCw2ICsxMTM5LDEyIEBAIHN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpXFxuIFxcbiBcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXFx1MDAzZWlfc2IsIGRwLCBleHRibGtubyBcXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xcbitcXHRcXHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcXG4rXFx0XFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbiBcXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXFxuIFxcdCAqIGN1cnJlbnQgYWxsb2NhdGlvbi5cXG4gXFx0ICovXFxuQEAgLTE5MDIsNyArMTkyOSw3IEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRcXHRpZiAoZHAtXFx1MDAzZXRyZWUuYnVkbWluIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC1cXHUwMDNlZGJfaXBibWFwLVxcdTAwM2VpX3NiLCBkcCwgYmxrbm8gXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4gXFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR9XFxuQEAgLTE5MzYsNiArMTk2MywxMiBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVxcdTAwM2VkYl9pcGJtYXAtXFx1MDAzZWlfc2IsIGRwLCBiIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRyYyA9IC1FSU87XFxuK1xcdFxcdFxcdGdvdG8gYmFja291dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogdGhlIGRtYXAgYmV0dGVyIGJlIGFsbCBmcmVlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRwLVxcdTAwM2V0cmVlLnN0cmVlW1JPT1RdICE9IEwyQlBFUkRNQVApIHtcXG5AQCAtMTk5Myw2ICsyMDI2LDExIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXFx1MDAzZWRiX2lwYm1hcC1cXHUwMDNlaV9zYiwgZHAsIGIgXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBmcmVlIHRoZSBibG9ja3MgaXMgdGhpcyBkbWFwLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRiRnJlZURtYXAoYm1wLCBkcCwgYiwgQlBFUkRNQVApKSB7XFxuQEAgLTIxMzQsNiArMjE3MiwxOCBAQCBzdGF0aWMgaW50IGRiQWxsb2NEbWFwKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXFxuIFxcdHJldHVybiAocmMpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXFxuK1xcdFxcdFxcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcXG4re1xcbitcXHRpZiAobGU2NF90b19jcHUoZHAtXFx1MDAzZXN0YXJ0KSAhPSBleHBlY3RlZF9zdGFydCkge1xcbitcXHRcXHRqZnNfZXJyb3Ioc2IsIFxcXCJjb3JydXB0IGRtYXAgcGFnZTogc3RhcnQgJWxsZCBleHBlY3RlZCAlbGxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgIChsb25nIGxvbmcpbGU2NF90b19jcHUoZHAtXFx1MDAzZXN0YXJ0KSxcXG4rXFx0XFx0XFx0ICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbiBcXG4gLypcXG4gICogTkFNRTpcXHRkYkZyZWVEbWFwKClcXG5AQCAtMzMwOCw2ICszMzU4LDEyIEBAIGludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXFx1MDAzZWlfc2IsIGRwLCBibGtubyBcXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xcbitcXHRcXHRcXHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcXG4rXFx0XFx0XFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gYmUgYWxsb2NhdGVkIGZyb21cXG4gXFx0XFx0ICogdGhpcyBkbWFwLlxcbiBcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6MzYuNzk0NzE0NjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgxMzk5NTc1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGJGcmVlXCIsXG4gICAgXCJkYlVwZGF0ZVBNYXBcIixcbiAgICBcImRiQWxsb2NcIixcbiAgICBcImRiQWxsb2NCb3R0b21VcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhZTM4ZGMzNTA1NWUwMGU5NTAxNjNiZWU4ODcwNTBhZWQzOTViYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDowNzozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmNcbmluZGV4IGE4NDFjZjIxZGE3ZGU2Li5mMTU5NTRjMWYxOTZkYiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jXG4rKysgYi9mcy9qZnMvamZzX2RtYXAuY1xuQEAgLTk4LDYgKzk4LDkgQEAgc3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpO1xuIHN0YXRpYyBpbnQgY250bHoodTMyIHZhbHVlKTtcbiBzdGF0aWMgaW50IGNudHR6KHUzMiB3b3JkKTtcbiBcbitzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4rXHRcdFx0ICAgczY0IGV4cGVjdGVkX3N0YXJ0KTtcbitcbiBzdGF0aWMgaW50IGRiQWxsb2NEbWFwQlUoc3RydWN0IGJtYXAgKiBibXAsIHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubyxcbiBcdFx0XHQgaW50IG5ibG9ja3MpO1xuIHN0YXRpYyBpbnQgZGJJbml0RG1hcChzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sIGludCBuYmxvY2tzKTtcbkBAIC00NzYsNiArNDc5LDEyIEBAIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdH1cbitcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb21cbiBcdFx0ICogdGhpcyBkbWFwLlxuIFx0XHQgKi9cbkBAIC01NjgsNiArNTc3LDEzIEBAIGRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCxcbiBcdFx0XHRpZiAobXAgPT0gTlVMTClcbiBcdFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHRcdG1ldGFwYWdlX3dhaXRfZm9yX2lvKG1wKTtcbitcbitcdFx0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwYm1hcC1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHQgICAgKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGEsXG4rXHRcdFx0XHRcdCAgICBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbitcdFx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuQEAgLTg4Niw2ICs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxuIFxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0Z290byByZWFkX3VubG9jaztcbitcdFx0fVxuK1xuIFx0XHQvKiBmaXJzdCwgdHJ5IHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aXRoIHRoZVxuIFx0XHQgKiBibG9ja3MgYmVnaW5uaW5nIGF0IHRoZSBoaW50LlxuIFx0XHQgKi9cbkBAIC0xMTE4LDYgKzExMzksMTIgQEAgc3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcbiBcbiBcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBleHRibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xuK1x0XHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXG4gXHQgKiBjdXJyZW50IGFsbG9jYXRpb24uXG4gXHQgKi9cbkBAIC0xOTAyLDcgKzE5MjksNyBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXHUwMDNlZGF0YTtcbiBcbi1cdFx0aWYgKGRwLVx1MDAzZXRyZWUuYnVkbWluIFx1MDAzYyAwKSB7XG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuIFx0XHRcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG5AQCAtMTkzNiw2ICsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYiBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0cmMgPSAtRUlPO1xuK1x0XHRcdGdvdG8gYmFja291dDtcbitcdFx0fVxuK1xuIFx0XHQvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoZHAtXHUwMDNldHJlZS5zdHJlZVtST09UXSAhPSBMMkJQRVJETUFQKSB7XG5AQCAtMTk5Myw2ICsyMDI2LDExIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYiBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LyogZnJlZSB0aGUgYmxvY2tzIGlzIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChkYkZyZWVEbWFwKGJtcCwgZHAsIGIsIEJQRVJETUFQKSkge1xuQEAgLTIxMzQsNiArMjE3MiwxOCBAQCBzdGF0aWMgaW50IGRiQWxsb2NEbWFwKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXG4gXHRyZXR1cm4gKHJjKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLFxuK1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcbit7XG4rXHRpZiAobGU2NF90b19jcHUoZHAtXHUwMDNlc3RhcnQpICE9IGV4cGVjdGVkX3N0YXJ0KSB7XG4rXHRcdGpmc19lcnJvcihzYiwgXCJjb3JydXB0IGRtYXAgcGFnZTogc3RhcnQgJWxsZCBleHBlY3RlZCAlbGxkXFxuXCIsXG4rXHRcdFx0ICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLVx1MDAzZXN0YXJ0KSxcbitcdFx0XHQgIChsb25nIGxvbmcpZXhwZWN0ZWRfc3RhcnQpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gXG4gLypcbiAgKiBOQU1FOlx0ZGJGcmVlRG1hcCgpXG5AQCAtMzMwOCw2ICszMzU4LDEyIEBAIGludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdH1cbitcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGFsbG9jYXRlZCBmcm9tXG4gXHRcdCAqIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowNzozNi43OTQ3MTcyMDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY3ODE3OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgYGRiVmFsaWRhdGVEbWFwYCBmdW5jdGlvbiBpbnRvIGBmcy9qZnMvamZzX2RtYXAuY2AuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBKRlMgZmlsZXN5c3RlbSwgYWRkaW5nIHNvbWUgdmFsaWRhdGlvbiBmb3IgdGhlIGBkbWFwYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBjaGVja2luZyB0aGUgYGRwLVx1MDAzZXN0YXJ0YCB2YWx1ZSBhZ2FpbnN0IGFuIGBleHBlY3RlZF9zdGFydGAuIElmIHRoYXQgdmFsaWRhdGlvbiBmYWlscywgd2UncmUgZ2V0dGluZyBhbiBgLUVJT2AgZXJyb3IgYmFjay4gU2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5nIG5vdyBpcyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCB3YXkgdG8gZnV6eiB0aGlzLiBCYXNlZCBvbiB0aGUgY29kZSwgYGRiVmFsaWRhdGVEbWFwYCBpcyBnZXR0aW5nIGNhbGxlZCB3aXRoaW4gYSBidW5jaCBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zOiBgZGJGcmVlYCwgYGRiVXBkYXRlUE1hcGAsIGBkYkFsbG9jYCwgYGRiRXh0ZW5kYCwgYGRiQWxsb2NDdGxgIChhbmQgdGhpcyBvbmUncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMpLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIFRoYXQncyB3aGVyZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGVmZm9ydHMuXG5cbkZpcnN0LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvc2VkLiBJdCBsb29rcyBsaWtlIGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJBbGxvY0N0bGAgYW5kIGBkYkFsbG9jQm90dG9tVXBgIGFyZSBhbGwgbm90IHN0YXRpYywgd2hpbGUgYGRiRXh0ZW5kYCBpcyBzdGF0aWMuIFRoYXQgZ2l2ZXMgdXMgYSBzdGFydGluZyBwb2ludC4gV2UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gdG8gc2VhcmNoIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cbk9mIGNvdXJzZSwgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgSkZTIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwsIHNwZWNpZmljYWxseSBgQ09ORklHX0pGU19GU2AuIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgSkZTIGZpbGVzeXN0ZW0gaXMgZW5hYmxlZCBiZWZvcmUgd2Ugc3RhcnQgZnV6emluZy5cblxuSSdsbCBydW4gYGdyZXBwZXJgIG92ZXIgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGBkYkV4dGVuZGAsIGBkYkFsbG9jQ3RsYCwgYW5kIGBkYkFsbG9jQm90dG9tVXBgIHRvIG1hcCBvdXQgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSBpZiBhbnkgb2YgdGhlbSBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBsb29raW5nIGZvciBob3QgcGF0aHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBleHBvc2UgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NDMuMTYyNTM5MjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjIwMDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfHN0YXRpYykuKiBkYkZyZWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTM2Nj1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNDMzLSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjQzNDppbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXFxuZnMvamZzL2pmc19kbWFwLmMtNDM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NDMuOTE4NzQ3NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjkwNjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSkZTIEJsb2NrIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBKRlMgZnVuY3Rpb25zOiBgZGJGcmVlYCwgYGRiVXBkYXRlUE1hcGAsIGBkYkFsbG9jYCwgYGRiRXh0ZW5kYCwgYGRiQWxsb2NDdGxgLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXRlZ29yaXplIHRoZW0gYmFzZWQgb24gdGhlaXIgcm9sZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cbmBkYkZyZWVgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgdGhlIGZ1bmN0aW9uIGZvciBmcmVlaW5nIGJsb2NrcywgdGFraW5nIHRoZSBpbm9kZSwgdGhlIHN0YXJ0aW5nIGJsb2NrIG51bWJlciwgYW5kIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGZyZWUgYXMgYXJndW1lbnRzLiBJJ2QgZXhwZWN0IGl0IHRvIHVwZGF0ZSBiaXRtYXBzIGFuZCBwb3NzaWJseSBjb2FsZXNjZSBmcmVlIGV4dGVudHMuIGBkYlVwZGF0ZVBNYXBgIGlzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIGl0IGlzIHRvIHVwZGF0ZSB0aGUgcGh5c2ljYWwgbWFwcGluZywgc3VnZ2VzdGluZyBpdCdzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBwZXJzaXN0ZW50IG1hcCwgYW5kIHRoZSBgZnJlZWAgdmFyaWFibGUgaW1wbGllcyBhIHN0YXRlIGNoYW5nZS4gSXQgbGlrZWx5IHBsYXlzIGEgcm9sZSBkdXJpbmcgYmxvY2sgZGVhbGxvY2F0aW9uLCBvciBhbGxvY2F0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIHRvIHdyaXRlIGRhdGEgb24gdGhlIG1hcCB0aGF0IGlzIHN0b3JlZCBzb21ld2hlcmUuXG5cbmBkYkFsbG9jYCBpcywgb2J2aW91c2x5LCBmb3IgYmxvY2sgYWxsb2NhdGlvbi4gSXQgYWxzbyB0YWtlcyBhbiBpbm9kZSwgYSBoaW50ICh3aGljaCBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSksIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGFsbG9jYXRlLCBhbmQgYSBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXN1bHQsIHdoaWNoIEknZCBiZXQgaXMgdGhlIGFsbG9jYXRlZCBibG9jayBudW1iZXJzLiBgZGJFeHRlbmRgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGBzdGF0aWNgIGtleXdvcmQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgaW50ZXJuYWwuIFRoZSBgYWRkbmJsb2Nrc2AgcGFyYW1ldGVyIGhlcmUgc3VnZ2VzdHMgdGhlIGFiaWxpdHkgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBibG9ja3MuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKRlMgY29udGV4dC5cblxuYGRiQWxsb2NDdGxgIGlzIGFub3RoZXIgYWxsb2NhdGlvbiBmdW5jdGlvbi4gVGhlIGBibWFwYCBzdHJ1Y3R1cmUgc3VnZ2VzdHMgaXQgb3BlcmF0ZXMgb24gYSBiaXRtYXAgYW5kIGNvdWxkIGJlIGEgbG93LWxldmVsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWV0YWRhdGEgYmxvY2sgbWFuYWdlbWVudC4gVGhlIGBsMm5iYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgbG9nIGJhc2UgMiBudW1iZXIgb2YgYmxvY2tzLCBpcyBhIGhpbnQgdGhhdCBpdCBtaWdodCBiZSBvcGVyYXRpbmcgb24gYSBwb3dlci1vZi10d28gYmxvY2sgYWxsb2NhdGlvbiBzY2hlbWUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRhdGEgYmxvY2sgYW5kIG1ldGFkYXRhIGJsb2NrIGFsbG9jYXRpb24uXG5cbkZpbmFsbHksIGBkYkFsbG9jQm90dG9tVXBgIGNvdWxkIGJlIGEgc3BlY2lhbCBhbGxvY2F0aW9uIHZhcmlhbnQsIHBvc3NpYmx5IHVzZWQgZm9yIHNwZWNpZmljIHNjZW5hcmlvcyBvciB0byBvcHRpbWl6ZSBhIGNlcnRhaW4gYWxsb2NhdGlvbiBzdHJhdGVneS4gSXQgdGFrZXMgYW4gaW5vZGUsIGFuZCBzdGFydGluZyBibG9jayBudW1iZXIgYW5kIG51bWJlciBvZiBibG9ja3MsIGxpa2UgdGhlIG90aGVyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBpZiB0aGV5IGFyZSBpbnRlcm5hbCwgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgSkZTIGNvZGViYXNlLiBUaGF0J3Mga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBmaWxlc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBwYXJhbWV0ZXJzIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjQ5LjUzMTY1NjA5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3ODQwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdGF0aWMpLiogZGJBbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NzIwPWludCBkYk5leHRBRyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzo4MTc6aW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTgxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjQ5LjcxMTQ1MzI1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDAxMjAwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIEpGUyBpbnRlcm5hbHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQga25vd2xlZGdlIGFuZCBob3cgKkkqIHdvdWxkIHRoaW5rIGFib3V0IHRoZW06XG5cbioqTmF2aWdhdGluZyBEeW5hbWljIERhdGEgU3RydWN0dXJlcyB3aXRoaW4gSkZTKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEpGUyBmdW5jdGlvbnMsIGFuZCBJJ20gZm9jdXNpbmcgb24gdGhlICpkeW5hbWljKiBvbmVzLiBJIGtub3csIGZyb20gZXhwZXJpZW5jZSwgdGhhdCBhIGxvdCBvZiB3aGF0IGdvZXMgb24gaW4gSkZTIGlzIHJlbGF0aXZlbHkgc3RhdGljLCBidXQgaXQncyB0aGUgbW92aW5nIHBhcnRzIHRoYXQgcmVhbGx5IGtlZXAgeW91IG9uIHlvdXIgdG9lcywgYW5kIHRob3NlIGFyZSB3aGF0IEknbSBjb25jZW50cmF0aW5nIG9uIHJpZ2h0IG5vdy4gRXhjZXB0IGZvciBgZGJFeHRlbmRgLCB0aGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuXG5cblNvLCBsZXQncyBkcmlsbCBkb3duIGludG8gc29tZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgbWFwLiBUaGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBmb3IgdGhpcyBkeW5hbWljIGJlaGF2aW9yIGFyZSBgZGJGcmVlYCwgb2J2aW91c2x5LiBJdCdzIHRoZSByZWxlYXNlIG1lY2hhbmlzbSwgc28gaXRzIGR5bmFtaXNtIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gdGhlIGhlYWx0aCBvZiB0aGUgZmlsZXN5c3RlbS4gSG93IGRvZXMgaXQgaGFuZGxlIGNvYWxlc2NpbmcgZnJlZSBibG9ja3M/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBhbGxvY2F0aW9uIG1hcD8gVGhlbiB0aGVyZSdzIGBkYlVwZGF0ZVBNYXBgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGF0IGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHBlcnNpc3RlbnQgbWFwIChQTWFwKSBzdGF5cyBjb25zaXN0ZW50IHdpdGggd2hhdCdzIGFjdHVhbGx5IG9uIGRpc2suIEFueSBjb3JydXB0aW9uIGhlcmUgYW5kIHdlJ3JlIGluIGRlZXAgdHJvdWJsZS4gTW92aW5nIG9uIHRvIGFsbG9jYXRpb24uIEkgd2FudCB0byBjaGVjayBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gcHJpbWl0aXZlcy4gYGRiQWxsb2NgIGFuZCBgZGJBbGxvY0N0bGAgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uIGJlY2F1c2UgdGhleSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gSG93IGFyZSB0aGVzZSBsaW5rZWQgdG9nZXRoZXI/IEFyZSB0aGV5IGJvdHRvbSB1cCAod2l0aCBgZGJBbGxvY0JvdHRvbVVwYCkgb3IgYSB0b3AgZG93bj8gV2hhdCBzdHJhdGVnaWVzIGRvIHRoZXkgdXNlIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbiwgYW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgZGlmZmVyZW50IEkvTyBjb25kaXRpb25zPyBJdCdzIGFsbCBhYm91dCByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGZyYWdtZW50YXRpb24sIGFuZCBlZmZpY2llbnQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIC0gYSBjb3JuZXJzdG9uZSBvZiBKRlMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdHJpY2t5IGJ1ZyByZXBvcnRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTMuODUxNTc2MDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTcyNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYkZyZWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTM2Nj1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNDE2LS8qXFxuZnMvamZzL2pmc19kbWFwLmM6NDE3OiAqIE5BTUU6XFx0ZGJGcmVlKClcXG5mcy9qZnMvamZzX2RtYXAuYy00MTgtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQzMy0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzo0MzQ6aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQzNS17XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xNjg1PXM2NCBkYkRpc2NhcmRBRyhzdHJ1Y3QgaW5vZGUgKmlwLCBpbnQgYWdubywgczY0IG1pbmxlbilcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3NTQtXFx0Zm9yICh0dCA9IHRvdHJpbTsgdHQtXFx1MDAzZW5ibG9ja3MgIT0gMDsgdHQrKykge1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTU6XFx0XFx0Lyogd2hlbiBtb3VudGVkIHdpdGggb25saW5lIGRpc2NhcmQsIGRiRnJlZSgpIHdpbGxcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU2LVxcdFxcdCAqIGNhbGwgamZzX2lzc3VlX2Rpc2NhcmQoKSBpdHNlbGYgKi9cXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3NTgtXFx0XFx0XFx0amZzX2lzc3VlX2Rpc2NhcmQoaXAsIHR0LVxcdTAwM2VibGtubywgdHQtXFx1MDAzZW5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTk6XFx0XFx0ZGJGcmVlKGlwLCB0dC1cXHUwMDNlYmxrbm8sIHR0LVxcdTAwM2VuYmxvY2tzKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzYwLVxcdFxcdHRyaW1tZWQgKz0gdHQtXFx1MDAzZW5ibG9ja3M7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaD0yODI9ZXh0ZXJuIGludCBkYlVubW91bnQoc3RydWN0IGlub2RlICppcGJtYXAsIGludCBtb3VudGVycm9yKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yODMtXFxuZnMvamZzL2pmc19kbWFwLmg6Mjg0OmV4dGVybiBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXBibWFwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yODUtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTUtXFx0XFx0XFx0ICAgICAgIHNpemVvZiAodGVtcF90YWJsZSkpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozOTY6XFx0XFx0XFx0ZGJGcmVlKGlwLCB4YWRkciwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTctXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtOTkyLVxcdFxcdGlmIChyYylcXG5mcy9qZnMvamZzX2R0cmVlLmM6OTkzOlxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIHhsZW4pO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy05OTQtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDMtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDQ0OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTA0NS1cXHRcXHRcXHR9IGVsc2Uge1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDgtXFx0XFx0XFx0XFx0eGFkZHIgPSBhZGRyZXNzUFhEKHB4ZCkgKyB4bGVuO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDQ5OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIG4pO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDUwLVxcdFxcdFxcdH1cXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMjk2LVxcdGZvciAoOyBuIFxcdTAwM2MgcHhkbGlzdC5tYXhucHhkOyBuKyssIHB4ZCsrKVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMjk3OlxcdFxcdGRiRnJlZShpcCwgYWRkcmVzc1BYRChweGQpLCAoczY0KSBsZW5ndGhQWEQocHhkKSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEyOTgtXFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jPTcwPWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sIGFibnIpXFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jLTEzNC1cXHRpZiAocmMpIHtcXG5mcy9qZnMvamZzX2V4dGVudC5jOjEzNTpcXHRcXHRkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pO1xcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMTM2LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2SkZTX0lQKGlwKS1cXHUwMDNlY29tbWl0X211dGV4KTtcXG4tLVxcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMTU1LVxcdGlmIChyYykge1xcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTU2OlxcdFxcdGRiRnJlZShpcCwgbnhhZGRyLCBueGxlbik7XFxuZnMvamZzL2pmc19leHRlbnQuYy0xNTctXFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgbnhsZW4pO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjQ0MD1kaU5ld0lBRyhzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50ICppYWdub3AsIGludCBhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjUzMS1cXHRcXHRcXHQgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNTMyOlxcdFxcdFxcdGRiRnJlZShpcGltYXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNTMzLVxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYz0yNDUxPXZvaWQgdHhGcmVlTWFwKHN0cnVjdCBpbm9kZSAqaXAsXFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTYtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFhBRCh4YWQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjUxNzpcXHRcXHRcXHRcXHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTgtXFx0XFx0XFx0XFx0eGFkLVxcdTAwM2VmbGFnID0gMDtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUyNS1cXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKFxcdTAwMjZweGRsb2NrLVxcdTAwM2VweGQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjUyNjpcXHRcXHRcXHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjctXFx0XFx0XFx0amZzX2luZm8oXFxcImZyZWVXTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkXFxcIixcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUzNS1cXHRcXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNTM2OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUzNy1cXHRcXHRcXHRcXHRqZnNfaW5mbyhcXFwiZnJlZVdNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcXFwiLFxcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jPTUyOD1pbnQgeHRJbnNlcnQodGlkX3QgdGlkLFxcdFxcdC8qIHRyYW5zYWN0aW9uIGlkICovXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtNjEwLVxcdFxcdFxcdGlmICgqeGFkZHJwID09IDApIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NjExOlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xcbmZzL2pmcy9qZnNfeHRyZWUuYy02MTItXFx0XFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmM9MTk1Nj1pbnQgeHRBcHBlbmQodGlkX3QgdGlkLFxcdFxcdC8qIHRyYW5zYWN0aW9uIGlkICovXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA1OC1cXHRcXHQvKiB1bmRvIGRhdGEgZXh0ZW50IGFsbG9jYXRpb24gKi9cXG5mcy9qZnMvamZzX3h0cmVlLmM6MjA1OTpcXHRcXHRkYkZyZWUoaXAsICp4YWRkcnAsIChzNjQpICogeGxlbnApO1xcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDYwLVxcbi0tXFxuZnMvamZzL25hbWVpLmM9Mzc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvamZzL25hbWVpLmMtNDMtXFx0XFx0aW52YWxpZGF0ZV9keGRfbWV0YXBhZ2VzKGlub2RlLCAqZWEpO1xcbmZzL2pmcy9uYW1laS5jOjQ0OlxcdFxcdGRiRnJlZShpbm9kZSwgYWRkcmVzc0RYRChlYSksIGxlbmd0aERYRChlYSkpO1xcbmZzL2pmcy9uYW1laS5jLTQ1LVxcdH1cXG4tLVxcbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTMwMS1cXG5mcy9qZnMveGF0dHIuYzozMDI6XFx0ZGJGcmVlKGlwLCBibGtubywgbmJsb2Nrcyk7XFxuZnMvamZzL3hhdHRyLmMtMzAzLVxcdHJldHVybiByYztcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTQyNj1zdGF0aWMgaW50IGVhX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYsIGludCBtaW5fc2l6ZSlcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTUzMS1cXHRcXHRpZiAoZWFfYnVmLVxcdTAwM2VtcCA9PSBOVUxMKSB7XFxuZnMvamZzL3hhdHRyLmM6NTMyOlxcdFxcdFxcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xcbmZzL2pmcy94YXR0ci5jLTUzMy1cXHRcXHRcXHRyYyA9IC1FSU87XFxuLS1cXG5mcy9qZnMveGF0dHIuYy01NDItXFx0XFx0XFx0ZGlzY2FyZF9tZXRhcGFnZShlYV9idWYtXFx1MDAzZW1wKTtcXG5mcy9qZnMveGF0dHIuYzo1NDM6XFx0XFx0XFx0ZGJGcmVlKGlub2RlLCBibGtubywgKHM2NCkgYmxvY2tzX25lZWRlZCk7XFxuZnMvamZzL3hhdHRyLmMtNTQ0LVxcdFxcdFxcdGdvdG8gY2xlYW5fdXA7XFxuLS1cXG5mcy9qZnMveGF0dHIuYz01ODc9c3RhdGljIHZvaWQgZWFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01OTUtXFx0XFx0aWYgKGVhX2J1Zi1cXHUwMDNlZmxhZyBcXHUwMDI2IEVBX05FVylcXG5mcy9qZnMveGF0dHIuYzo1OTY6XFx0XFx0XFx0ZGJGcmVlKGlub2RlLCBhZGRyZXNzRFhEKFxcdTAwMjZlYV9idWYtXFx1MDAzZW5ld19lYSksXFxuZnMvamZzL3hhdHRyLmMtNTk3LVxcdFxcdFxcdCAgICAgICBsZW5ndGhEWEQoXFx1MDAyNmVhX2J1Zi1cXHUwMDNlbmV3X2VhKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjU0LjA2MzMwNjA1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTg3OTYwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIEF1ZGl0IG9mIGRiRnJlZSBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGRiRnJlZWAgcG9wIHVwIGFsbCBvdmVyIHRoZSBwbGFjZSwgYW5kIHRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgamZzX2lzc3VlX2Rpc2NhcmRgLCB3aGljaCBpcyByZWxhdGVkIHRvIGRpc2NhcmQgb3BlcmF0aW9ucyDigJMgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGVuIHRoZXJlJ3MgYGR0U3BsaXRVcGAsIHdoaWNoIHN1Z2dlc3RzIGRpcmVjdG9yeSB0cmVlIG1hbmlwdWxhdGlvbiwgYW5kIGBleHRBbGxvY2AsIGluZGljYXRpbmcgYmxvY2sgYWxsb2NhdGlvbiBmb3IgZXh0ZW50cy4gYGRpTmV3SUFHYCwgdGhhdCdzIGlub2RlIGFsbG9jYXRpb24gZ3JvdXAgd29yaywgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgcGF0dGVybiBoZXJlLiBgdHhGcmVlTWFwYCBwb2ludHMgdG8gdHJhbnNhY3Rpb24gbWFuYWdlbWVudCwgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFmdGVyIHdyaXRlcy4gVGhlbiBgeHRJbnNlcnRgIGFuZCBgeHRBcHBlbmRgLCB3aGljaCBhcmUgYm90aCBvYnZpb3VzbHkgcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLiBgZnJlZV9lYV93bWFwYCwgYGVhX3dyaXRlYCwgYGVhX2dldGAsIGFuZCBgZWFfcmVsZWFzZWAsIHRoZXNlIGFyZSBhbGwgeGF0dHIgcmVsYXRlZC5cblxuQWxyaWdodCwgc28gdGhlIGNvbW1vbiB0aHJlYWQgaXMgY2xlYXI6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIEZpbGUgY3JlYXRpb24sIHdyaXRlcywgZGVsZXRpb24sIGFuZCBvYnZpb3VzbHkgeGF0dHIgbWFuaXB1bGF0aW9ucy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbG93LWxldmVsIHN0dWZmIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBjYW4gZWFzaWx5IGhpZGUuXG5cbkkndmUgZ290IHRvIGZvbGxvdyB0aGlzIHVwLiBMZXQncyBzZWUgd2hhdCB0aGUgY29tcGFuaW9uIGBkYkFsbG9jYCBpcyBkb2luZy4uLiBhbmQgdGhhdCBjb3VsZCBnaXZlIG1lIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG1pc21hdGNoZXMsIGRvdWJsZS1mcmVlcywgb3IgbGVha3MuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTguMjgyMTA1NTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk5NTg5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGJBbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NzIwPWludCBkYk5leHRBRyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTc3OS0vKlxcbmZzL2pmcy9qZnNfZG1hcC5jOjc4MDogKiBOQU1FOlxcdGRiQWxsb2MoKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTc4MS0gKlxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtODE2LSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXFxuZnMvamZzL2pmc19kbWFwLmMtODE4LXtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTQ9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yMDc2LSAqXFxuZnMvamZzL2pmc19kbWFwLmM6MjA3NzogKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxcbmZzL2pmcy9qZnNfZG1hcC5jLTIwNzgtICpcXHRJV1JJVEVfTE9DSyhpcGJtYXApLCBlLmcuLCBkYkFsbG9jQ3RsKCksIGhlbGQgb24gZW50cnkvZXhpdDtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5oPTI4OT1leHRlcm4gaW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yOTAtXFxuZnMvamZzL2pmc19kbWFwLmg6MjkxOmV4dGVybiBpbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yOTItXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zNzEtXFx0XFx0XFx0Z290byBjbGVhbl91cDtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MzcyOlxcdFxcdGlmIChkYkFsbG9jKGlwLCAwLCBzYmktXFx1MDAzZW5icGVycGFnZSwgXFx1MDAyNnhhZGRyKSkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0zNzMtXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtOTc4LVxcdFxcdFxcdHhsZW4rKztcXG5mcy9qZnMvamZzX2R0cmVlLmM6OTc5OlxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy05ODAtXFx0XFx0XFx0RFRfUFVUUEFHRShzbXApO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNzQtXFx0Zm9yIChweGQgPSBweGRsaXN0LnB4ZDsgbiBcXHUwMDNlIDA7IG4tLSwgcHhkKyspIHtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA3NTpcXHRcXHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXFx1MDAyNnhhZGRyKSkgPT0gMCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDc2LVxcdFxcdFxcdFBYRGFkZHJlc3MocHhkLCB4YWRkcik7XFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jPTMwOT1leHRCYWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCAqIG5ibG9ja3MsIHM2NCAqIGJsa25vKVxcbi0tXFxuZnMvamZzL2pmc19leHRlbnQuYy0zMzUtXFx0LyogdHJ5IHRvIGFsbG9jYXRlIGJsb2NrcyAqL1xcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MzM2OlxcdHdoaWxlICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCBuYiwgXFx1MDAyNmRhZGRyKSkgIT0gMCkge1xcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMzM3LVxcdFxcdC8qIGlmIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIG91dCBvZiBzcGFjZSBlcnJvcixcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNjAtXFxuZnMvamZzL2pmc19pbWFwLmM6MjI2MTpcXHRpZiAoKHJjID0gZGJBbGxvYyhpcGltYXAsIGhpbnQsIChzNjQpIGltYXAtXFx1MDAzZWltX25icGVyaWV4dCwgXFx1MDAyNmJsa25vKSkpXFxuZnMvamZzL2pmc19pbWFwLmMtMjI2Mi1cXHRcXHRnb3RvIGVycm9yX291dDtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTI0NDA9ZGlOZXdJQUcoc3RydWN0IGlub21hcCAqIGltYXAsIGludCAqaWFnbm9wLCBpbnQgYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MDktXFx0XFx0eGxlbiA9IHNiaS1cXHUwMDNlbmJwZXJwYWdlO1xcbmZzL2pmcy9qZnNfaW1hcC5jOjI1MTA6XFx0XFx0aWYgKChyYyA9IGRiQWxsb2MoaXBpbWFwLCAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MTEtXFx0XFx0XFx0LyogcmVsZWFzZSB0aGUgaW5vZGUgbWFwIGxvY2sgKi9cXG4tLVxcbmZzL2pmcy9qZnNfeHRyZWUuYz01Mjg9aW50IHh0SW5zZXJ0KHRpZF90IHRpZCxcXHRcXHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTU4MS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NTgyOlxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfeHRyZWUuYy01ODMtXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmM9Njc5PXh0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtNzU5LVxcdFxcdGZvciAoOyBuc3BsaXQgXFx1MDAzZSAwOyBuc3BsaXQtLSwgcHhkKyspIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NzYwOlxcdFxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCAoczY0KSAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKVxcbmZzL2pmcy9qZnNfeHRyZWUuYy03NjEtXFx0XFx0XFx0ICAgID09IDApIHtcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTUzLSAqXFxuZnMvamZzL3hhdHRyLmM6NTQ6ICpcXHRGRUFMSVNUcyBhcmUgc3RvcmVkIG9uIGRpc2sgdXNpbmcgYmxvY2tzIGFsbG9jYXRlZCBieSBkYkFsbG9jKCkgYW5kXFxuZnMvamZzL3hhdHRyLmMtNTUtICpcXHR3cml0dGVuIGRpcmVjdGx5LiBBbiBFQSBsaXN0IG1heSBiZSBpbi1saW5lZCBpbiB0aGUgaW5vZGUgaWYgdGhlcmUgaXNcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTIzMS1cXG5mcy9qZnMveGF0dHIuYzoyMzI6XFx0cmMgPSBkYkFsbG9jKGlwLCBJTk9ISU5UKGlwKSwgbmJsb2NrcywgXFx1MDAyNmJsa25vKTtcXG5mcy9qZnMveGF0dHIuYy0yMzMtXFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01MTUtXFxuZnMvamZzL3hhdHRyLmM6NTE2OlxcdFxcdHJjID0gZGJBbGxvYyhpbm9kZSwgSU5PSElOVChpbm9kZSksIChzNjQpIGJsb2Nrc19uZWVkZWQsXFxuZnMvamZzL3hhdHRyLmMtNTE3LVxcdFxcdFxcdCAgICAgXFx1MDAyNmJsa25vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTguNTMyMDczNjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU3MjAwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIGBkYkFsbG9jYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBkYkFsbG9jYCBpcyBzaG93aW5nIHVwIHF1aXRlIGEgYml0LiBMb29raW5nIGF0IHRoZSBjcm9zcy1yZWZlcmVuY2VzLCBpdCdzIHVzZWQgaW4gYGR0U3BsaXRVcGAsIGBleHRCYWxsb2NgLCBgZGlOZXdFeHRgLCBgZGlOZXdJQUdgLCBgeHRJbnNlcnRgLCBgeHRTcGxpdFVwYCwgYGVhX3dyaXRlYCwgYW5kIGBlYV9nZXRgLiBUaGF0J3MgYSBwcmV0dHkgZXh0ZW5zaXZlIGxpc3QuIEdpdmVuIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggZGVhbCB3aXRoIGRhdGEgc3RydWN0dXJlcywgZXh0ZW50IGhhbmRsaW5nLCBhbmQgZGlyZWN0IGFjY2VzcywgaXQncyBzYWZlIHRvIHNheSBgZGJBbGxvY2AgaXMgKmhlYXZpbHkqIHVzZWQgYW5kIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGZyb20gdGhlIHN5c3RlbSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGtlZXAgaXQgaW4gbWluZCBhcyBhbiBhcmVhIHdoZXJlIHBlcmZvcm1hbmNlIGdhaW5zIG1pZ2h0IGJlIGFjaGlldmFibGUuIExldCdzIGRpZyBpbnRvIGBkYlVwZGF0ZVBNYXBgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MDEuODY3Nzk3MTMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU4ODYxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRiVXBkYXRlUE1hcFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NDM0PWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTUxMi0vKlxcbmZzL2pmcy9qZnNfZG1hcC5jOjUxMzogKiBOQU1FOlxcdGRiVXBkYXRlUE1hcCgpXFxuZnMvamZzL2pmc19kbWFwLmMtNTE0LSAqXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz01MzM9aW50XFxuZnMvamZzL2pmc19kbWFwLmM6NTM0OmRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCxcXG5mcy9qZnMvamZzX2RtYXAuYy01MzUtXFx0ICAgICBpbnQgZnJlZSwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcywgc3RydWN0IHRibG9jayAqIHRibGspXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaD0yODQ9ZXh0ZXJuIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5oLTI4NS1cXG5mcy9qZnMvamZzX2RtYXAuaDoyODY6ZXh0ZXJuIGludCBkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXFxuZnMvamZzL2pmc19kbWFwLmgtMjg3LVxcdFxcdFxcdGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jPTIzOTM9c3RhdGljIHZvaWQgdHhBbGxvY1BNYXAoc3RydWN0IGlub2RlICppcCwgc3RydWN0IG1hcGxvY2sgKiBtYXBsb2NrLFxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDE1LVxcdFxcdFxcdFxcdHhsZW4gPSBsZW5ndGhYQUQoeGFkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0MTY6XFx0XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgZmFsc2UsIHhhZGRyLFxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQxNy1cXHRcXHRcXHRcXHRcXHQgICAgIChzNjQpIHhsZW4sIHRibGspO1xcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI2LVxcdFxcdHhsZW4gPSBsZW5ndGhQWEQoXFx1MDAyNnB4ZGxvY2stXFx1MDAzZXB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNDI3OlxcdFxcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbiwgdGJsayk7XFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI4LVxcdFxcdGpmc19pbmZvKFxcXCJhbGxvY1BNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcXFwiLCAodWxvbmcpIHhhZGRyLCB4bGVuKTtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQzNS1cXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNDM2OlxcdFxcdFxcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbixcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MzctXFx0XFx0XFx0XFx0ICAgICB0YmxrKTtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmM9MjQ1MT12b2lkIHR4RnJlZU1hcChzdHJ1Y3QgaW5vZGUgKmlwLFxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc3LVxcdFxcdFxcdFxcdFxcdHhsZW4gPSBsZW5ndGhYQUQoeGFkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0Nzg6XFx0XFx0XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgdHJ1ZSwgeGFkZHIsXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0ODctXFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChcXHUwMDI2cHhkbG9jay1cXHUwMDNlcHhkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0ODg6XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgdHJ1ZSwgeGFkZHIsIChzNjQpIHhsZW4sXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg5LVxcdFxcdFxcdFxcdCAgICAgdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0OTgtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjQ5OTpcXHRcXHRcXHRcXHRkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkcixcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MDAtXFx0XFx0XFx0XFx0XFx0ICAgICAoczY0KSB4bGVuLCB0YmxrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MDMuOTI2NjY1NDY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDE3MzI2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVHJhbnNhY3Rpb24gTWFuYWdlciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIGBkYlVwZGF0ZVBNYXBgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLiBJJ20gc2VlaW5nIGl0J3MgdXRpbGl6ZWQgaW4gYHR4QWxsb2NQTWFwYCBhbmQgYHR4RnJlZU1hcGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgbWFwIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhbnNhY3Rpb24gbWFuYWdlbWVudC4gU28sIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcmVjb3ZlcmFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhcnRzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgZGJBbGxvY0N0bGAgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyB0aWVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjA3LjY2ODQwMzg0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1NjU0MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRiQWxsb2NDdGxcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTgzPXN0YXRpYyBpbnQgZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTg0LVxcdFxcdCAgICAgczY0ICogcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmM6ODU6c3RhdGljIGludCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubyxcXG5mcy9qZnMvamZzX2RtYXAuYy04Ni1cXHRcXHQgICAgICBzNjQgKiByZXN1bHRzKTtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE0MjY9ZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1My1cXHQgKiBncm91cCBpcyBhbHJlYWR5IGZ1bGx5IGRlc2NyaWJlZCBieSBhIGRtYXAuICBpbiB0aGlzIGNhc2UsIHdlXFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NDpcXHQgKiBqdXN0IGNhbGwgZGJBbGxvY0N0bCgpIHRvIHNlYXJjaCB0aGUgZG1hcCB0cmVlIGFuZCBhbGxvY2F0ZSB0aGVcXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU1LVxcdCAqIHJlcXVpcmVkIHNwYWNlIGlmIGF2YWlsYWJsZS5cXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU2LVxcdCAqXFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NzpcXHQgKiBpZiB0aGUgYWxsb2NhdGlvbiBncm91cCBpcyBjb21wbGV0ZWx5IGZyZWUsIGRiQWxsb2NDdGwoKSBpc1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTgtXFx0ICogYWxzbyBjYWxsZWQgdG8gYWxsb2NhdGUgdGhlIHJlcXVpcmVkIHNwYWNlLiAgdGhpcyBpcyBkb25lIGZvclxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ2Ni1cXHQgICAgfHwgYm1wLVxcdTAwM2VkYl9hZ2ZyZWVbYWdub10gPT0gYm1wLVxcdTAwM2VkYl9hZ3NpemUpIHtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNDY3OlxcdFxcdHJjID0gZGJBbGxvY0N0bChibXAsIG5ibG9ja3MsIGwybmIsIGJsa25vLCByZXN1bHRzKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNDY4LVxcdFxcdGlmICgocmMgPT0gLUVOT1NQQykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE1ODUtXFx0XFx0ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MTU4NjpcXHRcXHRyYyA9IGRiQWxsb2NDdGwoYm1wLCBuYmxvY2tzLCBsMm5iLCBibGtubywgcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTU4Ny1cXHRcXHRpZiAocmMgPT0gLUVOT1NQQykge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTYzMD1zdGF0aWMgaW50IGRiQWxsb2NBbnkoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE2NDUtXFx0ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MTY0NjpcXHRyYyA9IGRiQWxsb2NDdGwoYm1wLCBuYmxvY2tzLCBsMm5iLCBibGtubywgcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTY0Ny1cXHRpZiAocmMgPT0gLUVOT1NQQykge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTc5NT1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xODY4LS8qXFxuZnMvamZzL2pmc19kbWFwLmM6MTg2OTogKiBOQU1FOlxcdGRiQWxsb2NDdGwoKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE4NzAtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTM9c3RhdGljIGludFxcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MTQ6ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuZnMvamZzL2pmc19kbWFwLmMtMTkxNS17XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yMDc3LSAqIHNlcmlhbGl6YXRpb246IElSRUFEX0xPQ0soaXBibWFwKSwgZS5nLiwgZnJvbSBkYkFsbG9jKCksIG9yXFxuZnMvamZzL2pmc19kbWFwLmM6MjA3ODogKlxcdElXUklURV9MT0NLKGlwYm1hcCksIGUuZy4sIGRiQWxsb2NDdGwoKSwgaGVsZCBvbiBlbnRyeS9leGl0O1xcbmZzL2pmcy9qZnNfZG1hcC5jLTIwNzktICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjA4LjM3NDA3MzgwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTEwNzA3Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYkFsbG9jQ3RsYCBhbmQgYGRiQWxsb2NCb3R0b21VcGAqKlxuXG5BbHJpZ2h0LCBzbyBgZGJBbGxvY0N0bGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbW1lZGlhdGVseSBpbiB0aGlzIGNvbnRleHQuIEl0J3MgY29uZmluZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24gY29udHJvbCB3aXRoaW4gKnRoaXMqIG1vZHVsZS4gTm93LCBgZGJBbGxvY0JvdHRvbVVwYCwgdGhhdCBvbmUncyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nIGFuZCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxMS40ODQ3ODQzMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODMxOTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYkFsbG9jQm90dG9tVXBcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTMyODA9c3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zMzEwLS8qXFxuZnMvamZzL2pmc19kbWFwLmM6MzMxMTogKiBOQU1FOlxcdGRiQWxsb2NCb3R0b21VcCgpXFxuZnMvamZzL2pmc19kbWFwLmMtMzMxMi0gKlxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzMyNy0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozMzI4OmludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI5LXtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTMzODk9c3RhdGljIGludCBkYkFsbG9jRG1hcEJVKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNDk2LSAqIEZVTkNUSU9OOlxcdGV4dGVuZCBibWFwIGZyb20gYmxrbm8gZm9yIG5ibG9ja3M7XFxuZnMvamZzL2pmc19kbWFwLmM6MzQ5NzogKlxcdFxcdGRiRXh0ZW5kRlMoKSB1cGRhdGVzIGJtYXAgcmVhZHkgZm9yIGRiQWxsb2NCb3R0b21VcCgpO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTgtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5oPTI5Nj1leHRlcm4gaW50IGRiU3luYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCk7XFxuZnMvamZzL2pmc19kbWFwLmg6Mjk3OmV4dGVybiBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5oLTI5OC1leHRlcm4gaW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcXHRcXHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTIwMjgtXFx0Zm9yICg7IG5zcGxpdCBcXHUwMDNlIDA7IG5zcGxpdC0tLCBweGQrKywgeGFkZHIgKz0gbmJsb2NrcywgbWF4YmxvY2tzIC09IG5ibG9ja3MpIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6MjAyOTpcXHRcXHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgbmJsb2NrcykpID09IDApIHtcXG5mcy9qZnMvamZzX3h0cmVlLmMtMjAzMC1cXHRcXHRcXHRQWERhZGRyZXNzKHB4ZCwgeGFkZHIpO1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTIwNDctXFx0ICovXFxuZnMvamZzL2pmc194dHJlZS5jOjIwNDg6XFx0aWYgKChyYyA9IGRiQWxsb2NCb3R0b21VcChpcCwgeGFkZHIsIChzNjQpIHhsZW4pKSlcXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA0OS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDc0LVxcdCAqL1xcbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDc1OlxcdGlmICgocmMgPSBkYkFsbG9jQm90dG9tVXAoaXAsIHhhZGRyLCAoczY0KSB4bGVuKSkpXFxuZnMvamZzL2pmc194dHJlZS5jLTIwNzYtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjExLjc0MzExMDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTczMzY1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGFuIGV4cGVydCB3b3VsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gYGRiQWxsb2NCb3R0b21VcGAgaXMgdXRpbGl6ZWQgd2l0aGluIGB4dEFwcGVuZGAuIFRoYXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIHdvcmtzIGF0IHRoaXMgbG93IGxldmVsLiBNeSBwcmltYXJ5IGFyZWFzIG9mIGZvY3VzIGFyZTogYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBvZiBjb3Vyc2UsIHRoZSBrZXkgZnVuY3Rpb24sIGBkYkFsbG9jQm90dG9tVXBgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheS4gTXkgcHJpb3JpdHkgaXMgdG8gaWRlbnRpZnkgZXhhY3RseSBob3cgbWVtb3J5IGlzIGhhbmRsZWQgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGJlLlxuXG5OZXh0IHN0ZXA6IExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZGVmaW5lZCBmb3IgSkZTLiBJdCdzIGNvbW1vbiB0byBoYXZlIG9wdGltaXplZCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYmFzZWQgb24gZmlsZXN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBwcmVzZW5jZSBvZiBKRlMtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgY291bGQgZ3JlYXRseSBpbmZsdWVuY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxNS4zMDA0NDk3MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjUyNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSkZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcXG5mcy9qZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxNi4wMDY5ODQ4NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NDI0NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBKRlNfRlMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEpGU19GUywgcmlnaHQ/IEJlZm9yZSBJIGRpdmUgaW4gYW5kIHN0YXJ0IHRpbmtlcmluZywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbywgdGhlICphYnNvbHV0ZSogZmlyc3QgdGhpbmcsIGlzIG1hcCBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHdoYXQgSkZTX0ZTIHJlbGllcyBvbiBpcyBjcnVjaWFsLiBJJ20gdGhpbmtpbmcsIHRoaXMgaXMgYSBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gaW1tZWRpYXRlbHkgSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggYmxvY2sgZGV2aWNlIGRyaXZlcnMsIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGZpbGUgc3lzdGVtIChWRlMpIGxheWVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHByb2JhYmx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zIGZvciBjb25jdXJyZW5jeS5cblxuV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBidXQga25vd2luZyB0aGUgZXhhY3QgaW50ZXJhY3Rpb25zIGlzIHBhcmFtb3VudC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGhlYWRlcnMsIGluY2x1ZGUgZmlsZXMsIGFuZCBhbnkgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcyB0byBzZWUgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRlZmluZXMgaXRzIGludGVyZmFjZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHRyYWNlIGFsbCBjYWxscyB1cCBhbmQgZG93biB0aGUgc3RhY2sgdG8gcHJldmVudCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gSWYgaXQgdG91Y2hlcyBzb21lIHNwZWNpZmljIGhhcmR3YXJlLCBJIHdhbnQgdG8ga25vdyBhYm91dCBpdC4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG1ham9yIHBpdGZhbGxzIGRvd24gdGhlIHJvYWQuXG5cblRoaXMgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgbXkgd29yayBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGltcGFjdC4gSSBkb24ndCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyBkb3duc3RyZWFtIHdpdGhvdXQga25vd2luZy4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJJ2xsIGJ1aWxkIHVwb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MTkuNTUxMjQwNzM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9qZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEpGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNfVUNTMl9VVElMU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGlzIGEgcG9ydCBvZiBJQk0ncyBKb3VybmFsZWQgRmlsZXN5c3RlbSAuICBNb3JlIGluZm9ybWF0aW9uIGlzXFxuICAxMTpcXHRcXHQgIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2pmcy5yc3RcXHUwMDNlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIElmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSB0aGUgSkZTIGZpbGVzeXN0ZW0sIHNheSBOLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgSkZTX1BPU0lYX0FDTFxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSkZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBKRlNfRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDE5OlxcdFxcdGhlbHBcXG4gIDIwOlxcdFxcdCAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxOS41NTEzNjUwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNzg1MjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEpGUyBwYXRjaCBhbmQgdGhlIGtleSBjb25maWcgaXMgYEpGU19GU2AsIGdvdCBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB2YWxpZGF0aW5nIHRoZSBkbWFwIHN0cnVjdHVyZXMsIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IHBhZ2UgYWNjZXNzZXMuIFNlZW1zIHByZXR0eSBjcml0aWNhbCBmb3Igb3ZlcmFsbCBzdGFiaWxpdHkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IHNjcmVhbXMgZm9yIGZ1enppbmcgdG8gcmVhbGx5IGhhbW1lciBvbiBpdCBhbmQgcm9vdCBvdXQgYW55IGx1cmtpbmcgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gdG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cy4gRGVmaW5pdGVseSB0aG9zZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgbGlrZWx5IHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEnigJlsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBtb2RpZmllZC4gQWhhLCBpdCBsb29rcyBsaWtlIGBkYkV4dGVuZGAgaXMgc3RhdGljLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dEJhbGxvY2AsIGFuZCBgZGJBbGxvY0N0bGAgaXMgYWxzbyBzdGF0aWMsIGNhbGxlZCBieSBgZGJBbGxvY0FHYCwgYGRiQWxsb2NBbnlgLCBhbmQgYGRiQWxsb2NgLiBHb29kIHRvIGtub3csIGJ1dCBteSBmb2N1cyByZW1haW5zIG9uIHRoZSBpbml0aWFsIGZvdXIgZnVuY3Rpb25zIGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCB0ZXN0aW5nLlxuXG5SaWdodCwgc28gSSBoYXZlIGEgY2xlYXIgc2V0IG9mIGZvY2FsIHBvaW50cyBub3cuIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCBnZXQgdGhlc2Ugc3ltYm9scyB1bmRlciB0aGUgbWljcm9zY29wZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwMCwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoyNC42ODkyMjE0MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NDYwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRiRnJlZVwiLFxuICAgIFwiZGJVcGRhdGVQTWFwXCIsXG4gICAgXCJkYkFsbG9jXCIsXG4gICAgXCJkYkFsbG9jQm90dG9tVXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRiRnJlZVwiLFxuICAgIFwiZGJVcGRhdGVQTWFwXCIsXG4gICAgXCJkYkFsbG9jXCIsXG4gICAgXCJkYkFsbG9jQm90dG9tVXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 19:50:01 +0000 UTC FinishedAt: 2026-07-24 20:08:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "JFS_FS" ], "series_id": "e2a02dbc-1381-4048-b249-020e6546ab14" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "dbFree", "dbUpdatePMap", "dbAlloc", "dbAllocBottomUp" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0pGU19GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RiRnJlZSYjMzQ7LAogICAgJiMzNDtkYlVwZGF0ZVBNYXAmIzM0OywKICAgICYjMzQ7ZGJBbGxvYyYjMzQ7LAogICAgJiMzNDtkYkFsbG9jQm90dG9tVXAmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIEpGUyBkbWFwIHN0cnVjdHVyZXMgKGBkYlZhbGlkYXRlRG1hcGApIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IGRtYXAgcGFnZSBhY2Nlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEpGUyBibG9jayBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDdhZTM4ZGMzNTA1NWUwMGU5NTAxNjNiZWU4ODcwNTBhZWQzOTViYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDowNzozMyAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jXG5pbmRleCBhODQxY2YyMWRhN2RlNi4uZjE1OTU0YzFmMTk2ZGIgMTAwNjQ0XG4tLS0gYS9mcy9qZnMvamZzX2RtYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19kbWFwLmNcbkBAIC05OCw2ICYjNDM7OTgsOSBAQCBzdGF0aWMgaW50IGJsa3N0b2wyKHM2NCBuYik7XG4gc3RhdGljIGludCBjbnRseih1MzIgdmFsdWUpO1xuIHN0YXRpYyBpbnQgY250dHoodTMyIHdvcmQpO1xuIFxuJiM0MztzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4mIzQzO1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydCk7XG4mIzQzO1xuIHN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuIFx0XHRcdCBpbnQgbmJsb2Nrcyk7XG4gc3RhdGljIGludCBkYkluaXREbWFwKHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubywgaW50IG5ibG9ja3MpO1xuQEAgLTQ3Niw2ICYjNDM7NDc5LDEyIEBAIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb21cbiBcdFx0ICogdGhpcyBkbWFwLlxuIFx0XHQgKi9cbkBAIC01NjgsNiAmIzQzOzU3NywxMyBAQCBkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXG4gXHRcdFx0aWYgKG1wID09IE5VTEwpXG4gXHRcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0XHRtZXRhcGFnZV93YWl0X2Zvcl9pbyhtcCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwYm1hcC1cdTAwM2VpX3NiLFxuJiM0MztcdFx0XHRcdFx0ICAgIChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhLFxuJiM0MztcdFx0XHRcdFx0ICAgIGJsa25vIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdFx0fVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG5AQCAtODg2LDYgJiM0Mzs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxuIFxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0Z290byByZWFkX3VubG9jaztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIGZpcnN0LCB0cnkgdG8gc2F0aXNmeSB0aGUgYWxsb2NhdGlvbiByZXF1ZXN0IHdpdGggdGhlXG4gXHRcdCAqIGJsb2NrcyBiZWdpbm5pbmcgYXQgdGhlIGhpbnQuXG4gXHRcdCAqL1xuQEAgLTExMTgsNiAmIzQzOzExMzksMTIgQEAgc3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcbiBcbiBcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4mIzQzO1x0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cdTAwM2VpX3NiLCBkcCwgZXh0Ymxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcbiYjNDM7XHRcdHJldHVybiAtRUlPO1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXG4gXHQgKiBjdXJyZW50IGFsbG9jYXRpb24uXG4gXHQgKi9cbkBAIC0xOTAyLDcgJiM0MzsxOTI5LDcgQEAgZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4tXHRcdGlmIChkcC1cdTAwM2V0cmVlLmJ1ZG1pbiBcdTAwM2MgMCkge1xuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXHUwMDNlZGJfaXBibWFwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4gXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXHRcdH1cbkBAIC0xOTM2LDYgJiM0MzsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4mIzQzO1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC1cdTAwM2VkYl9pcGJtYXAtXHUwMDNlaV9zYiwgZHAsIGIgXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuJiM0MztcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbiYjNDM7XHRcdFx0cmMgPSAtRUlPO1xuJiM0MztcdFx0XHRnb3RvIGJhY2tvdXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1xuIFx0XHQvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoZHAtXHUwMDNldHJlZS5zdHJlZVtST09UXSAhPSBMMkJQRVJETUFQKSB7XG5AQCAtMTk5Myw2ICYjNDM7MjAyNiwxMSBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuJiM0MztcdFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXHUwMDNlZGJfaXBibWFwLVx1MDAzZWlfc2IsIGRwLCBiIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcbiBcdFx0LyogZnJlZSB0aGUgYmxvY2tzIGlzIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChkYkZyZWVEbWFwKGJtcCwgZHAsIGIsIEJQRVJETUFQKSkge1xuQEAgLTIxMzQsNiAmIzQzOzIxNzIsMTggQEAgc3RhdGljIGludCBkYkFsbG9jRG1hcChzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuIFx0cmV0dXJuIChyYyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4mIzQzO1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcbiYjNDM7e1xuJiM0MztcdGlmIChsZTY0X3RvX2NwdShkcC1cdTAwM2VzdGFydCkgIT0gZXhwZWN0ZWRfc3RhcnQpIHtcbiYjNDM7XHRcdGpmc19lcnJvcihzYiwgXCYjMzQ7Y29ycnVwdCBkbWFwIHBhZ2U6IHN0YXJ0ICVsbGQgZXhwZWN0ZWQgJWxsZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLVx1MDAzZXN0YXJ0KSxcbiYjNDM7XHRcdFx0ICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTtcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4gXG4gLypcbiAgKiBOQU1FOlx0ZGJGcmVlRG1hcCgpXG5AQCAtMzMwOCw2ICYjNDM7MzM1OCwxMiBAQCBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG4gXHRcdH1cbiBcdFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXHUwMDNlZGF0YTtcbiBcbiYjNDM7XHRcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXHUwMDNlaV9zYiwgZHAsIGJsa25vIFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcbiYjNDM7XHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4mIzQzO1x0XHRcdElSRUFEX1VOTE9DSyhpcGJtYXApO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTztcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgZnJvbVxuIFx0XHQgKiB0aGlzIGRtYXAuXG4gXHRcdCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtKRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYkZyZWUmIzM0OywKICAgICYjMzQ7ZGJVcGRhdGVQTWFwJiMzNDssCiAgICAmIzM0O2RiQWxsb2MmIzM0OywKICAgICYjMzQ7ZGJBbGxvY0JvdHRvbVVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YWUzOGRjMzUwNTVlMDBlOTUwMTYzYmVlODg3MDUwYWVkMzk1YmE5CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjA6MDc6MzMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX2RtYXAuYyBiL2ZzL2pmcy9qZnNfZG1hcC5jCmluZGV4IGE4NDFjZjIxZGE3ZGU2Li5mMTU5NTRjMWYxOTZkYiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19kbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvamZzL2pmc19kbWFwLmMKQEAgLTk4LDYgJiM0Mzs5OCw5IEBAIHN0YXRpYyBpbnQgYmxrc3RvbDIoczY0IG5iKTsKIHN0YXRpYyBpbnQgY250bHoodTMyIHZhbHVlKTsKIHN0YXRpYyBpbnQgY250dHoodTMyIHdvcmQpOwogCiYjNDM7c3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLAomIzQzOwkJCSAgIHM2NCBleHBlY3RlZF9zdGFydCk7CiYjNDM7CiBzdGF0aWMgaW50IGRiQWxsb2NEbWFwQlUoc3RydWN0IGJtYXAgKiBibXAsIHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubywKIAkJCSBpbnQgbmJsb2Nrcyk7CiBzdGF0aWMgaW50IGRiSW5pdERtYXAoc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLCBpbnQgbmJsb2Nrcyk7CkBAIC00NzYsNiAmIzQzOzQ3OSwxMiBAQCBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpCiAJCX0KIAkJZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtJmd0O2RhdGE7CiAKJiM0MzsJCWlmICghZGJWYWxpZGF0ZURtYXAoaXAtJmd0O2lfc2IsIGRwLCBibGtubyAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCQlJUkVBRF9VTkxPQ0soaXBibWFwKTsKJiM0MzsJCQlyZXR1cm4gLUVJTzsKJiM0MzsJCX0KJiM0MzsKIAkJLyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb20KIAkJICogdGhpcyBkbWFwLgogCQkgKi8KQEAgLTU2OCw2ICYjNDM7NTc3LDEzIEBAIGRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwKIAkJCWlmIChtcCA9PSBOVUxMKQogCQkJCXJldHVybiAtRUlPOwogCQkJbWV0YXBhZ2Vfd2FpdF9mb3JfaW8obXApOwomIzQzOwomIzQzOwkJCWlmICghZGJWYWxpZGF0ZURtYXAoaXBibWFwLSZndDtpX3NiLAomIzQzOwkJCQkJICAgIChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YSwKJiM0MzsJCQkJCSAgICBibGtubyAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJCXJldHVybiAtRUlPOwomIzQzOwkJCX0KIAkJfQogCQlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIApAQCAtODg2LDYgJiM0Mzs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKQogCiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJZ290byByZWFkX3VubG9jazsKJiM0MzsJCX0KJiM0MzsKIAkJLyogZmlyc3QsIHRyeSB0byBzYXRpc2Z5IHRoZSBhbGxvY2F0aW9uIHJlcXVlc3Qgd2l0aCB0aGUKIAkJICogYmxvY2tzIGJlZ2lubmluZyBhdCB0aGUgaGludC4KIAkJICovCkBAIC0xMTE4LDYgJiM0MzsxMTM5LDEyIEBAIHN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpCiAKIAlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIAomIzQzOwlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgZXh0Ymxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCUlSRUFEX1VOTE9DSyhpcGJtYXApOwomIzQzOwkJcmV0dXJuIC1FSU87CiYjNDM7CX0KJiM0MzsKIAkvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCiAJICogY3VycmVudCBhbGxvY2F0aW9uLgogCSAqLwpAQCAtMTkwMiw3ICYjNDM7MTkyOSw3IEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKQogCQkJcmV0dXJuIC1FSU87CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCi0JCWlmIChkcC0mZ3Q7dHJlZS5idWRtaW4gJmx0OyAwKSB7CiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC0mZ3Q7ZGJfaXBibWFwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiAJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CkBAIC0xOTM2LDYgJiM0MzsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKQogCQl9CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC0mZ3Q7ZGJfaXBibWFwLSZndDtpX3NiLCBkcCwgYiAmYW1wOyB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHsKJiM0MzsJCQlyZWxlYXNlX21ldGFwYWdlKG1wKTsKJiM0MzsJCQlyYyA9IC1FSU87CiYjNDM7CQkJZ290byBiYWNrb3V0OwomIzQzOwkJfQomIzQzOwogCQkvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuCiAJCSAqLwogCQlpZiAoZHAtJmd0O3RyZWUuc3RyZWVbUk9PVF0gIT0gTDJCUEVSRE1BUCkgewpAQCAtMTk5Myw2ICYjNDM7MjAyNiwxMSBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cykKIAkJfQogCQlkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC0mZ3Q7ZGF0YTsKIAomIzQzOwkJaWYgKCFkYlZhbGlkYXRlRG1hcChibXAtJmd0O2RiX2lwYm1hcC0mZ3Q7aV9zYiwgZHAsIGIgJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CiAJCS8qIGZyZWUgdGhlIGJsb2NrcyBpcyB0aGlzIGRtYXAuCiAJCSAqLwogCQlpZiAoZGJGcmVlRG1hcChibXAsIGRwLCBiLCBCUEVSRE1BUCkpIHsKQEAgLTIxMzQsNiAmIzQzOzIxNzIsMTggQEAgc3RhdGljIGludCBkYkFsbG9jRG1hcChzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLAogCXJldHVybiAocmMpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLAomIzQzOwkJCSAgIHM2NCBleHBlY3RlZF9zdGFydCkKJiM0Mzt7CiYjNDM7CWlmIChsZTY0X3RvX2NwdShkcC0mZ3Q7c3RhcnQpICE9IGV4cGVjdGVkX3N0YXJ0KSB7CiYjNDM7CQlqZnNfZXJyb3Ioc2IsICYjMzQ7Y29ycnVwdCBkbWFwIHBhZ2U6IHN0YXJ0ICVsbGQgZXhwZWN0ZWQgJWxsZFxuJiMzNDssCiYjNDM7CQkJICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLSZndDtzdGFydCksCiYjNDM7CQkJICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiAKIC8qCiAgKiBOQU1FOglkYkZyZWVEbWFwKCkKQEAgLTMzMDgsNiAmIzQzOzMzNTgsMTIgQEAgaW50IGRiQWxsb2NCb3R0b21VcChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKQogCQl9CiAJCWRwID0gKHN0cnVjdCBkbWFwICopIG1wLSZndDtkYXRhOwogCiYjNDM7CQlpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLSZndDtpX3NiLCBkcCwgYmxrbm8gJmFtcDsgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7CiYjNDM7CQkJcmVsZWFzZV9tZXRhcGFnZShtcCk7CiYjNDM7CQkJSVJFQURfVU5MT0NLKGlwYm1hcCk7CiYjNDM7CQkJcmV0dXJuIC1FSU87CiYjNDM7CQl9CiYjNDM7CiAJCS8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBhbGxvY2F0ZWQgZnJvbQogCQkgKiB0aGlzIGRtYXAuCiAJCSAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTg3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzUzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIHRoYXQgaW50cm9kdWNlcyBhIG5ldyBgZGJWYWxpZGF0ZURtYXBgIGZ1bmN0aW9uIGludG8gYGZzL2pmcy9qZnNfZG1hcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEpGUyBmaWxlc3lzdGVtLCBhZGRpbmcgc29tZSB2YWxpZGF0aW9uIGZvciB0aGUgYGRtYXBgIHN0cnVjdHVyZSwgc3BlY2lmaWNhbGx5IGNoZWNraW5nIHRoZSBgZHAtJmd0O3N0YXJ0YCB2YWx1ZSBhZ2FpbnN0IGFuIGBleHBlY3RlZF9zdGFydGAuIElmIHRoYXQgdmFsaWRhdGlvbiBmYWlscywgd2UmIzM5O3JlIGdldHRpbmcgYW4gYC1FSU9gIGVycm9yIGJhY2suIFNlZW1zIGxpa2UgYSBnb29kIHRhcmdldCBmb3IgZnV6emluZy4KClRoZSBpbXBvcnRhbnQgdGhpbmcgbm93IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHdheSB0byBmdXp6IHRoaXMuIEJhc2VkIG9uIHRoZSBjb2RlLCBgZGJWYWxpZGF0ZURtYXBgIGlzIGdldHRpbmcgY2FsbGVkIHdpdGhpbiBhIGJ1bmNoIG9mIGRpZmZlcmVudCBmdW5jdGlvbnM6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJFeHRlbmRgLCBgZGJBbGxvY0N0bGAgKGFuZCB0aGlzIG9uZSYjMzk7cyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMpLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIFRoYXQmIzM5O3Mgd2hlcmUgd2Ugc2hvdWxkIGZvY3VzIG91ciBlZmZvcnRzLgoKRmlyc3QsIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvc2VkLiBJdCBsb29rcyBsaWtlIGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJBbGxvY0N0bGAgYW5kIGBkYkFsbG9jQm90dG9tVXBgIGFyZSBhbGwgbm90IHN0YXRpYywgd2hpbGUgYGRiRXh0ZW5kYCBpcyBzdGF0aWMuIFRoYXQgZ2l2ZXMgdXMgYSBzdGFydGluZyBwb2ludC4gV2UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gdG8gc2VhcmNoIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuCgpPZiBjb3Vyc2UsIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIEpGUyBjb25maWcgb3B0aW9ucyBhcyB3ZWxsLCBzcGVjaWZpY2FsbHkgYENPTkZJR19KRlNfRlNgLiBXZSBzaG91bGQgbWFrZSBzdXJlIHRoYXQgdGhlIEpGUyBmaWxlc3lzdGVtIGlzIGVuYWJsZWQgYmVmb3JlIHdlIHN0YXJ0IGZ1enppbmcuCgpJJiMzOTtsbCBydW4gYGdyZXBwZXJgIG92ZXIgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGBkYkV4dGVuZGAsIGBkYkFsbG9jQ3RsYCwgYW5kIGBkYkFsbG9jQm90dG9tVXBgIHRvIG1hcCBvdXQgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSBpZiBhbnkgb2YgdGhlbSBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBsb29raW5nIGZvciBob3QgcGF0aHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBleHBvc2UgYSB2dWxuZXJhYmlsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O14oaW50fHZvaWR8c3RhdGljKS4qIGRiRnJlZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9MzY2PWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtNDMzLSAqL1xuZnMvamZzL2pmc19kbWFwLmM6NDM0OmludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbmZzL2pmcy9qZnNfZG1hcC5jLTQzNS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDUwMQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgSkZTIEJsb2NrIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBGdW5jdGlvbnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIEpGUyBmdW5jdGlvbnM6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJFeHRlbmRgLCBgZGJBbGxvY0N0bGAsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNhdGVnb3JpemUgdGhlbSBiYXNlZCBvbiB0aGVpciByb2xlcyBhbmQgdW5kZXJzdGFuZCBob3cgdGhleSBpbnRlcmFjdC4KCmBkYkZyZWVgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0JiMzOTtzIHRoZSBmdW5jdGlvbiBmb3IgZnJlZWluZyBibG9ja3MsIHRha2luZyB0aGUgaW5vZGUsIHRoZSBzdGFydGluZyBibG9jayBudW1iZXIsIGFuZCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBmcmVlIGFzIGFyZ3VtZW50cy4gSSYjMzk7ZCBleHBlY3QgaXQgdG8gdXBkYXRlIGJpdG1hcHMgYW5kIHBvc3NpYmx5IGNvYWxlc2NlIGZyZWUgZXh0ZW50cy4gYGRiVXBkYXRlUE1hcGAgaXMgaW50ZXJlc3Rpbmc7IGl0IGxvb2tzIGxpa2UgaXQgaXMgdG8gdXBkYXRlIHRoZSBwaHlzaWNhbCBtYXBwaW5nLCBzdWdnZXN0aW5nIGl0JiMzOTtzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBwZXJzaXN0ZW50IG1hcCwgYW5kIHRoZSBgZnJlZWAgdmFyaWFibGUgaW1wbGllcyBhIHN0YXRlIGNoYW5nZS4gSXQgbGlrZWx5IHBsYXlzIGEgcm9sZSBkdXJpbmcgYmxvY2sgZGVhbGxvY2F0aW9uLCBvciBhbGxvY2F0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIHRvIHdyaXRlIGRhdGEgb24gdGhlIG1hcCB0aGF0IGlzIHN0b3JlZCBzb21ld2hlcmUuCgpgZGJBbGxvY2AgaXMsIG9idmlvdXNseSwgZm9yIGJsb2NrIGFsbG9jYXRpb24uIEl0IGFsc28gdGFrZXMgYW4gaW5vZGUsIGEgaGludCAod2hpY2ggaXMgY3J1Y2lhbCBmb3IgcGVyZm9ybWFuY2UpLCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBhbGxvY2F0ZSwgYW5kIGEgcG9pbnRlciB0byBzdG9yZSB0aGUgcmVzdWx0LCB3aGljaCBJJiMzOTtkIGJldCBpcyB0aGUgYWxsb2NhdGVkIGJsb2NrIG51bWJlcnMuIGBkYkV4dGVuZGAgaXMgaW50ZXJlc3RpbmcsIGFuZCB0aGUgYHN0YXRpY2Aga2V5d29yZCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgaW50ZXJuYWwuIFRoZSBgYWRkbmJsb2Nrc2AgcGFyYW1ldGVyIGhlcmUgc3VnZ2VzdHMgdGhlIGFiaWxpdHkgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBibG9ja3MuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKRlMgY29udGV4dC4KCmBkYkFsbG9jQ3RsYCBpcyBhbm90aGVyIGFsbG9jYXRpb24gZnVuY3Rpb24uIFRoZSBgYm1hcGAgc3RydWN0dXJlIHN1Z2dlc3RzIGl0IG9wZXJhdGVzIG9uIGEgYml0bWFwIGFuZCBjb3VsZCBiZSBhIGxvdy1sZXZlbCBmdW5jdGlvbiByZWxhdGVkIHRvIG1ldGFkYXRhIGJsb2NrIG1hbmFnZW1lbnQuIFRoZSBgbDJuYmAgcGFyYW1ldGVyLCB3aGljaCBpcyBhIGxvZyBiYXNlIDIgbnVtYmVyIG9mIGJsb2NrcywgaXMgYSBoaW50IHRoYXQgaXQgbWlnaHQgYmUgb3BlcmF0aW5nIG9uIGEgcG93ZXItb2YtdHdvIGJsb2NrIGFsbG9jYXRpb24gc2NoZW1lLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZGlmZmVyZW5jZXMgYmV0d2VlbiBkYXRhIGJsb2NrIGFuZCBtZXRhZGF0YSBibG9jayBhbGxvY2F0aW9uLgoKRmluYWxseSwgYGRiQWxsb2NCb3R0b21VcGAgY291bGQgYmUgYSBzcGVjaWFsIGFsbG9jYXRpb24gdmFyaWFudCwgcG9zc2libHkgdXNlZCBmb3Igc3BlY2lmaWMgc2NlbmFyaW9zIG9yIHRvIG9wdGltaXplIGEgY2VydGFpbiBhbGxvY2F0aW9uIHN0cmF0ZWd5LiBJdCB0YWtlcyBhbiBpbm9kZSwgYW5kIHN0YXJ0aW5nIGJsb2NrIG51bWJlciBhbmQgbnVtYmVyIG9mIGJsb2NrcywgbGlrZSB0aGUgb3RoZXIgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gZnVuY3Rpb25zLgoKTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBpZiB0aGV5IGFyZSBpbnRlcm5hbCwgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgSkZTIGNvZGViYXNlLiBUaGF0JiMzOTtzIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZWlyIHNjb3BlIGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgZmlsZXN5c3RlbSBhcmNoaXRlY3R1cmUuIEkgbmVlZCB0byBjaGVjayB0aGUgZnVuY3Rpb24gZGVmaW5pdGlvbnMgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgcGFyYW1ldGVycyBhcmUgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKGludHx2b2lkfHN0YXRpYykuKiBkYkFsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX2RtYXAuYz03MjA9aW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXG5mcy9qZnMvamZzX2RtYXAuYy04MTgte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU0MTMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIEpGUyBpbnRlcm5hbHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQga25vd2xlZGdlIGFuZCBob3cgKkkqIHdvdWxkIHRoaW5rIGFib3V0IHRoZW06CgoqKk5hdmlnYXRpbmcgRHluYW1pYyBEYXRhIFN0cnVjdHVyZXMgd2l0aGluIEpGUyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEpGUyBmdW5jdGlvbnMsIGFuZCBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSAqZHluYW1pYyogb25lcy4gSSBrbm93LCBmcm9tIGV4cGVyaWVuY2UsIHRoYXQgYSBsb3Qgb2Ygd2hhdCBnb2VzIG9uIGluIEpGUyBpcyByZWxhdGl2ZWx5IHN0YXRpYywgYnV0IGl0JiMzOTtzIHRoZSBtb3ZpbmcgcGFydHMgdGhhdCByZWFsbHkga2VlcCB5b3Ugb24geW91ciB0b2VzLCBhbmQgdGhvc2UgYXJlIHdoYXQgSSYjMzk7bSBjb25jZW50cmF0aW5nIG9uIHJpZ2h0IG5vdy4gRXhjZXB0IGZvciBgZGJFeHRlbmRgLCB0aGF0JiMzOTtzIGEgZGlmZmVyZW50IHN0b3J5LgoKU28sIGxldCYjMzk7cyBkcmlsbCBkb3duIGludG8gc29tZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgbWFwLiBUaGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBmb3IgdGhpcyBkeW5hbWljIGJlaGF2aW9yIGFyZSBgZGJGcmVlYCwgb2J2aW91c2x5LiBJdCYjMzk7cyB0aGUgcmVsZWFzZSBtZWNoYW5pc20sIHNvIGl0cyBkeW5hbWlzbSBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsIHRvIHRoZSBoZWFsdGggb2YgdGhlIGZpbGVzeXN0ZW0uIEhvdyBkb2VzIGl0IGhhbmRsZSBjb2FsZXNjaW5nIGZyZWUgYmxvY2tzPyBXaGF0JiMzOTtzIHRoZSBpbXBhY3Qgb24gdGhlIGFsbG9jYXRpb24gbWFwPyBUaGVuIHRoZXJlJiMzOTtzIGBkYlVwZGF0ZVBNYXBgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGF0IGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHBlcnNpc3RlbnQgbWFwIChQTWFwKSBzdGF5cyBjb25zaXN0ZW50IHdpdGggd2hhdCYjMzk7cyBhY3R1YWxseSBvbiBkaXNrLiBBbnkgY29ycnVwdGlvbiBoZXJlIGFuZCB3ZSYjMzk7cmUgaW4gZGVlcCB0cm91YmxlLiBNb3Zpbmcgb24gdG8gYWxsb2NhdGlvbi4gSSB3YW50IHRvIGNoZWNrIGludG8gdGhlIGNvcmUgYWxsb2NhdGlvbiBwcmltaXRpdmVzLiBgZGJBbGxvY2AgYW5kIGBkYkFsbG9jQ3RsYCBuZWVkIGNhcmVmdWwgZXhhbWluYXRpb24gYmVjYXVzZSB0aGV5IGFyZSB0aGUgYnVpbGRpbmcgYmxvY2tzLiBIb3cgYXJlIHRoZXNlIGxpbmtlZCB0b2dldGhlcj8gQXJlIHRoZXkgYm90dG9tIHVwICh3aXRoIGBkYkFsbG9jQm90dG9tVXBgKSBvciBhIHRvcCBkb3duPyBXaGF0IHN0cmF0ZWdpZXMgZG8gdGhleSB1c2UgdG8gcHJldmVudCBmcmFnbWVudGF0aW9uLCBhbmQgd2hhdCBoYXBwZW5zIGR1cmluZyBkaWZmZXJlbnQgSS9PIGNvbmRpdGlvbnM/IEl0JiMzOTtzIGFsbCBhYm91dCByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGZyYWdtZW50YXRpb24sIGFuZCBlZmZpY2llbnQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIC0gYSBjb3JuZXJzdG9uZSBvZiBKRlMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdHJpY2t5IGJ1ZyByZXBvcnRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RiRnJlZVxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9MzY2PWludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtNDE2LS8qXG5mcy9qZnMvamZzX2RtYXAuYzo0MTc6ICogTkFNRTpcdGRiRnJlZSgpXG5mcy9qZnMvamZzX2RtYXAuYy00MTgtICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy00MzMtICovXG5mcy9qZnMvamZzX2RtYXAuYzo0MzQ6aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxuZnMvamZzL2pmc19kbWFwLmMtNDM1LXtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0xNjg1PXM2NCBkYkRpc2NhcmRBRyhzdHJ1Y3QgaW5vZGUgKmlwLCBpbnQgYWdubywgczY0IG1pbmxlbilcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU0LVx0Zm9yICh0dCA9IHRvdHJpbTsgdHQtXHUwMDNlbmJsb2NrcyAhPSAwOyB0dCYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTU6XHRcdC8qIHdoZW4gbW91bnRlZCB3aXRoIG9ubGluZSBkaXNjYXJkLCBkYkZyZWUoKSB3aWxsXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU2LVx0XHQgKiBjYWxsIGpmc19pc3N1ZV9kaXNjYXJkKCkgaXRzZWxmICovXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTc1OC1cdFx0XHRqZnNfaXNzdWVfZGlzY2FyZChpcCwgdHQtXHUwMDNlYmxrbm8sIHR0LVx1MDAzZW5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmM6MTc1OTpcdFx0ZGJGcmVlKGlwLCB0dC1cdTAwM2VibGtubywgdHQtXHUwMDNlbmJsb2Nrcyk7XG5mcy9qZnMvamZzX2RtYXAuYy0xNzYwLVx0XHR0cmltbWVkICYjNDM7PSB0dC1cdTAwM2VuYmxvY2tzO1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5oPTI4Mj1leHRlcm4gaW50IGRiVW5tb3VudChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgaW50IG1vdW50ZXJyb3IpO1xuZnMvamZzL2pmc19kbWFwLmgtMjgzLVxuZnMvamZzL2pmc19kbWFwLmg6Mjg0OmV4dGVybiBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXBibWFwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKTtcbmZzL2pmcy9qZnNfZG1hcC5oLTI4NS1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzk1LVx0XHRcdCAgICAgICBzaXplb2YgKHRlbXBfdGFibGUpKTtcbmZzL2pmcy9qZnNfZHRyZWUuYzozOTY6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgc2JpLVx1MDAzZW5icGVycGFnZSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzk3LVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHNiaS1cdTAwM2VuYnBlcnBhZ2UpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy05OTItXHRcdGlmIChyYylcbmZzL2pmcy9qZnNfZHRyZWUuYzo5OTM6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgeGxlbik7XG5mcy9qZnMvamZzX2R0cmVlLmMtOTk0LVx0XHRlbHNlXG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDMtXHRcdFx0XHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XG5mcy9qZnMvamZzX2R0cmVlLmM6MTA0NDpcdFx0XHRcdGRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSB4bGVuKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDQ1LVx0XHRcdH0gZWxzZSB7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDgtXHRcdFx0XHR4YWRkciA9IGFkZHJlc3NQWEQocHhkKSAmIzQzOyB4bGVuO1xuZnMvamZzL2pmc19kdHJlZS5jOjEwNDk6XHRcdFx0XHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSBuKTtcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDUwLVx0XHRcdH1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMTI5Ni1cdGZvciAoOyBuIFx1MDAzYyBweGRsaXN0Lm1heG5weGQ7IG4mIzQzOyYjNDM7LCBweGQmIzQzOyYjNDM7KVxuZnMvamZzL2pmc19kdHJlZS5jOjEyOTc6XHRcdGRiRnJlZShpcCwgYWRkcmVzc1BYRChweGQpLCAoczY0KSBsZW5ndGhQWEQocHhkKSk7XG5mcy9qZnMvamZzX2R0cmVlLmMtMTI5OC1cbi0tXG5mcy9qZnMvamZzX2V4dGVudC5jPTcwPWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sIGFibnIpXG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0xMzQtXHRpZiAocmMpIHtcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTM1Olx0XHRkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pO1xuZnMvamZzL2pmc19leHRlbnQuYy0xMzYtXHRcdG11dGV4X3VubG9jayhcdTAwMjZKRlNfSVAoaXApLVx1MDAzZWNvbW1pdF9tdXRleCk7XG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0xNTUtXHRpZiAocmMpIHtcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTU2Olx0XHRkYkZyZWUoaXAsIG54YWRkciwgbnhsZW4pO1xuZnMvamZzL2pmc19leHRlbnQuYy0xNTctXHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIG54bGVuKTtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz0yNDQwPWRpTmV3SUFHKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgKmlhZ25vcCwgaW50IGFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMjUzMS1cdFx0XHQgKi9cbmZzL2pmcy9qZnNfaW1hcC5jOjI1MzI6XHRcdFx0ZGJGcmVlKGlwaW1hcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xuZnMvamZzL2pmc19pbWFwLmMtMjUzMy1cbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jPTI0NTE9dm9pZCB0eEZyZWVNYXAoc3RydWN0IGlub2RlICppcCxcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTYtXHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI1MTc6XHRcdFx0XHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUxOC1cdFx0XHRcdHhhZC1cdTAwM2VmbGFnID0gMDtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjUtXHRcdFx0eGxlbiA9IGxlbmd0aFBYRChcdTAwMjZweGRsb2NrLVx1MDAzZXB4ZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI1MjY6XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjctXHRcdFx0amZzX2luZm8oXCYjMzQ7ZnJlZVdNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcJiMzNDssXG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNTM1LVx0XHRcdFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNTM2Olx0XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MzctXHRcdFx0XHRqZnNfaW5mbyhcJiMzNDtmcmVlV01hcDogeGFkZHI6MHglbHggeGxlbjolZFwmIzM0Oyxcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmM9NTI4PWludCB4dEluc2VydCh0aWRfdCB0aWQsXHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTYxMC1cdFx0XHRpZiAoKnhhZGRycCA9PSAwKSB7XG5mcy9qZnMvamZzX3h0cmVlLmM6NjExOlx0XHRcdFx0ZGJGcmVlKGlwLCB4YWRkciwgKHM2NCkgeGxlbik7XG5mcy9qZnMvamZzX3h0cmVlLmMtNjEyLVx0XHRcdFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcdFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA1OC1cdFx0LyogdW5kbyBkYXRhIGV4dGVudCBhbGxvY2F0aW9uICovXG5mcy9qZnMvamZzX3h0cmVlLmM6MjA1OTpcdFx0ZGJGcmVlKGlwLCAqeGFkZHJwLCAoczY0KSAqIHhsZW5wKTtcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDYwLVxuLS1cbmZzL2pmcy9uYW1laS5jPTM3PXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2VhX3dtYXAoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9qZnMvbmFtZWkuYy00My1cdFx0aW52YWxpZGF0ZV9keGRfbWV0YXBhZ2VzKGlub2RlLCAqZWEpO1xuZnMvamZzL25hbWVpLmM6NDQ6XHRcdGRiRnJlZShpbm9kZSwgYWRkcmVzc0RYRChlYSksIGxlbmd0aERYRChlYSkpO1xuZnMvamZzL25hbWVpLmMtNDUtXHR9XG4tLVxuZnMvamZzL3hhdHRyLmM9MjAxPXN0YXRpYyBpbnQgZWFfd3JpdGUoc3RydWN0IGlub2RlICppcCwgc3RydWN0IGpmc19lYV9saXN0ICplYWxpc3QsIGludCBzaXplLFxuLS1cbmZzL2pmcy94YXR0ci5jLTMwMS1cbmZzL2pmcy94YXR0ci5jOjMwMjpcdGRiRnJlZShpcCwgYmxrbm8sIG5ibG9ja3MpO1xuZnMvamZzL3hhdHRyLmMtMzAzLVx0cmV0dXJuIHJjO1xuLS1cbmZzL2pmcy94YXR0ci5jPTQyNj1zdGF0aWMgaW50IGVhX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYsIGludCBtaW5fc2l6ZSlcbi0tXG5mcy9qZnMveGF0dHIuYy01MzEtXHRcdGlmIChlYV9idWYtXHUwMDNlbXAgPT0gTlVMTCkge1xuZnMvamZzL3hhdHRyLmM6NTMyOlx0XHRcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xuZnMvamZzL3hhdHRyLmMtNTMzLVx0XHRcdHJjID0gLUVJTztcbi0tXG5mcy9qZnMveGF0dHIuYy01NDItXHRcdFx0ZGlzY2FyZF9tZXRhcGFnZShlYV9idWYtXHUwMDNlbXApO1xuZnMvamZzL3hhdHRyLmM6NTQzOlx0XHRcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xuZnMvamZzL3hhdHRyLmMtNTQ0LVx0XHRcdGdvdG8gY2xlYW5fdXA7XG4tLVxuZnMvamZzL3hhdHRyLmM9NTg3PXN0YXRpYyB2b2lkIGVhX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmKVxuLS1cbmZzL2pmcy94YXR0ci5jLTU5NS1cdFx0aWYgKGVhX2J1Zi1cdTAwM2VmbGFnIFx1MDAyNiBFQV9ORVcpXG5mcy9qZnMveGF0dHIuYzo1OTY6XHRcdFx0ZGJGcmVlKGlub2RlLCBhZGRyZXNzRFhEKFx1MDAyNmVhX2J1Zi1cdTAwM2VuZXdfZWEpLFxuZnMvamZzL3hhdHRyLmMtNTk3LVx0XHRcdCAgICAgICBsZW5ndGhEWEQoXHUwMDI2ZWFfYnVmLVx1MDAzZW5ld19lYSkpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0NzUKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgTWVudGFsIEF1ZGl0IG9mIGRiRnJlZSBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIHNlZWluZyBgZGJGcmVlYCBwb3AgdXAgYWxsIG92ZXIgdGhlIHBsYWNlLCBhbmQgdGhhdCYjMzk7cyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7dmUgZ290IGBqZnNfaXNzdWVfZGlzY2FyZGAsIHdoaWNoIGlzIHJlbGF0ZWQgdG8gZGlzY2FyZCBvcGVyYXRpb25zIOKAkyBnYXJiYWdlIGNvbGxlY3Rpb24uIFRoZW4gdGhlcmUmIzM5O3MgYGR0U3BsaXRVcGAsIHdoaWNoIHN1Z2dlc3RzIGRpcmVjdG9yeSB0cmVlIG1hbmlwdWxhdGlvbiwgYW5kIGBleHRBbGxvY2AsIGluZGljYXRpbmcgYmxvY2sgYWxsb2NhdGlvbiBmb3IgZXh0ZW50cy4gYGRpTmV3SUFHYCwgdGhhdCYjMzk7cyBpbm9kZSBhbGxvY2F0aW9uIGdyb3VwIHdvcmssIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgc29tZSBwYXR0ZXJuIGhlcmUuIGB0eEZyZWVNYXBgIHBvaW50cyB0byB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LCBjcml0aWNhbCBmb3IgZW5zdXJpbmcgY29uc2lzdGVuY3kgYWZ0ZXIgd3JpdGVzLiBUaGVuIGB4dEluc2VydGAgYW5kIGB4dEFwcGVuZGAsIHdoaWNoIGFyZSBib3RoIG9idmlvdXNseSByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIGBmcmVlX2VhX3dtYXBgLCBgZWFfd3JpdGVgLCBgZWFfZ2V0YCwgYW5kIGBlYV9yZWxlYXNlYCwgdGhlc2UgYXJlIGFsbCB4YXR0ciByZWxhdGVkLgoKQWxyaWdodCwgc28gdGhlIGNvbW1vbiB0aHJlYWQgaXMgY2xlYXI6IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGNvcmUgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiBGaWxlIGNyZWF0aW9uLCB3cml0ZXMsIGRlbGV0aW9uLCBhbmQgb2J2aW91c2x5IHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGxvdy1sZXZlbCBzdHVmZiB3aGVyZSBtZW1vcnkgbWFuYWdlbWVudCBpc3N1ZXMgY2FuIGVhc2lseSBoaWRlLgoKSSYjMzk7dmUgZ290IHRvIGZvbGxvdyB0aGlzIHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvbXBhbmlvbiBgZGJBbGxvY2AgaXMgZG9pbmcuLi4gYW5kIHRoYXQgY291bGQgZ2l2ZSBtZSBzb21lIGNsdWVzIGFzIHRvIHRoZSBwb3RlbnRpYWwgZm9yIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiBtaXNtYXRjaGVzLCBkb3VibGUtZnJlZXMsIG9yIGxlYWtzLiBUaGlzIHdhcnJhbnRzIGEgbW9yZSBkZXRhaWxlZCBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYkFsbG9jXFwoJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvamZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9qZnMvamZzX2RtYXAuYz03MjA9aW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTc3OS0vKlxuZnMvamZzL2pmc19kbWFwLmM6NzgwOiAqIE5BTUU6XHRkYkFsbG9jKClcbmZzL2pmcy9qZnNfZG1hcC5jLTc4MS0gKlxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXG5mcy9qZnMvamZzX2RtYXAuYy04MTgte1xuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTQ9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjA3Ni0gKlxuZnMvamZzL2pmc19kbWFwLmM6MjA3NzogKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxuZnMvamZzL2pmc19kbWFwLmMtMjA3OC0gKlx0SVdSSVRFX0xPQ0soaXBibWFwKSwgZS5nLiwgZGJBbGxvY0N0bCgpLCBoZWxkIG9uIGVudHJ5L2V4aXQ7XG4tLVxuZnMvamZzL2pmc19kbWFwLmg9Mjg5PWV4dGVybiBpbnQgZGJOZXh0QUcoc3RydWN0IGlub2RlICppcGJtYXApO1xuZnMvamZzL2pmc19kbWFwLmgtMjkwLVxuZnMvamZzL2pmc19kbWFwLmg6MjkxOmV4dGVybiBpbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5oLTI5Mi1cbi0tXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcbi0tXG5mcy9qZnMvamZzX2R0cmVlLmMtMzcxLVx0XHRcdGdvdG8gY2xlYW5fdXA7XG5mcy9qZnMvamZzX2R0cmVlLmM6MzcyOlx0XHRpZiAoZGJBbGxvYyhpcCwgMCwgc2JpLVx1MDAzZW5icGVycGFnZSwgXHUwMDI2eGFkZHIpKSB7XG5mcy9qZnMvamZzX2R0cmVlLmMtMzczLVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHNiaS1cdTAwM2VuYnBlcnBhZ2UpO1xuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYz05MjM9c3RhdGljIGludCBkdFNwbGl0VXAodGlkX3QgdGlkLFxuLS1cbmZzL2pmcy9qZnNfZHRyZWUuYy05NzgtXHRcdFx0eGxlbiYjNDM7JiM0Mzs7XG5mcy9qZnMvamZzX2R0cmVlLmM6OTc5Olx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKSkge1xuZnMvamZzL2pmc19kdHJlZS5jLTk4MC1cdFx0XHREVF9QVVRQQUdFKHNtcCk7XG4tLVxuZnMvamZzL2pmc19kdHJlZS5jLTEwNzQtXHRmb3IgKHB4ZCA9IHB4ZGxpc3QucHhkOyBuIFx1MDAzZSAwOyBuLS0sIHB4ZCYjNDM7JiM0MzspIHtcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDc1Olx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKSA9PSAwKSB7XG5mcy9qZnMvamZzX2R0cmVlLmMtMTA3Ni1cdFx0XHRQWERhZGRyZXNzKHB4ZCwgeGFkZHIpO1xuLS1cbmZzL2pmcy9qZnNfZXh0ZW50LmM9MzA5PWV4dEJhbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0ICogbmJsb2NrcywgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19leHRlbnQuYy0zMzUtXHQvKiB0cnkgdG8gYWxsb2NhdGUgYmxvY2tzICovXG5mcy9qZnMvamZzX2V4dGVudC5jOjMzNjpcdHdoaWxlICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCBuYiwgXHUwMDI2ZGFkZHIpKSAhPSAwKSB7XG5mcy9qZnMvamZzX2V4dGVudC5jLTMzNy1cdFx0LyogaWYgc29tZXRoaW5nIG90aGVyIHRoYW4gYW4gb3V0IG9mIHNwYWNlIGVycm9yLFxuLS1cbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcbi0tXG5mcy9qZnMvamZzX2ltYXAuYy0yMjYwLVxuZnMvamZzL2pmc19pbWFwLmM6MjI2MTpcdGlmICgocmMgPSBkYkFsbG9jKGlwaW1hcCwgaGludCwgKHM2NCkgaW1hcC1cdTAwM2VpbV9uYnBlcmlleHQsIFx1MDAyNmJsa25vKSkpXG5mcy9qZnMvamZzX2ltYXAuYy0yMjYyLVx0XHRnb3RvIGVycm9yX291dDtcbi0tXG5mcy9qZnMvamZzX2ltYXAuYz0yNDQwPWRpTmV3SUFHKHN0cnVjdCBpbm9tYXAgKiBpbWFwLCBpbnQgKmlhZ25vcCwgaW50IGFnbm8sIHN0cnVjdCBtZXRhcGFnZSAqKiBtcHApXG4tLVxuZnMvamZzL2pmc19pbWFwLmMtMjUwOS1cdFx0eGxlbiA9IHNiaS1cdTAwM2VuYnBlcnBhZ2U7XG5mcy9qZnMvamZzX2ltYXAuYzoyNTEwOlx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcGltYXAsIDAsIChzNjQpIHhsZW4sIFx1MDAyNnhhZGRyKSkpIHtcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MTEtXHRcdFx0LyogcmVsZWFzZSB0aGUgaW5vZGUgbWFwIGxvY2sgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmM9NTI4PWludCB4dEluc2VydCh0aWRfdCB0aWQsXHRcdC8qIHRyYW5zYWN0aW9uIGlkICovXG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTU4MS1cdFx0XHRnb3RvIG91dDtcbmZzL2pmcy9qZnNfeHRyZWUuYzo1ODI6XHRcdGlmICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCAoczY0KSB4bGVuLCBcdTAwMjZ4YWRkcikpKSB7XG5mcy9qZnMvamZzX3h0cmVlLmMtNTgzLVx0XHRcdGRxdW90X2ZyZWVfYmxvY2soaXAsIHhsZW4pO1xuLS1cbmZzL2pmcy9qZnNfeHRyZWUuYz02Nzk9eHRTcGxpdFVwKHRpZF90IHRpZCxcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtNzU5LVx0XHRmb3IgKDsgbnNwbGl0IFx1MDAzZSAwOyBuc3BsaXQtLSwgcHhkJiM0MzsmIzQzOykge1xuZnMvamZzL2pmc194dHJlZS5jOjc2MDpcdFx0XHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgKHM2NCkgMCwgKHM2NCkgeGxlbiwgXHUwMDI2eGFkZHIpKVxuZnMvamZzL2pmc194dHJlZS5jLTc2MS1cdFx0XHQgICAgPT0gMCkge1xuLS1cbmZzL2pmcy94YXR0ci5jLTUzLSAqXG5mcy9qZnMveGF0dHIuYzo1NDogKlx0RkVBTElTVHMgYXJlIHN0b3JlZCBvbiBkaXNrIHVzaW5nIGJsb2NrcyBhbGxvY2F0ZWQgYnkgZGJBbGxvYygpIGFuZFxuZnMvamZzL3hhdHRyLmMtNTUtICpcdHdyaXR0ZW4gZGlyZWN0bHkuIEFuIEVBIGxpc3QgbWF5IGJlIGluLWxpbmVkIGluIHRoZSBpbm9kZSBpZiB0aGVyZSBpc1xuLS1cbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcbi0tXG5mcy9qZnMveGF0dHIuYy0yMzEtXG5mcy9qZnMveGF0dHIuYzoyMzI6XHRyYyA9IGRiQWxsb2MoaXAsIElOT0hJTlQoaXApLCBuYmxvY2tzLCBcdTAwMjZibGtubyk7XG5mcy9qZnMveGF0dHIuYy0yMzMtXHRpZiAocmMpIHtcbi0tXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXG4tLVxuZnMvamZzL3hhdHRyLmMtNTE1LVxuZnMvamZzL3hhdHRyLmM6NTE2Olx0XHRyYyA9IGRiQWxsb2MoaW5vZGUsIElOT0hJTlQoaW5vZGUpLCAoczY0KSBibG9ja3NfbmVlZGVkLFxuZnMvamZzL3hhdHRyLmMtNTE3LVx0XHRcdCAgICAgXHUwMDI2Ymxrbm8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDc5MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6CgoqKkFuYWx5emluZyBgZGJBbGxvY2AgVXNhZ2UqKgoKT2theSwgc28gYGRiQWxsb2NgIGlzIHNob3dpbmcgdXAgcXVpdGUgYSBiaXQuIExvb2tpbmcgYXQgdGhlIGNyb3NzLXJlZmVyZW5jZXMsIGl0JiMzOTtzIHVzZWQgaW4gYGR0U3BsaXRVcGAsIGBleHRCYWxsb2NgLCBgZGlOZXdFeHRgLCBgZGlOZXdJQUdgLCBgeHRJbnNlcnRgLCBgeHRTcGxpdFVwYCwgYGVhX3dyaXRlYCwgYW5kIGBlYV9nZXRgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGV4dGVuc2l2ZSBsaXN0LiBHaXZlbiB0aG9zZSBmdW5jdGlvbnMsIHdoaWNoIGRlYWwgd2l0aCBkYXRhIHN0cnVjdHVyZXMsIGV4dGVudCBoYW5kbGluZywgYW5kIGRpcmVjdCBhY2Nlc3MsIGl0JiMzOTtzIHNhZmUgdG8gc2F5IGBkYkFsbG9jYCBpcyAqaGVhdmlseSogdXNlZCBhbmQgYWxtb3N0IGNlcnRhaW5seSByZWFjaGFibGUgZnJvbSB0aGUgc3lzdGVtIGVudHJ5IHBvaW50cy4gSSBzaG91bGQga2VlcCBpdCBpbiBtaW5kIGFzIGFuIGFyZWEgd2hlcmUgcGVyZm9ybWFuY2UgZ2FpbnMgbWlnaHQgYmUgYWNoaWV2YWJsZS4gTGV0JiMzOTtzIGRpZyBpbnRvIGBkYlVwZGF0ZVBNYXBgIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RiVXBkYXRlUE1hcFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9NDM0PWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy01MTItLypcbmZzL2pmcy9qZnNfZG1hcC5jOjUxMzogKiBOQU1FOlx0ZGJVcGRhdGVQTWFwKClcbmZzL2pmcy9qZnNfZG1hcC5jLTUxNC0gKlxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jPTUzMz1pbnRcbmZzL2pmcy9qZnNfZG1hcC5jOjUzNDpkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXG5mcy9qZnMvamZzX2RtYXAuYy01MzUtXHQgICAgIGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsaylcbi0tXG5mcy9qZnMvamZzX2RtYXAuaD0yODQ9ZXh0ZXJuIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmgtMjg1LVxuZnMvamZzL2pmc19kbWFwLmg6Mjg2OmV4dGVybiBpbnQgZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxuZnMvamZzL2pmc19kbWFwLmgtMjg3LVx0XHRcdGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYz0yMzkzPXN0YXRpYyB2b2lkIHR4QWxsb2NQTWFwKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBtYXBsb2NrICogbWFwbG9jayxcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MTUtXHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0MTY6XHRcdFx0XHRkYlVwZGF0ZVBNYXAoaXBibWFwLCBmYWxzZSwgeGFkZHIsXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MTctXHRcdFx0XHRcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI2LVx0XHR4bGVuID0gbGVuZ3RoUFhEKFx1MDAyNnB4ZGxvY2stXHUwMDNlcHhkKTtcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjQyNzpcdFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgZmFsc2UsIHhhZGRyLCAoczY0KSB4bGVuLCB0YmxrKTtcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQyOC1cdFx0amZzX2luZm8oXCYjMzQ7YWxsb2NQTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkXCYjMzQ7LCAodWxvbmcpIHhhZGRyLCB4bGVuKTtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MzUtXHRcdFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNDM2Olx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbixcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQzNy1cdFx0XHRcdCAgICAgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYz0yNDUxPXZvaWQgdHhGcmVlTWFwKHN0cnVjdCBpbm9kZSAqaXAsXG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc3LVx0XHRcdFx0XHR4bGVuID0gbGVuZ3RoWEFEKHhhZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0Nzg6XHRcdFx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIHRydWUsIHhhZGRyLFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc5LVx0XHRcdFx0XHRcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XG4tLVxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg3LVx0XHRcdHhsZW4gPSBsZW5ndGhQWEQoXHUwMDI2cHhkbG9jay1cdTAwM2VweGQpO1xuZnMvamZzL2pmc190eG5tZ3IuYzoyNDg4Olx0XHRcdGRiVXBkYXRlUE1hcChpcGJtYXAsIHRydWUsIHhhZGRyLCAoczY0KSB4bGVuLFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg5LVx0XHRcdFx0ICAgICB0YmxrKTtcbi0tXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0OTgtXHRcdFx0XHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XG5mcy9qZnMvamZzX3R4bm1nci5jOjI0OTk6XHRcdFx0XHRkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkcixcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUwMC1cdFx0XHRcdFx0ICAgICAoczY0KSB4bGVuLCB0YmxrKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIxMjkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlRyYW5zYWN0aW9uIE1hbmFnZXIgQW5hbHlzaXMqKgoKQWxyaWdodCwgc28gYGRiVXBkYXRlUE1hcGAgaXMgYSBrZXkgY29tcG9uZW50IGhlcmUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIHRyYW5zYWN0aW9uIG1hbmFnZXIuIEkmIzM5O20gc2VlaW5nIGl0JiMzOTtzIHV0aWxpemVkIGluIGB0eEFsbG9jUE1hcGAgYW5kIGB0eEZyZWVNYXBgLiBUaGlzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggcGFnZSBtYXAgYWxsb2NhdGlvbiBhbmQgZGVhbGxvY2F0aW9uIHdpdGhpbiB0aGUgY29udGV4dCBvZiB0cmFuc2FjdGlvbiBtYW5hZ2VtZW50LiBTbywgaXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcmVjb3ZlcmFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhcnRzLgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGRiQWxsb2NDdGxgIHRvIHNlZSBob3cgdGhhdCBmaXRzIGludG8gdGhpcyBwaWN0dXJlLiBJIHdhbnQgdG8gc2VlIGlmIHRoaXMgaXMgdGllZCBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGJBbGxvY0N0bFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2pmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvamZzL2pmc19kbWFwLmM9ODM9c3RhdGljIGludCBkYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsXG5mcy9qZnMvamZzX2RtYXAuYy04NC1cdFx0ICAgICBzNjQgKiByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5jOjg1OnN0YXRpYyBpbnQgZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sXG5mcy9qZnMvamZzX2RtYXAuYy04Ni1cdFx0ICAgICAgczY0ICogcmVzdWx0cyk7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTQyNj1kYkFsbG9jQUcoc3RydWN0IGJtYXAgKiBibXAsIGludCBhZ25vLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCAqIHJlc3VsdHMpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTQ1My1cdCAqIGdyb3VwIGlzIGFscmVhZHkgZnVsbHkgZGVzY3JpYmVkIGJ5IGEgZG1hcC4gIGluIHRoaXMgY2FzZSwgd2VcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTQ6XHQgKiBqdXN0IGNhbGwgZGJBbGxvY0N0bCgpIHRvIHNlYXJjaCB0aGUgZG1hcCB0cmVlIGFuZCBhbGxvY2F0ZSB0aGVcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTUtXHQgKiByZXF1aXJlZCBzcGFjZSBpZiBhdmFpbGFibGUuXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU2LVx0ICpcbmZzL2pmcy9qZnNfZG1hcC5jOjE0NTc6XHQgKiBpZiB0aGUgYWxsb2NhdGlvbiBncm91cCBpcyBjb21wbGV0ZWx5IGZyZWUsIGRiQWxsb2NDdGwoKSBpc1xuZnMvamZzL2pmc19kbWFwLmMtMTQ1OC1cdCAqIGFsc28gY2FsbGVkIHRvIGFsbG9jYXRlIHRoZSByZXF1aXJlZCBzcGFjZS4gIHRoaXMgaXMgZG9uZSBmb3Jcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNDY2LVx0ICAgIHx8IGJtcC1cdTAwM2VkYl9hZ2ZyZWVbYWdub10gPT0gYm1wLVx1MDAzZWRiX2Fnc2l6ZSkge1xuZnMvamZzL2pmc19kbWFwLmM6MTQ2NzpcdFx0cmMgPSBkYkFsbG9jQ3RsKGJtcCwgbmJsb2NrcywgbDJuYiwgYmxrbm8sIHJlc3VsdHMpO1xuZnMvamZzL2pmc19kbWFwLmMtMTQ2OC1cdFx0aWYgKChyYyA9PSAtRU5PU1BDKSBcdTAwMjZcdTAwMjZcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNTg1LVx0XHQgKi9cbmZzL2pmcy9qZnNfZG1hcC5jOjE1ODY6XHRcdHJjID0gZGJBbGxvY0N0bChibXAsIG5ibG9ja3MsIGwybmIsIGJsa25vLCByZXN1bHRzKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTE1ODctXHRcdGlmIChyYyA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTYzMD1zdGF0aWMgaW50IGRiQWxsb2NBbnkoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0xNjQ1LVx0ICovXG5mcy9qZnMvamZzX2RtYXAuYzoxNjQ2Olx0cmMgPSBkYkFsbG9jQ3RsKGJtcCwgbmJsb2NrcywgbDJuYiwgYmxrbm8sIHJlc3VsdHMpO1xuZnMvamZzL2pmc19kbWFwLmMtMTY0Ny1cdGlmIChyYyA9PSAtRU5PU1BDKSB7XG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTc5NT1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMTg2OC0vKlxuZnMvamZzL2pmc19kbWFwLmM6MTg2OTogKiBOQU1FOlx0ZGJBbGxvY0N0bCgpXG5mcy9qZnMvamZzX2RtYXAuYy0xODcwLSAqXG4tLVxuZnMvamZzL2pmc19kbWFwLmM9MTkxMz1zdGF0aWMgaW50XG5mcy9qZnMvamZzX2RtYXAuYzoxOTE0OmRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuZnMvamZzL2pmc19kbWFwLmMtMTkxNS17XG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMjA3Ny0gKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxuZnMvamZzL2pmc19kbWFwLmM6MjA3ODogKlx0SVdSSVRFX0xPQ0soaXBibWFwKSwgZS5nLiwgZGJBbGxvY0N0bCgpLCBoZWxkIG9uIGVudHJ5L2V4aXQ7XG5mcy9qZnMvamZzX2RtYXAuYy0yMDc5LSAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQyOAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIGBkYkFsbG9jQ3RsYCBhbmQgYGRiQWxsb2NCb3R0b21VcGAqKgoKQWxyaWdodCwgc28gYGRiQWxsb2NDdGxgIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gVGhhdCYjMzk7cyBzdHJhaWdodGZvcndhcmQsIGFuZCBJIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGF0IGltbWVkaWF0ZWx5IGluIHRoaXMgY29udGV4dC4gSXQmIzM5O3MgY29uZmluZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24gY29udHJvbCB3aXRoaW4gKnRoaXMqIG1vZHVsZS4gTm93LCBgZGJBbGxvY0JvdHRvbVVwYCwgdGhhdCBvbmUmIzM5O3MgKm5vdCogZGVjbGFyZWQgc3RhdGljLiBIbW0sIHRoYXQmIzM5O3MgaW50ZXJlc3RpbmcgYW5kIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzY29wZSBhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIGNhbGwgc2l0ZXMgYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIGRldGVybWluZSBpdHMgcHVycG9zZSBhbmQgcG90ZW50aWFsIGltcGFjdCBvbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3MgZGlnIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYkFsbG9jQm90dG9tVXBcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9qZnNfZG1hcC5jPTMyODA9c3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpXG4tLVxuZnMvamZzL2pmc19kbWFwLmMtMzMxMC0vKlxuZnMvamZzL2pmc19kbWFwLmM6MzMxMTogKiBOQU1FOlx0ZGJBbGxvY0JvdHRvbVVwKClcbmZzL2pmcy9qZnNfZG1hcC5jLTMzMTItICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI3LSAqL1xuZnMvamZzL2pmc19kbWFwLmM6MzMyODppbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI5LXtcbi0tXG5mcy9qZnMvamZzX2RtYXAuYz0zMzg5PXN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxuLS1cbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTYtICogRlVOQ1RJT046XHRleHRlbmQgYm1hcCBmcm9tIGJsa25vIGZvciBuYmxvY2tzO1xuZnMvamZzL2pmc19kbWFwLmM6MzQ5NzogKlx0XHRkYkV4dGVuZEZTKCkgdXBkYXRlcyBibWFwIHJlYWR5IGZvciBkYkFsbG9jQm90dG9tVXAoKTtcbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTgtICpcbi0tXG5mcy9qZnMvamZzX2RtYXAuaD0yOTY9ZXh0ZXJuIGludCBkYlN5bmMoc3RydWN0IGlub2RlICppcGJtYXApO1xuZnMvamZzL2pmc19kbWFwLmg6Mjk3OmV4dGVybiBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xuZnMvamZzL2pmc19kbWFwLmgtMjk4LWV4dGVybiBpbnQgZGJFeHRlbmRGUyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcyk7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcdFx0LyogdHJhbnNhY3Rpb24gaWQgKi9cbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjAyOC1cdGZvciAoOyBuc3BsaXQgXHUwMDNlIDA7IG5zcGxpdC0tLCBweGQmIzQzOyYjNDM7LCB4YWRkciAmIzQzOz0gbmJsb2NrcywgbWF4YmxvY2tzIC09IG5ibG9ja3MpIHtcbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDI5Olx0XHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgbmJsb2NrcykpID09IDApIHtcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDMwLVx0XHRcdFBYRGFkZHJlc3MocHhkLCB4YWRkcik7XG4tLVxuZnMvamZzL2pmc194dHJlZS5jLTIwNDctXHQgKi9cbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDQ4Olx0aWYgKChyYyA9IGRiQWxsb2NCb3R0b21VcChpcCwgeGFkZHIsIChzNjQpIHhsZW4pKSlcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDQ5LVx0XHRnb3RvIG91dDtcbi0tXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA3NC1cdCAqL1xuZnMvamZzL2pmc194dHJlZS5jOjIwNzU6XHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgeGxlbikpKVxuZnMvamZzL2pmc194dHJlZS5jLTIwNzYtXHRcdGdvdG8gb3V0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDQ0OQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoaXMsIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2Nlc3MgYXMgYW4gZXhwZXJ0IHdvdWxkOgoKKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWd5KioKCk9rYXksIHNvIGBkYkFsbG9jQm90dG9tVXBgIGlzIHV0aWxpemVkIHdpdGhpbiBgeHRBcHBlbmRgLiBUaGF0IGltbWVkaWF0ZWx5IGZvY3VzZXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBtZW1vcnkgYWxsb2NhdGlvbi9kZWFsbG9jYXRpb24gcm91dGluZXMgaW52b2x2ZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYWxsb2NhdGlvbiB3b3JrcyBhdCB0aGlzIGxvdyBsZXZlbC4gTXkgcHJpbWFyeSBhcmVhcyBvZiBmb2N1cyBhcmU6IGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBhbmQgb2YgY291cnNlLCB0aGUga2V5IGZ1bmN0aW9uLCBgZGJBbGxvY0JvdHRvbVVwYC4gSSBuZWVkIGEgY2xlYXIgdW5kZXJzdGFuZGluZyBvZiB0aGVpciBpbnRlcnBsYXkuIE15IHByaW9yaXR5IGlzIHRvIGlkZW50aWZ5IGV4YWN0bHkgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGFuZCB3aGVyZSBhbnkgcG90ZW50aWFsIGluZWZmaWNpZW5jaWVzIG9yIHZ1bG5lcmFiaWxpdGllcyBtaWdodCBiZS4KCk5leHQgc3RlcDogTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZGVmaW5lZCBmb3IgSkZTLiBJdCYjMzk7cyBjb21tb24gdG8gaGF2ZSBvcHRpbWl6ZWQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIGJhc2VkIG9uIGZpbGVzeXN0ZW0gY2hhcmFjdGVyaXN0aWNzLiBUaGUgcHJlc2VuY2Ugb2YgSkZTLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGNvdWxkIGdyZWF0bHkgaW5mbHVlbmNlIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBKRlNfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9qZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcbmZzL2pmcy9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIwOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODA2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgZGVwZW5kZW5jaWVzLCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkRpZ2dpbmcgaW50byBKRlNfRlMgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSkZTX0ZTLCByaWdodD8gQmVmb3JlIEkgZGl2ZSBpbiBhbmQgc3RhcnQgdGlua2VyaW5nLCB0aGUgZmlyc3QgdGhpbmcgSSBuZWVkIHRvIGRvLCB0aGUgKmFic29sdXRlKiBmaXJzdCB0aGluZywgaXMgbWFwIG91dCB0aG9zZSBkZXBlbmRlbmNpZXMuIEtub3dpbmcgd2hhdCBKRlNfRlMgcmVsaWVzIG9uIGlzIGNydWNpYWwuIEkmIzM5O20gdGhpbmtpbmcsIHRoaXMgaXMgYSBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gaW1tZWRpYXRlbHkgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBpbnRlcmFjdGlvbiB3aXRoIGJsb2NrIGRldmljZSBkcml2ZXJzLCB0aGUga2VybmVsJiMzOTtzIHZpcnR1YWwgZmlsZSBzeXN0ZW0gKFZGUykgbGF5ZXIsIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgcHJvYmFibHkgc29tZSBsb2NraW5nIG1lY2hhbmlzbXMgZm9yIGNvbmN1cnJlbmN5LgoKV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBidXQga25vd2luZyB0aGUgZXhhY3QgaW50ZXJhY3Rpb25zIGlzIHBhcmFtb3VudC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGZvciBoZWFkZXJzLCBpbmNsdWRlIGZpbGVzLCBhbmQgYW55IGJ1aWxkIGNvbmZpZ3VyYXRpb24gZmlsZXMgdG8gc2VlIHdoZXJlIHRoZSBzb3VyY2UgY29kZSBkZWZpbmVzIGl0cyBpbnRlcmZhY2VzLiBJIG5lZWQgdG8gYmUgYWJsZSB0byB0cmFjZSBhbGwgY2FsbHMgdXAgYW5kIGRvd24gdGhlIHN0YWNrIHRvIHByZXZlbnQgYW55IHVuZXhwZWN0ZWQgYmVoYXZpb3IgbGF0ZXIgb24uIElmIGl0IHRvdWNoZXMgc29tZSBzcGVjaWZpYyBoYXJkd2FyZSwgSSB3YW50IHRvIGtub3cgYWJvdXQgaXQuIFRoaXMgd2lsbCBwcmV2ZW50IGFueSBtYWpvciBwaXRmYWxscyBkb3duIHRoZSByb2FkLgoKVGhpcyBpbml0aWFsIGFuYWx5c2lzIHdpbGwgZGV0ZXJtaW5lIHRoZSBzY29wZSBvZiBteSB3b3JrIGFuZCBwb3RlbnRpYWwgYXJlYXMgb2YgaW1wYWN0LiBJIGRvbiYjMzk7dCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyBkb3duc3RyZWFtIHdpdGhvdXQga25vd2luZy4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJJiMzOTtsbCBidWlsZCB1cG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL2pmcy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0Y29uZmlnIEpGU19GU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7SkZTIGZpbGVzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuICAgNDpcdFx0c2VsZWN0IEJVRkZFUl9IRUFEXG4gICA1Olx0XHRzZWxlY3QgTkxTXG4gICA2Olx0XHRzZWxlY3QgTkxTX1VDUzJfVVRJTFNcbiAgIDc6XHRcdHNlbGVjdCBDUkMzMlxuICAgODpcdFx0c2VsZWN0IExFR0FDWV9ESVJFQ1RfSU9cbiAgIDk6XHRcdGhlbHBcbiAgMTA6XHRcdCAgVGhpcyBpcyBhIHBvcnQgb2YgSUJNJiMzOTtzIEpvdXJuYWxlZCBGaWxlc3lzdGVtIC4gIE1vcmUgaW5mb3JtYXRpb24gaXNcbiAgMTE6XHRcdCAgYXZhaWxhYmxlIGluIHRoZSBmaWxlIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9qZnMucnN0XHUwMDNlLlxuICAxMjpcdFxuICAxMzpcdFx0ICBJZiB5b3UgZG8gbm90IGludGVuZCB0byB1c2UgdGhlIEpGUyBmaWxlc3lzdGVtLCBzYXkgTi5cbiAgMTQ6XHRcbiAgMTU6XHRjb25maWcgSkZTX1BPU0lYX0FDTFxuICAxNjpcdFx0Ym9vbCBcJiMzNDtKRlMgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gSkZTX0ZTXG4gIDE4Olx0XHRzZWxlY3QgRlNfUE9TSVhfQUNMXG4gIDE5Olx0XHRoZWxwXG4gIDIwOlx0XHQgIFBvc2l4IEFjY2VzcyBDb250cm9sIExpc3RzIChBQ0xzKSBzdXBwb3J0IHBlcm1pc3Npb25zIGZvciB1c2VycyBhbmRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjA6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU0MDAKCQkJCQkJCW91dHB1dDogMTE0CgkJCQkJCQl0aG91Z2h0czogMTgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEpGUyBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBKRlMgcGF0Y2ggYW5kIHRoZSBrZXkgY29uZmlnIGlzIGBKRlNfRlNgLCBnb3QgaXQuIFRoZSBjb3JlIG9mIHRoaXMgc2VlbXMgdG8gYmUgYWJvdXQgdmFsaWRhdGluZyB0aGUgZG1hcCBzdHJ1Y3R1cmVzLCBwcmV2ZW50aW5nIHRob3NlIG5hc3R5IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBwYWdlIGFjY2Vzc2VzLiBTZWVtcyBwcmV0dHkgY3JpdGljYWwgZm9yIG92ZXJhbGwgc3RhYmlsaXR5LiBGdW5jdGlvbmFsbHksIHRoaXMgaXMgYSBjaGFuZ2UgdGhhdCBzY3JlYW1zIGZvciBmdXp6aW5nIHRvIHJlYWxseSBoYW1tZXIgb24gaXQgYW5kIHJvb3Qgb3V0IGFueSBsdXJraW5nIGlzc3Vlcy4KCk5vdywgbGV0JiMzOTtzIGRyaWxsIGRvd24gdG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cy4gRGVmaW5pdGVseSB0aG9zZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgbGlrZWx5IHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLgoKSnVzdCB0byBiZSBzdXJlLCBJ4oCZbGwgcXVpY2tseSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZnVuY3Rpb25zIHRoYXQgbWlnaHQgYmUgbW9kaWZpZWQuIEFoYSwgaXQgbG9va3MgbGlrZSBgZGJFeHRlbmRgIGlzIHN0YXRpYywgd2hpY2ggaXMgY2FsbGVkIGJ5IGBleHRCYWxsb2NgLCBhbmQgYGRiQWxsb2NDdGxgIGlzIGFsc28gc3RhdGljLCBjYWxsZWQgYnkgYGRiQWxsb2NBR2AsIGBkYkFsbG9jQW55YCwgYW5kIGBkYkFsbG9jYC4gR29vZCB0byBrbm93LCBidXQgbXkgZm9jdXMgcmVtYWlucyBvbiB0aGUgaW5pdGlhbCBmb3VyIGZ1bmN0aW9ucyBhcyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGRlZXBlciBhbmFseXNpcyBhbmQgdGVzdGluZy4KClJpZ2h0LCBzbyBJIGhhdmUgYSBjbGVhciBzZXQgb2YgZm9jYWwgcG9pbnRzIG5vdy4gVGltZSB0byBzZXQgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQgYW5kIGdldCB0aGVzZSBzeW1ib2xzIHVuZGVyIHRoZSBtaWNyb3Njb3BlLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSByZXN1bHRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMDowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SkZTX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGJGcmVlJiMzNDssCiAgICAmIzM0O2RiVXBkYXRlUE1hcCYjMzQ7LAogICAgJiMzNDtkYkFsbG9jJiMzNDssCiAgICAmIzM0O2RiQWxsb2NCb3R0b21VcCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtKRlNfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYkZyZWUmIzM0OywKICAgICYjMzQ7ZGJVcGRhdGVQTWFwJiMzNDssCiAgICAmIzM0O2RiQWxsb2MmIzM0OywKICAgICYjMzQ7ZGJBbGxvY0JvdHRvbVVwJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowNzozNi4wMTU5MTc5MzVaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODkxODc2NzM4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJKRlNfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYkZyZWVcIixcbiAgICBcImRiVXBkYXRlUE1hcFwiLFxuICAgIFwiZGJBbGxvY1wiLFxuICAgIFwiZGJBbGxvY0JvdHRvbVVwXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyB2YWxpZGF0aW9uIHRvIEpGUyBkbWFwIHN0cnVjdHVyZXMgKGBkYlZhbGlkYXRlRG1hcGApIHRvIHByZXZlbnQgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IGRtYXAgcGFnZSBhY2Nlc3Nlcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEpGUyBibG9jayBhbGxvY2F0aW9uIGFuZCBmcmVlaW5nIGxvZ2ljLCB3aGljaCBpcyByZWFjaGFibGUgdmlhIHN0YW5kYXJkIGZpbGVzeXN0ZW0gb3BlcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6MzYuMDE1OTMzMTM1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3Nzc3MTQzNzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA3YWUzOGRjMzUwNTVlMDBlOTUwMTYzYmVlODg3MDUwYWVkMzk1YmE5XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgSnVsIDI0IDIwOjA3OjMzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmNcXG5pbmRleCBhODQxY2YyMWRhN2RlNi4uZjE1OTU0YzFmMTk2ZGIgMTAwNjQ0XFxuLS0tIGEvZnMvamZzL2pmc19kbWFwLmNcXG4rKysgYi9mcy9qZnMvamZzX2RtYXAuY1xcbkBAIC05OCw2ICs5OCw5IEBAIHN0YXRpYyBpbnQgYmxrc3RvbDIoczY0IG5iKTtcXG4gc3RhdGljIGludCBjbnRseih1MzIgdmFsdWUpO1xcbiBzdGF0aWMgaW50IGNudHR6KHUzMiB3b3JkKTtcXG4gXFxuK3N0YXRpYyBib29sIGRiVmFsaWRhdGVEbWFwKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBkbWFwICpkcCxcXG4rXFx0XFx0XFx0ICAgczY0IGV4cGVjdGVkX3N0YXJ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgZGJBbGxvY0RtYXBCVShzdHJ1Y3QgYm1hcCAqIGJtcCwgc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLFxcbiBcXHRcXHRcXHQgaW50IG5ibG9ja3MpO1xcbiBzdGF0aWMgaW50IGRiSW5pdERtYXAoc3RydWN0IGRtYXAgKiBkcCwgczY0IGJsa25vLCBpbnQgbmJsb2Nrcyk7XFxuQEAgLTQ3Niw2ICs0NzksMTIgQEAgaW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cXHUwMDNlaV9zYiwgZHAsIGJsa25vIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIGRldGVybWluZSB0aGUgbnVtYmVyIG9mIGJsb2NrcyB0byBiZSBmcmVlZCBmcm9tXFxuIFxcdFxcdCAqIHRoaXMgZG1hcC5cXG4gXFx0XFx0ICovXFxuQEAgLTU2OCw2ICs1NzcsMTMgQEAgZGJVcGRhdGVQTWFwKHN0cnVjdCBpbm9kZSAqaXBibWFwLFxcbiBcXHRcXHRcXHRpZiAobXAgPT0gTlVMTClcXG4gXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcdFxcdFxcdG1ldGFwYWdlX3dhaXRfZm9yX2lvKG1wKTtcXG4rXFxuK1xcdFxcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoaXBibWFwLVxcdTAwM2VpX3NiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgYmxrbm8gXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4rXFx0XFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuK1xcdFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXFx1MDAzZWRhdGE7XFxuIFxcbkBAIC04ODYsNiArOTAyLDExIEBAIGludCBkYkFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBoaW50LCBzNjQgbmJsb2NrcywgczY0ICogcmVzdWx0cylcXG4gXFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChpcC1cXHUwMDNlaV9zYiwgZHAsIGJsa25vIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRnb3RvIHJlYWRfdW5sb2NrO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBmaXJzdCwgdHJ5IHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aXRoIHRoZVxcbiBcXHRcXHQgKiBibG9ja3MgYmVnaW5uaW5nIGF0IHRoZSBoaW50LlxcbiBcXHRcXHQgKi9cXG5AQCAtMTExOCw2ICsxMTM5LDEyIEBAIHN0YXRpYyBpbnQgZGJFeHRlbmQoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcywgczY0IGFkZG5ibG9ja3MpXFxuIFxcbiBcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXFx1MDAzZWlfc2IsIGRwLCBleHRibGtubyBcXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xcbitcXHRcXHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcXG4rXFx0XFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XFxuK1xcdFxcdHJldHVybiAtRUlPO1xcbitcXHR9XFxuK1xcbiBcXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXFxuIFxcdCAqIGN1cnJlbnQgYWxsb2NhdGlvbi5cXG4gXFx0ICovXFxuQEAgLTE5MDIsNyArMTkyOSw3IEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxcbiBcXHRcXHRcXHRyZXR1cm4gLUVJTztcXG4gXFx0XFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXFx1MDAzZWRhdGE7XFxuIFxcbi1cXHRcXHRpZiAoZHAtXFx1MDAzZXRyZWUuYnVkbWluIFxcdTAwM2MgMCkge1xcbitcXHRcXHRpZiAoIWRiVmFsaWRhdGVEbWFwKGJtcC1cXHUwMDNlZGJfaXBibWFwLVxcdTAwM2VpX3NiLCBkcCwgYmxrbm8gXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4gXFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXHRcXHR9XFxuQEAgLTE5MzYsNiArMTk2MywxMiBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVxcdTAwM2VkYl9pcGJtYXAtXFx1MDAzZWlfc2IsIGRwLCBiIFxcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XFxuK1xcdFxcdFxcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xcbitcXHRcXHRcXHRyYyA9IC1FSU87XFxuK1xcdFxcdFxcdGdvdG8gYmFja291dDtcXG4rXFx0XFx0fVxcbitcXG4gXFx0XFx0LyogdGhlIGRtYXAgYmV0dGVyIGJlIGFsbCBmcmVlLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRwLVxcdTAwM2V0cmVlLnN0cmVlW1JPT1RdICE9IEwyQlBFUkRNQVApIHtcXG5AQCAtMTk5Myw2ICsyMDI2LDExIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxcbiBcXHRcXHR9XFxuIFxcdFxcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVxcdTAwM2VkYXRhO1xcbiBcXG4rXFx0XFx0aWYgKCFkYlZhbGlkYXRlRG1hcChibXAtXFx1MDAzZWRiX2lwYm1hcC1cXHUwMDNlaV9zYiwgZHAsIGIgXFx1MDAyNiB+KHM2NCkoQlBFUkRNQVAgLSAxKSkpIHtcXG4rXFx0XFx0XFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBmcmVlIHRoZSBibG9ja3MgaXMgdGhpcyBkbWFwLlxcbiBcXHRcXHQgKi9cXG4gXFx0XFx0aWYgKGRiRnJlZURtYXAoYm1wLCBkcCwgYiwgQlBFUkRNQVApKSB7XFxuQEAgLTIxMzQsNiArMjE3MiwxOCBAQCBzdGF0aWMgaW50IGRiQWxsb2NEbWFwKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXFxuIFxcdHJldHVybiAocmMpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXFxuK1xcdFxcdFxcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcXG4re1xcbitcXHRpZiAobGU2NF90b19jcHUoZHAtXFx1MDAzZXN0YXJ0KSAhPSBleHBlY3RlZF9zdGFydCkge1xcbitcXHRcXHRqZnNfZXJyb3Ioc2IsIFxcXCJjb3JydXB0IGRtYXAgcGFnZTogc3RhcnQgJWxsZCBleHBlY3RlZCAlbGxkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHQgIChsb25nIGxvbmcpbGU2NF90b19jcHUoZHAtXFx1MDAzZXN0YXJ0KSxcXG4rXFx0XFx0XFx0ICAobG9uZyBsb25nKWV4cGVjdGVkX3N0YXJ0KTtcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbiBcXG4gLypcXG4gICogTkFNRTpcXHRkYkZyZWVEbWFwKClcXG5AQCAtMzMwOCw2ICszMzU4LDEyIEBAIGludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4gXFx0XFx0fVxcbiBcXHRcXHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cXHUwMDNlZGF0YTtcXG4gXFxuK1xcdFxcdGlmICghZGJWYWxpZGF0ZURtYXAoaXAtXFx1MDAzZWlfc2IsIGRwLCBibGtubyBcXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xcbitcXHRcXHRcXHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcXG4rXFx0XFx0XFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlPO1xcbitcXHRcXHR9XFxuK1xcbiBcXHRcXHQvKiBkZXRlcm1pbmUgdGhlIG51bWJlciBvZiBibG9ja3MgdG8gYmUgYWxsb2NhdGVkIGZyb21cXG4gXFx0XFx0ICogdGhpcyBkbWFwLlxcbiBcXHRcXHQgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6MzYuNzk0NzE0NjU5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDgxMzk5NTc1OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSkZTX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGJGcmVlXCIsXG4gICAgXCJkYlVwZGF0ZVBNYXBcIixcbiAgICBcImRiQWxsb2NcIixcbiAgICBcImRiQWxsb2NCb3R0b21VcFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgdmFsaWRhdGlvbiB0byBKRlMgZG1hcCBzdHJ1Y3R1cmVzIChgZGJWYWxpZGF0ZURtYXBgKSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgb3IgY29ycnVwdCBkbWFwIHBhZ2UgYWNjZXNzZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBKRlMgYmxvY2sgYWxsb2NhdGlvbiBhbmQgZnJlZWluZyBsb2dpYywgd2hpY2ggaXMgcmVhY2hhYmxlIHZpYSBzdGFuZGFyZCBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhZTM4ZGMzNTA1NWUwMGU5NTAxNjNiZWU4ODcwNTBhZWQzOTViYTlcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMDowNzozMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2pmcy9qZnNfZG1hcC5jIGIvZnMvamZzL2pmc19kbWFwLmNcbmluZGV4IGE4NDFjZjIxZGE3ZGU2Li5mMTU5NTRjMWYxOTZkYiAxMDA2NDRcbi0tLSBhL2ZzL2pmcy9qZnNfZG1hcC5jXG4rKysgYi9mcy9qZnMvamZzX2RtYXAuY1xuQEAgLTk4LDYgKzk4LDkgQEAgc3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpO1xuIHN0YXRpYyBpbnQgY250bHoodTMyIHZhbHVlKTtcbiBzdGF0aWMgaW50IGNudHR6KHUzMiB3b3JkKTtcbiBcbitzdGF0aWMgYm9vbCBkYlZhbGlkYXRlRG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBzdHJ1Y3QgZG1hcCAqZHAsXG4rXHRcdFx0ICAgczY0IGV4cGVjdGVkX3N0YXJ0KTtcbitcbiBzdGF0aWMgaW50IGRiQWxsb2NEbWFwQlUoc3RydWN0IGJtYXAgKiBibXAsIHN0cnVjdCBkbWFwICogZHAsIHM2NCBibGtubyxcbiBcdFx0XHQgaW50IG5ibG9ja3MpO1xuIHN0YXRpYyBpbnQgZGJJbml0RG1hcChzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sIGludCBuYmxvY2tzKTtcbkBAIC00NzYsNiArNDc5LDEyIEBAIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdH1cbitcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGZyZWVkIGZyb21cbiBcdFx0ICogdGhpcyBkbWFwLlxuIFx0XHQgKi9cbkBAIC01NjgsNiArNTc3LDEzIEBAIGRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCxcbiBcdFx0XHRpZiAobXAgPT0gTlVMTClcbiBcdFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHRcdG1ldGFwYWdlX3dhaXRfZm9yX2lvKG1wKTtcbitcbitcdFx0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwYm1hcC1cdTAwM2VpX3NiLFxuK1x0XHRcdFx0XHQgICAgKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGEsXG4rXHRcdFx0XHRcdCAgICBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0XHRyZWxlYXNlX21ldGFwYWdlKG1wKTtcbitcdFx0XHRcdHJldHVybiAtRUlPO1xuK1x0XHRcdH1cbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuQEAgLTg4Niw2ICs5MDIsMTEgQEAgaW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxuIFxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0Z290byByZWFkX3VubG9jaztcbitcdFx0fVxuK1xuIFx0XHQvKiBmaXJzdCwgdHJ5IHRvIHNhdGlzZnkgdGhlIGFsbG9jYXRpb24gcmVxdWVzdCB3aXRoIHRoZVxuIFx0XHQgKiBibG9ja3MgYmVnaW5uaW5nIGF0IHRoZSBoaW50LlxuIFx0XHQgKi9cbkBAIC0xMTE4LDYgKzExMzksMTIgQEAgc3RhdGljIGludCBkYkV4dGVuZChzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzNjQgYWRkbmJsb2NrcylcbiBcbiBcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBleHRibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xuK1x0XHRJUkVBRF9VTkxPQ0soaXBibWFwKTtcbitcdFx0cmV0dXJuIC1FSU87XG4rXHR9XG4rXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgdGhlIGJsb2NrcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlXG4gXHQgKiBjdXJyZW50IGFsbG9jYXRpb24uXG4gXHQgKi9cbkBAIC0xOTAyLDcgKzE5MjksNyBAQCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubywgczY0ICogcmVzdWx0cylcbiBcdFx0XHRyZXR1cm4gLUVJTztcbiBcdFx0ZHAgPSAoc3RydWN0IGRtYXAgKikgbXAtXHUwMDNlZGF0YTtcbiBcbi1cdFx0aWYgKGRwLVx1MDAzZXRyZWUuYnVkbWluIFx1MDAzYyAwKSB7XG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYmxrbm8gXHUwMDI2IH4oczY0KShCUEVSRE1BUCAtIDEpKSkge1xuIFx0XHRcdHJlbGVhc2VfbWV0YXBhZ2UobXApO1xuIFx0XHRcdHJldHVybiAtRUlPO1xuIFx0XHR9XG5AQCAtMTkzNiw2ICsxOTYzLDEyIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYiBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0cmMgPSAtRUlPO1xuK1x0XHRcdGdvdG8gYmFja291dDtcbitcdFx0fVxuK1xuIFx0XHQvKiB0aGUgZG1hcCBiZXR0ZXIgYmUgYWxsIGZyZWUuXG4gXHRcdCAqL1xuIFx0XHRpZiAoZHAtXHUwMDNldHJlZS5zdHJlZVtST09UXSAhPSBMMkJQRVJETUFQKSB7XG5AQCAtMTk5Myw2ICsyMDI2LDExIEBAIGRiQWxsb2NDdGwoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0IGJsa25vLCBzNjQgKiByZXN1bHRzKVxuIFx0XHR9XG4gXHRcdGRwID0gKHN0cnVjdCBkbWFwICopIG1wLVx1MDAzZWRhdGE7XG4gXG4rXHRcdGlmICghZGJWYWxpZGF0ZURtYXAoYm1wLVx1MDAzZWRiX2lwYm1hcC1cdTAwM2VpX3NiLCBkcCwgYiBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcbiBcdFx0LyogZnJlZSB0aGUgYmxvY2tzIGlzIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4gXHRcdGlmIChkYkZyZWVEbWFwKGJtcCwgZHAsIGIsIEJQRVJETUFQKSkge1xuQEAgLTIxMzQsNiArMjE3MiwxOCBAQCBzdGF0aWMgaW50IGRiQWxsb2NEbWFwKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXG4gXHRyZXR1cm4gKHJjKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgZGJWYWxpZGF0ZURtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3Qgc3RydWN0IGRtYXAgKmRwLFxuK1x0XHRcdCAgIHM2NCBleHBlY3RlZF9zdGFydClcbit7XG4rXHRpZiAobGU2NF90b19jcHUoZHAtXHUwMDNlc3RhcnQpICE9IGV4cGVjdGVkX3N0YXJ0KSB7XG4rXHRcdGpmc19lcnJvcihzYiwgXCJjb3JydXB0IGRtYXAgcGFnZTogc3RhcnQgJWxsZCBleHBlY3RlZCAlbGxkXFxuXCIsXG4rXHRcdFx0ICAobG9uZyBsb25nKWxlNjRfdG9fY3B1KGRwLVx1MDAzZXN0YXJ0KSxcbitcdFx0XHQgIChsb25nIGxvbmcpZXhwZWN0ZWRfc3RhcnQpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHR9XG4rXG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4gXG4gLypcbiAgKiBOQU1FOlx0ZGJGcmVlRG1hcCgpXG5AQCAtMzMwOCw2ICszMzU4LDEyIEBAIGludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcbiBcdFx0fVxuIFx0XHRkcCA9IChzdHJ1Y3QgZG1hcCAqKSBtcC1cdTAwM2VkYXRhO1xuIFxuK1x0XHRpZiAoIWRiVmFsaWRhdGVEbWFwKGlwLVx1MDAzZWlfc2IsIGRwLCBibGtubyBcdTAwMjYgfihzNjQpKEJQRVJETUFQIC0gMSkpKSB7XG4rXHRcdFx0cmVsZWFzZV9tZXRhcGFnZShtcCk7XG4rXHRcdFx0SVJFQURfVU5MT0NLKGlwYm1hcCk7XG4rXHRcdFx0cmV0dXJuIC1FSU87XG4rXHRcdH1cbitcbiBcdFx0LyogZGV0ZXJtaW5lIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGJlIGFsbG9jYXRlZCBmcm9tXG4gXHRcdCAqIHRoaXMgZG1hcC5cbiBcdFx0ICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowNzozNi43OTQ3MTcyMDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzY3ODE3OTc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSkZTIEZpbGVzeXN0ZW0gUGF0Y2ggZm9yIEZ1enppbmcgT3Bwb3J0dW5pdGllcyoqXG5cbk9rYXksIHNvIEkndmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMgYSBuZXcgYGRiVmFsaWRhdGVEbWFwYCBmdW5jdGlvbiBpbnRvIGBmcy9qZnMvamZzX2RtYXAuY2AuIFRoaXMgaXMgYSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBKRlMgZmlsZXN5c3RlbSwgYWRkaW5nIHNvbWUgdmFsaWRhdGlvbiBmb3IgdGhlIGBkbWFwYCBzdHJ1Y3R1cmUsIHNwZWNpZmljYWxseSBjaGVja2luZyB0aGUgYGRwLVx1MDAzZXN0YXJ0YCB2YWx1ZSBhZ2FpbnN0IGFuIGBleHBlY3RlZF9zdGFydGAuIElmIHRoYXQgdmFsaWRhdGlvbiBmYWlscywgd2UncmUgZ2V0dGluZyBhbiBgLUVJT2AgZXJyb3IgYmFjay4gU2VlbXMgbGlrZSBhIGdvb2QgdGFyZ2V0IGZvciBmdXp6aW5nLlxuXG5UaGUgaW1wb3J0YW50IHRoaW5nIG5vdyBpcyB0byBmaWd1cmUgb3V0IHRoZSByaWdodCB3YXkgdG8gZnV6eiB0aGlzLiBCYXNlZCBvbiB0aGUgY29kZSwgYGRiVmFsaWRhdGVEbWFwYCBpcyBnZXR0aW5nIGNhbGxlZCB3aXRoaW4gYSBidW5jaCBvZiBkaWZmZXJlbnQgZnVuY3Rpb25zOiBgZGJGcmVlYCwgYGRiVXBkYXRlUE1hcGAsIGBkYkFsbG9jYCwgYGRiRXh0ZW5kYCwgYGRiQWxsb2NDdGxgIChhbmQgdGhpcyBvbmUncyBjYWxsZWQgZnJvbSBtdWx0aXBsZSBwbGFjZXMpLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIFRoYXQncyB3aGVyZSB3ZSBzaG91bGQgZm9jdXMgb3VyIGVmZm9ydHMuXG5cbkZpcnN0LCBsZXQncyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBleHBvc2VkLiBJdCBsb29rcyBsaWtlIGBkYkZyZWVgLCBgZGJVcGRhdGVQTWFwYCwgYGRiQWxsb2NgLCBgZGJBbGxvY0N0bGAgYW5kIGBkYkFsbG9jQm90dG9tVXBgIGFyZSBhbGwgbm90IHN0YXRpYywgd2hpbGUgYGRiRXh0ZW5kYCBpcyBzdGF0aWMuIFRoYXQgZ2l2ZXMgdXMgYSBzdGFydGluZyBwb2ludC4gV2UgY2FuIHVzZSB0aGUgaW5mb3JtYXRpb24gdG8gc2VhcmNoIGZvciB3aGVyZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHVzZWQuXG5cbk9mIGNvdXJzZSwgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgSkZTIGNvbmZpZyBvcHRpb25zIGFzIHdlbGwsIHNwZWNpZmljYWxseSBgQ09ORklHX0pGU19GU2AuIFdlIHNob3VsZCBtYWtlIHN1cmUgdGhhdCB0aGUgSkZTIGZpbGVzeXN0ZW0gaXMgZW5hYmxlZCBiZWZvcmUgd2Ugc3RhcnQgZnV6emluZy5cblxuSSdsbCBydW4gYGdyZXBwZXJgIG92ZXIgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGBkYkV4dGVuZGAsIGBkYkFsbG9jQ3RsYCwgYW5kIGBkYkFsbG9jQm90dG9tVXBgIHRvIG1hcCBvdXQgdGhlIGNhbGwgcGF0aHMgYW5kIHNlZSBpZiBhbnkgb2YgdGhlbSBhcmUgcGFydGljdWxhcmx5IGludGVyZXN0aW5nIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBsb29raW5nIGZvciBob3QgcGF0aHMsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBleHBvc2UgYSB2dWxuZXJhYmlsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTg3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NDMuMTYyNTM5MjU2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1NjIwMDYzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeKGludHx2b2lkfHN0YXRpYykuKiBkYkZyZWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTM2Nj1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNDMzLSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjQzNDppbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpXFxuZnMvamZzL2pmc19kbWFwLmMtNDM1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NDMuOTE4NzQ3NjMyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYxMjkwNjEzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSkZTIEJsb2NrIEFsbG9jYXRpb24gYW5kIERlYWxsb2NhdGlvbiBGdW5jdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBKRlMgZnVuY3Rpb25zOiBgZGJGcmVlYCwgYGRiVXBkYXRlUE1hcGAsIGBkYkFsbG9jYCwgYGRiRXh0ZW5kYCwgYGRiQWxsb2NDdGxgLCBhbmQgYGRiQWxsb2NCb3R0b21VcGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBjYXRlZ29yaXplIHRoZW0gYmFzZWQgb24gdGhlaXIgcm9sZXMgYW5kIHVuZGVyc3RhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cbmBkYkZyZWVgIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQ7IGl0J3MgdGhlIGZ1bmN0aW9uIGZvciBmcmVlaW5nIGJsb2NrcywgdGFraW5nIHRoZSBpbm9kZSwgdGhlIHN0YXJ0aW5nIGJsb2NrIG51bWJlciwgYW5kIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGZyZWUgYXMgYXJndW1lbnRzLiBJJ2QgZXhwZWN0IGl0IHRvIHVwZGF0ZSBiaXRtYXBzIGFuZCBwb3NzaWJseSBjb2FsZXNjZSBmcmVlIGV4dGVudHMuIGBkYlVwZGF0ZVBNYXBgIGlzIGludGVyZXN0aW5nOyBpdCBsb29rcyBsaWtlIGl0IGlzIHRvIHVwZGF0ZSB0aGUgcGh5c2ljYWwgbWFwcGluZywgc3VnZ2VzdGluZyBpdCdzIHRpZ2h0bHkgY291cGxlZCB3aXRoIHRoZSBwZXJzaXN0ZW50IG1hcCwgYW5kIHRoZSBgZnJlZWAgdmFyaWFibGUgaW1wbGllcyBhIHN0YXRlIGNoYW5nZS4gSXQgbGlrZWx5IHBsYXlzIGEgcm9sZSBkdXJpbmcgYmxvY2sgZGVhbGxvY2F0aW9uLCBvciBhbGxvY2F0aW9uIGFuZCBjb3VsZCBiZSB1c2VkIHRvIHdyaXRlIGRhdGEgb24gdGhlIG1hcCB0aGF0IGlzIHN0b3JlZCBzb21ld2hlcmUuXG5cbmBkYkFsbG9jYCBpcywgb2J2aW91c2x5LCBmb3IgYmxvY2sgYWxsb2NhdGlvbi4gSXQgYWxzbyB0YWtlcyBhbiBpbm9kZSwgYSBoaW50ICh3aGljaCBpcyBjcnVjaWFsIGZvciBwZXJmb3JtYW5jZSksIHRoZSBudW1iZXIgb2YgYmxvY2tzIHRvIGFsbG9jYXRlLCBhbmQgYSBwb2ludGVyIHRvIHN0b3JlIHRoZSByZXN1bHQsIHdoaWNoIEknZCBiZXQgaXMgdGhlIGFsbG9jYXRlZCBibG9jayBudW1iZXJzLiBgZGJFeHRlbmRgIGlzIGludGVyZXN0aW5nLCBhbmQgdGhlIGBzdGF0aWNgIGtleXdvcmQgc3VnZ2VzdHMgaXQncyBsaWtlbHkgaW50ZXJuYWwuIFRoZSBgYWRkbmJsb2Nrc2AgcGFyYW1ldGVyIGhlcmUgc3VnZ2VzdHMgdGhlIGFiaWxpdHkgdG8gaW5jcmVhc2UgdGhlIG51bWJlciBvZiBibG9ja3MuIEkgbmVlZCB0byBzZWUgZXhhY3RseSB3aGVyZSB0aGlzIGlzIHVzZWQgd2l0aGluIHRoZSBKRlMgY29udGV4dC5cblxuYGRiQWxsb2NDdGxgIGlzIGFub3RoZXIgYWxsb2NhdGlvbiBmdW5jdGlvbi4gVGhlIGBibWFwYCBzdHJ1Y3R1cmUgc3VnZ2VzdHMgaXQgb3BlcmF0ZXMgb24gYSBiaXRtYXAgYW5kIGNvdWxkIGJlIGEgbG93LWxldmVsIGZ1bmN0aW9uIHJlbGF0ZWQgdG8gbWV0YWRhdGEgYmxvY2sgbWFuYWdlbWVudC4gVGhlIGBsMm5iYCBwYXJhbWV0ZXIsIHdoaWNoIGlzIGEgbG9nIGJhc2UgMiBudW1iZXIgb2YgYmxvY2tzLCBpcyBhIGhpbnQgdGhhdCBpdCBtaWdodCBiZSBvcGVyYXRpbmcgb24gYSBwb3dlci1vZi10d28gYmxvY2sgYWxsb2NhdGlvbiBzY2hlbWUuIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgdGhlIHBvdGVudGlhbCBkaWZmZXJlbmNlcyBiZXR3ZWVuIGRhdGEgYmxvY2sgYW5kIG1ldGFkYXRhIGJsb2NrIGFsbG9jYXRpb24uXG5cbkZpbmFsbHksIGBkYkFsbG9jQm90dG9tVXBgIGNvdWxkIGJlIGEgc3BlY2lhbCBhbGxvY2F0aW9uIHZhcmlhbnQsIHBvc3NpYmx5IHVzZWQgZm9yIHNwZWNpZmljIHNjZW5hcmlvcyBvciB0byBvcHRpbWl6ZSBhIGNlcnRhaW4gYWxsb2NhdGlvbiBzdHJhdGVneS4gSXQgdGFrZXMgYW4gaW5vZGUsIGFuZCBzdGFydGluZyBibG9jayBudW1iZXIgYW5kIG51bWJlciBvZiBibG9ja3MsIGxpa2UgdGhlIG90aGVyIGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIGZ1bmN0aW9ucy5cblxuTXkgbmV4dCBzdGVwIGlzIGRlZmluaXRlbHkgdG8gY2hlY2sgd2hldGhlciB0aGVzZSBmdW5jdGlvbnMgYXJlIGV4cG9ydGVkIGZvciB1c2UgYnkgb3RoZXIgbW9kdWxlcyBvciBpZiB0aGV5IGFyZSBpbnRlcm5hbCwgb25seSBhY2Nlc3NpYmxlIHdpdGhpbiB0aGUgSkZTIGNvZGViYXNlLiBUaGF0J3Mga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlaXIgc2NvcGUgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBmaWxlc3lzdGVtIGFyY2hpdGVjdHVyZS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBmdW5jdGlvbiBkZWZpbml0aW9ucyB0byB1bmRlcnN0YW5kIGhvdyB0aG9zZSBwYXJhbWV0ZXJzIGFyZSB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTAxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjQ5LjUzMTY1NjA5NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzk3ODQwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihpbnR8dm9pZHxzdGF0aWMpLiogZGJBbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NzIwPWludCBkYk5leHRBRyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTgxNi0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzo4MTc6aW50IGRiQWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTgxOC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjQ5LjcxMTQ1MzI1OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDAxMjAwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIEpGUyBpbnRlcm5hbHMsIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnQga25vd2xlZGdlIGFuZCBob3cgKkkqIHdvdWxkIHRoaW5rIGFib3V0IHRoZW06XG5cbioqTmF2aWdhdGluZyBEeW5hbWljIERhdGEgU3RydWN0dXJlcyB3aXRoaW4gSkZTKipcblxuQWxyaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoZSBjb3JlIEpGUyBmdW5jdGlvbnMsIGFuZCBJJ20gZm9jdXNpbmcgb24gdGhlICpkeW5hbWljKiBvbmVzLiBJIGtub3csIGZyb20gZXhwZXJpZW5jZSwgdGhhdCBhIGxvdCBvZiB3aGF0IGdvZXMgb24gaW4gSkZTIGlzIHJlbGF0aXZlbHkgc3RhdGljLCBidXQgaXQncyB0aGUgbW92aW5nIHBhcnRzIHRoYXQgcmVhbGx5IGtlZXAgeW91IG9uIHlvdXIgdG9lcywgYW5kIHRob3NlIGFyZSB3aGF0IEknbSBjb25jZW50cmF0aW5nIG9uIHJpZ2h0IG5vdy4gRXhjZXB0IGZvciBgZGJFeHRlbmRgLCB0aGF0J3MgYSBkaWZmZXJlbnQgc3RvcnkuXG5cblNvLCBsZXQncyBkcmlsbCBkb3duIGludG8gc29tZSBvZiB0aGUgZnVuY3Rpb25zIHRoYXQgaGFuZGxlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCB0aGUgbWFwLiBUaGUgb25lcyB0aGF0IGltbWVkaWF0ZWx5IGNvbWUgdG8gbWluZCBmb3IgdGhpcyBkeW5hbWljIGJlaGF2aW9yIGFyZSBgZGJGcmVlYCwgb2J2aW91c2x5LiBJdCdzIHRoZSByZWxlYXNlIG1lY2hhbmlzbSwgc28gaXRzIGR5bmFtaXNtIGlzIGFic29sdXRlbHkgY3JpdGljYWwgdG8gdGhlIGhlYWx0aCBvZiB0aGUgZmlsZXN5c3RlbS4gSG93IGRvZXMgaXQgaGFuZGxlIGNvYWxlc2NpbmcgZnJlZSBibG9ja3M/IFdoYXQncyB0aGUgaW1wYWN0IG9uIHRoZSBhbGxvY2F0aW9uIG1hcD8gVGhlbiB0aGVyZSdzIGBkYlVwZGF0ZVBNYXBgLiBJIG5lZWQgdG8gcmV2aWV3IGhvdyB0aGF0IGZ1bmN0aW9uIGVuc3VyZXMgdGhlIHBlcnNpc3RlbnQgbWFwIChQTWFwKSBzdGF5cyBjb25zaXN0ZW50IHdpdGggd2hhdCdzIGFjdHVhbGx5IG9uIGRpc2suIEFueSBjb3JydXB0aW9uIGhlcmUgYW5kIHdlJ3JlIGluIGRlZXAgdHJvdWJsZS4gTW92aW5nIG9uIHRvIGFsbG9jYXRpb24uIEkgd2FudCB0byBjaGVjayBpbnRvIHRoZSBjb3JlIGFsbG9jYXRpb24gcHJpbWl0aXZlcy4gYGRiQWxsb2NgIGFuZCBgZGJBbGxvY0N0bGAgbmVlZCBjYXJlZnVsIGV4YW1pbmF0aW9uIGJlY2F1c2UgdGhleSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2Nrcy4gSG93IGFyZSB0aGVzZSBsaW5rZWQgdG9nZXRoZXI/IEFyZSB0aGV5IGJvdHRvbSB1cCAod2l0aCBgZGJBbGxvY0JvdHRvbVVwYCkgb3IgYSB0b3AgZG93bj8gV2hhdCBzdHJhdGVnaWVzIGRvIHRoZXkgdXNlIHRvIHByZXZlbnQgZnJhZ21lbnRhdGlvbiwgYW5kIHdoYXQgaGFwcGVucyBkdXJpbmcgZGlmZmVyZW50IEkvTyBjb25kaXRpb25zPyBJdCdzIGFsbCBhYm91dCByZXNvdXJjZSBhdmFpbGFiaWxpdHksIGZyYWdtZW50YXRpb24sIGFuZCBlZmZpY2llbnQgYWxsb2NhdGlvbiBzdHJhdGVnaWVzIC0gYSBjb3JuZXJzdG9uZSBvZiBKRlMuIFRoZXNlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBsaWtlbHkgYmUgdGhlIHNvdXJjZSBvZiBpbnRlcmVzdGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcywgb3IgdHJpY2t5IGJ1ZyByZXBvcnRzLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGVtIGluc2lkZSBhbmQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NDEzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTMuODUxNTc2MDA1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMTcyNTIyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYkZyZWVcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTM2Nj1pbnQgZGJTeW5jKHN0cnVjdCBpbm9kZSAqaXBibWFwKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtNDE2LS8qXFxuZnMvamZzL2pmc19kbWFwLmM6NDE3OiAqIE5BTUU6XFx0ZGJGcmVlKClcXG5mcy9qZnMvamZzX2RtYXAuYy00MTgtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQzMy0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzo0MzQ6aW50IGRiRnJlZShzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTQzNS17XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz0xNjg1PXM2NCBkYkRpc2NhcmRBRyhzdHJ1Y3QgaW5vZGUgKmlwLCBpbnQgYWdubywgczY0IG1pbmxlbilcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3NTQtXFx0Zm9yICh0dCA9IHRvdHJpbTsgdHQtXFx1MDAzZW5ibG9ja3MgIT0gMDsgdHQrKykge1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTU6XFx0XFx0Lyogd2hlbiBtb3VudGVkIHdpdGggb25saW5lIGRpc2NhcmQsIGRiRnJlZSgpIHdpbGxcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzU2LVxcdFxcdCAqIGNhbGwgamZzX2lzc3VlX2Rpc2NhcmQoKSBpdHNlbGYgKi9cXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE3NTgtXFx0XFx0XFx0amZzX2lzc3VlX2Rpc2NhcmQoaXAsIHR0LVxcdTAwM2VibGtubywgdHQtXFx1MDAzZW5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5jOjE3NTk6XFx0XFx0ZGJGcmVlKGlwLCB0dC1cXHUwMDNlYmxrbm8sIHR0LVxcdTAwM2VuYmxvY2tzKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNzYwLVxcdFxcdHRyaW1tZWQgKz0gdHQtXFx1MDAzZW5ibG9ja3M7XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaD0yODI9ZXh0ZXJuIGludCBkYlVubW91bnQoc3RydWN0IGlub2RlICppcGJtYXAsIGludCBtb3VudGVycm9yKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yODMtXFxuZnMvamZzL2pmc19kbWFwLmg6Mjg0OmV4dGVybiBpbnQgZGJGcmVlKHN0cnVjdCBpbm9kZSAqaXBibWFwLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yODUtXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTUtXFx0XFx0XFx0ICAgICAgIHNpemVvZiAodGVtcF90YWJsZSkpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzozOTY6XFx0XFx0XFx0ZGJGcmVlKGlwLCB4YWRkciwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0zOTctXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtOTkyLVxcdFxcdGlmIChyYylcXG5mcy9qZnMvamZzX2R0cmVlLmM6OTkzOlxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIHhsZW4pO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy05OTQtXFx0XFx0ZWxzZVxcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDMtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDQ0OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgbnhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX2R0cmVlLmMtMTA0NS1cXHRcXHRcXHR9IGVsc2Uge1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNDgtXFx0XFx0XFx0XFx0eGFkZHIgPSBhZGRyZXNzUFhEKHB4ZCkgKyB4bGVuO1xcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMDQ5OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIG4pO1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDUwLVxcdFxcdFxcdH1cXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMjk2LVxcdGZvciAoOyBuIFxcdTAwM2MgcHhkbGlzdC5tYXhucHhkOyBuKyssIHB4ZCsrKVxcbmZzL2pmcy9qZnNfZHRyZWUuYzoxMjk3OlxcdFxcdGRiRnJlZShpcCwgYWRkcmVzc1BYRChweGQpLCAoczY0KSBsZW5ndGhQWEQocHhkKSk7XFxuZnMvamZzL2pmc19kdHJlZS5jLTEyOTgtXFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jPTcwPWV4dEFsbG9jKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCB4bGVuLCBzNjQgcG5vLCB4YWRfdCAqIHhwLCBib29sIGFibnIpXFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jLTEzNC1cXHRpZiAocmMpIHtcXG5mcy9qZnMvamZzX2V4dGVudC5jOjEzNTpcXHRcXHRkYkZyZWUoaXAsIG54YWRkciwgKHM2NCkgbnhsZW4pO1xcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMTM2LVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2SkZTX0lQKGlwKS1cXHUwMDNlY29tbWl0X211dGV4KTtcXG4tLVxcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMTU1LVxcdGlmIChyYykge1xcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MTU2OlxcdFxcdGRiRnJlZShpcCwgbnhhZGRyLCBueGxlbik7XFxuZnMvamZzL2pmc19leHRlbnQuYy0xNTctXFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgbnhsZW4pO1xcbi0tXFxuZnMvamZzL2pmc19pbWFwLmM9MjQ0MD1kaU5ld0lBRyhzdHJ1Y3QgaW5vbWFwICogaW1hcCwgaW50ICppYWdub3AsIGludCBhZ25vLCBzdHJ1Y3QgbWV0YXBhZ2UgKiogbXBwKVxcbi0tXFxuZnMvamZzL2pmc19pbWFwLmMtMjUzMS1cXHRcXHRcXHQgKi9cXG5mcy9qZnMvamZzX2ltYXAuYzoyNTMyOlxcdFxcdFxcdGRiRnJlZShpcGltYXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX2ltYXAuYy0yNTMzLVxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYz0yNDUxPXZvaWQgdHhGcmVlTWFwKHN0cnVjdCBpbm9kZSAqaXAsXFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTYtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFhBRCh4YWQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjUxNzpcXHRcXHRcXHRcXHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MTgtXFx0XFx0XFx0XFx0eGFkLVxcdTAwM2VmbGFnID0gMDtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUyNS1cXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKFxcdTAwMjZweGRsb2NrLVxcdTAwM2VweGQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjUyNjpcXHRcXHRcXHRkYkZyZWUoaXAsIHhhZGRyLCAoczY0KSB4bGVuKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MjctXFx0XFx0XFx0amZzX2luZm8oXFxcImZyZWVXTWFwOiB4YWRkcjoweCVseCB4bGVuOiVkXFxcIixcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUzNS1cXHRcXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNTM2OlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjUzNy1cXHRcXHRcXHRcXHRqZnNfaW5mbyhcXFwiZnJlZVdNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcXFwiLFxcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jPTUyOD1pbnQgeHRJbnNlcnQodGlkX3QgdGlkLFxcdFxcdC8qIHRyYW5zYWN0aW9uIGlkICovXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtNjEwLVxcdFxcdFxcdGlmICgqeGFkZHJwID09IDApIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NjExOlxcdFxcdFxcdFxcdGRiRnJlZShpcCwgeGFkZHIsIChzNjQpIHhsZW4pO1xcbmZzL2pmcy9qZnNfeHRyZWUuYy02MTItXFx0XFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmM9MTk1Nj1pbnQgeHRBcHBlbmQodGlkX3QgdGlkLFxcdFxcdC8qIHRyYW5zYWN0aW9uIGlkICovXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA1OC1cXHRcXHQvKiB1bmRvIGRhdGEgZXh0ZW50IGFsbG9jYXRpb24gKi9cXG5mcy9qZnMvamZzX3h0cmVlLmM6MjA1OTpcXHRcXHRkYkZyZWUoaXAsICp4YWRkcnAsIChzNjQpICogeGxlbnApO1xcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDYwLVxcbi0tXFxuZnMvamZzL25hbWVpLmM9Mzc9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfZWFfd21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvamZzL25hbWVpLmMtNDMtXFx0XFx0aW52YWxpZGF0ZV9keGRfbWV0YXBhZ2VzKGlub2RlLCAqZWEpO1xcbmZzL2pmcy9uYW1laS5jOjQ0OlxcdFxcdGRiRnJlZShpbm9kZSwgYWRkcmVzc0RYRChlYSksIGxlbmd0aERYRChlYSkpO1xcbmZzL2pmcy9uYW1laS5jLTQ1LVxcdH1cXG4tLVxcbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTMwMS1cXG5mcy9qZnMveGF0dHIuYzozMDI6XFx0ZGJGcmVlKGlwLCBibGtubywgbmJsb2Nrcyk7XFxuZnMvamZzL3hhdHRyLmMtMzAzLVxcdHJldHVybiByYztcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTQyNj1zdGF0aWMgaW50IGVhX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYsIGludCBtaW5fc2l6ZSlcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTUzMS1cXHRcXHRpZiAoZWFfYnVmLVxcdTAwM2VtcCA9PSBOVUxMKSB7XFxuZnMvamZzL3hhdHRyLmM6NTMyOlxcdFxcdFxcdGRiRnJlZShpbm9kZSwgYmxrbm8sIChzNjQpIGJsb2Nrc19uZWVkZWQpO1xcbmZzL2pmcy94YXR0ci5jLTUzMy1cXHRcXHRcXHRyYyA9IC1FSU87XFxuLS1cXG5mcy9qZnMveGF0dHIuYy01NDItXFx0XFx0XFx0ZGlzY2FyZF9tZXRhcGFnZShlYV9idWYtXFx1MDAzZW1wKTtcXG5mcy9qZnMveGF0dHIuYzo1NDM6XFx0XFx0XFx0ZGJGcmVlKGlub2RlLCBibGtubywgKHM2NCkgYmxvY2tzX25lZWRlZCk7XFxuZnMvamZzL3hhdHRyLmMtNTQ0LVxcdFxcdFxcdGdvdG8gY2xlYW5fdXA7XFxuLS1cXG5mcy9qZnMveGF0dHIuYz01ODc9c3RhdGljIHZvaWQgZWFfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZWFfYnVmZmVyICplYV9idWYpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01OTUtXFx0XFx0aWYgKGVhX2J1Zi1cXHUwMDNlZmxhZyBcXHUwMDI2IEVBX05FVylcXG5mcy9qZnMveGF0dHIuYzo1OTY6XFx0XFx0XFx0ZGJGcmVlKGlub2RlLCBhZGRyZXNzRFhEKFxcdTAwMjZlYV9idWYtXFx1MDAzZW5ld19lYSksXFxuZnMvamZzL3hhdHRyLmMtNTk3LVxcdFxcdFxcdCAgICAgICBsZW5ndGhEWEQoXFx1MDAyNmVhX2J1Zi1cXHUwMDNlbmV3X2VhKSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA3OjU0LjA2MzMwNjA1N1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyMTg3OTYwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTWVudGFsIEF1ZGl0IG9mIGRiRnJlZSBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBzZWVpbmcgYGRiRnJlZWAgcG9wIHVwIGFsbCBvdmVyIHRoZSBwbGFjZSwgYW5kIHRoYXQncyBpbW1lZGlhdGVseSByYWlzaW5nIGEgZmxhZy4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGVyZSB0aGlzIGlzIGJlaW5nIHVzZWQuIExldCdzIHNlZS4uLiBJJ3ZlIGdvdCBgamZzX2lzc3VlX2Rpc2NhcmRgLCB3aGljaCBpcyByZWxhdGVkIHRvIGRpc2NhcmQgb3BlcmF0aW9ucyDigJMgZ2FyYmFnZSBjb2xsZWN0aW9uLiBUaGVuIHRoZXJlJ3MgYGR0U3BsaXRVcGAsIHdoaWNoIHN1Z2dlc3RzIGRpcmVjdG9yeSB0cmVlIG1hbmlwdWxhdGlvbiwgYW5kIGBleHRBbGxvY2AsIGluZGljYXRpbmcgYmxvY2sgYWxsb2NhdGlvbiBmb3IgZXh0ZW50cy4gYGRpTmV3SUFHYCwgdGhhdCdzIGlub2RlIGFsbG9jYXRpb24gZ3JvdXAgd29yaywgSSdtIGFscmVhZHkgc2VlaW5nIHNvbWUgcGF0dGVybiBoZXJlLiBgdHhGcmVlTWFwYCBwb2ludHMgdG8gdHJhbnNhY3Rpb24gbWFuYWdlbWVudCwgY3JpdGljYWwgZm9yIGVuc3VyaW5nIGNvbnNpc3RlbmN5IGFmdGVyIHdyaXRlcy4gVGhlbiBgeHRJbnNlcnRgIGFuZCBgeHRBcHBlbmRgLCB3aGljaCBhcmUgYm90aCBvYnZpb3VzbHkgcmVsYXRlZCB0byBleHRlbmRlZCBhdHRyaWJ1dGVzLiBgZnJlZV9lYV93bWFwYCwgYGVhX3dyaXRlYCwgYGVhX2dldGAsIGFuZCBgZWFfcmVsZWFzZWAsIHRoZXNlIGFyZSBhbGwgeGF0dHIgcmVsYXRlZC5cblxuQWxyaWdodCwgc28gdGhlIGNvbW1vbiB0aHJlYWQgaXMgY2xlYXI6IHdlJ3JlIHRhbGtpbmcgYWJvdXQgY29yZSBmaWxlc3lzdGVtIG9wZXJhdGlvbnMuIEZpbGUgY3JlYXRpb24sIHdyaXRlcywgZGVsZXRpb24sIGFuZCBvYnZpb3VzbHkgeGF0dHIgbWFuaXB1bGF0aW9ucy4gVGhpcyBpcyBwcmVjaXNlbHkgdGhlIGtpbmQgb2YgbG93LWxldmVsIHN0dWZmIHdoZXJlIG1lbW9yeSBtYW5hZ2VtZW50IGlzc3VlcyBjYW4gZWFzaWx5IGhpZGUuXG5cbkkndmUgZ290IHRvIGZvbGxvdyB0aGlzIHVwLiBMZXQncyBzZWUgd2hhdCB0aGUgY29tcGFuaW9uIGBkYkFsbG9jYCBpcyBkb2luZy4uLiBhbmQgdGhhdCBjb3VsZCBnaXZlIG1lIHNvbWUgY2x1ZXMgYXMgdG8gdGhlIHBvdGVudGlhbCBmb3IgbWVtb3J5IGFsbG9jYXRpb24vZGVhbGxvY2F0aW9uIG1pc21hdGNoZXMsIGRvdWJsZS1mcmVlcywgb3IgbGVha3MuIFRoaXMgd2FycmFudHMgYSBtb3JlIGRldGFpbGVkIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NzUsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTguMjgyMTA1NTI4WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk5NTg5MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGJBbGxvY1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NzIwPWludCBkYk5leHRBRyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcClcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTc3OS0vKlxcbmZzL2pmcy9qZnNfZG1hcC5jOjc4MDogKiBOQU1FOlxcdGRiQWxsb2MoKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTc4MS0gKlxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtODE2LSAqL1xcbmZzL2pmcy9qZnNfZG1hcC5jOjgxNzppbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwLCBzNjQgaGludCwgczY0IG5ibG9ja3MsIHM2NCAqIHJlc3VsdHMpXFxuZnMvamZzL2pmc19kbWFwLmMtODE4LXtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTQ9ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yMDc2LSAqXFxuZnMvamZzL2pmc19kbWFwLmM6MjA3NzogKiBzZXJpYWxpemF0aW9uOiBJUkVBRF9MT0NLKGlwYm1hcCksIGUuZy4sIGZyb20gZGJBbGxvYygpLCBvclxcbmZzL2pmcy9qZnNfZG1hcC5jLTIwNzgtICpcXHRJV1JJVEVfTE9DSyhpcGJtYXApLCBlLmcuLCBkYkFsbG9jQ3RsKCksIGhlbGQgb24gZW50cnkvZXhpdDtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5oPTI4OT1leHRlcm4gaW50IGRiTmV4dEFHKHN0cnVjdCBpbm9kZSAqaXBibWFwKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yOTAtXFxuZnMvamZzL2pmc19kbWFwLmg6MjkxOmV4dGVybiBpbnQgZGJBbGxvYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCwgczY0IGhpbnQsIHM2NCBuYmxvY2tzLCBzNjQgKiByZXN1bHRzKTtcXG5mcy9qZnMvamZzX2RtYXAuaC0yOTItXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmM9MzE5PXN0YXRpYyB1MzIgYWRkX2luZGV4KHRpZF90IHRpZCwgc3RydWN0IGlub2RlICppcCwgczY0IGJuLCBpbnQgc2xvdClcXG4tLVxcbmZzL2pmcy9qZnNfZHRyZWUuYy0zNzEtXFx0XFx0XFx0Z290byBjbGVhbl91cDtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MzcyOlxcdFxcdGlmIChkYkFsbG9jKGlwLCAwLCBzYmktXFx1MDAzZW5icGVycGFnZSwgXFx1MDAyNnhhZGRyKSkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0zNzMtXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgc2JpLVxcdTAwM2VuYnBlcnBhZ2UpO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jPTkyMz1zdGF0aWMgaW50IGR0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX2R0cmVlLmMtOTc4LVxcdFxcdFxcdHhsZW4rKztcXG5mcy9qZnMvamZzX2R0cmVlLmM6OTc5OlxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy05ODAtXFx0XFx0XFx0RFRfUFVUUEFHRShzbXApO1xcbi0tXFxuZnMvamZzL2pmc19kdHJlZS5jLTEwNzQtXFx0Zm9yIChweGQgPSBweGRsaXN0LnB4ZDsgbiBcXHUwMDNlIDA7IG4tLSwgcHhkKyspIHtcXG5mcy9qZnMvamZzX2R0cmVlLmM6MTA3NTpcXHRcXHRpZiAoKHJjID0gZGJBbGxvYyhpcCwgMCwgKHM2NCkgeGxlbiwgXFx1MDAyNnhhZGRyKSkgPT0gMCkge1xcbmZzL2pmcy9qZnNfZHRyZWUuYy0xMDc2LVxcdFxcdFxcdFBYRGFkZHJlc3MocHhkLCB4YWRkcik7XFxuLS1cXG5mcy9qZnMvamZzX2V4dGVudC5jPTMwOT1leHRCYWxsb2Moc3RydWN0IGlub2RlICppcCwgczY0IGhpbnQsIHM2NCAqIG5ibG9ja3MsIHM2NCAqIGJsa25vKVxcbi0tXFxuZnMvamZzL2pmc19leHRlbnQuYy0zMzUtXFx0LyogdHJ5IHRvIGFsbG9jYXRlIGJsb2NrcyAqL1xcbmZzL2pmcy9qZnNfZXh0ZW50LmM6MzM2OlxcdHdoaWxlICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCBuYiwgXFx1MDAyNmRhZGRyKSkgIT0gMCkge1xcbmZzL2pmcy9qZnNfZXh0ZW50LmMtMzM3LVxcdFxcdC8qIGlmIHNvbWV0aGluZyBvdGhlciB0aGFuIGFuIG91dCBvZiBzcGFjZSBlcnJvcixcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTIxNTU9c3RhdGljIGludCBkaU5ld0V4dChzdHJ1Y3QgaW5vbWFwICogaW1hcCwgc3RydWN0IGlhZyAqIGlhZ3AsIGludCBleHRubylcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTIyNjAtXFxuZnMvamZzL2pmc19pbWFwLmM6MjI2MTpcXHRpZiAoKHJjID0gZGJBbGxvYyhpcGltYXAsIGhpbnQsIChzNjQpIGltYXAtXFx1MDAzZWltX25icGVyaWV4dCwgXFx1MDAyNmJsa25vKSkpXFxuZnMvamZzL2pmc19pbWFwLmMtMjI2Mi1cXHRcXHRnb3RvIGVycm9yX291dDtcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jPTI0NDA9ZGlOZXdJQUcoc3RydWN0IGlub21hcCAqIGltYXAsIGludCAqaWFnbm9wLCBpbnQgYWdubywgc3RydWN0IG1ldGFwYWdlICoqIG1wcClcXG4tLVxcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MDktXFx0XFx0eGxlbiA9IHNiaS1cXHUwMDNlbmJwZXJwYWdlO1xcbmZzL2pmcy9qZnNfaW1hcC5jOjI1MTA6XFx0XFx0aWYgKChyYyA9IGRiQWxsb2MoaXBpbWFwLCAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfaW1hcC5jLTI1MTEtXFx0XFx0XFx0LyogcmVsZWFzZSB0aGUgaW5vZGUgbWFwIGxvY2sgKi9cXG4tLVxcbmZzL2pmcy9qZnNfeHRyZWUuYz01Mjg9aW50IHh0SW5zZXJ0KHRpZF90IHRpZCxcXHRcXHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTU4MS1cXHRcXHRcXHRnb3RvIG91dDtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NTgyOlxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCBoaW50LCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKSkge1xcbmZzL2pmcy9qZnNfeHRyZWUuYy01ODMtXFx0XFx0XFx0ZHF1b3RfZnJlZV9ibG9jayhpcCwgeGxlbik7XFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmM9Njc5PXh0U3BsaXRVcCh0aWRfdCB0aWQsXFxuLS1cXG5mcy9qZnMvamZzX3h0cmVlLmMtNzU5LVxcdFxcdGZvciAoOyBuc3BsaXQgXFx1MDAzZSAwOyBuc3BsaXQtLSwgcHhkKyspIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6NzYwOlxcdFxcdFxcdGlmICgocmMgPSBkYkFsbG9jKGlwLCAoczY0KSAwLCAoczY0KSB4bGVuLCBcXHUwMDI2eGFkZHIpKVxcbmZzL2pmcy9qZnNfeHRyZWUuYy03NjEtXFx0XFx0XFx0ICAgID09IDApIHtcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTUzLSAqXFxuZnMvamZzL3hhdHRyLmM6NTQ6ICpcXHRGRUFMSVNUcyBhcmUgc3RvcmVkIG9uIGRpc2sgdXNpbmcgYmxvY2tzIGFsbG9jYXRlZCBieSBkYkFsbG9jKCkgYW5kXFxuZnMvamZzL3hhdHRyLmMtNTUtICpcXHR3cml0dGVuIGRpcmVjdGx5LiBBbiBFQSBsaXN0IG1heSBiZSBpbi1saW5lZCBpbiB0aGUgaW5vZGUgaWYgdGhlcmUgaXNcXG4tLVxcbmZzL2pmcy94YXR0ci5jPTIwMT1zdGF0aWMgaW50IGVhX3dyaXRlKHN0cnVjdCBpbm9kZSAqaXAsIHN0cnVjdCBqZnNfZWFfbGlzdCAqZWFsaXN0LCBpbnQgc2l6ZSxcXG4tLVxcbmZzL2pmcy94YXR0ci5jLTIzMS1cXG5mcy9qZnMveGF0dHIuYzoyMzI6XFx0cmMgPSBkYkFsbG9jKGlwLCBJTk9ISU5UKGlwKSwgbmJsb2NrcywgXFx1MDAyNmJsa25vKTtcXG5mcy9qZnMveGF0dHIuYy0yMzMtXFx0aWYgKHJjKSB7XFxuLS1cXG5mcy9qZnMveGF0dHIuYz00MjY9c3RhdGljIGludCBlYV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGVhX2J1ZmZlciAqZWFfYnVmLCBpbnQgbWluX3NpemUpXFxuLS1cXG5mcy9qZnMveGF0dHIuYy01MTUtXFxuZnMvamZzL3hhdHRyLmM6NTE2OlxcdFxcdHJjID0gZGJBbGxvYyhpbm9kZSwgSU5PSElOVChpbm9kZSksIChzNjQpIGJsb2Nrc19uZWVkZWQsXFxuZnMvamZzL3hhdHRyLmMtNTE3LVxcdFxcdFxcdCAgICAgXFx1MDAyNmJsa25vKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDc6NTguNTMyMDczNjE2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMzU3MjAwNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqQW5hbHl6aW5nIGBkYkFsbG9jYCBVc2FnZSoqXG5cbk9rYXksIHNvIGBkYkFsbG9jYCBpcyBzaG93aW5nIHVwIHF1aXRlIGEgYml0LiBMb29raW5nIGF0IHRoZSBjcm9zcy1yZWZlcmVuY2VzLCBpdCdzIHVzZWQgaW4gYGR0U3BsaXRVcGAsIGBleHRCYWxsb2NgLCBgZGlOZXdFeHRgLCBgZGlOZXdJQUdgLCBgeHRJbnNlcnRgLCBgeHRTcGxpdFVwYCwgYGVhX3dyaXRlYCwgYW5kIGBlYV9nZXRgLiBUaGF0J3MgYSBwcmV0dHkgZXh0ZW5zaXZlIGxpc3QuIEdpdmVuIHRob3NlIGZ1bmN0aW9ucywgd2hpY2ggZGVhbCB3aXRoIGRhdGEgc3RydWN0dXJlcywgZXh0ZW50IGhhbmRsaW5nLCBhbmQgZGlyZWN0IGFjY2VzcywgaXQncyBzYWZlIHRvIHNheSBgZGJBbGxvY2AgaXMgKmhlYXZpbHkqIHVzZWQgYW5kIGFsbW9zdCBjZXJ0YWlubHkgcmVhY2hhYmxlIGZyb20gdGhlIHN5c3RlbSBlbnRyeSBwb2ludHMuIEkgc2hvdWxkIGtlZXAgaXQgaW4gbWluZCBhcyBhbiBhcmVhIHdoZXJlIHBlcmZvcm1hbmNlIGdhaW5zIG1pZ2h0IGJlIGFjaGlldmFibGUuIExldCdzIGRpZyBpbnRvIGBkYlVwZGF0ZVBNYXBgIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzkxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MDEuODY3Nzk3MTMyWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDU4ODYxOTk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRiVXBkYXRlUE1hcFxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL2pmc19kbWFwLmM9NDM0PWludCBkYkZyZWUoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTUxMi0vKlxcbmZzL2pmcy9qZnNfZG1hcC5jOjUxMzogKiBOQU1FOlxcdGRiVXBkYXRlUE1hcCgpXFxuZnMvamZzL2pmc19kbWFwLmMtNTE0LSAqXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYz01MzM9aW50XFxuZnMvamZzL2pmc19kbWFwLmM6NTM0OmRiVXBkYXRlUE1hcChzdHJ1Y3QgaW5vZGUgKmlwYm1hcCxcXG5mcy9qZnMvamZzX2RtYXAuYy01MzUtXFx0ICAgICBpbnQgZnJlZSwgczY0IGJsa25vLCBzNjQgbmJsb2Nrcywgc3RydWN0IHRibG9jayAqIHRibGspXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuaD0yODQ9ZXh0ZXJuIGludCBkYkZyZWUoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5oLTI4NS1cXG5mcy9qZnMvamZzX2RtYXAuaDoyODY6ZXh0ZXJuIGludCBkYlVwZGF0ZVBNYXAoc3RydWN0IGlub2RlICppcGJtYXAsXFxuZnMvamZzL2pmc19kbWFwLmgtMjg3LVxcdFxcdFxcdGludCBmcmVlLCBzNjQgYmxrbm8sIHM2NCBuYmxvY2tzLCBzdHJ1Y3QgdGJsb2NrICogdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jPTIzOTM9c3RhdGljIHZvaWQgdHhBbGxvY1BNYXAoc3RydWN0IGlub2RlICppcCwgc3RydWN0IG1hcGxvY2sgKiBtYXBsb2NrLFxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDE1LVxcdFxcdFxcdFxcdHhsZW4gPSBsZW5ndGhYQUQoeGFkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0MTY6XFx0XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgZmFsc2UsIHhhZGRyLFxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQxNy1cXHRcXHRcXHRcXHRcXHQgICAgIChzNjQpIHhsZW4sIHRibGspO1xcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI2LVxcdFxcdHhsZW4gPSBsZW5ndGhQWEQoXFx1MDAyNnB4ZGxvY2stXFx1MDAzZXB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNDI3OlxcdFxcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbiwgdGJsayk7XFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDI4LVxcdFxcdGpmc19pbmZvKFxcXCJhbGxvY1BNYXA6IHhhZGRyOjB4JWx4IHhsZW46JWRcXFwiLCAodWxvbmcpIHhhZGRyLCB4bGVuKTtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmMtMjQzNS1cXHRcXHRcXHR4bGVuID0gbGVuZ3RoUFhEKHB4ZCk7XFxuZnMvamZzL2pmc190eG5tZ3IuYzoyNDM2OlxcdFxcdFxcdGRiVXBkYXRlUE1hcChpcGJtYXAsIGZhbHNlLCB4YWRkciwgKHM2NCkgeGxlbixcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0MzctXFx0XFx0XFx0XFx0ICAgICB0YmxrKTtcXG4tLVxcbmZzL2pmcy9qZnNfdHhubWdyLmM9MjQ1MT12b2lkIHR4RnJlZU1hcChzdHJ1Y3QgaW5vZGUgKmlwLFxcbi0tXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc3LVxcdFxcdFxcdFxcdFxcdHhsZW4gPSBsZW5ndGhYQUQoeGFkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0Nzg6XFx0XFx0XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgdHJ1ZSwgeGFkZHIsXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDc5LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgKHM2NCkgeGxlbiwgdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0ODctXFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChcXHUwMDI2cHhkbG9jay1cXHUwMDNlcHhkKTtcXG5mcy9qZnMvamZzX3R4bm1nci5jOjI0ODg6XFx0XFx0XFx0ZGJVcGRhdGVQTWFwKGlwYm1hcCwgdHJ1ZSwgeGFkZHIsIChzNjQpIHhsZW4sXFxuZnMvamZzL2pmc190eG5tZ3IuYy0yNDg5LVxcdFxcdFxcdFxcdCAgICAgdGJsayk7XFxuLS1cXG5mcy9qZnMvamZzX3R4bm1nci5jLTI0OTgtXFx0XFx0XFx0XFx0eGxlbiA9IGxlbmd0aFBYRChweGQpO1xcbmZzL2pmcy9qZnNfdHhubWdyLmM6MjQ5OTpcXHRcXHRcXHRcXHRkYlVwZGF0ZVBNYXAoaXBibWFwLCB0cnVlLCB4YWRkcixcXG5mcy9qZnMvamZzX3R4bm1nci5jLTI1MDAtXFx0XFx0XFx0XFx0XFx0ICAgICAoczY0KSB4bGVuLCB0YmxrKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MDMuOTI2NjY1NDY3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDE3MzI2NDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqVHJhbnNhY3Rpb24gTWFuYWdlciBBbmFseXNpcyoqXG5cbkFscmlnaHQsIHNvIGBkYlVwZGF0ZVBNYXBgIGlzIGEga2V5IGNvbXBvbmVudCBoZXJlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSB0cmFuc2FjdGlvbiBtYW5hZ2VyLiBJJ20gc2VlaW5nIGl0J3MgdXRpbGl6ZWQgaW4gYHR4QWxsb2NQTWFwYCBhbmQgYHR4RnJlZU1hcGAuIFRoaXMgaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UncmUgZGVhbGluZyB3aXRoIHBhZ2UgbWFwIGFsbG9jYXRpb24gYW5kIGRlYWxsb2NhdGlvbiB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdHJhbnNhY3Rpb24gbWFuYWdlbWVudC4gU28sIGl0J3MgYSBjcml0aWNhbCBwaWVjZSBmb3IgZW5zdXJpbmcgZGF0YSBjb25zaXN0ZW5jeSBhbmQgcmVjb3ZlcmFiaWxpdHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIG90aGVyIHBhcnRzLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgZGJBbGxvY0N0bGAgdG8gc2VlIGhvdyB0aGF0IGZpdHMgaW50byB0aGlzIHBpY3R1cmUuIEkgd2FudCB0byBzZWUgaWYgdGhpcyBpcyB0aWVkIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjEyOSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjA3LjY2ODQwMzg0OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA1NjU0MDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRiQWxsb2NDdGxcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTgzPXN0YXRpYyBpbnQgZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLFxcbmZzL2pmcy9qZnNfZG1hcC5jLTg0LVxcdFxcdCAgICAgczY0ICogcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmM6ODU6c3RhdGljIGludCBkYkFsbG9jQ3RsKHN0cnVjdCBibWFwICogYm1wLCBzNjQgbmJsb2NrcywgaW50IGwybmIsIHM2NCBibGtubyxcXG5mcy9qZnMvamZzX2RtYXAuYy04Ni1cXHRcXHQgICAgICBzNjQgKiByZXN1bHRzKTtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE0MjY9ZGJBbGxvY0FHKHN0cnVjdCBibWFwICogYm1wLCBpbnQgYWdubywgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgKiByZXN1bHRzKVxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ1My1cXHQgKiBncm91cCBpcyBhbHJlYWR5IGZ1bGx5IGRlc2NyaWJlZCBieSBhIGRtYXAuICBpbiB0aGlzIGNhc2UsIHdlXFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NDpcXHQgKiBqdXN0IGNhbGwgZGJBbGxvY0N0bCgpIHRvIHNlYXJjaCB0aGUgZG1hcCB0cmVlIGFuZCBhbGxvY2F0ZSB0aGVcXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU1LVxcdCAqIHJlcXVpcmVkIHNwYWNlIGlmIGF2YWlsYWJsZS5cXG5mcy9qZnMvamZzX2RtYXAuYy0xNDU2LVxcdCAqXFxuZnMvamZzL2pmc19kbWFwLmM6MTQ1NzpcXHQgKiBpZiB0aGUgYWxsb2NhdGlvbiBncm91cCBpcyBjb21wbGV0ZWx5IGZyZWUsIGRiQWxsb2NDdGwoKSBpc1xcbmZzL2pmcy9qZnNfZG1hcC5jLTE0NTgtXFx0ICogYWxzbyBjYWxsZWQgdG8gYWxsb2NhdGUgdGhlIHJlcXVpcmVkIHNwYWNlLiAgdGhpcyBpcyBkb25lIGZvclxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMTQ2Ni1cXHQgICAgfHwgYm1wLVxcdTAwM2VkYl9hZ2ZyZWVbYWdub10gPT0gYm1wLVxcdTAwM2VkYl9hZ3NpemUpIHtcXG5mcy9qZnMvamZzX2RtYXAuYzoxNDY3OlxcdFxcdHJjID0gZGJBbGxvY0N0bChibXAsIG5ibG9ja3MsIGwybmIsIGJsa25vLCByZXN1bHRzKTtcXG5mcy9qZnMvamZzX2RtYXAuYy0xNDY4LVxcdFxcdGlmICgocmMgPT0gLUVOT1NQQykgXFx1MDAyNlxcdTAwMjZcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE1ODUtXFx0XFx0ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MTU4NjpcXHRcXHRyYyA9IGRiQWxsb2NDdGwoYm1wLCBuYmxvY2tzLCBsMm5iLCBibGtubywgcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTU4Ny1cXHRcXHRpZiAocmMgPT0gLUVOT1NQQykge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTYzMD1zdGF0aWMgaW50IGRiQWxsb2NBbnkoc3RydWN0IGJtYXAgKiBibXAsIHM2NCBuYmxvY2tzLCBpbnQgbDJuYiwgczY0ICogcmVzdWx0cylcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE2NDUtXFx0ICovXFxuZnMvamZzL2pmc19kbWFwLmM6MTY0NjpcXHRyYyA9IGRiQWxsb2NDdGwoYm1wLCBuYmxvY2tzLCBsMm5iLCBibGtubywgcmVzdWx0cyk7XFxuZnMvamZzL2pmc19kbWFwLmMtMTY0Ny1cXHRpZiAocmMgPT0gLUVOT1NQQykge1xcbi0tXFxuZnMvamZzL2pmc19kbWFwLmM9MTc5NT1zdGF0aWMgaW50IGRiRmluZEN0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgaW50IGwybmIsIGludCBsZXZlbCwgczY0ICogYmxrbm8pXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0xODY4LS8qXFxuZnMvamZzL2pmc19kbWFwLmM6MTg2OTogKiBOQU1FOlxcdGRiQWxsb2NDdGwoKVxcbmZzL2pmcy9qZnNfZG1hcC5jLTE4NzAtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTE5MTM9c3RhdGljIGludFxcbmZzL2pmcy9qZnNfZG1hcC5jOjE5MTQ6ZGJBbGxvY0N0bChzdHJ1Y3QgYm1hcCAqIGJtcCwgczY0IG5ibG9ja3MsIGludCBsMm5iLCBzNjQgYmxrbm8sIHM2NCAqIHJlc3VsdHMpXFxuZnMvamZzL2pmc19kbWFwLmMtMTkxNS17XFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0yMDc3LSAqIHNlcmlhbGl6YXRpb246IElSRUFEX0xPQ0soaXBibWFwKSwgZS5nLiwgZnJvbSBkYkFsbG9jKCksIG9yXFxuZnMvamZzL2pmc19kbWFwLmM6MjA3ODogKlxcdElXUklURV9MT0NLKGlwYm1hcCksIGUuZy4sIGRiQWxsb2NDdGwoKSwgaGVsZCBvbiBlbnRyeS9leGl0O1xcbmZzL2pmcy9qZnNfZG1hcC5jLTIwNzktICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjA4LjM3NDA3MzgwOFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTEwNzA3Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBkYkFsbG9jQ3RsYCBhbmQgYGRiQWxsb2NCb3R0b21VcGAqKlxuXG5BbHJpZ2h0LCBzbyBgZGJBbGxvY0N0bGAgaXMgZGVjbGFyZWQgYXMgc3RhdGljLiBUaGF0J3Mgc3RyYWlnaHRmb3J3YXJkLCBhbmQgSSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCBpbW1lZGlhdGVseSBpbiB0aGlzIGNvbnRleHQuIEl0J3MgY29uZmluZWQgdG8gaXRzIGNvbXBpbGF0aW9uIHVuaXQsIGxpa2VseSBmb3IgYSB2ZXJ5IHNwZWNpZmljIHB1cnBvc2UgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGFsbG9jYXRpb24gY29udHJvbCB3aXRoaW4gKnRoaXMqIG1vZHVsZS4gTm93LCBgZGJBbGxvY0JvdHRvbVVwYCwgdGhhdCBvbmUncyAqbm90KiBkZWNsYXJlZCBzdGF0aWMuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nIGFuZCB3YXJyYW50cyBhIGNsb3NlciBsb29rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzaXRlcyBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIGl0cyBwdXJwb3NlIGFuZCBwb3RlbnRpYWwgaW1wYWN0IG9uIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0MjgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxMS40ODQ3ODQzMzJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODMxOTU4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYkFsbG9jQm90dG9tVXBcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9qZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2pmcy9qZnNfZG1hcC5jPTMyODA9c3RhdGljIGludCBibGtzdG9sMihzNjQgbmIpXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zMzEwLS8qXFxuZnMvamZzL2pmc19kbWFwLmM6MzMxMTogKiBOQU1FOlxcdGRiQWxsb2NCb3R0b21VcCgpXFxuZnMvamZzL2pmc19kbWFwLmMtMzMxMi0gKlxcbi0tXFxuZnMvamZzL2pmc19kbWFwLmMtMzMyNy0gKi9cXG5mcy9qZnMvamZzX2RtYXAuYzozMzI4OmludCBkYkFsbG9jQm90dG9tVXAoc3RydWN0IGlub2RlICppcCwgczY0IGJsa25vLCBzNjQgbmJsb2NrcylcXG5mcy9qZnMvamZzX2RtYXAuYy0zMzI5LXtcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5jPTMzODk9c3RhdGljIGludCBkYkFsbG9jRG1hcEJVKHN0cnVjdCBibWFwICogYm1wLCBzdHJ1Y3QgZG1hcCAqIGRwLCBzNjQgYmxrbm8sXFxuLS1cXG5mcy9qZnMvamZzX2RtYXAuYy0zNDk2LSAqIEZVTkNUSU9OOlxcdGV4dGVuZCBibWFwIGZyb20gYmxrbm8gZm9yIG5ibG9ja3M7XFxuZnMvamZzL2pmc19kbWFwLmM6MzQ5NzogKlxcdFxcdGRiRXh0ZW5kRlMoKSB1cGRhdGVzIGJtYXAgcmVhZHkgZm9yIGRiQWxsb2NCb3R0b21VcCgpO1xcbmZzL2pmcy9qZnNfZG1hcC5jLTM0OTgtICpcXG4tLVxcbmZzL2pmcy9qZnNfZG1hcC5oPTI5Nj1leHRlcm4gaW50IGRiU3luYyhzdHJ1Y3QgaW5vZGUgKmlwYm1hcCk7XFxuZnMvamZzL2pmc19kbWFwLmg6Mjk3OmV4dGVybiBpbnQgZGJBbGxvY0JvdHRvbVVwKHN0cnVjdCBpbm9kZSAqaXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbmZzL2pmcy9qZnNfZG1hcC5oLTI5OC1leHRlcm4gaW50IGRiRXh0ZW5kRlMoc3RydWN0IGlub2RlICppcGJtYXAsIHM2NCBibGtubywgczY0IG5ibG9ja3MpO1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jPTE5NTY9aW50IHh0QXBwZW5kKHRpZF90IHRpZCxcXHRcXHQvKiB0cmFuc2FjdGlvbiBpZCAqL1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTIwMjgtXFx0Zm9yICg7IG5zcGxpdCBcXHUwMDNlIDA7IG5zcGxpdC0tLCBweGQrKywgeGFkZHIgKz0gbmJsb2NrcywgbWF4YmxvY2tzIC09IG5ibG9ja3MpIHtcXG5mcy9qZnMvamZzX3h0cmVlLmM6MjAyOTpcXHRcXHRpZiAoKHJjID0gZGJBbGxvY0JvdHRvbVVwKGlwLCB4YWRkciwgKHM2NCkgbmJsb2NrcykpID09IDApIHtcXG5mcy9qZnMvamZzX3h0cmVlLmMtMjAzMC1cXHRcXHRcXHRQWERhZGRyZXNzKHB4ZCwgeGFkZHIpO1xcbi0tXFxuZnMvamZzL2pmc194dHJlZS5jLTIwNDctXFx0ICovXFxuZnMvamZzL2pmc194dHJlZS5jOjIwNDg6XFx0aWYgKChyYyA9IGRiQWxsb2NCb3R0b21VcChpcCwgeGFkZHIsIChzNjQpIHhsZW4pKSlcXG5mcy9qZnMvamZzX3h0cmVlLmMtMjA0OS1cXHRcXHRnb3RvIG91dDtcXG4tLVxcbmZzL2pmcy9qZnNfeHRyZWUuYy0yMDc0LVxcdCAqL1xcbmZzL2pmcy9qZnNfeHRyZWUuYzoyMDc1OlxcdGlmICgocmMgPSBkYkFsbG9jQm90dG9tVXAoaXAsIHhhZGRyLCAoczY0KSB4bGVuKSkpXFxuZnMvamZzL2pmc194dHJlZS5jLTIwNzYtXFx0XFx0Z290byBvdXQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIwOjA4OjExLjc0MzExMDExWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1NTczMzY1NzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzLCB0aGlua2luZyB0aHJvdWdoIHRoZSBwcm9jZXNzIGFzIGFuIGV4cGVydCB3b3VsZDpcblxuKipEaWdnaW5nIGludG8gdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFN0cmF0ZWd5KipcblxuT2theSwgc28gYGRiQWxsb2NCb3R0b21VcGAgaXMgdXRpbGl6ZWQgd2l0aGluIGB4dEFwcGVuZGAuIFRoYXQgaW1tZWRpYXRlbHkgZm9jdXNlcyBteSBhdHRlbnRpb24gb24gdGhlIG1lbW9yeSBhbGxvY2F0aW9uL2RlYWxsb2NhdGlvbiByb3V0aW5lcyBpbnZvbHZlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhbGxvY2F0aW9uIHdvcmtzIGF0IHRoaXMgbG93IGxldmVsLiBNeSBwcmltYXJ5IGFyZWFzIG9mIGZvY3VzIGFyZTogYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBvZiBjb3Vyc2UsIHRoZSBrZXkgZnVuY3Rpb24sIGBkYkFsbG9jQm90dG9tVXBgLiBJIG5lZWQgYSBjbGVhciB1bmRlcnN0YW5kaW5nIG9mIHRoZWlyIGludGVycGxheS4gTXkgcHJpb3JpdHkgaXMgdG8gaWRlbnRpZnkgZXhhY3RseSBob3cgbWVtb3J5IGlzIGhhbmRsZWQgYW5kIHdoZXJlIGFueSBwb3RlbnRpYWwgaW5lZmZpY2llbmNpZXMgb3IgdnVsbmVyYWJpbGl0aWVzIG1pZ2h0IGJlLlxuXG5OZXh0IHN0ZXA6IExldCdzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGZpbGVzeXN0ZW0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZGVmaW5lZCBmb3IgSkZTLiBJdCdzIGNvbW1vbiB0byBoYXZlIG9wdGltaXplZCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMgYmFzZWQgb24gZmlsZXN5c3RlbSBjaGFyYWN0ZXJpc3RpY3MuIFRoZSBwcmVzZW5jZSBvZiBKRlMtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgY291bGQgZ3JlYXRseSBpbmZsdWVuY2UgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ0NDksIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxNS4zMDA0NDk3MzdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwNjUyNzM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSkZTX0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2pmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvamZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9qZnMvS2NvbmZpZzoyOmNvbmZpZyBKRlNfRlNcXG5mcy9qZnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJKRlMgZmlsZXN5c3RlbSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxNi4wMDY5ODQ4NjdaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU0NDI0NDQ4OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIGRlcGVuZGVuY2llcywgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byBKRlNfRlMgRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEpGU19GUywgcmlnaHQ/IEJlZm9yZSBJIGRpdmUgaW4gYW5kIHN0YXJ0IHRpbmtlcmluZywgdGhlIGZpcnN0IHRoaW5nIEkgbmVlZCB0byBkbywgdGhlICphYnNvbHV0ZSogZmlyc3QgdGhpbmcsIGlzIG1hcCBvdXQgdGhvc2UgZGVwZW5kZW5jaWVzLiBLbm93aW5nIHdoYXQgSkZTX0ZTIHJlbGllcyBvbiBpcyBjcnVjaWFsLiBJJ20gdGhpbmtpbmcsIHRoaXMgaXMgYSBmaWxlIHN5c3RlbSBpbXBsZW1lbnRhdGlvbiwgc28gaW1tZWRpYXRlbHkgSSdtIGV4cGVjdGluZyBzb21lIGludGVyYWN0aW9uIHdpdGggYmxvY2sgZGV2aWNlIGRyaXZlcnMsIHRoZSBrZXJuZWwncyB2aXJ0dWFsIGZpbGUgc3lzdGVtIChWRlMpIGxheWVyLCBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIHByb2JhYmx5IHNvbWUgbG9ja2luZyBtZWNoYW5pc21zIGZvciBjb25jdXJyZW5jeS5cblxuV2XigJlyZSBsaWtlbHkgZGVhbGluZyB3aXRoIGxvdy1sZXZlbCBzdHVmZiBoZXJlLCBidXQga25vd2luZyB0aGUgZXhhY3QgaW50ZXJhY3Rpb25zIGlzIHBhcmFtb3VudC4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGhlYWRlcnMsIGluY2x1ZGUgZmlsZXMsIGFuZCBhbnkgYnVpbGQgY29uZmlndXJhdGlvbiBmaWxlcyB0byBzZWUgd2hlcmUgdGhlIHNvdXJjZSBjb2RlIGRlZmluZXMgaXRzIGludGVyZmFjZXMuIEkgbmVlZCB0byBiZSBhYmxlIHRvIHRyYWNlIGFsbCBjYWxscyB1cCBhbmQgZG93biB0aGUgc3RhY2sgdG8gcHJldmVudCBhbnkgdW5leHBlY3RlZCBiZWhhdmlvciBsYXRlciBvbi4gSWYgaXQgdG91Y2hlcyBzb21lIHNwZWNpZmljIGhhcmR3YXJlLCBJIHdhbnQgdG8ga25vdyBhYm91dCBpdC4gVGhpcyB3aWxsIHByZXZlbnQgYW55IG1ham9yIHBpdGZhbGxzIGRvd24gdGhlIHJvYWQuXG5cblRoaXMgaW5pdGlhbCBhbmFseXNpcyB3aWxsIGRldGVybWluZSB0aGUgc2NvcGUgb2YgbXkgd29yayBhbmQgcG90ZW50aWFsIGFyZWFzIG9mIGltcGFjdC4gSSBkb24ndCB3YW50IHRvIGJyZWFrIHNvbWV0aGluZyBkb3duc3RyZWFtIHdpdGhvdXQga25vd2luZy4gVGhpcyBpcyB0aGUgc29saWQgZm91bmRhdGlvbiBJJ2xsIGJ1aWxkIHVwb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0ODA2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjA6MDg6MTkuNTUxMjQwNzM1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTUwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9qZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0Y29uZmlnIEpGU19GU1xcbiAgIDM6XFx0XFx0dHJpc3RhdGUgXFxcIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRzZWxlY3QgQlVGRkVSX0hFQURcXG4gICA1OlxcdFxcdHNlbGVjdCBOTFNcXG4gICA2OlxcdFxcdHNlbGVjdCBOTFNfVUNTMl9VVElMU1xcbiAgIDc6XFx0XFx0c2VsZWN0IENSQzMyXFxuICAgODpcXHRcXHRzZWxlY3QgTEVHQUNZX0RJUkVDVF9JT1xcbiAgIDk6XFx0XFx0aGVscFxcbiAgMTA6XFx0XFx0ICBUaGlzIGlzIGEgcG9ydCBvZiBJQk0ncyBKb3VybmFsZWQgRmlsZXN5c3RlbSAuICBNb3JlIGluZm9ybWF0aW9uIGlzXFxuICAxMTpcXHRcXHQgIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2pmcy5yc3RcXHUwMDNlLlxcbiAgMTI6XFx0XFxuICAxMzpcXHRcXHQgIElmIHlvdSBkbyBub3QgaW50ZW5kIHRvIHVzZSB0aGUgSkZTIGZpbGVzeXN0ZW0sIHNheSBOLlxcbiAgMTQ6XFx0XFxuICAxNTpcXHRjb25maWcgSkZTX1BPU0lYX0FDTFxcbiAgMTY6XFx0XFx0Ym9vbCBcXFwiSkZTIFBPU0lYIEFjY2VzcyBDb250cm9sIExpc3RzXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBKRlNfRlNcXG4gIDE4OlxcdFxcdHNlbGVjdCBGU19QT1NJWF9BQ0xcXG4gIDE5OlxcdFxcdGhlbHBcXG4gIDIwOlxcdFxcdCAgUG9zaXggQWNjZXNzIENvbnRyb2wgTGlzdHMgKEFDTHMpIHN1cHBvcnQgcGVybWlzc2lvbnMgZm9yIHVzZXJzIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoxOS41NTEzNjUwMjVaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNzg1MjI0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBKRlMgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIEpGUyBwYXRjaCBhbmQgdGhlIGtleSBjb25maWcgaXMgYEpGU19GU2AsIGdvdCBpdC4gVGhlIGNvcmUgb2YgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB2YWxpZGF0aW5nIHRoZSBkbWFwIHN0cnVjdHVyZXMsIHByZXZlbnRpbmcgdGhvc2UgbmFzdHkgb3V0LW9mLWJvdW5kcyBvciBjb3JydXB0IHBhZ2UgYWNjZXNzZXMuIFNlZW1zIHByZXR0eSBjcml0aWNhbCBmb3Igb3ZlcmFsbCBzdGFiaWxpdHkuIEZ1bmN0aW9uYWxseSwgdGhpcyBpcyBhIGNoYW5nZSB0aGF0IHNjcmVhbXMgZm9yIGZ1enppbmcgdG8gcmVhbGx5IGhhbW1lciBvbiBpdCBhbmQgcm9vdCBvdXQgYW55IGx1cmtpbmcgaXNzdWVzLlxuXG5Ob3csIGxldCdzIGRyaWxsIGRvd24gdG8gdGhlIGNyaXRpY2FsIGZ1bmN0aW9ucy4gRnJvbSBhIHF1aWNrIHNjYW4sIGl0IGxvb2tzIGxpa2UgYGRiRnJlZWAsIGBkYlVwZGF0ZVBNYXBgLCBgZGJBbGxvY2AsIGFuZCBgZGJBbGxvY0JvdHRvbVVwYCBhcmUgdGhlIHByaW1hcnkgdGFyZ2V0cy4gRGVmaW5pdGVseSB0aG9zZSBhcmUgdGhlIHBsYWNlcyB3aGVyZSB0aGUgdmFsaWRhdGlvbiBsb2dpYyB3b3VsZCBiZSBpbXBsZW1lbnRlZCBhbmQgbGlrZWx5IHdoZXJlIGFueSB2dWxuZXJhYmlsaXRpZXMgd291bGQgbGllLlxuXG5KdXN0IHRvIGJlIHN1cmUsIEnigJlsbCBxdWlja2x5IGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBtb2RpZmllZC4gQWhhLCBpdCBsb29rcyBsaWtlIGBkYkV4dGVuZGAgaXMgc3RhdGljLCB3aGljaCBpcyBjYWxsZWQgYnkgYGV4dEJhbGxvY2AsIGFuZCBgZGJBbGxvY0N0bGAgaXMgYWxzbyBzdGF0aWMsIGNhbGxlZCBieSBgZGJBbGxvY0FHYCwgYGRiQWxsb2NBbnlgLCBhbmQgYGRiQWxsb2NgLiBHb29kIHRvIGtub3csIGJ1dCBteSBmb2N1cyByZW1haW5zIG9uIHRoZSBpbml0aWFsIGZvdXIgZnVuY3Rpb25zIGFzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZGVlcGVyIGFuYWx5c2lzIGFuZCB0ZXN0aW5nLlxuXG5SaWdodCwgc28gSSBoYXZlIGEgY2xlYXIgc2V0IG9mIGZvY2FsIHBvaW50cyBub3cuIFRpbWUgdG8gc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50IGFuZCBnZXQgdGhlc2Ugc3ltYm9scyB1bmRlciB0aGUgbWljcm9zY29wZS4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGVzZSByZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTQwMCwiT3V0cHV0VG9rZW5zIjoxMTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMDowODoyNC42ODkyMjE0MTdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDU0NDYwNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRiRnJlZVwiLFxuICAgIFwiZGJVcGRhdGVQTWFwXCIsXG4gICAgXCJkYkFsbG9jXCIsXG4gICAgXCJkYkFsbG9jQm90dG9tVXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkpGU19GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRiRnJlZVwiLFxuICAgIFwiZGJVcGRhdGVQTWFwXCIsXG4gICAgXCJkYkFsbG9jXCIsXG4gICAgXCJkYkFsbG9jQm90dG9tVXBcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHZhbGlkYXRpb24gdG8gSkZTIGRtYXAgc3RydWN0dXJlcyAoYGRiVmFsaWRhdGVEbWFwYCkgdG8gcHJldmVudCBvdXQtb2YtYm91bmRzIG9yIGNvcnJ1cHQgZG1hcCBwYWdlIGFjY2Vzc2VzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgSkZTIGJsb2NrIGFsbG9jYXRpb24gYW5kIGZyZWVpbmcgbG9naWMsIHdoaWNoIGlzIHJlYWNoYWJsZSB2aWEgc3RhbmRhcmQgZmlsZXN5c3RlbSBvcGVyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[1] Phase: Succeeded StartedAt: 2026-07-24 20:08:36 +0000 UTC FinishedAt: 2026-07-24 20:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 20:08:37 +0000 UTC FinishedAt: 2026-07-24 20:08:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2] Phase: Succeeded StartedAt: 2026-07-24 20:08:37 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 20:08:37 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 20:08:37 +0000 UTC FinishedAt: 2026-07-24 20:09:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 20:08:37 +0000 UTC FinishedAt: 2026-07-24 20:09:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzzc55/series-workflowzzc55-convert-artifact-2231972965/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 20:09:14 +0000 UTC FinishedAt: 2026-07-24 20:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 20:09:14 +0000 UTC FinishedAt: 2026-07-24 20:38:41 +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:*f167fecf-b9fc-4367-a78e-906eab1498be,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-workflowzzc55/series-workflowzzc55-convert-artifact-2231972965/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": "bc441b1e-c171-4720-81fc-c451d5ce8c6b", "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-workflowzzc55/series-workflowzzc55-build-action-3012309131/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 20:09:14 +0000 UTC FinishedAt: 2026-07-24 20:38:31 +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:*f167fecf-b9fc-4367-a78e-906eab1498be,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-workflowzzc55/series-workflowzzc55-convert-artifact-2231972965/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": "bc441b1e-c171-4720-81fc-c451d5ce8c6b", "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-workflowzzc55/series-workflowzzc55-build-action-3012309131/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 20:38:41 +0000 UTC FinishedAt: 2026-07-24 20:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 20:38:41 +0000 UTC FinishedAt: 2026-07-24 20:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 20:38:41 +0000 UTC FinishedAt: 2026-07-24 20:39:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 20:38:41 +0000 UTC FinishedAt: 2026-07-24 20:38:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzzc55/series-workflowzzc55-convert-artifact-3838718272/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 20:39:43 +0000 UTC FinishedAt: 2026-07-24 20:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 20:39:43 +0000 UTC FinishedAt: 2026-07-24 20:41:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc441b1e-c171-4720-81fc-c451d5ce8c6b,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-workflowzzc55/series-workflowzzc55-build-action-3012309131/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-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 20:41:45 +0000 UTC FinishedAt: 2026-07-24 20:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 20:41:45 +0000 UTC FinishedAt: 2026-07-24 20:41:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 20:41:45 +0000 UTC FinishedAt: 2026-07-24 21:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 20:41:45 +0000 UTC FinishedAt: 2026-07-24 21:13:00 +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:*f167fecf-b9fc-4367-a78e-906eab1498be,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-workflowzzc55/series-workflowzzc55-convert-artifact-3838718272/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": "4c2a522d-2417-45eb-ac49-8b43ac04acb5", "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-workflowzzc55/series-workflowzzc55-build-action-862559996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 20:41:45 +0000 UTC FinishedAt: 2026-07-24 21:12: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:*f167fecf-b9fc-4367-a78e-906eab1498be,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-workflowzzc55/series-workflowzzc55-convert-artifact-3838718272/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": "4c2a522d-2417-45eb-ac49-8b43ac04acb5", "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-workflowzzc55/series-workflowzzc55-build-action-862559996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-24 21:13:00 +0000 UTC FinishedAt: 2026-07-24 21:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-24 21:13:00 +0000 UTC FinishedAt: 2026-07-24 21:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-24 21:13:00 +0000 UTC FinishedAt: 2026-07-24 21:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-24 21:13:00 +0000 UTC FinishedAt: 2026-07-24 21:14:46 +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:*4c2a522d-2417-45eb-ac49-8b43ac04acb5,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-workflowzzc55/series-workflowzzc55-build-action-862559996/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-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +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":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*bc441b1e-c171-4720-81fc-c451d5ce8c6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c2a522d-2417-45eb-ac49-8b43ac04acb5,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-workflowzzc55/series-workflowzzc55-build-action-3012309131/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-workflowzzc55/series-workflowzzc55-build-action-862559996/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-24 21:15:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-24 21:15:05 +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":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzzc55/series-workflowzzc55-convert-artifact-1938074777/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-24 21:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-24 21:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-24 21:14:56 +0000 UTC FinishedAt: 2026-07-24 21:14:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-24 21:15:17 +0000 UTC FinishedAt: 2026-07-25 00:21:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzzc55[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["dbFree","dbUpdatePMap","dbAlloc","dbAllocBottomUp"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["JFS_FS"],"series_id":"e2a02dbc-1381-4048-b249-020e6546ab14","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-24 21:15:17 +0000 UTC FinishedAt: 2026-07-25 00:20:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*bc441b1e-c171-4720-81fc-c451d5ce8c6b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4c2a522d-2417-45eb-ac49-8b43ac04acb5,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-workflowzzc55/series-workflowzzc55-build-action-3012309131/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-workflowzzc55/series-workflowzzc55-build-action-862559996/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-workflowzzc55/series-workflowzzc55-convert-artifact-1938074777/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,}